diff --git a/Makefile b/Makefile index b86ead4b4e03cebb9e2fed53f94a8e865452fabe..02aa665c602a873827ecb0f9382bd66ccb2f6252 100755 --- a/Makefile +++ b/Makefile @@ -203,6 +203,9 @@ stdrelease: #UPPAAL mkdir -p $(TTOOL_TARGET)/uppaal cp $(TTOOL_DOC)/README_uppaal $(TTOOL_TARGET)/uppaal +# Proverif + mkdir -p $(TTOOL_TARGET)/proverif + cp $(TTOOL_DOC)/README_proverif $(TTOOL_TARGET)/proverif # Figure mkdir -p $(TTOOL_TARGET)/figure cp $(TTOOL_DOC)/README_figure $(TTOOL_TARGET)/figure diff --git a/crawler/bin/client.jar b/crawler/bin/client.jar new file mode 100644 index 0000000000000000000000000000000000000000..5c57a8df0da2f138de6a5c4805e3a0e72bab7c94 Binary files /dev/null and b/crawler/bin/client.jar differ diff --git a/crawler/bin/crawler.jar b/crawler/bin/crawler.jar new file mode 100755 index 0000000000000000000000000000000000000000..ee4a51884af2929b0eb33ebae39050b77438e4a8 Binary files /dev/null and b/crawler/bin/crawler.jar differ diff --git a/crawler/db-derby-10.11.1.1-bin/bin/derby.log b/crawler/db-derby-10.11.1.1-bin/bin/derby.log index 44227b0810c39f7c774a656871c7affebad5bdf7..d0a61a85adbe900b9dce9bf988285c6348da7e3a 100644 --- a/crawler/db-derby-10.11.1.1-bin/bin/derby.log +++ b/crawler/db-derby-10.11.1.1-bin/bin/derby.log @@ -1,14 +1,14 @@ -Sat Jun 27 18:00:11 CEST 2015 : Apache Derby Network Server - 10.11.1.1 - (1616546) started and ready to accept connections on port 1527 +Mon Jun 29 11:50:12 CEST 2015 : Apache Derby Network Server - 10.11.1.1 - (1616546) started and ready to accept connections on port 1527 ---------------------------------------------------------------- -Sat Jun 27 18:00:29 CEST 2015: -Booting Derby version The Apache Software Foundation - Apache Derby - 10.11.1.1 - (1616546): instance a816c00e-014e-35bf-5eb2-000043e4831f -on database directory /home/trhuy/TURTLE/crawler/db-derby-10.11.1.1-bin/bin/MyDatabase with class loader sun.misc.Launcher$AppClassLoader@7451b0af -Loaded from file:/home/trhuy/TURTLE/crawler/db-derby-10.11.1.1-bin/lib/derby.jar -java.vendor=Oracle Corporation -java.runtime.version=1.7.0_79-b14 -user.dir=/home/trhuy/TURTLE/crawler/db-derby-10.11.1.1-bin/bin -os.name=Linux -os.arch=amd64 -os.version=3.13.0-37-generic -derby.system.home=/home/trhuy/TURTLE/crawler/db-derby-10.11.1.1-bin/bin +Mon Jun 29 11:50:26 CEST 2015: +Booting Derby version The Apache Software Foundation - Apache Derby - 10.11.1.1 - (1616546): instance a816c00e-014e-3eb8-e840-00002c4eaa4e +on database directory /Users/ludovicapvrille/Prog/TURTLE/crawler/db-derby-10.11.1.1-bin/bin/MyDatabase with class loader sun.misc.Launcher$AppClassLoader@1729854 +Loaded from file:/Users/ludovicapvrille/Prog/TURTLE/crawler/db-derby-10.11.1.1-bin/lib/derby.jar +java.vendor=Apple Inc. +java.runtime.version=1.6.0_65-b14-462-11M4609 +user.dir=/Users/ludovicapvrille/Prog/TURTLE/crawler/db-derby-10.11.1.1-bin/bin +os.name=Mac OS X +os.arch=x86_64 +os.version=10.9.5 +derby.system.home=/Users/ludovicapvrille/Prog/TURTLE/crawler/db-derby-10.11.1.1-bin/bin Database Class Loader started - derby.database.classpath='' diff --git a/doc/README_proverif b/doc/README_proverif new file mode 100644 index 0000000000000000000000000000000000000000..16e2aac6f30bfb157281a17bfc5532db2a8348f4 --- /dev/null +++ b/doc/README_proverif @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at Telecom ParisTech, http://ttool.telecom-paristech.fr/ +------------------------------------------------------------------------------- + +The proverif directory is intended to store the proverif files generated from TTool. To generate these files, please refer to http://ttool.telecom-paristech.fr/ \ No newline at end of file diff --git a/doc/README_uppaal b/doc/README_uppaal index 4afeb66886c3aa72bf07e1c77ccf256690e8c9a8..69fba4d08482e0934ad56ab2c9e1aef2f51defc7 100644 --- a/doc/README_uppaal +++ b/doc/README_uppaal @@ -1,5 +1,5 @@ TTool, an open-source UML toolkit for modeling embedded systems and procotols. -TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +TTool is developed at Telecom ParisTech http://ttool.telecom-paristech.fr ------------------------------------------------------------------------------- -The uppaal directory is intended to store the uppaal files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP \ No newline at end of file +The uppaal directory is intended to store the uppaal files generated from TTool. \ No newline at end of file diff --git a/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml b/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml index f8e675041da7f90d57a96a0541e27f84c204e3b1..4bc05adb6c18e0a8fd4fc0b7dfca685062ec3319 100644 --- a/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml +++ b/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="ISO-8859-1"?> -<TURTLEGMODELING version="0.98-beta2"> +<TURTLEGMODELING version="0.98-beta3"> <Modeling type="Avatar Methodology" nameTab="Methodology" > <AvatarMethodologyDiagramPanel name="AVATAR_Methodology" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > @@ -4891,7 +4891,7 @@ or by a maintenance station <MainCode value=""/> <MainCode value="}"/> <Optimized value="true" /> -<Validated value="ObserverProp1;RemotelyControlledMicrowave;RemoteControl;MicroWaveOven;Bell;ControlPanel;Controller;Magnetron;Door;WirelessInterface;" /> +<Validated value="" /> <Ignored value="" /> <CONNECTOR type="5002" id="2502" > @@ -5101,7 +5101,7 @@ or by a maintenance station </COMPONENT> <COMPONENT type="301" id="2570" > -<cdparam x="63" y="22" /> +<cdparam x="177" y="16" /> <sizeparam width="591" height="95" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> <hidden value="false" /> <cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> diff --git a/preinstallTTool/linux/TTool/LICENSE b/preinstallTTool/linux/TTool/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..1a215125bf331a319b98670092f754eb11ce55fa --- /dev/null +++ b/preinstallTTool/linux/TTool/LICENSE @@ -0,0 +1,45 @@ +Copyright or © or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + +ludovic.apvrille AT enst.fr + + +This software is a computer program whose purpose is to allow the edition of TURTLE analysis, de +sign and deployment diagrams, to allow the generation of RT-LOTOS or Java code from this diagram +, andd at last to allow the analysis of formal validation traces obtained from external tools, e +.g. RTL from LAAS-CNRS and CADP from INRIA Rhone-Alpes. + +TTool is a software computer program distributed under two licenses: + +* the source file src/myutil/TableSorter.java is ditributed by SUN Microsystems under a BSD+ license. The agreement for this license has been approved by Sharon Zakhour, from SUN Microsystems, the 30th of September, 2005. The BSD+ license is provided in the header of the corresponding file. For more information on this license, please, consult the corresponding SUN web site at: +http://access1.sun.com/FAQSets/BSD.html + +* Other parts are governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +For fast information on CeCILL, we provide the english and french version of the license, in LICENSE_CECILL_ENG and LICENSE_CECILL_FR, respectively. + +Note: the TTool archive also contains materials from SUN, more precisely icons provided by SUN Microsystemes with a BSD+ License. This images are located in src/ui/images/toolbarButtonGraphics. For more information, please, refer to +http://java.sun.com/developer/techDocs/hi/repository/ \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/LICENSE_CECILL_ENG b/preinstallTTool/linux/TTool/LICENSE_CECILL_ENG new file mode 100755 index 0000000000000000000000000000000000000000..89ecc5b2b92f9abc8a32605410cb0b0673a6b017 --- /dev/null +++ b/preinstallTTool/linux/TTool/LICENSE_CECILL_ENG @@ -0,0 +1,504 @@ +CeCILL FREE SOFTWARE LICENSE AGREEMENT + + + Notice + +This Agreement is a Free Software license agreement that is the result +of discussions between its authors in order to ensure compliance with +the two main principles guiding its drafting: + + * firstly, compliance with the principles governing the distribution + of Free Software: access to source code, broad rights granted to + users, + * secondly, the election of a governing law, French law, with which + it is conformant, both as regards the law of torts and + intellectual property law, and the protection that it offers to + both authors and holders of the economic rights over software. + +The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[logiciel] L[ibre]) +license are: + +Commissariat à l'Energie Atomique - CEA, a public scientific, technical +and industrial establishment, having its principal place of business at +31-33 rue de la Fédération, 75752 Paris cedex 15, France. + +Centre National de la Recherche Scientifique - CNRS, a public scientific +and technological establishment, having its principal place of business +at 3 rue Michel-Ange 75794 Paris cedex 16, France. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, a public scientific and technological establishment, having its +principal place of business at Domaine de Voluceau, Rocquencourt, BP +105, 78153 Le Chesnay cedex, France. + + + Preamble + +The purpose of this Free Software license agreement is to grant users +the right to modify and redistribute the software governed by this +license within the framework of an open source distribution model. + +The exercising of these rights is conditional upon certain obligations +for users so as to preserve this status for all subsequent redistributions. + +In consideration of access to the source code and the rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors only have limited liability. + +In this respect, the risks associated with loading, using, modifying +and/or developing or reproducing the software by the user are brought to +the user's attention, given its Free Software status, which may make it +complicated to use, with the result that its use is reserved for +developers and experienced professionals having in-depth computer +knowledge. Users are therefore encouraged to load and test the +Software's suitability as regards their requirements in conditions +enabling the security of their systems and/or data to be ensured and, +more generally, to use and operate it in the same conditions of +security. This Agreement may be freely reproduced and published, +provided it is not altered, and that no provisions are either added or +removed herefrom. + +This Agreement may apply to any or all software for which the holder of +the economic rights decides to submit the use thereof to its provisions. + + + Article 1 - DEFINITIONS + +For the purpose of this Agreement, when the following expressions +commence with a capital letter, they shall have the following meaning: + +Agreement: means this license agreement, and its possible subsequent +versions and annexes. + +Software: means the software in its Object Code and/or Source Code form +and, where applicable, its documentation, "as is" when the Licensee +accepts the Agreement. + +Initial Software: means the Software in its Source Code and possibly its +Object Code form and, where applicable, its documentation, "as is" when +it is first distributed under the terms and conditions of the Agreement. + +Modified Software: means the Software modified by at least one +Contribution. + +Source Code: means all the Software's instructions and program lines to +which access is required so as to modify the Software. + +Object Code: means the binary files originating from the compilation of +the Source Code. + +Holder: means the holder(s) of the economic rights over the Initial +Software. + +Licensee: means the Software user(s) having accepted the Agreement. + +Contributor: means a Licensee having made at least one Contribution. + +Licensor: means the Holder, or any other individual or legal entity, who +distributes the Software under the Agreement. + +Contribution: means any or all modifications, corrections, translations, +adaptations and/or new functions integrated into the Software by any or +all Contributors, as well as any or all Internal Modules. + +Module: means a set of sources files including their documentation that +enables supplementary functions or services in addition to those offered +by the Software. + +External Module: means any or all Modules, not derived from the +Software, so that this Module and the Software run in separate address +spaces, with one calling the other when they are run. + +Internal Module: means any or all Module, connected to the Software so +that they both execute in the same address space. + +GNU GPL: means the GNU General Public License version 2 or any +subsequent version, as published by the Free Software Foundation Inc. + +Parties: mean both the Licensee and the Licensor. + +These expressions may be used both in singular and plural form. + + + Article 2 - PURPOSE + +The purpose of the Agreement is the grant by the Licensor to the +Licensee of a non-exclusive, transferable and worldwide license for the +Software as set forth in Article 5 hereinafter for the whole term of the +protection granted by the rights over said Software. + + + Article 3 - ACCEPTANCE + +3.1 The Licensee shall be deemed as having accepted the terms and +conditions of this Agreement upon the occurrence of the first of the +following events: + + * (i) loading the Software by any or all means, notably, by + downloading from a remote server, or by loading from a physical + medium; + * (ii) the first time the Licensee exercises any of the rights + granted hereunder. + +3.2 One copy of the Agreement, containing a notice relating to the +characteristics of the Software, to the limited warranty, and to the +fact that its use is restricted to experienced users has been provided +to the Licensee prior to its acceptance as set forth in Article 3.1 +hereinabove, and the Licensee hereby acknowledges that it has read and +understood it. + + + Article 4 - EFFECTIVE DATE AND TERM + + + 4.1 EFFECTIVE DATE + +The Agreement shall become effective on the date when it is accepted by +the Licensee as set forth in Article 3.1. + + + 4.2 TERM + +The Agreement shall remain in force for the entire legal term of +protection of the economic rights over the Software. + + + Article 5 - SCOPE OF RIGHTS GRANTED + +The Licensor hereby grants to the Licensee, who accepts, the following +rights over the Software for any or all use, and for the term of the +Agreement, on the basis of the terms and conditions set forth hereinafter. + +Besides, if the Licensor owns or comes to own one or more patents +protecting all or part of the functions of the Software or of its +components, the Licensor undertakes not to enforce the rights granted by +these patents against successive Licensees using, exploiting or +modifying the Software. If these patents are transferred, the Licensor +undertakes to have the transferees subscribe to the obligations set +forth in this paragraph. + + + 5.1 RIGHT OF USE + +The Licensee is authorized to use the Software, without any limitation +as to its fields of application, with it being hereinafter specified +that this comprises: + + 1. permanent or temporary reproduction of all or part of the Software + by any or all means and in any or all form. + + 2. loading, displaying, running, or storing the Software on any or + all medium. + + 3. entitlement to observe, study or test its operation so as to + determine the ideas and principles behind any or all constituent + elements of said Software. This shall apply when the Licensee + carries out any or all loading, displaying, running, transmission + or storage operation as regards the Software, that it is entitled + to carry out hereunder. + + + 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS + +The right to make Contributions includes the right to translate, adapt, +arrange, or make any or all modifications to the Software, and the right +to reproduce the resulting Software. + +The Licensee is authorized to make any or all Contributions to the +Software provided that it includes an explicit notice that it is the +author of said Contribution and indicates the date of the creation thereof. + + + 5.3 RIGHT OF DISTRIBUTION + +In particular, the right of distribution includes the right to publish, +transmit and communicate the Software to the general public on any or +all medium, and by any or all means, and the right to market, either in +consideration of a fee, or free of charge, one or more copies of the +Software by any means. + +The Licensee is further authorized to distribute copies of the modified +or unmodified Software to third parties according to the terms and +conditions set forth hereinafter. + + + 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION + +The Licensee is authorized to distribute true copies of the Software in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Software is +redistributed, the Licensee allows future Licensees unhindered access to +the full Source Code of the Software by indicating how to access it, it +being understood that the additional cost of acquiring the Source Code +shall not exceed the cost of transferring the data. + + + 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE + +When the Licensee makes a Contribution to the Software, the terms and +conditions for the distribution of the Modified Software become subject +to all the provisions of this Agreement. + +The Licensee is authorized to distribute the Modified Software, in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Modified +Software is redistributed, the Licensee allows future Licensees +unhindered access to the full Source Code of the Modified Software by +indicating how to access it, it being understood that the additional +cost of acquiring the Source Code shall not exceed the cost of +transferring the data. + + + 5.3.3 DISTRIBUTION OF EXTERNAL MODULES + +When the Licensee has developed an External Module, the terms and +conditions of this Agreement do not apply to said External Module, that +may be distributed under a separate license agreement. + + + 5.3.4 COMPATIBILITY WITH THE GNU GPL + +The Licensee can include a code that is subject to the provisions of one +of the versions of the GNU GPL in the Modified or unmodified Software, +and distribute that entire code under the terms of the same version of +the GNU GPL. + +The Licensee can include the Modified or unmodified Software in a code +that is subject to the provisions of one of the versions of the GNU GPL, +and distribute that entire code under the terms of the same version of +the GNU GPL. + + + Article 6 - INTELLECTUAL PROPERTY + + + 6.1 OVER THE INITIAL SOFTWARE + +The Holder owns the economic rights over the Initial Software. Any or +all use of the Initial Software is subject to compliance with the terms +and conditions under which the Holder has elected to distribute its work +and no one shall be entitled to modify the terms and conditions for the +distribution of said Initial Software. + +The Holder undertakes that the Initial Software will remain ruled at +least by the current license, for the duration set forth in article 4.2. + + + 6.2 OVER THE CONTRIBUTIONS + +A Licensee who develops a Contribution is the owner of the intellectual +property rights over this Contribution as defined by applicable law. + + + 6.3 OVER THE EXTERNAL MODULES + +A Licensee who develops an External Module is the owner of the +intellectual property rights over this External Module as defined by +applicable law and is free to choose the type of agreement that shall +govern its distribution. + + + 6.4 JOINT PROVISIONS + +The Licensee expressly undertakes: + + 1. not to remove, or modify, in any manner, the intellectual property + notices attached to the Software; + + 2. to reproduce said notices, in an identical manner, in the copies + of the Software modified or not. + +The Licensee undertakes not to directly or indirectly infringe the +intellectual property rights of the Holder and/or Contributors on the +Software and to take, where applicable, vis-à-vis its staff, any and all +measures required to ensure respect of said intellectual property rights +of the Holder and/or Contributors. + + + Article 7 - RELATED SERVICES + +7.1 Under no circumstances shall the Agreement oblige the Licensor to +provide technical assistance or maintenance services for the Software. + +However, the Licensor is entitled to offer this type of services. The +terms and conditions of such technical assistance, and/or such +maintenance, shall be set forth in a separate instrument. Only the +Licensor offering said maintenance and/or technical assistance services +shall incur liability therefor. + +7.2 Similarly, any Licensor is entitled to offer to its licensees, under +its sole responsibility, a warranty, that shall only be binding upon +itself, for the redistribution of the Software and/or the Modified +Software, under terms and conditions that it is free to decide. Said +warranty, and the financial terms and conditions of its application, +shall be subject of a separate instrument executed between the Licensor +and the Licensee. + + + Article 8 - LIABILITY + +8.1 Subject to the provisions of Article 8.2, the Licensee shall be +entitled to claim compensation for any direct loss it may have suffered +from the Software as a result of a fault on the part of the relevant +Licensor, subject to providing evidence thereof. + +8.2 The Licensor's liability is limited to the commitments made under +this Agreement and shall not be incurred as a result of in particular: +(i) loss due the Licensee's total or partial failure to fulfill its +obligations, (ii) direct or consequential loss that is suffered by the +Licensee due to the use or performance of the Software, and (iii) more +generally, any consequential loss. In particular the Parties expressly +agree that any or all pecuniary or business loss (i.e. loss of data, +loss of profits, operating loss, loss of customers or orders, +opportunity cost, any disturbance to business activities) or any or all +legal proceedings instituted against the Licensee by a third party, +shall constitute consequential loss and shall not provide entitlement to +any or all compensation from the Licensor. + + + Article 9 - WARRANTY + +9.1 The Licensee acknowledges that the scientific and technical +state-of-the-art when the Software was distributed did not enable all +possible uses to be tested and verified, nor for the presence of +possible defects to be detected. In this respect, the Licensee's +attention has been drawn to the risks associated with loading, using, +modifying and/or developing and reproducing the Software which are +reserved for experienced users. + +The Licensee shall be responsible for verifying, by any or all means, +the product's suitability for its requirements, its good working order, +and for ensuring that it shall not cause damage to either persons or +properties. + +9.2 The Licensor hereby represents, in good faith, that it is entitled +to grant all the rights over the Software (including in particular the +rights set forth in Article 5). + +9.3 The Licensee acknowledges that the Software is supplied "as is" by +the Licensor without any other express or tacit warranty, other than +that provided for in Article 9.2 and, in particular, without any warranty +as to its commercial value, its secured, safe, innovative or relevant +nature. + +Specifically, the Licensor does not warrant that the Software is free +from any error, that it will operate without interruption, that it will +be compatible with the Licensee's own equipment and software +configuration, nor that it will meet the Licensee's requirements. + +9.4 The Licensor does not either expressly or tacitly warrant that the +Software does not infringe any third party intellectual property right +relating to a patent, software or any other property right. Therefore, +the Licensor disclaims any and all liability towards the Licensee +arising out of any or all proceedings for infringement that may be +instituted in respect of the use, modification and redistribution of the +Software. Nevertheless, should such proceedings be instituted against +the Licensee, the Licensor shall provide it with technical and legal +assistance for its defense. Such technical and legal assistance shall be +decided on a case-by-case basis between the relevant Licensor and the +Licensee pursuant to a memorandum of understanding. The Licensor +disclaims any and all liability as regards the Licensee's use of the +name of the Software. No warranty is given as regards the existence of +prior rights over the name of the Software or as regards the existence +of a trademark. + + + Article 10 - TERMINATION + +10.1 In the event of a breach by the Licensee of its obligations +hereunder, the Licensor may automatically terminate this Agreement +thirty (30) days after notice has been sent to the Licensee and has +remained ineffective. + +10.2 A Licensee whose Agreement is terminated shall no longer be +authorized to use, modify or distribute the Software. However, any +licenses that it may have granted prior to termination of the Agreement +shall remain valid subject to their having been granted in compliance +with the terms and conditions hereof. + + + Article 11 - MISCELLANEOUS + + + 11.1 EXCUSABLE EVENTS + +Neither Party shall be liable for any or all delay, or failure to +perform the Agreement, that may be attributable to an event of force +majeure, an act of God or an outside cause, such as defective +functioning or interruptions of the electricity or telecommunications +networks, network paralysis following a virus attack, intervention by +government authorities, natural disasters, water damage, earthquakes, +fire, explosions, strikes and labor unrest, war, etc. + +11.2 Any Failure by either Party, on one or more occasions, to invoke +one or more of the provisions hereof, shall under no circumstances be +interpreted as being a waiver by the interested Party of its right to +invoke said provision(s) subsequently. + +11.3 The Agreement cancels and replaces any or all previous agreements, +whether written or oral, between the Parties and having the same +purpose, and constitutes the entirety of the agreement between said +Parties concerning said purpose. No supplement or modification to the +terms and conditions hereof shall be effective as between the Parties +unless it is made in writing and signed by their duly authorized +representatives. + +11.4 In the event that one or more of the provisions hereof were to +conflict with a current or future applicable act or legislative text, +said act or legislative text shall prevail, and the Parties shall make +the necessary amendments so as to comply with said act or legislative +text. All other provisions shall remain effective. Similarly, invalidity +of a provision of the Agreement, for any reason whatsoever, shall not +cause the Agreement as a whole to be invalid. + + + 11.5 LANGUAGE + +The Agreement is drafted in both French and English and both versions +are deemed authentic. + + + Article 12 - NEW VERSIONS OF THE AGREEMENT + +12.1 Any person is authorized to duplicate and distribute copies of this +Agreement. + +12.2 So as to ensure coherence, the wording of this Agreement is +protected and may only be modified by the authors of the License, who +reserve the right to periodically publish updates or new versions of the +Agreement, each with a separate number. These subsequent versions may +address new issues encountered by Free Software. + +12.3 Any Software distributed under a given version of the Agreement may +only be subsequently distributed under the same version of the Agreement +or a subsequent version, subject to the provisions of Article 5.3.4. + + + Article 13 - GOVERNING LAW AND JURISDICTION + +13.1 The Agreement is governed by French law. The Parties agree to +endeavor to seek an amicable solution to any disagreements or disputes +that may arise during the performance of the Agreement. + +13.2 Failing an amicable solution within two (2) months as from their +occurrence, and unless emergency proceedings are necessary, the +disagreements or disputes shall be referred to the Paris Courts having +jurisdiction, by the more diligent Party. + + +Version 2.0 dated 2005-05-21. \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/LICENSE_CECILL_FR b/preinstallTTool/linux/TTool/LICENSE_CECILL_FR new file mode 100755 index 0000000000000000000000000000000000000000..3df252c31b21b714c8150932e2ed8c146429923c --- /dev/null +++ b/preinstallTTool/linux/TTool/LICENSE_CECILL_FR @@ -0,0 +1,511 @@ +CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL + + + Avertissement + +Ce contrat est une licence de logiciel libre issue d'une concertation +entre ses auteurs afin que le respect de deux grands principes préside à +sa rédaction: + + * d'une part, le respect des principes de diffusion des logiciels + libres: accès au code source, droits étendus conférés aux + utilisateurs, + * d'autre part, la désignation d'un droit applicable, le droit + français, auquel elle est conforme, tant au regard du droit de la + responsabilité civile que du droit de la propriété intellectuelle + et de la protection qu'il offre aux auteurs et titulaires des + droits patrimoniaux sur un logiciel. + +Les auteurs de la licence CeCILL (pour Ce[a] C[nrs] I[nria] L[ogiciel] +L[ibre]) sont: + +Commissariat à l'Energie Atomique - CEA, établissement public de +caractère scientifique technique et industriel, dont le siège est situé +31-33 rue de la Fédération, 75752 Paris cedex 15. + +Centre National de la Recherche Scientifique - CNRS, établissement +public à caractère scientifique et technologique, dont le siège est +situé 3 rue Michel-Ange 75794 Paris cedex 16. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, établissement public à caractère scientifique et technologique, +dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153 +Le Chesnay cedex. + + + Préambule + +Ce contrat est une licence de logiciel libre dont l'objectif est de +conférer aux utilisateurs la liberté de modification et de +redistribution du logiciel régi par cette licence dans le cadre d'un +modèle de diffusion en logiciel libre. + +L'exercice de ces libertés est assorti de certains devoirs à la charge +des utilisateurs afin de préserver ce statut au cours des +redistributions ultérieures. + +L'accessibilité au code source et les droits de copie, de modification +et de redistribution qui en découlent ont pour contrepartie de n'offrir +aux utilisateurs qu'une garantie limitée et de ne faire peser sur +l'auteur du logiciel, le titulaire des droits patrimoniaux et les +concédants successifs qu'une responsabilité restreinte. + +A cet égard l'attention de l'utilisateur est attirée sur les risques +associés au chargement, à l'utilisation, à la modification et/ou au +développement et à la reproduction du logiciel par l'utilisateur étant +donné sa spécificité de logiciel libre, qui peut le rendre complexe à +manipuler et qui le réserve donc à des développeurs ou des +professionnels avertis possédant des connaissances informatiques +approfondies. Les utilisateurs sont donc invités à charger et tester +l'adéquation du Logiciel à leurs besoins dans des conditions permettant +d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus +généralement, à l'utiliser et l'exploiter dans les même conditions de +sécurité. Ce contrat peut être reproduit et diffusé librement, sous +réserve de le conserver en l'état, sans ajout ni suppression de clauses. + +Ce contrat est susceptible de s'appliquer à tout logiciel dont le +titulaire des droits patrimoniaux décide de soumettre l'exploitation aux +dispositions qu'il contient. + + + Article 1 - DEFINITIONS + +Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une +lettre capitale, auront la signification suivante: + +Contrat: désigne le présent contrat de licence, ses éventuelles versions +postérieures et annexes. + +Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code +Source et le cas échéant sa documentation, dans leur état au moment de +l'acceptation du Contrat par le Licencié. + +Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et +éventuellement de Code Objet et le cas échéant sa documentation, dans +leur état au moment de leur première diffusion sous les termes du Contrat. + +Logiciel Modifié: désigne le Logiciel modifié par au moins une +Contribution. + +Code Source: désigne l'ensemble des instructions et des lignes de +programme du Logiciel et auquel l'accès est nécessaire en vue de +modifier le Logiciel. + +Code Objet: désigne les fichiers binaires issus de la compilation du +Code Source. + +Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur +sur le Logiciel Initial + +Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le +Contrat. + +Contributeur: désigne le Licencié auteur d'au moins une Contribution. + +Concédant: désigne le Titulaire ou toute personne physique ou morale +distribuant le Logiciel sous le Contrat. + +Contribution: désigne l'ensemble des modifications, corrections, +traductions, adaptations et/ou nouvelles fonctionnalités intégrées dans +le Logiciel par tout Contributeur, ainsi que tout Module Interne. + +Module: désigne un ensemble de fichiers sources y compris leur +documentation qui permet de réaliser des fonctionnalités ou services +supplémentaires à ceux fournis par le Logiciel. + +Module Externe: désigne tout Module, non dérivé du Logiciel, tel que ce +Module et le Logiciel s'exécutent dans des espaces d'adressages +différents, l'un appelant l'autre au moment de leur exécution. + +Module Interne: désigne tout Module lié au Logiciel de telle sorte +qu'ils s'exécutent dans le même espace d'adressage. + +GNU GPL: désigne la GNU General Public License dans sa version 2 ou +toute version ultérieure, telle que publiée par Free Software Foundation +Inc. + +Parties: désigne collectivement le Licencié et le Concédant. + +Ces termes s'entendent au singulier comme au pluriel. + + + Article 2 - OBJET + +Le Contrat a pour objet la concession par le Concédant au Licencié d'une +licence non exclusive, cessible et mondiale du Logiciel telle que +définie ci-après à l'article 5 pour toute la durée de protection des +droits portant sur ce Logiciel. + + + Article 3 - ACCEPTATION + +3.1 L'acceptation par le Licencié des termes du Contrat est réputée +acquise du fait du premier des faits suivants: + + * (i) le chargement du Logiciel par tout moyen notamment par + téléchargement à partir d'un serveur distant ou par chargement à + partir d'un support physique; + * (ii) le premier exercice par le Licencié de l'un quelconque des + droits concédés par le Contrat. + +3.2 Un exemplaire du Contrat, contenant notamment un avertissement +relatif aux spécificités du Logiciel, à la restriction de garantie et à +la limitation à un usage par des utilisateurs expérimentés a été mis à +disposition du Licencié préalablement à son acceptation telle que +définie à l'article 3.1 ci dessus et le Licencié +reconnaît en avoir pris connaissance. + + + Article 4 - ENTREE EN VIGUEUR ET DUREE + + + 4.1 ENTREE EN VIGUEUR + +Le Contrat entre en vigueur à la date de son acceptation par le Licencié +telle que définie en 3.1. + + + 4.2 DUREE + +Le Contrat produira ses effets pendant toute la durée légale de +protection des droits patrimoniaux portant sur le Logiciel. + + + Article 5 - ETENDUE DES DROITS CONCEDES + +Le Concédant concède au Licencié, qui accepte, les droits suivants sur +le Logiciel pour toutes destinations et pour la durée du Contrat dans +les conditions ci-après détaillées. + +Par ailleurs, si le Concédant détient ou venait à détenir un ou +plusieurs brevets d'invention protégeant tout ou partie des +fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas +opposer les éventuels droits conférés par ces brevets aux Licenciés +successifs qui utiliseraient, exploiteraient ou modifieraient le +Logiciel. En cas de cession de ces brevets, le Concédant s'engage à +faire reprendre les obligations du présent alinéa aux cessionnaires. + + + 5.1 DROIT D'UTILISATION + +Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant +aux domaines d'application, étant ci-après précisé que cela comporte: + + 1. la reproduction permanente ou provisoire du Logiciel en tout ou + partie par tout moyen et sous toute forme. + + 2. le chargement, l'affichage, l'exécution, ou le stockage du + Logiciel sur tout support. + + 3. la possibilité d'en observer, d'en étudier, ou d'en tester le + fonctionnement afin de déterminer les idées et principes qui sont + à la base de n'importe quel élément de ce Logiciel; et ceci, + lorsque le Licencié effectue toute opération de chargement, + d'affichage, d'exécution, de transmission ou de stockage du + Logiciel qu'il est en droit d'effectuer en vertu du Contrat. + + + 5.2 DROIT D'APPORTER DES CONTRIBUTIONS + +Le droit d'apporter des Contributions comporte le droit de traduire, +d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel +et le droit de reproduire le Logiciel en résultant. + +Le Licencié est autorisé à apporter toute Contribution au Logiciel sous +réserve de mentionner, de façon explicite, son nom en tant qu'auteur de +cette Contribution et la date de création de celle-ci. + + + 5.3 DROIT DE DISTRIBUTION + +Le droit de distribution comporte notamment le droit de diffuser, de +transmettre et de communiquer le Logiciel au public sur tout support et +par tout moyen ainsi que le droit de mettre sur le marché à titre +onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé. + +Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou +non, à des tiers dans les conditions ci-après détaillées. + + + 5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION + +Le Licencié est autorisé à distribuer des copies conformes du Logiciel, +sous forme de Code Source ou de Code Objet, à condition que cette +distribution respecte les dispositions du Contrat dans leur totalité et +soit accompagnée: + + 1. d'un exemplaire du Contrat, + + 2. d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + et 9, + +et que, dans le cas où seul le Code Objet du Logiciel est redistribué, +le Licencié permette aux futurs Licenciés d'accéder facilement au Code +Source complet du Logiciel en indiquant les modalités d'accès, étant +entendu que le coût additionnel d'acquisition du Code Source ne devra +pas excéder le simple coût de transfert des données. + + + 5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE + +Lorsque le Licencié apporte une Contribution au Logiciel, les conditions +de distribution du Logiciel Modifié sont alors soumises à l'intégralité +des dispositions du Contrat. + +Le Licencié est autorisé à distribuer le Logiciel Modifié, sous forme de +Code Source ou de Code Objet, à condition que cette distribution +respecte les dispositions du Contrat dans leur totalité et soit +accompagnée: + + 1. d'un exemplaire du Contrat, + + 2. d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + et 9, + +et que, dans le cas où seul le Code Objet du Logiciel Modifié est +redistribué, le Licencié permette aux futurs Licenciés d'accéder +facilement au Code Source complet du Logiciel Modifié en indiquant les +modalités d'accès, étant entendu que le coût additionnel d'acquisition +du Code Source ne devra pas excéder le simple coût de transfert des données. + + + 5.3.3 DISTRIBUTION DES MODULES EXTERNES + +Lorsque le Licencié a développé un Module Externe les conditions du +Contrat ne s'appliquent pas à ce Module Externe, qui peut être distribué +sous un contrat de licence différent. + + + 5.3.4 COMPATIBILITE AVEC LA LICENCE GNU GPL + +Le Licencié peut inclure un code soumis aux dispositions d'une des +versions de la licence GNU GPL dans le Logiciel modifié ou non et +distribuer l'ensemble sous les conditions de la même version de la +licence GNU GPL. + +Le Licencié peut inclure le Logiciel modifié ou non dans un code soumis +aux dispositions d'une des versions de la licence GNU GPL et distribuer +l'ensemble sous les conditions de la même version de la licence GNU GPL. + + + Article 6 - PROPRIETE INTELLECTUELLE + + + 6.1 SUR LE LOGICIEL INITIAL + +Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel +Initial. Toute utilisation du Logiciel Initial est soumise au respect +des conditions dans lesquelles le Titulaire a choisi de diffuser son +oeuvre et nul autre n'a la faculté de modifier les conditions de +diffusion de ce Logiciel Initial. + +Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi +par la présente licence et ce, pour la durée visée à l'article 4.2. + + + 6.2 SUR LES CONTRIBUTIONS + +Le Licencié qui a développé une Contribution est titulaire sur celle-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable. + + + 6.3 SUR LES MODULES EXTERNES + +Le Licencié qui a développé un Module Externe est titulaire sur celui-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable et reste libre du choix du contrat régissant +sa diffusion. + + + 6.4 DISPOSITIONS COMMUNES + +Le Licencié s'engage expressément: + + 1. à ne pas supprimer ou modifier de quelque manière que ce soit les + mentions de propriété intellectuelle apposées sur le Logiciel; + + 2. à reproduire à l'identique lesdites mentions de propriété + intellectuelle sur les copies du Logiciel modifié ou non. + +Le Licencié s'engage à ne pas porter atteinte, directement ou +indirectement, aux droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs sur le Logiciel et à prendre, le cas échéant, à +l'égard de son personnel toutes les mesures nécessaires pour assurer le +respect des dits droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs. + + + Article 7 - SERVICES ASSOCIES + +7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de +prestations d'assistance technique ou de maintenance du Logiciel. + +Cependant le Concédant reste libre de proposer ce type de services. Les +termes et conditions d'une telle assistance technique et/ou d'une telle +maintenance seront alors déterminés dans un acte séparé. Ces actes de +maintenance et/ou assistance technique n'engageront que la seule +responsabilité du Concédant qui les propose. + +7.2 De même, tout Concédant est libre de proposer, sous sa seule +responsabilité, à ses licenciés une garantie, qui n'engagera que lui, +lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce, +dans les conditions qu'il souhaite. Cette garantie et les modalités +financières de son application feront l'objet d'un acte séparé entre le +Concédant et le Licencié. + + + Article 8 - RESPONSABILITE + +8.1 Sous réserve des dispositions de l'article 8.2, le Licencié a la +faculté, sous réserve de prouver la faute du Concédant concerné, de +solliciter la réparation du préjudice direct qu'il subirait du fait du +logiciel et dont il apportera la preuve. + +8.2 La responsabilité du Concédant est limitée aux engagements pris en +application du Contrat et ne saurait être engagée en raison notamment: +(i) des dommages dus à l'inexécution, totale ou partielle, de ses +obligations par le Licencié, (ii) des dommages directs ou indirects +découlant de l'utilisation ou des performances du Logiciel subis par le +Licencié et (iii) plus généralement d'un quelconque dommage indirect. En +particulier, les Parties conviennent expressément que tout préjudice +financier ou commercial (par exemple perte de données, perte de +bénéfices, perte d'exploitation, perte de clientèle ou de commandes, +manque à gagner, trouble commercial quelconque) ou toute action dirigée +contre le Licencié par un tiers, constitue un dommage indirect et +n'ouvre pas droit à réparation par le Concédant. + + + Article 9 - GARANTIE + +9.1 Le Licencié reconnaît que l'état actuel des connaissances +scientifiques et techniques au moment de la mise en circulation du +Logiciel ne permet pas d'en tester et d'en vérifier toutes les +utilisations ni de détecter l'existence d'éventuels défauts. L'attention +du Licencié a été attirée sur ce point sur les risques associés au +chargement, à l'utilisation, la modification et/ou au développement et à +la reproduction du Logiciel qui sont réservés à des utilisateurs avertis. + +Il relève de la responsabilité du Licencié de contrôler, par tous +moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et +de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens. + +9.2 Le Concédant déclare de bonne foi être en droit de concéder +l'ensemble des droits attachés au Logiciel (comprenant notamment les +droits visés à l'article 5). + +9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le +Concédant sans autre garantie, expresse ou tacite, que celle prévue à +l'article 9.2 et notamment sans aucune garantie sur sa valeur +commerciale, son caractère sécurisé, innovant ou pertinent. + +En particulier, le Concédant ne garantit pas que le Logiciel est exempt +d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible +avec l'équipement du Licencié et sa configuration logicielle ni qu'il +remplira les besoins du Licencié. + +9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le +Logiciel ne porte pas atteinte à un quelconque droit de propriété +intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout +autre droit de propriété. Ainsi, le Concédant exclut toute garantie au +profit du Licencié contre les actions en contrefaçon qui pourraient être +diligentées au titre de l'utilisation, de la modification, et de la +redistribution du Logiciel. Néanmoins, si de telles actions sont +exercées contre le Licencié, le Concédant lui apportera son aide +technique et juridique pour sa défense. Cette aide technique et +juridique est déterminée au cas par cas entre le Concédant concerné et +le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage +toute responsabilité quant à l'utilisation de la dénomination du +Logiciel par le Licencié. Aucune garantie n'est apportée quant à +l'existence de droits antérieurs sur le nom du Logiciel et sur +l'existence d'une marque. + + + Article 10 - RESILIATION + +10.1 En cas de manquement par le Licencié aux obligations mises à sa +charge par le Contrat, le Concédant pourra résilier de plein droit le +Contrat trente (30) jours après notification adressée au Licencié et +restée sans effet. + +10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à +utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les +licences qu'il aura concédées antérieurement à la résiliation du Contrat +resteront valides sous réserve qu'elles aient été effectuées en +conformité avec le Contrat. + + + Article 11 - DISPOSITIONS DIVERSES + + + 11.1 CAUSE EXTERIEURE + +Aucune des Parties ne sera responsable d'un retard ou d'une défaillance +d'exécution du Contrat qui serait dû à un cas de force majeure, un cas +fortuit ou une cause extérieure, telle que, notamment, le mauvais +fonctionnement ou les interruptions du réseau électrique ou de +télécommunication, la paralysie du réseau liée à une attaque +informatique, l'intervention des autorités gouvernementales, les +catastrophes naturelles, les dégâts des eaux, les tremblements de terre, +le feu, les explosions, les grèves et les conflits sociaux, l'état de +guerre... + +11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou +plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du +Contrat, ne pourra en aucun cas impliquer renonciation par la Partie +intéressée à s'en prévaloir ultérieurement. + +11.3 Le Contrat annule et remplace toute convention antérieure, écrite +ou orale, entre les Parties sur le même objet et constitue l'accord +entier entre les Parties sur cet objet. Aucune addition ou modification +aux termes du Contrat n'aura d'effet à l'égard des Parties à moins +d'être faite par écrit et signée par leurs représentants dûment habilités. + +11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat +s'avèrerait contraire à une loi ou à un texte applicable, existants ou +futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les +amendements nécessaires pour se conformer à cette loi ou à ce texte. +Toutes les autres dispositions resteront en vigueur. De même, la +nullité, pour quelque raison que ce soit, d'une des dispositions du +Contrat ne saurait entraîner la nullité de l'ensemble du Contrat. + + + 11.5 LANGUE + +Le Contrat est rédigé en langue française et en langue anglaise, ces +deux versions faisant également foi. + + + Article 12 - NOUVELLES VERSIONS DU CONTRAT + +12.1 Toute personne est autorisée à copier et distribuer des copies de +ce Contrat. + +12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé +et ne peut être modifié que par les auteurs de la licence, lesquels se +réservent le droit de publier périodiquement des mises à jour ou de +nouvelles versions du Contrat, qui possèderont chacune un numéro +distinct. Ces versions ultérieures seront susceptibles de prendre en +compte de nouvelles problématiques rencontrées par les logiciels libres. + +12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra +faire l'objet d'une diffusion ultérieure que sous la même version du +Contrat ou une version postérieure, sous réserve des dispositions de +l'article 5.3.4. + + + Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE + +13.1 Le Contrat est régi par la loi française. Les Parties conviennent +de tenter de régler à l'amiable les différends ou litiges qui +viendraient à se produire par suite ou à l'occasion du Contrat. + +13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter +de leur survenance et sauf situation relevant d'une procédure d'urgence, +les différends ou litiges seront portés par la Partie la plus diligente +devant les Tribunaux compétents de Paris. + + +Version 2.0 du 2005-05-21. \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/README b/preinstallTTool/linux/TTool/README new file mode 100755 index 0000000000000000000000000000000000000000..d26617ffa63fd0805d13e8581481b74aadba2911 --- /dev/null +++ b/preinstallTTool/linux/TTool/README @@ -0,0 +1,21 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +TTool: the TURTLE Toolkit +------------------------- + +TTool relies on JDK 1.6 or later. For more information about installation or use of TTool, please, refer to : +http://labsoc.comelec.enst.fr/TURTLE/HELP/index.html + +For the DIPLODOCUS UML profile, please refer to: +http://www.comelec.enst.fr/recherche/labsoc/projets/DIPLODOCUS + + +Installing TTool +---------------- + +Basically, TTool is offered as a gipped-tar archive. To uncompress it under Linux, type the following command (if we assume thar archive is named ttool.tgz) in the directory in which you wish to install TTool: +$ tar -xofz ttool.tgz + +Various directories are created. A README_<directory name> file located in each of them summarizes its purpose and content. \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/bin/README_bin b/preinstallTTool/linux/TTool/bin/README_bin new file mode 100755 index 0000000000000000000000000000000000000000..cb3c9aa0d666548d85f78e8a2810b84f34daca6d --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/README_bin @@ -0,0 +1,18 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +This directory contain files for starting the TTool's launcher and TTool itself.Assuming "java" is a recognized command of your system, you may: +1) start the launcher as follows: +$java -jar launcher.jar + +2) start TTool as follows +$ java -Xmx256m -jar ttool.jar config.xml + +Don't forget to correctly configure various settings in your config.xml file. + +For more installation on the running of TTool and the configuration of your config.xml, please, see http://labsoc.comelec.enst.fr/turtle/HELP + +------------------------------------------------------------------------------- +Various files: +configuration.gcf: Configuration file for distributor (CADP) diff --git a/preinstallTTool/linux/TTool/bin/commons-codec-1.10.jar b/preinstallTTool/linux/TTool/bin/commons-codec-1.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..1d7417c4031324cc6577a306cde57ae220f55523 Binary files /dev/null and b/preinstallTTool/linux/TTool/bin/commons-codec-1.10.jar differ diff --git a/preinstallTTool/linux/TTool/bin/config.xml b/preinstallTTool/linux/TTool/bin/config.xml new file mode 100755 index 0000000000000000000000000000000000000000..b17a77b53409c1bce017aa287b4c576cdb2c15d0 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/config.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> + +<TURTLECONFIGURATION> +<DOTTYPath data="/bin/dotty" /> +<DOTTYHost data="localhost" /> +<FILEPath data="../modeling/" /> +<LIBPath data="../lib" /> +<IMGPath data="../figure" /> +<LOTOSPath data="../lotos/" /> +<GGraphPath data="../graphs" /> +<TGraphPath data="../graphs" /> +<TToolUpdateProxy data="false" /> +<TToolUpdateProxyPort data="8080" /> +<TToolUpdateProxyHost data="To Be Completed" /> +<JavaCodeDirectory data="../javacode" /> +<JavaCompilerPath data="/usr/bin/javac" /> +<TToolClassPath data="../javacode" /> +<JavaExecutePath data="/usr/bin/java" /> +<JavaHeader data="import java.sql.*;" /> +<SystemCCodeDirectory data="../simulators/c++2/" /> +<SystemCHost data="localhost"/> +<SystemCCodeCompileCommand data="make -C ../simulators/c++2/" /> +<SystemCCodeExecuteCommand data="../simulators/c++2/run.x -ovcd ../simulators/c++2/vcddump.vcd" /> +<SystemCCodeInteractiveExecuteCommand data="../simulators/c++2/run.x -server" /> +<TMLCodeDirectory data="../tmlcode" /> +<GTKWavePath data="/usr/bin/gtkwave" /> +<VCDPath data="../vcd/" /> +<UPPAALCodeDirectory data="../uppaal/" /> +<UPPAALVerifierPath data="../../uppaal/bin-Linux/verifyta" /> +<UPPAALVerifierHost data="localhost" /> +<ProVerifCodeDirectory data="../proverif/" /> +<ProVerifVerifierPath data="../../proverif/proverif" /> +<ProVerifVerifierHost data="localhost" /> +<AVATARExecutableCodeDirectory data="../executablecode/" /> +<AVATARExecutableCodeHost data="localhost"/> +<AVATARExecutableCodeCompileCommand data="make -C ../executablecode" /> +<AVATARExecutableCodeExecuteCommand data="../executablecode/run.x" /> +<AVATARExecutableSoclibCodeCompileCommand data="make -C ../executablecode updategeneratedcode compilesoclib" /> +<AVATARExecutableSoclibCodeExecuteCommand data="make -C ../executablecode runsoclib" /> + + +<ExternalCommand1Host data="localhost"/> +<ExternalCommand1 data="/usr/bin/gtkwave ../simulators/c++2/vcddump.vcd"/> + + +<ExternalServer data="localhost:12345"/> + +<LastWindowAttributes x="240" y="107" width="1414" height="777" max="false" /> + + +</TURTLECONFIGURATION> diff --git a/preinstallTTool/linux/TTool/bin/configuration.gcf b/preinstallTTool/linux/TTool/bin/configuration.gcf new file mode 100644 index 0000000000000000000000000000000000000000..0e6a0f48ed8223e9d41ed37de9e1e93351847292 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/configuration.gcf @@ -0,0 +1,12 @@ +rsh= ssh -x +rcp= scp +cow10 +directory = /tmp/TTool +cow11 +directory = /tmp/TTool +cow12 +directory = /tmp/TTool +cow13 +directory = /tmp/TTool +cow15 +directory = /tmp/TTool \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/bin/jsoup-1.8.1.jar b/preinstallTTool/linux/TTool/bin/jsoup-1.8.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..ae717d450e8c89511b3ff7a81ba57cf8b5711892 Binary files /dev/null and b/preinstallTTool/linux/TTool/bin/jsoup-1.8.1.jar differ diff --git a/preinstallTTool/linux/TTool/bin/launcher.jar b/preinstallTTool/linux/TTool/bin/launcher.jar new file mode 100644 index 0000000000000000000000000000000000000000..a090bdffd452093130a1f6f18bbb2845d404df53 Binary files /dev/null and b/preinstallTTool/linux/TTool/bin/launcher.jar differ diff --git a/preinstallTTool/linux/TTool/bin/rundse.jar b/preinstallTTool/linux/TTool/bin/rundse.jar new file mode 100644 index 0000000000000000000000000000000000000000..925296b94d33b2a28824a6c95e7b15b1f33bae57 Binary files /dev/null and b/preinstallTTool/linux/TTool/bin/rundse.jar differ diff --git a/preinstallTTool/linux/TTool/bin/spec.h b/preinstallTTool/linux/TTool/bin/spec.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_0.h b/preinstallTTool/linux/TTool/bin/spec_0.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_0.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_1.f b/preinstallTTool/linux/TTool/bin/spec_1.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_1.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_1.h b/preinstallTTool/linux/TTool/bin/spec_1.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_1.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_1.t b/preinstallTTool/linux/TTool/bin/spec_1.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_1.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_2.f b/preinstallTTool/linux/TTool/bin/spec_2.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_2.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_2.h b/preinstallTTool/linux/TTool/bin/spec_2.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_2.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_2.t b/preinstallTTool/linux/TTool/bin/spec_2.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_2.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_3.f b/preinstallTTool/linux/TTool/bin/spec_3.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_3.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_3.h b/preinstallTTool/linux/TTool/bin/spec_3.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_3.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_3.t b/preinstallTTool/linux/TTool/bin/spec_3.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_3.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_4.h b/preinstallTTool/linux/TTool/bin/spec_4.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_4.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_4.t b/preinstallTTool/linux/TTool/bin/spec_4.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_4.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_5.f b/preinstallTTool/linux/TTool/bin/spec_5.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_5.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_5.h b/preinstallTTool/linux/TTool/bin/spec_5.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_5.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_5.t b/preinstallTTool/linux/TTool/bin/spec_5.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_5.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_6.f b/preinstallTTool/linux/TTool/bin/spec_6.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_6.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_6.h b/preinstallTTool/linux/TTool/bin/spec_6.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_6.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_6.t b/preinstallTTool/linux/TTool/bin/spec_6.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_6.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_7.f b/preinstallTTool/linux/TTool/bin/spec_7.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_7.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_7.h b/preinstallTTool/linux/TTool/bin/spec_7.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_7.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_7.t b/preinstallTTool/linux/TTool/bin/spec_7.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_7.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_8.f b/preinstallTTool/linux/TTool/bin/spec_8.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_8.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_8.h b/preinstallTTool/linux/TTool/bin/spec_8.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_8.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_8.t b/preinstallTTool/linux/TTool/bin/spec_8.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_8.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/spec_9.f b/preinstallTTool/linux/TTool/bin/spec_9.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_9.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/linux/TTool/bin/spec_9.h b/preinstallTTool/linux/TTool/bin/spec_9.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_9.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/linux/TTool/bin/spec_9.t b/preinstallTTool/linux/TTool/bin/spec_9.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/linux/TTool/bin/spec_9.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/linux/TTool/bin/tiftranslator.jar b/preinstallTTool/linux/TTool/bin/tiftranslator.jar new file mode 100644 index 0000000000000000000000000000000000000000..88e089e1e82ad8e150ffeb74ef29810547224c84 Binary files /dev/null and b/preinstallTTool/linux/TTool/bin/tiftranslator.jar differ diff --git a/preinstallTTool/linux/TTool/bin/tmltranslator.jar b/preinstallTTool/linux/TTool/bin/tmltranslator.jar new file mode 100644 index 0000000000000000000000000000000000000000..ceee8e718ee3819a4f586821b064255092ec6f62 Binary files /dev/null and b/preinstallTTool/linux/TTool/bin/tmltranslator.jar differ diff --git a/preinstallTTool/linux/TTool/bin/ttool.jar b/preinstallTTool/linux/TTool/bin/ttool.jar new file mode 100644 index 0000000000000000000000000000000000000000..3fa70a32a9f9a27a947a1a7c54fb634963644757 Binary files /dev/null and b/preinstallTTool/linux/TTool/bin/ttool.jar differ diff --git a/preinstallTTool/linux/TTool/doc/README_doc b/preinstallTTool/linux/TTool/doc/README_doc new file mode 100644 index 0000000000000000000000000000000000000000..787167f56dffcdc5b1a170ca72c344eb8981d5dd --- /dev/null +++ b/preinstallTTool/linux/TTool/doc/README_doc @@ -0,0 +1,6 @@ +TTool, an open-source UML / sysML toolkit for modeling embedded systems and procotols. +TTool is developed at Telecom ParisTech, http://ttool.telecom-paristech.fr/ +------------------------------------------------------------------------------- + +This directory may contain the documentation distributed with the toolkit. The most recent documentation is located at: +http://ttool.telecom-paristech.fr/ diff --git a/preinstallTTool/linux/TTool/executablecode/Makefile b/preinstallTTool/linux/TTool/executablecode/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..a044518bec3b82420c15f76176447a981fb583b2 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/Makefile @@ -0,0 +1,32 @@ +UNAME := $(shell uname -s) +CC = gcc +#CC = test2.sh +#CC = /packages/gcc_3.2.2/bin/g++32 +OPT = -O1 -pthread +# Solaris +#LOPT = -O1 -pthread -ldl -lnsl -lsocket +#Linux +LOPT_UNIX = -O1 -pthread -ldl -lrt +LOPT_MAC = -O1 -pthread -ldl + +DEBUG = -g +OTHER = -Wall +TRY = +CFLAGS = $(OPT) $(OTHER) $(TRY) +LFLAGS_MAC = $(LOPT_MAC) $(OTHER) $(TRY) +LFLAGS_UNIX = $(LOPT_UNIX) $(OTHER) $(TRY) +# CFLAGS = $(DEBUG) $(OTHER) +OBJDIR = lib + +MODULE = run +SRCS_generated_DIR = generated_src/ +include Makefile.src +SRCS_base = src/request.c src/message.c src/myerrors.c src/debug.c src/syncchannel.c src/asyncchannel.c src/request_manager.c src/random.c src/mytimelib.c src/tracemanager.c +SRCS_base_DIR = . +SRCS_base_DIRSRC = src/ +OBJS_executor = $(SRCS_base:%.c=lib/%.o) +OBJS = $(SRCS:%.c=lib/%.o) + +include Makefile.defs + +include Makefile.forsoclib diff --git a/preinstallTTool/linux/TTool/executablecode/Makefile.defs b/preinstallTTool/linux/TTool/executablecode/Makefile.defs new file mode 100644 index 0000000000000000000000000000000000000000..fa9276ff99651594a42f44ddcb827ffefe68c4c2 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/Makefile.defs @@ -0,0 +1,36 @@ +## Variable that points to SystemC installation path + + +INCDIR = -I. -I$(SRCS_base_DIR) -I$(SRCS_base_DIRSRC) -I$(SRCS_generated_DIR) +LIBDIR = -L. -L.. +LIBS = -lm $(EXTRA_LIBS) + +EXE = $(MODULE).x + +.SUFFIXES: .c .o .x + + +$(EXE): makedir $(OBJS) $(OBJS_executor) +ifeq ($(UNAME),Darwin) + $(CC) $(LFLAGS_MAC) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_executor) $(LIBS) 2>&1 | c++filt +endif +ifneq ($(UNAME),Darwin) + $(CC) $(LFLAGS_UNIX) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_executor) $(LIBS) 2>&1 | c++filt +endif + +makedir: + echo Making directories + mkdir -p ./lib + mkdir -p ./lib/$(SRCS_generated_DIR) + mkdir -p ./lib/$(SRCS_base_DIRSRC) + +$(OBJDIR)/%.o: $(SRCS_base_DIR)/%.c + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + + +clean: + rm -f $(OBJS_simulator) $(OBJS_executor) $(OBJS) *~ $(EXE) core + +ultraclean: clean + rm -f Makefile.deps + diff --git a/preinstallTTool/linux/TTool/executablecode/Makefile.forsoclib b/preinstallTTool/linux/TTool/executablecode/Makefile.forsoclib new file mode 100644 index 0000000000000000000000000000000000000000..bef60e8437a022103d41c56b304e617dd2757d84 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/Makefile.forsoclib @@ -0,0 +1,50 @@ +SOCLIB_CPU=ppc405 +MUTEKH_CPU=ppc +SOCLIB_CPU_COUNT=5 + +#SOCLIB_CPU=sparcv8 +#MUTEKH_CPU=sparc +#SOCLIB_CPU_COUNT=1 + +PATH+=/opt/mutekh/bin +export PATH + +updateruntime: + cp ~/TTool/executablecode/src/*.c ~/Prog/mutekh/libavatar/ + cp ~/TTool/executablecode/src/*.h ~/Prog/mutekh/libavatar/include/ + +updategeneratedcode: + cp ~/TTool/executableCode/generated_src/*.h ~/Prog/mutekh/examples/avatar + cp ~/TTool/executableCode/generated_src/*.c ~/Prog/mutekh/examples/avatar + cp ~/TTool/executableCode/Makefile.soclib ~/Prog/mutekh/examples/avatar/Makefile + +compilesoclib: + cd ~/Prog/mutekh; make CONF=examples/avatar/config BUILD=soclib-$(MUTEKH_CPU):pf-tutorial + +runsoclib: + echo "running soclib" + cd ~/Prog/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial; SOCLIB_GDB=S ./system.x $(SOCLIB_CPU):$(SOCLIB_CPU_COUNT) ~/Prog/mutekh/avatar-soclib-$(MUTEKH_CPU).out +allsoclib: updateruntime updategeneratedcode compilesoclib runsoclib + + +updateruntime_hw: + cp ~/TTool/executablecode/src_soclib/*.c ~/Prog/mutekh/libavatar/ + cp ~/TTool/executablecode/src_soclib/include/*.h ~/Prog/mutekh/libavatar/include/ + +updategeneratedcode_hw: +#DG 31.10. prendre version du code appli pour soclib materiel + cp ~/TTool/executablecode/generated_src_soclib/*.h ~/Prog/mutekh/examples/avatar +#DG 31.10. prendre version du code appli pour soclib materiel + cp ~/TTool/executablecode/generated_src_soclib/*.c ~/Prog/mutekh/examples/avatar + + cp ~/TTool/executableCode/Makefile.soclib ~/Prog/mutekh/examples/avatar/Makefile + +compilesoclib_hw: + cd ~/Prog/mutekh; make CONF=examples/avatar/config BUILD=soclib-$(MUTEKH_CPU):pf-tutorial + +#DG 31.10.2014 ici ajoute un make dans le repertoire de la plateforme materielle +runsoclib_hw: + echo "running soclib" + cd ~/Prog/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial; make; SOCLIB_GDB=S ./system.x $(SOCLIB_CPU):$(SOCLIB_CPU_COUNT) ~/Prog/mutekh/avatar-soclib-$(MUTEKH_CPU).out +allsoclib: updateruntime updategeneratedcode compilesoclib runsoclib + diff --git a/preinstallTTool/linux/TTool/executablecode/generated_src/README b/preinstallTTool/linux/TTool/executablecode/generated_src/README new file mode 100644 index 0000000000000000000000000000000000000000..d274fe577921101f8158c64ab520b72c133a8230 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/generated_src/README @@ -0,0 +1 @@ +This directory is meant to contain the code generated by TTool from AVATAR design models diff --git a/preinstallTTool/linux/TTool/executablecode/src/asyncchannel.c b/preinstallTTool/linux/TTool/executablecode/src/asyncchannel.c new file mode 100644 index 0000000000000000000000000000000000000000..e2ce2ac48a62b888eedc7940c74b1ae1f3953013 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/asyncchannel.c @@ -0,0 +1,56 @@ +#include <stdlib.h> + +#include "message.h" +#include "asyncchannel.h" +#include "myerrors.h" + + +asyncchannel *getNewAsyncchannel(char *outname, char *inname, int isBlocking, int maxNbOfMessages) { + asyncchannel * asyncch = (asyncchannel *)(malloc(sizeof(struct asyncchannel))); + if (asyncch == NULL) { + criticalError("Allocation of asyncchannel failed"); + } + asyncch->inname = inname; + asyncch->outname = outname; + asyncch->isBlocking = isBlocking; + asyncch->maxNbOfMessages = maxNbOfMessages; + + return asyncch; +} + +void destroyAsyncchannel(asyncchannel *asyncch) { + free(asyncch); +} + +message* getAndRemoveOldestMessageFromAsyncChannel(asyncchannel *channel) { + message *msg; + message *previous; + + if (channel->currentNbOfMessages == 0) { + return NULL; + } + + if (channel->currentNbOfMessages == 1) { + channel->currentNbOfMessages = 0; + msg = channel->pendingMessages; + channel->pendingMessages = NULL; + return msg; + } + + msg = channel->pendingMessages; + previous = msg; + while(msg->next != NULL) { + previous = msg; + msg = msg->next; + } + + channel->currentNbOfMessages = channel->currentNbOfMessages -1; + previous->next = NULL; + return msg; +} + +void addMessageToAsyncChannel(asyncchannel *channel, message *msg) { + msg->next = channel->pendingMessages; + channel->pendingMessages = msg; + channel->currentNbOfMessages = channel->currentNbOfMessages+1; +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/asyncchannel.h b/preinstallTTool/linux/TTool/executablecode/src/asyncchannel.h new file mode 100644 index 0000000000000000000000000000000000000000..8f812359dbd67311f37391807b883890ee163f04 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/asyncchannel.h @@ -0,0 +1,28 @@ +#ifndef ASYNCCHANNEL_H +#define ASYNCCHANNEL_H + +struct asyncchannel; + +#include "message.h" +#include "request.h" + + +struct asyncchannel { + char *outname; + char *inname; + int isBlocking; // In writing. Reading is always blocking + int maxNbOfMessages; // + struct request* outWaitQueue; + struct request* inWaitQueue; + message *pendingMessages; + int currentNbOfMessages; +}; + +typedef struct asyncchannel asyncchannel; + +asyncchannel *getNewAsyncchannel(char *inname, char *outname, int isBlocking, int maxNbOfMessages); +void destroyAsyncchannel(asyncchannel *syncch); +message* getAndRemoveOldestMessageFromAsyncChannel(asyncchannel *channel); +void addMessageToAsyncChannel(asyncchannel *channel, message *msg); + +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/debug.c b/preinstallTTool/linux/TTool/executablecode/src/debug.c new file mode 100644 index 0000000000000000000000000000000000000000..067d0a8c17e3861ce60191884c13041d9e88431b --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/debug.c @@ -0,0 +1,86 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#include "debug.h" + + +#define DEBUG_ON 1 +#define DEBUG_OFF 2 + +int debug = DEBUG_OFF; + +void activeDebug() { + debug = DEBUG_ON; +} + +void unactiveDebug() { + debug = DEBUG_OFF; +} + +void debugThreeInts(char *msg, int value1, int value2, int value3) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %d, %d, %d\n", msg, value1, value2, value3); + } +} + +void debugTwoInts(char *msg, int value1, int value2) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %d, %d\n", msg, value1, value2); + } +} + +void debugInt(char *msg, int value) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %d\n", msg, value); + } +} + +void debugLong(char *msg, long value) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %ld\n", msg, value); + } +} + +void debugMsg(char *msg) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s\n", msg); + } +} + +void debug2Msg(char *name, char *msg) { + if (debug == DEBUG_OFF) { + return; + } + + if ((name != NULL) && (msg != NULL)) { + printf("DT - %s -> %s\n", name, msg); + } +} + +void debugTime(char *msg, struct timespec *ts) { + if (debug == DEBUG_OFF) { + return; + } + printf("DT> (-------t------->) %s sec=%ld nsec=%ld\n", msg, ts->tv_sec, ts->tv_nsec); +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/debug.h b/preinstallTTool/linux/TTool/executablecode/src/debug.h new file mode 100644 index 0000000000000000000000000000000000000000..7e73f3ce91684420195a07eb365184b0629e74f3 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/debug.h @@ -0,0 +1,19 @@ + + +#ifndef DEBUG_H +#define DEBUG_H + +void activeDebug(); +void unactiveDebug(); + +void debugThreeInts(char *msg, int value1, int value2, int value3); +void debugTwoInts(char *msg, int value1, int value2); +void debugLong(char *msg, long value); +void debugInt(char *msg, int value); +void debugMsg(char *msg); +void debug2Msg(char *name, char* msg); +void debugTime(char* msg, struct timespec *ts); + +#endif + + diff --git a/preinstallTTool/linux/TTool/executablecode/src/defs.h b/preinstallTTool/linux/TTool/executablecode/src/defs.h new file mode 100644 index 0000000000000000000000000000000000000000..3b997bfdf885b560dc4fde8264e8b5026565de10 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/defs.h @@ -0,0 +1,9 @@ +#ifndef DEFS_H +#define DEFS_H + +#define bool int +#define true 1 +#define false 0 + + +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/message.c b/preinstallTTool/linux/TTool/executablecode/src/message.c new file mode 100644 index 0000000000000000000000000000000000000000..1153a882f51d93d8596621162f82278bc01d7158 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/message.c @@ -0,0 +1,59 @@ + +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> + +#include "message.h" +#include "myerrors.h" + +long __id_message = 0; +pthread_mutex_t __message_mutex; + + +void initMessages() { + if (pthread_mutex_init(&__message_mutex, NULL) < 0) { exit(-1);} +} + +long getMessageID() { + long tmp; + pthread_mutex_lock(&__message_mutex); + tmp = __id_message; + __id_message ++; + pthread_mutex_unlock(&__message_mutex); + return tmp; +} + +message *getNewMessageWithParams(int nbOfParams) { + + message *msg = (message *)(malloc(sizeof(struct message))); + if (msg == NULL) { + criticalError("Allocation of request failed"); + } + msg->nbOfParams = nbOfParams; + msg->params = (int *)(malloc(sizeof(int) * nbOfParams)); + msg->id = getMessageID(); + return msg; +} + +message *getNewMessage(int nbOfParams, int *params) { + + message *msg = (message *)(malloc(sizeof(struct message))); + if (msg == NULL) { + criticalError("Allocation of request failed"); + } + msg->nbOfParams = nbOfParams; + msg->params = params; + msg->id = getMessageID(); + return msg; +} + + + +void destroyMessageWithParams(message *msg) { + free(msg->params); + free(msg); +} + +void destroyMessage(message *msg) { + free(msg); +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/message.h b/preinstallTTool/linux/TTool/executablecode/src/message.h new file mode 100644 index 0000000000000000000000000000000000000000..700ed07d97f6ae925ceeb6c172238a2f4bd37680 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/message.h @@ -0,0 +1,22 @@ +#ifndef MESSAGE_H +#define MESSAGE_H + + +struct message { + struct message *next; + int nbOfParams; + int *params; + long id; +}; + +typedef struct message message; + +void initMessages(); +message *getNewMessageWithParams(int nbOfParams); +message *getNewMessage(int nbOfParams, int *params); +void destroyMessageWithParams(message *msg); +void destroyMessage(message *msg); + + + +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/myerrors.c b/preinstallTTool/linux/TTool/executablecode/src/myerrors.c new file mode 100644 index 0000000000000000000000000000000000000000..dfe16a1c469f6e11382dfae037b3d4ff89cf8c7b --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/myerrors.c @@ -0,0 +1,24 @@ +#include <stdlib.h> +#include <stdio.h> + +#include "myerrors.h" + + + + +void criticalErrorInt(char *msg, int value) { + if (msg != NULL) { + printf("\nCritical error: %s, %d\n", msg, value); + } + + exit(-1); +} + + +void criticalError(char *msg) { + if (msg != NULL) { + printf("\nCritical error: %s\n", msg); + } + + exit(-1); +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/myerrors.h b/preinstallTTool/linux/TTool/executablecode/src/myerrors.h new file mode 100644 index 0000000000000000000000000000000000000000..8300da3ccfd1b5f2efd2f3514a8f543409363003 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/myerrors.h @@ -0,0 +1,11 @@ + + +#ifndef MY_ERRORS_H +#define MY_ERRORS_H + +void criticalErrorInt(char *msg, int value); +void criticalError(char *msg); + +#endif + + diff --git a/preinstallTTool/linux/TTool/executablecode/src/mytimelib.c b/preinstallTTool/linux/TTool/executablecode/src/mytimelib.c new file mode 100644 index 0000000000000000000000000000000000000000..d39c07ea85c258ce227365364163ce1761038663 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/mytimelib.c @@ -0,0 +1,108 @@ +#include<time.h> + +#include "mytimelib.h" +#include "random.h" +#include "debug.h" + +#ifndef CLOCK_REALTIME +#define CLOCK_REALTIME + +int clock_gettime(struct timespec *ts) { + struct timeval tv; + gettimeofday(&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + return 0; +} + +int my_clock_gettime(struct timespec *tp) { + return clock_gettime(tp); +} + +#else + +int my_clock_gettime(struct timespec *tp) { + return clock_gettime(CLOCK_REALTIME, tp); +} + +#endif + + + +void addTime(struct timespec *src1, struct timespec *src2, struct timespec *dest) { + dest->tv_nsec = src1->tv_nsec + src2->tv_nsec; + dest->tv_sec = src1->tv_sec + src2->tv_sec; + if (dest->tv_nsec > 1000000000) { + dest->tv_sec = dest->tv_sec + (dest->tv_nsec / 1000000000); + dest->tv_nsec = dest->tv_nsec % 1000000000; + } +} + +void diffTime(struct timespec *src1, struct timespec *src2, struct timespec *dest) { + int diff = 0; + if (src1->tv_nsec > src2->tv_nsec) { + diff ++; + dest->tv_nsec = src2->tv_nsec - src1->tv_nsec + 1000000000; + } else { + dest->tv_nsec = src2->tv_nsec - src1->tv_nsec; + } + + dest->tv_sec = src2->tv_sec - src1->tv_sec - diff; +} + + + +int isBefore(struct timespec *src1, struct timespec *src2) { + if (src1->tv_sec > src2->tv_sec) { + return 0; + } + + if (src1->tv_sec < src2->tv_sec) { + return 1; + } + + if (src1->tv_nsec < src2->tv_nsec) { + return 1; + } + return 0; +} + +void minTime(struct timespec *src1, struct timespec *src2, struct timespec *dest) { + debugMsg("MIN TIME COMPUTATION"); + if (isBefore(src1,src2)) { + dest->tv_nsec = src1->tv_nsec; + dest->tv_sec = src1->tv_sec; + } else { + dest->tv_nsec = src2->tv_nsec; + dest->tv_sec = src2->tv_sec; + } + +} + + +void delayToTimeSpec(struct timespec *ts, long delay) { + ts->tv_nsec = (delay % 1000000)*1000; + ts->tv_sec = (delay / 1000000); +} + +void waitFor(long minDelay, long maxDelay) { + struct timespec tssrc; + struct timespec tsret; + int delay; + + + + debugMsg("Computing random delay"); + //debugLong("Min delay", minDelay); + //debugLong("Max delay", maxDelay); + delay = computeLongRandom(minDelay, maxDelay); + + debugLong("Random delay=", delay); + + delayToTimeSpec(&tssrc, delay); + + debugLong("............. waiting For", delay); + nanosleep(&tssrc, &tsret); + debugLong("............. waiting Done for: ", delay); +} + diff --git a/preinstallTTool/linux/TTool/executablecode/src/mytimelib.h b/preinstallTTool/linux/TTool/executablecode/src/mytimelib.h new file mode 100644 index 0000000000000000000000000000000000000000..76ed5d22fcd7cf9a2750cf2a9726f5cdb89e48f2 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/mytimelib.h @@ -0,0 +1,19 @@ +#ifndef MYTIMELIB_H +#define MYTIMELIB_H + +#include <time.h> +#include <sys/time.h> + + + +// in usec + +int my_clock_gettime(struct timespec *tp); +void addTime(struct timespec *src1, struct timespec *src2, struct timespec *dest); +void diffTime(struct timespec *src1, struct timespec *src2, struct timespec *dest); +int isBefore(struct timespec *src1, struct timespec *src2); +void minTime(struct timespec *src1, struct timespec *src2, struct timespec *dest); +void delayToTimeSpec(struct timespec *ts, long delay); +extern void waitFor(long minDelay, long maxDelay); + +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/random.c b/preinstallTTool/linux/TTool/executablecode/src/random.c new file mode 100644 index 0000000000000000000000000000000000000000..b4bbddb19ac1e4a51bf5c0205aab571a7580dd32 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/random.c @@ -0,0 +1,43 @@ + +#include <stdlib.h> +#include <unistd.h> +#include <time.h> +#include <limits.h> + +#include "random.h" +#include "debug.h" +#include <math.h> + +#include "mytimelib.h" + +int computeRandom(int min, int max) { + if (min == max) { + return min; + } + return (rand() % (max - min)) + min; +} + +long computeLongRandom(long min, long max) { + + if (min == max) { + return min; + } + + + long rand0 = (long)rand(); + long rand1 = rand0 % (max - min); + //debugLong("min=", min); + //debugLong("max=", max); + //debugLong("rand0", rand0); + //debugLong("rand1", rand1); + //debugLong("Random long", rand1 + min); + return rand1 + min; +} + +void initRandom() { + struct timespec ts; + + my_clock_gettime(&ts); + + srand((int)(ts.tv_nsec)); +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/random.h b/preinstallTTool/linux/TTool/executablecode/src/random.h new file mode 100644 index 0000000000000000000000000000000000000000..ecff7cb43cb9d3c38fd390243ad0cbd186fead97 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/random.h @@ -0,0 +1,7 @@ +#ifndef RANDOM_H +#define RANDOM_H + +extern void initRandom(); +extern int computeRandom(int min, int max); +extern long computeLongRandom(long min, long max); +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/request.c b/preinstallTTool/linux/TTool/executablecode/src/request.c new file mode 100644 index 0000000000000000000000000000000000000000..af1231c61b71a7aab28063dfcf5eefc9faabf6b5 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/request.c @@ -0,0 +1,271 @@ + +#include <stdlib.h> +#include <unistd.h> + +#include "request.h" +#include "mytimelib.h" +#include "myerrors.h" +#include "random.h" +#include "debug.h" + + +request *getNewRequest(int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params) { + request *req = (request *)(malloc(sizeof(struct request))); + + if (req == NULL) { + criticalError("Allocation of request failed"); + } + + makeNewRequest(req, ID, type, hasDelay, minDelay, maxDelay, nbOfParams, params); + return req; +} + + +// Delays are in microseconds +void makeNewRequest(request *req, int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params) { + long delay; + int i; + + req->next = NULL; + req->listOfRequests = NULL; + req->nextRequestInList = NULL; + + req->type = type; + req->ID = ID; + req->hasDelay = hasDelay; + + if (req->hasDelay > 0) { + delay = computeLongRandom(minDelay, maxDelay); + delayToTimeSpec(&(req->delay), delay); + } + + req->selected = 0; + req->nbOfParams = nbOfParams; + req->params = params; + + req->alreadyPending = 0; + req->delayElapsed = 0; + + req->relatedRequest = NULL; + + if (type == SEND_ASYNC_REQUEST) { + // Must create a new message + req->msg = getNewMessageWithParams(nbOfParams); + for(i=0; i<nbOfParams; i++) { + req->msg->params[i] = *(params[i]); + } + } + +} + + + + +void destroyRequest(request *req) { + free((void *)req); +} + +int isRequestSelected(request *req) { + return req->selected; +} + +int nbOfRequests(setOfRequests *list) { + int cpt = 0; + request *req; + + req = list->head; + + while(req != NULL) { + cpt ++; + req = req->nextRequestInList; + } + + return cpt; +} + +request *getRequestAtIndex(setOfRequests *list, int index) { + int cpt = 0; + request * req = list->head; + + while(cpt < index) { + req = req->nextRequestInList; + cpt ++; + } + + return req; + +} + + +request * addToRequestQueue(request *list, request *requestToAdd) { + request *origin = list; + + if (list == NULL) { + return requestToAdd; + } + + while(list->next != NULL) { + list = list->next; + } + + list->next = requestToAdd; + + requestToAdd->next = NULL; + + return origin; +} + +request * removeRequestFromList(request *list, request *requestToRemove) { + request *origin = list; + + if (list == requestToRemove) { + return list->next; + } + + + while(list->next != requestToRemove) { + list = list->next; + } + + list->next = requestToRemove->next; + + return origin; +} + + +void copyParameters(request *src, request *dst) { + int i; + for(i=0; i<dst->nbOfParams; i++) { + *(dst->params[i]) = *(src->params[i]); + } +} + + +void clearListOfRequests(setOfRequests *list) { + list->head = NULL; +} + +setOfRequests *newListOfRequests(pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex) { + setOfRequests *list = (setOfRequests *)(malloc(sizeof(setOfRequests))); + list->head = NULL; + list->wakeupCondition = wakeupCondition; + list->mutex = mutex; + + return list; +} + +void fillListOfRequests(setOfRequests *list, char *name, pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex) { + list->head = NULL; + list->owner = name; + list->wakeupCondition = wakeupCondition; + list->mutex = mutex; +} + + +void addRequestToList(setOfRequests *list, request* req) { + request *tmpreq; + + if (list == NULL) { + criticalError("NULL List in addRequestToList"); + } + + if (req == NULL) { + criticalError("NULL req in addRequestToList"); + } + + req->listOfRequests = list; + + if (list->head == NULL) { + list->head = req; + req->nextRequestInList = NULL; + return; + } + + tmpreq = list->head; + while(tmpreq->nextRequestInList != NULL) { + tmpreq = tmpreq->nextRequestInList; + } + + tmpreq->nextRequestInList = req; + req->nextRequestInList = NULL; +} + +void removeAllPendingRequestsFromPendingLists(request *req, int apartThisOne) { + setOfRequests *list = req->listOfRequests; + request *reqtmp; + + if (list == NULL) { + return; + } + + reqtmp = list->head; + + while(reqtmp != NULL) { + debugInt("Considering request of type", reqtmp->type); + if (reqtmp->alreadyPending) { + if (reqtmp->type == RECEIVE_SYNC_REQUEST) { + debugMsg("Removing send sync request from inWaitQueue"); + reqtmp->syncChannel->inWaitQueue = removeRequestFromList(reqtmp->syncChannel->inWaitQueue, reqtmp); + debugMsg("done"); + } + + if (reqtmp->type == SEND_SYNC_REQUEST) { + debugMsg("Removing receive sync request from outWaitQueue"); + reqtmp->syncChannel->outWaitQueue = removeRequestFromList(reqtmp->syncChannel->outWaitQueue, reqtmp); + debugMsg("done"); + } + + if (reqtmp->type == RECEIVE_BROADCAST_REQUEST) { + debugMsg("Removing broadcast receive request from inWaitQueue"); + reqtmp->syncChannel->inWaitQueue = removeRequestFromList(reqtmp->syncChannel->inWaitQueue, reqtmp); + debugMsg("done"); + } + } + reqtmp = reqtmp->nextRequestInList; + } +} + + +// Identical means belonging to the same ListOfRequest +// Returns the identical request if found, otherwise, null +request *hasIdenticalRequestInListOfSelectedRequests(request *req, request *list) { + + while(list != NULL) { + if (list->listOfRequests == req->listOfRequests) { + return list; + } + list = list->relatedRequest; + } + + return NULL; +} + +request* replaceInListOfSelectedRequests(request *oldRequest, request *newRequest, request *list) { + request *head = list; + + if (list == oldRequest) { + newRequest->relatedRequest = oldRequest->relatedRequest; + return newRequest; + } + + //list=list->relatedRequest; + while(list->relatedRequest != oldRequest) { + list = list->relatedRequest; + } + + list->relatedRequest = newRequest; + newRequest->relatedRequest = oldRequest->relatedRequest; + + return head; +} + + +int nbOfRelatedRequests(request *list) { + int cpt = 0; + while(list->relatedRequest != NULL) { + cpt ++; + list = list->relatedRequest; + } + + return cpt; +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/request.h b/preinstallTTool/linux/TTool/executablecode/src/request.h new file mode 100644 index 0000000000000000000000000000000000000000..00b93c8e5a007e2eecf6bde40417cdfb9457edc2 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/request.h @@ -0,0 +1,89 @@ +#ifndef REQUEST_H +#define REQUEST_H + +#include <time.h> +#include <pthread.h> + +struct request; + +#include "syncchannel.h" +#include "asyncchannel.h" +#include "message.h" + +#define SEND_SYNC_REQUEST 0 +#define RECEIVE_SYNC_REQUEST 2 +#define SEND_ASYNC_REQUEST 4 +#define RECEIVE_ASYNC_REQUEST 6 +#define DELAY 8 +#define IMMEDIATE 10 +#define SEND_BROADCAST_REQUEST 12 +#define RECEIVE_BROADCAST_REQUEST 14 + +typedef struct timespec timespec; + +struct setOfRequests { + char* owner; + struct request *head; + timespec startTime; + timespec completionTime; + pthread_cond_t *wakeupCondition; + pthread_mutex_t *mutex; + + int hasATimeRequest; // Means that at least on request of the list hasn't completed yet its time delay + timespec minTimeToWait; + struct request *selectedRequest; +}; + +typedef struct setOfRequests setOfRequests; + +struct request { + struct request *next; + struct setOfRequests* listOfRequests; + struct request* nextRequestInList; + struct request* relatedRequest; // For synchro and broadcast + struct syncchannel *syncChannel; + struct asyncchannel *asyncChannel; + + int type; + int ID; + int hasDelay;; + timespec delay; + int nbOfParams; // synchronous com. + int **params; // synchronous com. + message *msg; // Asynchronous comm. + + + // Filled by the request manager + int executable; + int selected; + int alreadyPending; // Whether it has been taken into account for execution or not + int delayElapsed; + timespec myStartTime; // Time at which the delay has expired +}; + +typedef struct request request; + +void makeNewRequest(request *req, int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params); +request *getNewRequest(int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params); +void destroyRequest(request *req); +extern int isRequestSelected(request *req); + +int nbOfRequests(setOfRequests *list); +request *getRequestAtIndex(setOfRequests *list, int index); + +request * addToRequestQueue(request *list, request *requestToAdd); +request * removeRequestFromList(request *list, request *requestToRemove); + +void copyParameters(request *src, request *dst); + +setOfRequests *newListOfRequests(pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex); +void addRequestToList(setOfRequests *list, request* req); +void clearListOfRequests(setOfRequests *list); +void fillListOfRequests(setOfRequests *list, char *name, pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex); + +void removeAllPendingRequestsFromPendingLists(request *req, int apartThisOne); +request *hasIdenticalRequestInListOfSelectedRequests(request *req, request *list); +request* replaceInListOfSelectedRequests(request *oldRequest, request *newRequest, request *list); +int nbOfRelatedRequests(request *list); + +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/request_manager.c b/preinstallTTool/linux/TTool/executablecode/src/request_manager.c new file mode 100644 index 0000000000000000000000000000000000000000..e1c39ba777944c41c018918f4fa7594eaf3f96b5 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/request_manager.c @@ -0,0 +1,570 @@ +#include <stdlib.h> +#include <pthread.h> +#include <time.h> + +#include "request_manager.h" +#include "request.h" +#include "myerrors.h" +#include "debug.h" +#include "mytimelib.h" +#include "random.h" +#include "asyncchannel.h" +#include "tracemanager.h" + + + +void executeSendSyncTransaction(request *req) { + int cpt; + request *selectedReq; + + // At least one transaction available -> must select one randomly + // First: count how many of them are available + // Then, select one + // Broadcast the new condition! + + cpt = 0; + request* currentReq = req->syncChannel->inWaitQueue; + debugMsg("Execute send sync tr"); + + while(currentReq != NULL) { + cpt ++; + currentReq = currentReq->next; + } + + cpt = random() % cpt; + + // Head of the list? + selectedReq = req->syncChannel->inWaitQueue; + while (cpt > 0) { + selectedReq = selectedReq->next; + cpt --; + } + + // Remove all related request from list requests + //req->syncChannel->inWaitQueue = removeRequestFromList(req->syncChannel->inWaitQueue, selectedReq); + debugMsg("Setting related request"); + req->relatedRequest = selectedReq; + + // Select the selected request, and notify the information + selectedReq->selected = 1; + selectedReq->listOfRequests->selectedRequest = selectedReq; + + // Handle parameters + copyParameters(req, selectedReq); + + debugMsg("Signaling"); + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + + traceSynchroRequest(req, selectedReq); +} + +void executeReceiveSyncTransaction(request *req) { + int cpt; + request *selectedReq; + + // At least one transaction available -> must select one randomly + // First: count how many of them are available + // Then, select one + // Broadcast the new condition! + + request* currentReq = req->syncChannel->outWaitQueue; + cpt = 0; + debugMsg("Execute receive sync tr"); + + while(currentReq != NULL) { + cpt ++; + //debugInt("cpt", cpt); + currentReq = currentReq->next; + } + cpt = random() % cpt; + selectedReq = req->syncChannel->outWaitQueue; + while (cpt > 0) { + selectedReq = selectedReq->next; + cpt --; + } + + //req->syncChannel->outWaitQueue = removeRequestFromList(req->syncChannel->outWaitQueue, selectedReq); + debugMsg("Setting related request"); + req->relatedRequest = selectedReq; + + // Select the request, and notify the information in the channel + selectedReq->selected = 1; + selectedReq->listOfRequests->selectedRequest = selectedReq; + + // Handle parameters + copyParameters(selectedReq, req); + + debugMsg("Signaling"); + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + + traceSynchroRequest(selectedReq, req); +} + + +void executeSendAsyncTransaction(request *req) { + request *selectedReq; + + // Full FIFO? + if (req->asyncChannel->currentNbOfMessages == req->asyncChannel->maxNbOfMessages) { + // Must remove the oldest message + getAndRemoveOldestMessageFromAsyncChannel(req->asyncChannel); + } + + addMessageToAsyncChannel(req->asyncChannel, req->msg); + + debugMsg("Signaling async write to all requests waiting "); + selectedReq = req->asyncChannel->inWaitQueue; + while (selectedReq != NULL) { + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + selectedReq = selectedReq->next; + } + debugMsg("Signaling done"); + + traceAsynchronousSendRequest(req); +} + +void executeReceiveAsyncTransaction(request *req) { + int i; + request *selectedReq; + + req->msg = getAndRemoveOldestMessageFromAsyncChannel(req->asyncChannel); + + selectedReq = req->asyncChannel->outWaitQueue; + + // Must recopy parameters + for(i=0; i<req->nbOfParams; i++) { + *(req->params[i]) = req->msg->params[i]; + } + + traceAsynchronousReceiveRequest(req); + + // unallocate message + destroyMessageWithParams(req->msg); + + debugMsg("Signaling async read to all requests waiting "); + while (selectedReq != NULL) { + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + selectedReq = selectedReq->next; + } + debugMsg("Signaling done"); +} + + +void executeSendBroadcastTransaction(request *req) { + int cpt; + request *tmpreq; + + // At least one transaction available -> must select all of them + // but at most one per task + // Then, broadcast the new condition! + + request* currentReq = req->syncChannel->inWaitQueue; + request* currentLastReq = req; + debugMsg("Execute broadcast sync tr"); + + + while(currentReq != NULL) { + tmpreq = hasIdenticalRequestInListOfSelectedRequests(currentReq, req->relatedRequest); + if (tmpreq != NULL) { + // Must select one of the two + // If =1, replace, otherwise, just do nothing + cpt = random() % 2; + if (cpt == 1) { + debugMsg("Replacing broadcast request"); + req->relatedRequest = replaceInListOfSelectedRequests(tmpreq, currentReq, req->relatedRequest); + currentReq->listOfRequests->selectedRequest = currentReq; + copyParameters(req, currentReq); + currentReq->selected = 1; + currentLastReq = req; + while(currentLastReq->relatedRequest != NULL) { + currentLastReq = currentLastReq->relatedRequest; + } + } + } else { + currentLastReq->relatedRequest = currentReq; + currentReq->relatedRequest = NULL; + currentReq->selected = 1; + currentReq->listOfRequests->selectedRequest = currentReq; + copyParameters(req, currentReq); + currentLastReq = currentReq; + } + + currentReq = currentReq->next; + + debugInt("Nb of requests selected:", nbOfRelatedRequests(req)); + } + + + debugMsg("Signaling"); + currentReq = req->relatedRequest; + cpt = 0; + while(currentReq != NULL) { + cpt ++; + pthread_cond_signal(currentReq->listOfRequests->wakeupCondition); + traceSynchroRequest(req, currentReq); + currentReq = currentReq->relatedRequest; + } + + debugInt("NUMBER of broadcast Requests", cpt); +} + + +int executable(setOfRequests *list, int nb) { + int cpt = 0; + //int index = 0; + request *req = list->head; + timespec ts; + int tsDone = 0; + + debugMsg("Starting loop"); + + list->hasATimeRequest = 0; + + while(req != NULL) { + if (!(req->delayElapsed)) { + if (req->hasDelay) { + // Is the delay elapsed??? + debugTime("begin time of list of request", &list->startTime); + debugTime("start time of this request", &req->myStartTime); + if (tsDone == 0) { + my_clock_gettime(&ts); + debugTime("Current time", &ts); + tsDone = 1; + } + + if (isBefore(&ts, &(req->myStartTime)) == 1) { + // Delay not elapsed + debugMsg("---------t--------> delay NOT elapsed"); + if (list->hasATimeRequest == 0) { + list->hasATimeRequest = 1; + list->minTimeToWait.tv_nsec = req->myStartTime.tv_nsec; + list->minTimeToWait.tv_sec = req->myStartTime.tv_sec; + } else { + minTime(&(req->myStartTime), &(list->minTimeToWait),&(list->minTimeToWait)); + } + } else { + // Delay elapsed + debugMsg("---------t--------> delay elapsed"); + req->delayElapsed = 1; + } + } else { + req->delayElapsed = 1; + } + } + req = req->nextRequestInList; + } + + req = list->head; + while((req != NULL) && (cpt < nb)) { + req->executable = 0; + if (req->delayElapsed) { + if (req->type == SEND_SYNC_REQUEST) { + debugMsg("Send sync"); + + if (req->syncChannel->inWaitQueue != NULL) { + debugMsg("Send sync executable"); + req->executable = 1; + cpt ++; + } else { + debugMsg("Send sync not executable"); + } + //index ++; + } + + if (req->type == RECEIVE_SYNC_REQUEST) { + debugMsg("receive sync"); + if (req->syncChannel->outWaitQueue != NULL) { + req->executable = 1; + cpt ++; + } + //index ++; + } + + if (req->type == SEND_ASYNC_REQUEST) { + debugMsg("Send async"); + + if (!(req->asyncChannel->isBlocking)) { + // Can always add a message -> executable + debugMsg("Send async executable since non blocking"); + req->executable = 1; + cpt ++; + + //blocking case ... channel full? + } else { + if (req->asyncChannel->currentNbOfMessages < req->asyncChannel->maxNbOfMessages) { + // Not full! + debugMsg("Send async executable since channel not full"); + req->executable = 1; + cpt ++; + } else { + debugMsg("Send async not executable: full, and channel is blocking"); + } + } + } + + if (req->type == RECEIVE_ASYNC_REQUEST) { + debugMsg("receive async"); + if (req->asyncChannel->currentNbOfMessages >0) { + debugMsg("Receive async executable: not empty"); + req->executable = 1; + cpt ++; + } else { + debugMsg("Receive async not executable: empty"); + } + //index ++; + } + + + if (req->type == SEND_BROADCAST_REQUEST) { + debugMsg("send broadcast"); + req->executable = 1; + cpt ++; + } + + if (req->type == RECEIVE_BROADCAST_REQUEST) { + debugMsg("receive broadcast"); + // A receive broadcast is never executable + req->executable = 0; + //index ++; + } + + + + + if (req->type == IMMEDIATE) { + debugMsg("immediate"); + req->executable = 1; + cpt ++; + } + } + + req = req->nextRequestInList; + + } + + return cpt; +} + +void private__makeRequestPending(setOfRequests *list) { + request *req = list->head; + while(req != NULL) { + if ((req->delayElapsed) && (!(req->alreadyPending))) { + if (req->type == SEND_SYNC_REQUEST) { + debugMsg("Adding pending request in outWaitqueue"); + req->syncChannel->outWaitQueue = addToRequestQueue(req->syncChannel->outWaitQueue, req); + req->alreadyPending = 1; + } + + if (req->type == RECEIVE_SYNC_REQUEST) { + debugMsg("Adding pending request in inWaitqueue"); + req->alreadyPending = 1; + req->syncChannel->inWaitQueue = addToRequestQueue(req->syncChannel->inWaitQueue, req); + } + + if (req->type == SEND_ASYNC_REQUEST) { + debugMsg("Adding pending request in outWaitqueue"); + req->asyncChannel->outWaitQueue = addToRequestQueue(req->asyncChannel->outWaitQueue, req); + req->alreadyPending = 1; + } + + if (req->type == RECEIVE_ASYNC_REQUEST) { + debugMsg("Adding pending request in inWaitqueue"); + req->alreadyPending = 1; + req->asyncChannel->inWaitQueue = addToRequestQueue(req->asyncChannel->inWaitQueue, req); + } + + if (req->type == RECEIVE_BROADCAST_REQUEST) { + debugMsg("Adding pending broadcast request in inWaitqueue"); + req->alreadyPending = 1; + req->syncChannel->inWaitQueue = addToRequestQueue(req->syncChannel->inWaitQueue, req); + } + + if (req->type == SEND_BROADCAST_REQUEST) { + debugMsg("Adding pending broadcast request in outWaitqueue"); + req->alreadyPending = 1; + req->syncChannel->outWaitQueue = addToRequestQueue(req->syncChannel->outWaitQueue, req); + } + + } + + req = req->nextRequestInList; + } +} + +void private__makeRequest(request *req) { + if (req->type == SEND_SYNC_REQUEST) { + executeSendSyncTransaction(req); + } + + if (req->type == RECEIVE_SYNC_REQUEST) { + executeReceiveSyncTransaction(req); + } + + if (req->type == SEND_ASYNC_REQUEST) { + executeSendAsyncTransaction(req); + } + + if (req->type == RECEIVE_ASYNC_REQUEST) { + executeReceiveAsyncTransaction(req); + } + + if (req->type == SEND_BROADCAST_REQUEST) { + executeSendBroadcastTransaction(req); + } + + // IMMEDIATE: Nothing to do + + // In all cases: remove other requests of the same list from their pending form + debugMsg("Removing original req"); + removeAllPendingRequestsFromPendingLists(req, 1); + removeAllPendingRequestsFromPendingListsRelatedRequests(req); + /*if (req->relatedRequest != NULL) { + debugMsg("Removing related req"); + removeAllPendingRequestsFromPendingLists(req->relatedRequest, 0); + }*/ + +} + +void removeAllPendingRequestsFromPendingListsRelatedRequests(request *req) { + if (req->relatedRequest != NULL) { + debugMsg("Removing related req"); + removeAllPendingRequestsFromPendingLists(req->relatedRequest, 0); + // Recursive call + removeAllPendingRequestsFromPendingListsRelatedRequests(req->relatedRequest); + } +} + + +request *private__executeRequests0(setOfRequests *list, int nb) { + int howMany, found; + int selectedIndex, realIndex; + request *selectedReq; + request *req; + + // Compute which requests can be executed + debugMsg("Counting requests"); + howMany = executable(list, nb); + + debugInt("Counting requests=", howMany); + + if (howMany == 0) { + debugMsg("No pending requests"); + // Must make them pending + + private__makeRequestPending(list); + + return NULL; + } + + debugInt("At least one pending request is executable", howMany); + + + // Select a request + req = list->head; + selectedIndex = (rand() % howMany)+1; + debugInt("selectedIndex=", selectedIndex); + realIndex = 0; + found = 0; + while(req != NULL) { + if (req->executable == 1) { + found ++; + if (found == selectedIndex) { + break; + } + } + realIndex ++; + req = req->nextRequestInList; + } + + debugInt("Getting request at index", realIndex); + selectedReq = getRequestAtIndex(list, realIndex); + selectedReq->selected = 1; + selectedReq->listOfRequests->selectedRequest = selectedReq; + + debugInt("Selected request of type", selectedReq->type); + + // Execute that request + private__makeRequest(selectedReq); + + return selectedReq; +} + + +request *private__executeRequests(setOfRequests *list) { + // Is a request already selected? + + if (list->selectedRequest != NULL) { + return list->selectedRequest; + } + + debugMsg("No request selected -> looking for one!"); + + return private__executeRequests0(list, nbOfRequests(list)); +} + + + + +request *executeOneRequest(setOfRequests *list, request *req) { + req->nextRequestInList = NULL; + req->listOfRequests = list; + list->head = req; + return executeListOfRequests(list); +} + + +void setLocalStartTime(setOfRequests *list) { + request *req = list->head; + + while(req != NULL) { + if (req->hasDelay) { + req->delayElapsed = 0; + addTime(&(list->startTime), &(req->delay), &(req->myStartTime)); + debug2Msg(list->owner, " -----t------>: Request with delay"); + } else { + req->delayElapsed = 1; + req->myStartTime.tv_nsec = list->startTime.tv_nsec; + req->myStartTime.tv_sec = list->startTime.tv_sec; + } + req = req->nextRequestInList; + } +} + + +// Return the executed request +request *executeListOfRequests(setOfRequests *list) { + request *req; + + my_clock_gettime(&list->startTime); + list->selectedRequest = NULL; + setLocalStartTime(list); + + // Try to find a request that could be executed + debug2Msg(list->owner, "Locking mutex"); + pthread_mutex_lock(list->mutex); + debug2Msg(list->owner, "Mutex locked"); + + debug2Msg(list->owner, "Going to execute request"); + + while((req = private__executeRequests(list)) == NULL) { + debug2Msg(list->owner, "Waiting for request!"); + if (list->hasATimeRequest == 1) { + debug2Msg(list->owner, "Waiting for a request and at most for a given time"); + debugTime("Min time to wait=", &(list->minTimeToWait)); + pthread_cond_timedwait(list->wakeupCondition, list->mutex, &(list->minTimeToWait)); + } else { + debug2Msg(list->owner, "Releasing mutex"); + pthread_cond_wait(list->wakeupCondition, list->mutex); + } + debug2Msg(list->owner, "Waking up for requests! -> getting mutex"); + } + + debug2Msg(list->owner, "Request selected!"); + + my_clock_gettime(&list->completionTime); + + pthread_mutex_unlock(list->mutex); + debug2Msg(list->owner, "Mutex unlocked"); + return req; +} + diff --git a/preinstallTTool/linux/TTool/executablecode/src/request_manager.h b/preinstallTTool/linux/TTool/executablecode/src/request_manager.h new file mode 100644 index 0000000000000000000000000000000000000000..e2ae0f800025b9394d6488c012b47f7396aaf609 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/request_manager.h @@ -0,0 +1,14 @@ +#ifndef REQUEST_MANAGER_H +#define REQUEST_MANAGER_H + + +#include "request.h" +#include "syncchannel.h" + + +request *executeOneRequest(setOfRequests *list, request *req); +request *executeListOfRequests(setOfRequests *list); + +void removeAllPendingRequestsFromPendingListsRelatedRequests(request *req); + +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/syncchannel.c b/preinstallTTool/linux/TTool/executablecode/src/syncchannel.c new file mode 100644 index 0000000000000000000000000000000000000000..e1c90875f2574a15318facbda32b27f918f82592 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/syncchannel.c @@ -0,0 +1,41 @@ +#include <stdlib.h> + + +#include "syncchannel.h" +#include "request.h" +#include "myerrors.h" +#include "debug.h" + + +syncchannel *getNewSyncchannel(char *outname, char *inname) { + syncchannel * syncch = (syncchannel *)(malloc(sizeof(struct syncchannel))); + if (syncch == NULL) { + criticalError("Allocation of request failed"); + } + syncch->inname = inname; + syncch->outname = outname; + syncch->inWaitQueue = NULL; + syncch->outWaitQueue = NULL; + syncch->isBroadcast = false; + return syncch; +} + +void setBroadcast(syncchannel *syncch, bool b) { + syncch->isBroadcast = b; +} + + + +/*request *makeNewSendSync(int hasDelay, long delay, int nbOfParams, int *params[]) { + request *req = getNewRequest(SEND_SYNC_REQUEST, hasDelay, delay, nbOfParams, params); + return req; +} + +request *makeNewReceiveSync(int hasDelay, long delay, int nbOfParams, int *params[]) { + request *req = getNewRequest(RECEIVE_SYNC_REQUEST, hasDelay, delay, nbOfParams, params); + return req; + }*/ + +void destroySyncchannel(syncchannel *syncch) { + free(syncch); +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/syncchannel.h b/preinstallTTool/linux/TTool/executablecode/src/syncchannel.h new file mode 100644 index 0000000000000000000000000000000000000000..6f4f92de5531f14c36b7d520992eb3decb305cdd --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/syncchannel.h @@ -0,0 +1,27 @@ +#ifndef SYNCCHANNEL_H +#define SYNCCHANNEL_H + +struct syncchannel; + +#include "request.h" +#include "defs.h" + +struct syncchannel { + char *outname; + char *inname; + struct request* inWaitQueue; + struct request* outWaitQueue; + bool isBroadcast; +}; + +typedef struct syncchannel syncchannel; + + +void setBroadcast(syncchannel *syncch, bool b); +syncchannel *getNewSyncchannel(char *inname, char *outname); +//request *makeNewSendSync(int hasDelay, long delay, int nbOfParams, int *params[]); +//request *makeNewReceiveSync(int hasDelay, long delay, int nbOfParams, int *params[]); +void destroySyncchannel(syncchannel *syncch); + + +#endif diff --git a/preinstallTTool/linux/TTool/executablecode/src/tracemanager.c b/preinstallTTool/linux/TTool/executablecode/src/tracemanager.c new file mode 100644 index 0000000000000000000000000000000000000000..fda3a0db1c76a9861708dd422c2cea7f180688b0 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/tracemanager.c @@ -0,0 +1,304 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#include "tracemanager.h" +#include "debug.h" +#include "mytimelib.h" + + +#define TRACE_OFF 0 +#define TRACE_IN_FILE 1 +#define TRACE_IN_CONSOLE 2 + +#define TRACE_FILE_NAME "Trace.txt" + + +pthread_mutex_t __traceMutex; + +int trace = TRACE_OFF; +int id = 0; + +FILE *file; + +struct timespec begints; + + +void addInfo(char *dest, char *info) { + //char s1[10]; + long tmp; + //long tmp1; + //int i; + struct timespec ts, ts1; + my_clock_gettime(&ts); + + debugMsg("DIFF TIME"); + diffTime(&begints, &ts, &ts1); + + tmp = ts1.tv_nsec; + + if (tmp < 0) { + tmp = -tmp; + } + + /*tmp1 = 100000000; + + for(i=0; i<9; i++) { + s1[i] = 48 + (tmp / tmp1); + tmp = tmp % tmp1; + tmp1 = tmp1 / 10; + } + s1[9] = '\0';*/ + + /* s1 -> tmp */ + sprintf(dest, "#%d time=%ld.%09ld %s", id, ts1.tv_sec, tmp, info); + id ++; +} + + +void writeInTrace(char *info) { + pthread_mutex_lock(&__traceMutex); + char s[CHAR_ALLOC_SIZE]; + addInfo(s, info); + //printf("Write in file\n"); + switch(trace){ + case TRACE_IN_FILE: + if (file != NULL) { + debug2Msg("Saving in file", s); + fprintf(file, s); + fflush(file); + } + break; + case TRACE_IN_CONSOLE: + printf("%s\n", s); + break; + } + + pthread_mutex_unlock(&__traceMutex); +} + + +void activeTracingInFile(char *fileName) { + char *name; + trace = TRACE_IN_FILE; + my_clock_gettime(&begints); + if (fileName == NULL) { + name = TRACE_FILE_NAME; + } else { + name = fileName; + } + file = fopen(name,"w"); + + /* Initializing mutex */ + if (pthread_mutex_init(&__traceMutex, NULL) < 0) { exit(-1);} +} + +void activeTracingInConsole() { + trace = TRACE_IN_CONSOLE; + my_clock_gettime(&begints); + + /* Initializing mutex */ + if (pthread_mutex_init(&__traceMutex, NULL) < 0) { exit(-1);} +} + +void unactiveTracing() { + trace = TRACE_OFF; +} + + +void traceStateEntering(char *myname, char *statename) { + char s[CHAR_ALLOC_SIZE]; + + debugMsg("Trace function"); + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=state_entering state=%s\n", myname, statename); + + // Saving trace + writeInTrace(s); +} + +void traceFunctionCall(char *block, char *func, char *params) { + char s[CHAR_ALLOC_SIZE]; + + debugMsg("Trace function"); + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=function_call func=%s parameters=%s\n", block, func, params); + + // Saving trace + writeInTrace(s); +} + + +// type=0: int type = 1:bool +void traceVariableModification(char *block, char *var, int value, int type) { + char s[CHAR_ALLOC_SIZE]; + debugMsg("Trace variable modification"); + + if (trace == TRACE_OFF) { + return; + } + + + if (type == 0) { + sprintf(s, "block=%s type=variable_modification variable=%s setTo=%d\n", block, var, value); + } + + if (type == 1) { + if (value == 0) { + sprintf(s, "block=%s type=variable_modification variable=%s setTo=false\n", block, var); + } else { + sprintf(s, "block=%s type=variable_modification variable=%s setTo=true\n", block, var); + } + } + + // Saving trace + writeInTrace(s); + +} + +void traceSynchroRequest(request *from, request *to) { + char s[1024]; + int i; + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s blockdestination=%s type=synchro channel=%s params=", from->listOfRequests->owner, to->listOfRequests->owner, from->syncChannel->outname); + for(i=0; i<from->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, *(from->params[i])); + } + sprintf(s, "%s\n", s); + + debugMsg("Trace request synchro"); + + + // Saving trace + writeInTrace(s); +} + + +void traceAsynchronousSendRequest(request *req) { + char s[1024]; + int i; + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=send_async channel=%s msgid=%ld params=", req->listOfRequests->owner, req->asyncChannel->outname, req->msg->id); + if (req->msg != NULL) { + debugMsg("Computing params"); + for(i=0; i<req->msg->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, req->msg->params[i]); + } + } + sprintf(s, "%s\n", s); + + + + // Saving trace + writeInTrace(s); +} + + +void traceAsynchronousReceiveRequest(request *req) { + char s[1024]; + int i; + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=receive_async channel=%s msgid=%ld params=", req->listOfRequests->owner, req->asyncChannel->outname, req->msg->id); + if (req->msg != NULL) { + debugMsg("Computing params"); + for(i=0; i<req->msg->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, req->msg->params[i]); + } + } + sprintf(s, "%s\n", s); + + + + // Saving trace + writeInTrace(s); +} + + + +void traceRequest(char *myname, request *req) { + char s[1024]; + int i; + + + debugMsg("Trace request"); + + + if (trace == TRACE_OFF) { + return; + } + + // Build corresponding char*; + + switch(req->type) { + case SEND_SYNC_REQUEST: + debug2Msg("Sync channel", req->syncChannel->outname); + sprintf(s, "block=%s type=send_synchro channel=%s params=", myname, req->syncChannel->outname); + for(i=0; i<req->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, *(req->params[i])); + } + sprintf(s, "%s\n", s); + + break; + case RECEIVE_SYNC_REQUEST: + sprintf(s, "block=%s type=receive_synchro channel=%s\n", myname, req->syncChannel->inname); + break; + case SEND_ASYNC_REQUEST: + debug2Msg("Async channel", req->asyncChannel->outname); + sprintf(s, "block=%s type=send_async_2 channel=%s\n", myname, req->asyncChannel->outname); + break; + case RECEIVE_ASYNC_REQUEST: + sprintf(s, "block=%s type=receive_async_2 channel=%s\n", myname, req->asyncChannel->inname); + break; + case SEND_BROADCAST_REQUEST: + debug2Msg("Sync channel", req->syncChannel->outname); + sprintf(s, "block=%s type=send_broadcast channel=%s\n", myname, req->syncChannel->outname); + break; + case RECEIVE_BROADCAST_REQUEST: + debug2Msg("Sync channel", req->syncChannel->outname); + sprintf(s, "block=%s type=receive_broadcast channel=%s\n", myname, req->syncChannel->outname); + break; + case IMMEDIATE: + sprintf(s, "block=%s type=action\n", myname); + break; + default: + sprintf(s, "block=%s type=unknown\n", myname); + } + + debugMsg("Trace request 2"); + + + // Saving trace + writeInTrace(s); +} diff --git a/preinstallTTool/linux/TTool/executablecode/src/tracemanager.h b/preinstallTTool/linux/TTool/executablecode/src/tracemanager.h new file mode 100644 index 0000000000000000000000000000000000000000..fb92d9fe6c0509167c7019eec365a08146ab62f1 --- /dev/null +++ b/preinstallTTool/linux/TTool/executablecode/src/tracemanager.h @@ -0,0 +1,21 @@ +#ifndef TRACEMANAGER_H +#define TRACEMANANER_H + +#include "request.h" + +#define CHAR_ALLOC_SIZE 1024 + + +void activeTracingInFile(); +void unactiveTracing(); +void traceRequest(char *myname, request *req); +void traceFunctionCall(char *block, char *func, char* params); +void traceVariableModification(char *block, char *var, int value, int type); // type=0: int type = 1:bool +void traceStateEntering(char *myname, char *statename); +void traceSynchroRequest(request *from, request *to); +void traceAsynchronousSendRequest(request *req); +void traceAsynchronousReceiveRequest(request *req); + +#endif + + diff --git a/preinstallTTool/linux/TTool/figure/README_figure b/preinstallTTool/linux/TTool/figure/README_figure new file mode 100644 index 0000000000000000000000000000000000000000..435809f47057dd1b156b2520214e6fc74a102d4d --- /dev/null +++ b/preinstallTTool/linux/TTool/figure/README_figure @@ -0,0 +1,6 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +Directory generally configured as the one for saving diagram captures performed from TTool. + diff --git a/preinstallTTool/linux/TTool/java/README_java b/preinstallTTool/linux/TTool/java/README_java new file mode 100644 index 0000000000000000000000000000000000000000..f2f0e0c14ddde505f09f3632f165636f7400330e --- /dev/null +++ b/preinstallTTool/linux/TTool/java/README_java @@ -0,0 +1,9 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +This directory contains: +*jttool.jar, librairy files used by Java files generated by the TTool Java code generator +*Java files generated by TTool (if configured in config.xml file), see +http://labsoc.comelec.enst.fr/turtle/HELP +for more information \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/java/jttool.jar b/preinstallTTool/linux/TTool/java/jttool.jar new file mode 100644 index 0000000000000000000000000000000000000000..579426f0cfefbe81d80abc80b80b7c18c79532c0 Binary files /dev/null and b/preinstallTTool/linux/TTool/java/jttool.jar differ diff --git a/preinstallTTool/linux/TTool/lib/README_lib b/preinstallTTool/linux/TTool/lib/README_lib new file mode 100644 index 0000000000000000000000000000000000000000..2f9854980830e5742df30421c431d5f14ff12683 --- /dev/null +++ b/preinstallTTool/linux/TTool/lib/README_lib @@ -0,0 +1,6 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +Directory generally configured as the one for loading and saving libraries of compenents from TTool. A few libraries are provided with TTool. + diff --git a/preinstallTTool/linux/TTool/lib/TClock1.lib b/preinstallTTool/linux/TTool/lib/TClock1.lib new file mode 100755 index 0000000000000000000000000000000000000000..bf2abad69077968bb8740d18da1f6c5780074d91 --- /dev/null +++ b/preinstallTTool/linux/TTool/lib/TClock1.lib @@ -0,0 +1,585 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGSELECTEDCOMPONENTS version="0.62" copyMaxId="21" decX="278" decY="154" > + +<TClassDiagramPanelCopy name="Class Diagram" xSel="278" ySel="154" widthSel="212" heightSel="342" > +<COMPONENT type="201" id="21" > +<cdparam x="283" y="167" /> +<sizeparam width="151" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="TClock" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +<TGConnectingPoint num="2" id="18" /> +<TGConnectingPoint num="3" id="19" /> +<TGConnectingPoint num="4" id="20" /> +<extraparam> +<Start isStart="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="3" > +<father id="21" num="0" /> +<cdparam x="283" y="198" /> +<sizeparam width="151" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="- value = 0 : Natural; +- isStart = false : Boolean; +" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<extraparam> +<Attribute access="0" id="value" value="0" type="0" /> +<Attribute access="0" id="isStart" value="false" type="4" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="6" > +<father id="21" num="1" /> +<cdparam x="283" y="244" /> +<sizeparam width="151" height="110" minWidth="150" minHeight="30" minDesiredWidth="151" minDesiredHeight="110" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass gates" value="+ set : Gate; ++ get : Gate; ++ reset : Gate; ++ start : Gate; ++ pause : Gate; +- internalIncrement : Gate; +" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<extraparam> +<Attribute access="2" id="set" value="" type="1" /> +<Attribute access="2" id="get" value="" type="1" /> +<Attribute access="2" id="reset" value="" type="1" /> +<Attribute access="2" id="start" value="" type="1" /> +<Attribute access="2" id="pause" value="" type="1" /> +<Attribute access="0" id="internalIncrement" value="" type="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="9" > +<father id="21" num="2" /> +<cdparam x="283" y="355" /> +<sizeparam width="151" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="188" maxY="188" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="7" /> +<TGConnectingPoint num="1" id="8" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="15" > +<father id="21" num="3" /> +<cdparam x="283" y="386" /> +<sizeparam width="151" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="219" maxY="219" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="10" /> +<TGConnectingPoint num="1" id="11" /> +<TGConnectingPoint num="2" id="12" /> +<TGConnectingPoint num="3" id="13" /> +<TGConnectingPoint num="4" id="14" /> +</SUBCOMPONENT> + + +</TClassDiagramPanelCopy><TActivityDiagramPanel name="TClock" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="23" > +<cdparam x="343" y="52" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="22" /> +</COMPONENT> + +<COMPONENT type="15" id="26" > +<cdparam x="459" y="331" /> +<sizeparam width="34" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="start" /> +<TGConnectingPoint num="0" id="24" /> +<TGConnectingPoint num="1" id="25" /> +</COMPONENT> + +<COMPONENT type="15" id="29" > +<cdparam x="127" y="348" /> +<sizeparam width="63" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="set?value" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +</COMPONENT> + +<COMPONENT type="15" id="32" > +<cdparam x="208" y="348" /> +<sizeparam width="59" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="get!value" /> +<TGConnectingPoint num="0" id="30" /> +<TGConnectingPoint num="1" id="31" /> +</COMPONENT> + +<COMPONENT type="19" id="40" > +<cdparam x="222" y="261" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="33" > +<father id="40" num="0" /> +<cdparam x="197" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="34" > +<father id="40" num="1" /> +<cdparam x="257" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="35" > +<father id="40" num="2" /> +<cdparam x="242" y="306" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="45" > +<cdparam x="222" y="421" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +</COMPONENT> + +<COMPONENT type="19" id="53" > +<cdparam x="460" y="251" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="49" /> +<TGConnectingPoint num="1" id="50" /> +<TGConnectingPoint num="2" id="51" /> +<TGConnectingPoint num="3" id="52" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="46" > +<father id="53" num="0" /> +<cdparam x="435" y="261" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="47" > +<father id="53" num="1" /> +<cdparam x="504" y="262" /> +<sizeparam width="78" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[isStart = true ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="48" > +<father id="53" num="2" /> +<cdparam x="480" y="296" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="56" > +<cdparam x="307" y="344" /> +<sizeparam width="38" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="reset" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +</COMPONENT> + +<COMPONENT type="17" id="61" > +<cdparam x="461" y="459" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="57" /> +<TGConnectingPoint num="1" id="58" /> +<TGConnectingPoint num="2" id="59" /> +<TGConnectingPoint num="3" id="60" /> +</COMPONENT> + +<COMPONENT type="19" id="69" > +<cdparam x="345" y="183" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +<TGConnectingPoint num="2" id="67" /> +<TGConnectingPoint num="3" id="68" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="62" > +<father id="69" num="0" /> +<cdparam x="320" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="63" > +<father id="69" num="1" /> +<cdparam x="380" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="64" > +<father id="69" num="2" /> +<cdparam x="365" y="228" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="74" > +<cdparam x="345" y="133" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="70" /> +<TGConnectingPoint num="1" id="71" /> +<TGConnectingPoint num="2" id="72" /> +<TGConnectingPoint num="3" id="73" /> +</COMPONENT> + +<COMPONENT type="15" id="77" > +<cdparam x="297" y="382" /> +<sizeparam width="59" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="value = 0" /> +<TGConnectingPoint num="0" id="75" /> +<TGConnectingPoint num="1" id="76" /> +</COMPONENT> + +<COMPONENT type="15" id="80" > +<cdparam x="382" y="310" /> +<sizeparam width="45" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="pause" /> +<TGConnectingPoint num="0" id="78" /> +<TGConnectingPoint num="1" id="79" /> +</COMPONENT> + +<COMPONENT type="15" id="83" > +<cdparam x="362" y="417" /> +<sizeparam width="85" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="isStart = false" /> +<TGConnectingPoint num="0" id="81" /> +<TGConnectingPoint num="1" id="82" /> +</COMPONENT> + +<COMPONENT type="15" id="86" > +<cdparam x="437" y="376" /> +<sizeparam width="79" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="isStart = true" /> +<TGConnectingPoint num="0" id="84" /> +<TGConnectingPoint num="1" id="85" /> +</COMPONENT> + +<COMPONENT type="11" id="90" > +<cdparam x="567" y="298" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="88" /> +<TGConnectingPoint num="1" id="89" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="87" > +<father id="90" num="0" /> +<cdparam x="582" y="318" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="1" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="93" > +<cdparam x="503" y="344" /> +<sizeparam width="138" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="internalIncrement!value" /> +<TGConnectingPoint num="0" id="91" /> +<TGConnectingPoint num="1" id="92" /> +</COMPONENT> + +<COMPONENT type="15" id="96" > +<cdparam x="522" y="379" /> +<sizeparam width="101" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="value = value + 1" /> +<TGConnectingPoint num="0" id="94" /> +<TGConnectingPoint num="1" id="95" /> +</COMPONENT> + +<CONNECTOR type="101" id="98" > +<cdparam x="131" y="500" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="197" y="276" id="37" /> +<P2 x="158" y="343" id="27" /> +<Point x="158" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="97" > +<father id="98" num="0" /> +<cdparam x="158" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="99" > +<cdparam x="171" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="237" y="316" id="39" /> +<P2 x="237" y="343" id="30" /> +</CONNECTOR> +<CONNECTOR type="101" id="100" > +<cdparam x="82" y="564" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="158" y="373" id="28" /> +<P2 x="222" y="436" id="42" /> +</CONNECTOR> +<CONNECTOR type="101" id="101" > +<cdparam x="242" y="576" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="237" y="373" id="31" /> +<P2 x="237" y="421" id="41" /> +</CONNECTOR> +<CONNECTOR type="101" id="103" > +<cdparam x="435" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="277" y="276" id="38" /> +<P2 x="326" y="339" id="54" /> +<Point x="326" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="102" > +<father id="103" num="0" /> +<cdparam x="326" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="104" > +<cdparam x="515" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="475" y="306" id="52" /> +<P2 x="476" y="326" id="24" /> +</CONNECTOR> +<CONNECTOR type="101" id="105" > +<cdparam x="608" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="476" y="401" id="85" /> +<P2 x="476" y="459" id="57" /> +</CONNECTOR> +<CONNECTOR type="101" id="106" > +<cdparam x="424" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="350" y="72" id="22" /> +<P2 x="360" y="133" id="70" /> +</CONNECTOR> +<CONNECTOR type="101" id="107" > +<cdparam x="360" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="360" y="163" id="73" /> +<P2 x="360" y="173" id="65" /> +</CONNECTOR> +<CONNECTOR type="101" id="108" > +<cdparam x="319" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="320" y="198" id="66" /> +<P2 x="237" y="251" id="36" /> +</CONNECTOR> +<CONNECTOR type="101" id="109" > +<cdparam x="399" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="400" y="198" id="67" /> +<P2 x="475" y="241" id="49" /> +</CONNECTOR> +<CONNECTOR type="101" id="110" > +<cdparam x="479" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="326" y="369" id="55" /> +<P2 x="326" y="377" id="75" /> +</CONNECTOR> +<CONNECTOR type="101" id="115" > +<cdparam x="307" y="453" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="237" y="451" id="44" /> +<P2 x="345" y="148" id="71" /> +<Point x="237" y="463" /> +<Point x="108" y="463" /> +<Point x="108" y="123" /> +<Point x="345" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="111" > +<father id="115" num="0" /> +<cdparam x="237" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="115" num="1" /> +<cdparam x="108" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="113" > +<father id="115" num="2" /> +<cdparam x="108" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="114" > +<father id="115" num="3" /> +<cdparam x="345" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="120" > +<cdparam x="640" y="612" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="476" y="489" id="60" /> +<P2 x="375" y="148" id="72" /> +<Point x="476" y="508" /> +<Point x="645" y="508" /> +<Point x="645" y="123" /> +<Point x="375" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="116" > +<father id="120" num="0" /> +<cdparam x="476" y="508" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="117" > +<father id="120" num="1" /> +<cdparam x="645" y="508" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="118" > +<father id="120" num="2" /> +<cdparam x="645" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="119" > +<father id="120" num="3" /> +<cdparam x="375" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="121" > +<cdparam x="403" y="422" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="326" y="407" id="76" /> +<P2 x="252" y="436" id="43" /> +</CONNECTOR> +<CONNECTOR type="101" id="122" > +<cdparam x="476" y="356" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="476" y="356" id="25" /> +<P2 x="476" y="371" id="84" /> +</CONNECTOR> +<CONNECTOR type="101" id="124" > +<cdparam x="435" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="435" y="266" id="50" /> +<P2 x="404" y="305" id="78" /> +<Point x="404" y="266" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="123" > +<father id="124" num="0" /> +<cdparam x="404" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="125" > +<cdparam x="403" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="404" y="335" id="79" /> +<P2 x="404" y="412" id="81" /> +</CONNECTOR> +<CONNECTOR type="101" id="126" > +<cdparam x="400" y="445" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="404" y="442" id="82" /> +<P2 x="461" y="474" id="58" /> +</CONNECTOR> +<CONNECTOR type="101" id="128" > +<cdparam x="515" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to deterministic delay" value="null" /> +<P1 x="515" y="266" id="51" /> +<P2 x="572" y="293" id="88" /> +<Point x="572" y="266" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="127" > +<father id="128" num="0" /> +<cdparam x="572" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="129" > +<cdparam x="551" y="344" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="572" y="333" id="89" /> +<P2 x="572" y="339" id="91" /> +</CONNECTOR> +<CONNECTOR type="101" id="130" > +<cdparam x="572" y="403" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="572" y="404" id="95" /> +<P2 x="491" y="474" id="59" /> +</CONNECTOR> +<CONNECTOR type="101" id="131" > +<cdparam x="572" y="369" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="572" y="369" id="92" /> +<P2 x="572" y="374" id="94" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</TURTLEGSELECTEDCOMPONENTS> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/lib/TTimerv01.lib b/preinstallTTool/linux/TTool/lib/TTimerv01.lib new file mode 100755 index 0000000000000000000000000000000000000000..e78069a438f6bde5a2f6376273a570d79e063d77 --- /dev/null +++ b/preinstallTTool/linux/TTool/lib/TTimerv01.lib @@ -0,0 +1,466 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGSELECTEDCOMPONENTS version="0.62" copyMaxId="43" decX="46" decY="21" > + +<TClassDiagramPanelCopy name="Class Diagram" xSel="46" ySel="21" widthSel="173" heightSel="251" > +<COMPONENT type="201" id="43" > +<cdparam x="57" y="32" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="TTimer" /> +<TGConnectingPoint num="0" id="38" /> +<TGConnectingPoint num="1" id="39" /> +<TGConnectingPoint num="2" id="40" /> +<TGConnectingPoint num="3" id="41" /> +<TGConnectingPoint num="4" id="42" /> +<extraparam> +<Start isStart="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="25" > +<father id="43" num="0" /> +<cdparam x="57" y="63" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="- value = 0 : Natural; +" /> +<TGConnectingPoint num="0" id="23" /> +<TGConnectingPoint num="1" id="24" /> +<extraparam> +<Attribute access="0" id="value" value="0" type="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="28" > +<father id="43" num="1" /> +<cdparam x="57" y="93" /> +<sizeparam width="150" height="110" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="110" /> +<cdrectangleparam minX="0" maxX="0" minY="61" maxY="61" /> +<infoparam name="Tclass gates" value="+ set : Gate; ++ get : Gate; ++ reset : Gate; ++ start : Gate; ++ pause : Gate; ++ interrupt : Gate; +" /> +<TGConnectingPoint num="0" id="26" /> +<TGConnectingPoint num="1" id="27" /> +<extraparam> +<Attribute access="2" id="set" value="" type="1" /> +<Attribute access="2" id="get" value="" type="1" /> +<Attribute access="2" id="reset" value="" type="1" /> +<Attribute access="2" id="start" value="" type="1" /> +<Attribute access="2" id="pause" value="" type="1" /> +<Attribute access="2" id="interrupt" value="" type="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="31" > +<father id="43" num="2" /> +<cdparam x="57" y="203" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="171" maxY="171" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="29" /> +<TGConnectingPoint num="1" id="30" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="37" > +<father id="43" num="3" /> +<cdparam x="57" y="234" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="202" maxY="202" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="32" /> +<TGConnectingPoint num="1" id="33" /> +<TGConnectingPoint num="2" id="34" /> +<TGConnectingPoint num="3" id="35" /> +<TGConnectingPoint num="4" id="36" /> +</SUBCOMPONENT> + + +</TClassDiagramPanelCopy><TActivityDiagramPanel name="TTimer" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="23" > +<cdparam x="343" y="52" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="22" /> +</COMPONENT> + +<COMPONENT type="15" id="26" > +<cdparam x="493" y="254" /> +<sizeparam width="34" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="start" /> +<TGConnectingPoint num="0" id="24" /> +<TGConnectingPoint num="1" id="25" /> +</COMPONENT> + +<COMPONENT type="15" id="29" > +<cdparam x="127" y="348" /> +<sizeparam width="63" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="set?value" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +</COMPONENT> + +<COMPONENT type="15" id="32" > +<cdparam x="208" y="348" /> +<sizeparam width="59" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="get!value" /> +<TGConnectingPoint num="0" id="30" /> +<TGConnectingPoint num="1" id="31" /> +</COMPONENT> + +<COMPONENT type="19" id="40" > +<cdparam x="222" y="261" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="33" > +<father id="40" num="0" /> +<cdparam x="197" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="34" > +<father id="40" num="1" /> +<cdparam x="257" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="35" > +<father id="40" num="2" /> +<cdparam x="242" y="306" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="45" > +<cdparam x="222" y="421" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +</COMPONENT> + +<COMPONENT type="15" id="56" > +<cdparam x="307" y="344" /> +<sizeparam width="38" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="reset" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +</COMPONENT> + +<COMPONENT type="19" id="69" > +<cdparam x="345" y="183" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +<TGConnectingPoint num="2" id="67" /> +<TGConnectingPoint num="3" id="68" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="62" > +<father id="69" num="0" /> +<cdparam x="320" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="63" > +<father id="69" num="1" /> +<cdparam x="380" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="64" > +<father id="69" num="2" /> +<cdparam x="365" y="228" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="74" > +<cdparam x="345" y="133" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="70" /> +<TGConnectingPoint num="1" id="71" /> +<TGConnectingPoint num="2" id="72" /> +<TGConnectingPoint num="3" id="73" /> +</COMPONENT> + +<CONNECTOR type="101" id="98" > +<cdparam x="131" y="500" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="197" y="276" id="37" /> +<P2 x="158" y="343" id="27" /> +<Point x="158" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="97" > +<father id="98" num="0" /> +<cdparam x="158" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="99" > +<cdparam x="171" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="237" y="316" id="39" /> +<P2 x="237" y="343" id="30" /> +</CONNECTOR> +<CONNECTOR type="101" id="100" > +<cdparam x="82" y="564" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="158" y="373" id="28" /> +<P2 x="222" y="436" id="42" /> +</CONNECTOR> +<CONNECTOR type="101" id="101" > +<cdparam x="242" y="576" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="237" y="373" id="31" /> +<P2 x="237" y="421" id="41" /> +</CONNECTOR> +<CONNECTOR type="101" id="103" > +<cdparam x="435" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="277" y="276" id="38" /> +<P2 x="326" y="339" id="54" /> +<Point x="326" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="102" > +<father id="103" num="0" /> +<cdparam x="326" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="106" > +<cdparam x="424" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="350" y="72" id="22" /> +<P2 x="360" y="133" id="70" /> +</CONNECTOR> +<CONNECTOR type="101" id="107" > +<cdparam x="360" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="360" y="163" id="73" /> +<P2 x="360" y="173" id="65" /> +</CONNECTOR> +<CONNECTOR type="101" id="108" > +<cdparam x="319" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="320" y="198" id="66" /> +<P2 x="237" y="251" id="36" /> +</CONNECTOR> +<CONNECTOR type="101" id="115" > +<cdparam x="307" y="453" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="237" y="451" id="44" /> +<P2 x="345" y="148" id="71" /> +<Point x="237" y="463" /> +<Point x="108" y="463" /> +<Point x="108" y="123" /> +<Point x="345" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="111" > +<father id="115" num="0" /> +<cdparam x="237" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="115" num="1" /> +<cdparam x="108" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="113" > +<father id="115" num="2" /> +<cdparam x="108" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="114" > +<father id="115" num="3" /> +<cdparam x="345" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="428" > +<cdparam x="326" y="369" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="326" y="369" id="55" /> +<P2 x="252" y="436" id="43" /> +</CONNECTOR> +<CONNECTOR type="101" id="429" > +<cdparam x="400" y="198" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="400" y="198" id="67" /> +<P2 x="510" y="249" id="24" /> +</CONNECTOR> +<COMPONENT type="16" id="430" > +<cdparam x="491" y="315" /> +<sizeparam width="38" height="20" minWidth="30" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="reset" /> +<TGConnectingPoint num="0" id="431" /> +<TGConnectingPoint num="1" id="432" /> +<TGConnectingPoint num="2" id="433" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="434" > +<father id="430" num="0" /> +<cdparam x="554" y="330" /> +<sizeparam width="29" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="60" maxX="68" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="value" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="435" > +<cdparam x="541" y="394" /> +<sizeparam width="55" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="interrupt" /> +<TGConnectingPoint num="0" id="436" /> +<TGConnectingPoint num="1" id="437" /> +</COMPONENT> + +<CONNECTOR type="101" id="438" > +<cdparam x="510" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time-limited offer" value="null" /> +<P1 x="510" y="279" id="25" /> +<P2 x="510" y="290" id="431" /> +</CONNECTOR> +<CONNECTOR type="101" id="439" > +<cdparam x="525" y="360" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to action state" value="null" /> +<P1 x="525" y="360" id="433" /> +<P2 x="568" y="389" id="436" /> +<Point x="525" y="374" /> +<Point x="568" y="374" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="452" > +<father id="439" num="0" /> +<cdparam x="525" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="453" > +<father id="439" num="1" /> +<cdparam x="568" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="440" > +<cdparam x="495" y="429" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="441" /> +<TGConnectingPoint num="1" id="442" /> +<TGConnectingPoint num="2" id="443" /> +<TGConnectingPoint num="3" id="444" /> +</COMPONENT> + +<CONNECTOR type="101" id="445" > +<cdparam x="510" y="360" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to junction" value="null" /> +<P1 x="510" y="360" id="432" /> +<P2 x="510" y="429" id="441" /> +</CONNECTOR> +<CONNECTOR type="101" id="446" > +<cdparam x="570" y="431" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="568" y="419" id="437" /> +<P2 x="525" y="444" id="443" /> +<Point x="568" y="444" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="454" > +<father id="446" num="0" /> +<cdparam x="568" y="444" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="447" > +<cdparam x="510" y="459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="510" y="459" id="444" /> +<P2 x="375" y="148" id="72" /> +<Point x="510" y="484" /> +<Point x="633" y="484" /> +<Point x="633" y="123" /> +<Point x="375" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="448" > +<father id="447" num="0" /> +<cdparam x="510" y="484" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="449" > +<father id="447" num="1" /> +<cdparam x="633" y="484" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="450" > +<father id="447" num="2" /> +<cdparam x="633" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="451" > +<father id="447" num="3" /> +<cdparam x="375" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +</TURTLEGSELECTEDCOMPONENTS> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/lotos/README_lotos b/preinstallTTool/linux/TTool/lotos/README_lotos new file mode 100644 index 0000000000000000000000000000000000000000..a21e405a0a43ec0220c9c63c5ea378b8fd45fd1b --- /dev/null +++ b/preinstallTTool/linux/TTool/lotos/README_lotos @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The lotos directory is intended to store the rt-lotos files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/BasicExchange.xml b/preinstallTTool/linux/TTool/modeling/BasicExchange.xml new file mode 100755 index 0000000000000000000000000000000000000000..e6af3f4aa7e773fbc0cef07ab78277cc364697d1 --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/BasicExchange.xml @@ -0,0 +1,1129 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.82beta2"> + +<Modeling type="Analysis" nameTab="Analysis" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="506" id="337" > +<cdparam x="254" y="157" /> +<sizeparam width="82" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="DataTransfer" /> +<TGConnectingPoint num="0" id="338" /> +<TGConnectingPoint num="1" id="339" /> +</COMPONENT> + +<COMPONENT type="502" id="340" > +<cdparam x="289" y="109" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="341" /> +</COMPONENT> + +<CONNECTOR type="105" id="342" > +<cdparam x="296" y="129" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Reference to a SD" value="null" /> +<P1 x="296" y="129" id="341" /> +<P2 x="295" y="152" id="338" /> +</CONNECTOR> +<COMPONENT type="503" id="346" > +<cdparam x="286" y="218" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="347" /> +</COMPONENT> + +<CONNECTOR type="105" id="348" > +<cdparam x="296" y="197" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="295" y="197" id="339" /> +<P2 x="296" y="213" id="347" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="701" id="248" > +<cdparam x="340" y="64" /> +<sizeparam width="92" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange" /> +<TGConnectingPoint num="0" id="249" /> +<TGConnectingPoint num="1" id="250" /> +<TGConnectingPoint num="2" id="251" /> +<TGConnectingPoint num="3" id="252" /> +<TGConnectingPoint num="4" id="253" /> +<TGConnectingPoint num="5" id="254" /> +<TGConnectingPoint num="6" id="255" /> +<TGConnectingPoint num="7" id="256" /> +<TGConnectingPoint num="8" id="257" /> +<TGConnectingPoint num="9" id="258" /> +<TGConnectingPoint num="10" id="259" /> +<TGConnectingPoint num="11" id="260" /> +<TGConnectingPoint num="12" id="261" /> +<TGConnectingPoint num="13" id="262" /> +<TGConnectingPoint num="14" id="263" /> +<TGConnectingPoint num="15" id="264" /> +</COMPONENT> + +<COMPONENT type="701" id="265" > +<cdparam x="273" y="186" /> +<sizeparam width="86" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data Request" /> +<TGConnectingPoint num="0" id="266" /> +<TGConnectingPoint num="1" id="267" /> +<TGConnectingPoint num="2" id="268" /> +<TGConnectingPoint num="3" id="269" /> +<TGConnectingPoint num="4" id="270" /> +<TGConnectingPoint num="5" id="271" /> +<TGConnectingPoint num="6" id="272" /> +<TGConnectingPoint num="7" id="273" /> +<TGConnectingPoint num="8" id="274" /> +<TGConnectingPoint num="9" id="275" /> +<TGConnectingPoint num="10" id="276" /> +<TGConnectingPoint num="11" id="277" /> +<TGConnectingPoint num="12" id="278" /> +<TGConnectingPoint num="13" id="279" /> +<TGConnectingPoint num="14" id="280" /> +<TGConnectingPoint num="15" id="281" /> +</COMPONENT> + +<COMPONENT type="700" id="282" > +<cdparam x="151" y="205" /> +<sizeparam width="30" height="70" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="actor" value="Client" /> +<TGConnectingPoint num="0" id="283" /> +<TGConnectingPoint num="1" id="284" /> +<TGConnectingPoint num="2" id="285" /> +<TGConnectingPoint num="3" id="286" /> +<TGConnectingPoint num="4" id="287" /> +<TGConnectingPoint num="5" id="288" /> +<TGConnectingPoint num="6" id="289" /> +<TGConnectingPoint num="7" id="290" /> +<TGConnectingPoint num="8" id="291" /> +<TGConnectingPoint num="9" id="292" /> +<TGConnectingPoint num="10" id="293" /> +<TGConnectingPoint num="11" id="294" /> +<TGConnectingPoint num="12" id="295" /> +<TGConnectingPoint num="13" id="296" /> +<TGConnectingPoint num="14" id="297" /> +<TGConnectingPoint num="15" id="298" /> +<TGConnectingPoint num="16" id="299" /> +<TGConnectingPoint num="17" id="300" /> +<TGConnectingPoint num="18" id="301" /> +<TGConnectingPoint num="19" id="302" /> +<TGConnectingPoint num="20" id="303" /> +<TGConnectingPoint num="21" id="304" /> +<TGConnectingPoint num="22" id="305" /> +<TGConnectingPoint num="23" id="306" /> +</COMPONENT> + +<CONNECTOR type="111" id="307" > +<cdparam x="358" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="386" y="104" id="252" /> +<P2 x="316" y="186" id="266" /> +</CONNECTOR> +<COMPONENT type="700" id="308" > +<cdparam x="635" y="206" /> +<sizeparam width="30" height="70" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="actor" value="Server" /> +<TGConnectingPoint num="0" id="309" /> +<TGConnectingPoint num="1" id="310" /> +<TGConnectingPoint num="2" id="311" /> +<TGConnectingPoint num="3" id="312" /> +<TGConnectingPoint num="4" id="313" /> +<TGConnectingPoint num="5" id="314" /> +<TGConnectingPoint num="6" id="315" /> +<TGConnectingPoint num="7" id="316" /> +<TGConnectingPoint num="8" id="317" /> +<TGConnectingPoint num="9" id="318" /> +<TGConnectingPoint num="10" id="319" /> +<TGConnectingPoint num="11" id="320" /> +<TGConnectingPoint num="12" id="321" /> +<TGConnectingPoint num="13" id="322" /> +<TGConnectingPoint num="14" id="323" /> +<TGConnectingPoint num="15" id="324" /> +<TGConnectingPoint num="16" id="325" /> +<TGConnectingPoint num="17" id="326" /> +<TGConnectingPoint num="18" id="327" /> +<TGConnectingPoint num="19" id="328" /> +<TGConnectingPoint num="20" id="329" /> +<TGConnectingPoint num="21" id="330" /> +<TGConnectingPoint num="22" id="331" /> +<TGConnectingPoint num="23" id="332" /> +</COMPONENT> + +<CONNECTOR type="110" id="333" > +<cdparam x="192" y="218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="181" y="240" id="292" /> +<P2 x="273" y="206" id="267" /> +</CONNECTOR> +<CONNECTOR type="110" id="334" > +<cdparam x="558" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="635" y="241" id="311" /> +<P2 x="359" y="206" id="268" /> +</CONNECTOR> +<CONNECTOR type="110" id="335" > +<cdparam x="187" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="181" y="222" id="291" /> +<P2 x="340" y="84" id="250" /> +</CONNECTOR> +<CONNECTOR type="110" id="336" > +<cdparam x="570" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="635" y="223" id="310" /> +<P2 x="432" y="84" id="251" /> +</CONNECTOR> +<COMPONENT type="701" id="549" > +<cdparam x="287" y="361" /> +<sizeparam width="97" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data Response" /> +<TGConnectingPoint num="0" id="550" /> +<TGConnectingPoint num="1" id="551" /> +<TGConnectingPoint num="2" id="552" /> +<TGConnectingPoint num="3" id="553" /> +<TGConnectingPoint num="4" id="554" /> +<TGConnectingPoint num="5" id="555" /> +<TGConnectingPoint num="6" id="556" /> +<TGConnectingPoint num="7" id="557" /> +<TGConnectingPoint num="8" id="558" /> +<TGConnectingPoint num="9" id="559" /> +<TGConnectingPoint num="10" id="560" /> +<TGConnectingPoint num="11" id="561" /> +<TGConnectingPoint num="12" id="562" /> +<TGConnectingPoint num="13" id="563" /> +<TGConnectingPoint num="14" id="564" /> +<TGConnectingPoint num="15" id="565" /> +</COMPONENT> + +<COMPONENT type="701" id="566" > +<cdparam x="446" y="350" /> +<sizeparam width="77" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data forging" /> +<TGConnectingPoint num="0" id="567" /> +<TGConnectingPoint num="1" id="568" /> +<TGConnectingPoint num="2" id="569" /> +<TGConnectingPoint num="3" id="570" /> +<TGConnectingPoint num="4" id="571" /> +<TGConnectingPoint num="5" id="572" /> +<TGConnectingPoint num="6" id="573" /> +<TGConnectingPoint num="7" id="574" /> +<TGConnectingPoint num="8" id="575" /> +<TGConnectingPoint num="9" id="576" /> +<TGConnectingPoint num="10" id="577" /> +<TGConnectingPoint num="11" id="578" /> +<TGConnectingPoint num="12" id="579" /> +<TGConnectingPoint num="13" id="580" /> +<TGConnectingPoint num="14" id="581" /> +<TGConnectingPoint num="15" id="582" /> +</COMPONENT> + +<CONNECTOR type="111" id="583" > +<cdparam x="358" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="386" y="104" id="256" /> +<P2 x="484" y="350" id="567" /> +</CONNECTOR> +<CONNECTOR type="111" id="584" > +<cdparam x="358" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="386" y="104" id="260" /> +<P2 x="335" y="361" id="550" /> +</CONNECTOR> +<CONNECTOR type="110" id="585" > +<cdparam x="561" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="635" y="276" id="313" /> +<P2 x="523" y="370" id="569" /> +</CONNECTOR> +<CONNECTOR type="110" id="586" > +<cdparam x="181" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="181" y="257" id="293" /> +<P2 x="287" y="381" id="551" /> +</CONNECTOR> +<CONNECTOR type="110" id="587" > +<cdparam x="384" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="384" y="381" id="552" /> +<P2 x="635" y="258" id="312" /> +</CONNECTOR> +<COMPONENT type="301" id="711" > +<cdparam x="223" y="42" /> +<sizeparam width="386" height="388" minWidth="50" minHeight="20" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value=" + + + + + + + + + + + + + + + + + + + + + + " /> +<extraparam> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value=" " /> +</extraparam> +</COMPONENT> + + +</UseCaseDiagramPanel> + +<SequenceDiagramPanel name="DataTransfer" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="349" > +<cdparam x="184" y="94" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="Client" /> +<TGConnectingPoint num="0" id="350" /> +<TGConnectingPoint num="1" id="351" /> +<TGConnectingPoint num="2" id="352" /> +<TGConnectingPoint num="3" id="353" /> +<TGConnectingPoint num="4" id="354" /> +<TGConnectingPoint num="5" id="355" /> +<TGConnectingPoint num="6" id="356" /> +<TGConnectingPoint num="7" id="357" /> +<TGConnectingPoint num="8" id="358" /> +<TGConnectingPoint num="9" id="359" /> +<TGConnectingPoint num="10" id="360" /> +<TGConnectingPoint num="11" id="361" /> +<TGConnectingPoint num="12" id="362" /> +<TGConnectingPoint num="13" id="363" /> +<TGConnectingPoint num="14" id="364" /> +<TGConnectingPoint num="15" id="365" /> +<TGConnectingPoint num="16" id="366" /> +<TGConnectingPoint num="17" id="367" /> +<TGConnectingPoint num="18" id="368" /> +<TGConnectingPoint num="19" id="369" /> +<TGConnectingPoint num="20" id="370" /> +<TGConnectingPoint num="21" id="371" /> +<TGConnectingPoint num="22" id="372" /> +<TGConnectingPoint num="23" id="373" /> +<TGConnectingPoint num="24" id="374" /> +<TGConnectingPoint num="25" id="375" /> +<TGConnectingPoint num="26" id="376" /> +<TGConnectingPoint num="27" id="377" /> +<TGConnectingPoint num="28" id="378" /> +<TGConnectingPoint num="29" id="379" /> +<TGConnectingPoint num="30" id="380" /> +<TGConnectingPoint num="31" id="381" /> +<TGConnectingPoint num="32" id="382" /> +<TGConnectingPoint num="33" id="383" /> +<TGConnectingPoint num="34" id="384" /> +<TGConnectingPoint num="35" id="385" /> +<TGConnectingPoint num="36" id="386" /> +<TGConnectingPoint num="37" id="387" /> +<TGConnectingPoint num="38" id="388" /> +<TGConnectingPoint num="39" id="389" /> +<TGConnectingPoint num="40" id="390" /> +<TGConnectingPoint num="41" id="391" /> +<TGConnectingPoint num="42" id="392" /> +<TGConnectingPoint num="43" id="393" /> +<TGConnectingPoint num="44" id="394" /> +<TGConnectingPoint num="45" id="395" /> +<TGConnectingPoint num="46" id="396" /> +<TGConnectingPoint num="47" id="397" /> +<TGConnectingPoint num="48" id="398" /> +</COMPONENT> +<SUBCOMPONENT type="601" id="539" > +<father id="349" num="0" /> +<cdparam x="149" y="354" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="540" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="537" > +<father id="349" num="1" /> +<cdparam x="149" y="164" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="538" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="399" > +<cdparam x="451" y="94" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="Server" /> +<TGConnectingPoint num="0" id="400" /> +<TGConnectingPoint num="1" id="401" /> +<TGConnectingPoint num="2" id="402" /> +<TGConnectingPoint num="3" id="403" /> +<TGConnectingPoint num="4" id="404" /> +<TGConnectingPoint num="5" id="405" /> +<TGConnectingPoint num="6" id="406" /> +<TGConnectingPoint num="7" id="407" /> +<TGConnectingPoint num="8" id="408" /> +<TGConnectingPoint num="9" id="409" /> +<TGConnectingPoint num="10" id="410" /> +<TGConnectingPoint num="11" id="411" /> +<TGConnectingPoint num="12" id="412" /> +<TGConnectingPoint num="13" id="413" /> +<TGConnectingPoint num="14" id="414" /> +<TGConnectingPoint num="15" id="415" /> +<TGConnectingPoint num="16" id="416" /> +<TGConnectingPoint num="17" id="417" /> +<TGConnectingPoint num="18" id="418" /> +<TGConnectingPoint num="19" id="419" /> +<TGConnectingPoint num="20" id="420" /> +<TGConnectingPoint num="21" id="421" /> +<TGConnectingPoint num="22" id="422" /> +<TGConnectingPoint num="23" id="423" /> +<TGConnectingPoint num="24" id="424" /> +<TGConnectingPoint num="25" id="425" /> +<TGConnectingPoint num="26" id="426" /> +<TGConnectingPoint num="27" id="427" /> +<TGConnectingPoint num="28" id="428" /> +<TGConnectingPoint num="29" id="429" /> +<TGConnectingPoint num="30" id="430" /> +<TGConnectingPoint num="31" id="431" /> +<TGConnectingPoint num="32" id="432" /> +<TGConnectingPoint num="33" id="433" /> +<TGConnectingPoint num="34" id="434" /> +<TGConnectingPoint num="35" id="435" /> +<TGConnectingPoint num="36" id="436" /> +<TGConnectingPoint num="37" id="437" /> +<TGConnectingPoint num="38" id="438" /> +<TGConnectingPoint num="39" id="439" /> +<TGConnectingPoint num="40" id="440" /> +<TGConnectingPoint num="41" id="441" /> +<TGConnectingPoint num="42" id="442" /> +<TGConnectingPoint num="43" id="443" /> +<TGConnectingPoint num="44" id="444" /> +<TGConnectingPoint num="45" id="445" /> +<TGConnectingPoint num="46" id="446" /> +<TGConnectingPoint num="47" id="447" /> +<TGConnectingPoint num="48" id="448" /> +</COMPONENT> +<SUBCOMPONENT type="601" id="546" > +<father id="399" num="0" /> +<cdparam x="456" y="244" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="547" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="544" > +<father id="399" num="1" /> +<cdparam x="456" y="354" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="545" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="542" > +<father id="399" num="2" /> +<cdparam x="456" y="244" /> +<sizeparam width="64" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="forgeData" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="534" > +<father id="399" num="3" /> +<cdparam x="456" y="244" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="535" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="532" > +<father id="399" num="4" /> +<cdparam x="456" y="164" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="533" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="449" > +<cdparam x="190" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="dataRequest" /> +<P1 x="189" y="164" id="356" /> +<P2 x="456" y="164" id="406" /> +</CONNECTOR> +<CONNECTOR type="107" id="531" > +<cdparam x="456" y="227" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="dataSending" /> +<P1 x="456" y="354" id="425" /> +<P2 x="189" y="354" id="375" /> +</CONNECTOR> +<CONNECTOR type="109" id="536" > +<cdparam x="466" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{10..15}" /> +<P1 x="466" y="164" id="533" /> +<P2 x="466" y="244" id="535" /> +<extraparam> +<Interval minConstraint="10" maxConstraint="15" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="109" id="541" > +<cdparam x="160" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{0..13}" /> +<P1 x="159" y="164" id="538" /> +<P2 x="159" y="354" id="540" /> +<extraparam> +<Interval minConstraint="0" maxConstraint="13" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="109" id="548" > +<cdparam x="466" y="227" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{0..10}" /> +<P1 x="466" y="244" id="547" /> +<P2 x="466" y="354" id="545" /> +<extraparam> +<Interval minConstraint="0" maxConstraint="10" /> +</extraparam> +</CONNECTOR> + +</SequenceDiagramPanel> + +</Modeling> + + + + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="209" id="3" > +<cdparam x="706" y="195" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tdata" value="Delay" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1" > +<father id="3" num="0" /> +<cdparam x="706" y="226" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ dmin = 10 : Natural; ++ dmax = 15 : Natural; +" /> +<extraparam> +<Attribute access="2" id="dmin" value="10" type="0" typeOther="" /> +<Attribute access="2" id="dmax" value="15" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2" > +<father id="3" num="1" /> +<cdparam x="706" y="272" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass operations" value="" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="24" > +<cdparam x="43" y="93" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Client" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +<TGConnectingPoint num="4" id="23" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="6" > +<father id="24" num="0" /> +<cdparam x="43" y="124" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ pdu : PDU; +" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<extraparam> +<Attribute access="2" id="pdu" value="" type="5" typeOther="PDU" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="9" > +<father id="24" num="1" /> +<cdparam x="43" y="155" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="62" maxY="62" /> +<infoparam name="Tclass gates" value="+ socket : Gate; +" /> +<TGConnectingPoint num="0" id="7" /> +<TGConnectingPoint num="1" id="8" /> +<extraparam> +<Attribute access="2" id="socket" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="12" > +<father id="24" num="2" /> +<cdparam x="43" y="186" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="93" maxY="93" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="10" /> +<TGConnectingPoint num="1" id="11" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="18" > +<father id="24" num="3" /> +<cdparam x="43" y="217" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="124" maxY="124" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="13" /> +<TGConnectingPoint num="1" id="14" /> +<TGConnectingPoint num="2" id="15" /> +<TGConnectingPoint num="3" id="16" /> +<TGConnectingPoint num="4" id="17" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="45" > +<cdparam x="406" y="78" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Server" /> +<TGConnectingPoint num="0" id="40" /> +<TGConnectingPoint num="1" id="41" /> +<TGConnectingPoint num="2" id="42" /> +<TGConnectingPoint num="3" id="43" /> +<TGConnectingPoint num="4" id="44" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="27" > +<father id="45" num="0" /> +<cdparam x="406" y="109" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ pdu : PDU; ++ d : Delay; +" /> +<TGConnectingPoint num="0" id="25" /> +<TGConnectingPoint num="1" id="26" /> +<extraparam> +<Attribute access="2" id="pdu" value="" type="5" typeOther="PDU" /> +<Attribute access="2" id="d" value="" type="5" typeOther="Delay" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="30" > +<father id="45" num="1" /> +<cdparam x="406" y="155" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass gates" value="+ socket : Gate; +" /> +<TGConnectingPoint num="0" id="28" /> +<TGConnectingPoint num="1" id="29" /> +<extraparam> +<Attribute access="2" id="socket" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="33" > +<father id="45" num="2" /> +<cdparam x="406" y="186" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="108" maxY="108" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="31" /> +<TGConnectingPoint num="1" id="32" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="39" > +<father id="45" num="3" /> +<cdparam x="406" y="217" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="139" maxY="139" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="34" /> +<TGConnectingPoint num="1" id="35" /> +<TGConnectingPoint num="2" id="36" /> +<TGConnectingPoint num="3" id="37" /> +<TGConnectingPoint num="4" id="38" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="51" > +<cdparam x="249" y="109" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Client and Server" value="Synchro" /> +<TGConnectingPoint num="0" id="47" /> +<TGConnectingPoint num="1" id="48" /> +<TGConnectingPoint num="2" id="49" /> +<TGConnectingPoint num="3" id="50" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="46" > +<father id="51" num="0" /> +<cdparam x="268" y="189" /> +<sizeparam width="50" height="18" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="24" g1="socket" t2="45" g2="socket" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="209" id="54" > +<cdparam x="705" y="54" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tdata" value="PDU" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="52" > +<father id="54" num="0" /> +<cdparam x="705" y="85" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ head = 0 : Natural; ++ data = 0 : Natural; +" /> +<extraparam> +<Attribute access="2" id="head" value="0" type="0" typeOther="" /> +<Attribute access="2" id="data" value="0" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="53" > +<father id="54" num="1" /> +<cdparam x="705" y="131" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass operations" value="" /> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="56" > +<cdparam x="193" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="55" /> +<P1 x="193" y="170" id="8" /> +<P2 x="406" y="170" id="28" /> +</CONNECTOR> +<CONNECTOR type="103" id="57" > +<cdparam x="279" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="299" y="170" id="55" /> +<P2 x="299" y="134" id="49" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="Client" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="59" > +<cdparam x="332" y="119" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="58" /> +</COMPONENT> + +<COMPONENT type="15" id="62" > +<cdparam x="304" y="208" /> +<sizeparam width="70" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="socket!pdu" /> +<TGConnectingPoint num="0" id="60" /> +<TGConnectingPoint num="1" id="61" /> +</COMPONENT> + +<COMPONENT type="13" id="64" > +<cdparam x="329" y="388" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="63" /> +</COMPONENT> + +<COMPONENT type="15" id="67" > +<cdparam x="259" y="166" /> +<sizeparam width="160" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="pdu.head = 1;pdu.data = 12" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +</COMPONENT> + +<COMPONENT type="16" id="72" > +<cdparam x="302" y="272" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="socket?pdu" /> +<TGConnectingPoint num="0" id="69" /> +<TGConnectingPoint num="1" id="70" /> +<TGConnectingPoint num="2" id="71" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="68" > +<father id="72" num="0" /> +<cdparam x="401" y="287" /> +<sizeparam width="14" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="96" maxX="104" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="13" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="77" > +<cdparam x="324" y="342" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="73" /> +<TGConnectingPoint num="1" id="74" /> +<TGConnectingPoint num="2" id="75" /> +<TGConnectingPoint num="3" id="76" /> +</COMPONENT> + +<CONNECTOR type="101" id="78" > +<cdparam x="339" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="339" y="191" id="66" /> +<P2 x="339" y="203" id="60" /> +</CONNECTOR> +<CONNECTOR type="101" id="79" > +<cdparam x="338" y="101" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="339" y="139" id="58" /> +<P2 x="339" y="161" id="65" /> +</CONNECTOR> +<CONNECTOR type="101" id="80" > +<cdparam x="339" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time-limited offer" value="null" /> +<P1 x="339" y="233" id="61" /> +<P2 x="339" y="247" id="69" /> +</CONNECTOR> +<CONNECTOR type="101" id="81" > +<cdparam x="339" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to junction" value="null" /> +<P1 x="339" y="317" id="70" /> +<P2 x="339" y="342" id="73" /> +</CONNECTOR> +<CONNECTOR type="101" id="82" > +<cdparam x="354" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to junction" value="null" /> +<P1 x="354" y="317" id="71" /> +<P2 x="354" y="357" id="75" /> +</CONNECTOR> +<CONNECTOR type="101" id="83" > +<cdparam x="339" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="339" y="372" id="76" /> +<P2 x="339" y="383" id="63" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Server" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="85" > +<cdparam x="440" y="52" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="84" /> +</COMPONENT> + +<COMPONENT type="15" id="88" > +<cdparam x="409" y="142" /> +<sizeparam width="74" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="socket?pdu" /> +<TGConnectingPoint num="0" id="86" /> +<TGConnectingPoint num="1" id="87" /> +</COMPONENT> + +<COMPONENT type="17" id="93" > +<cdparam x="431" y="87" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="89" /> +<TGConnectingPoint num="1" id="90" /> +<TGConnectingPoint num="2" id="91" /> +<TGConnectingPoint num="3" id="92" /> +</COMPONENT> + +<COMPONENT type="19" id="101" > +<cdparam x="431" y="197" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="97" /> +<TGConnectingPoint num="1" id="98" /> +<TGConnectingPoint num="2" id="99" /> +<TGConnectingPoint num="3" id="100" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="94" > +<father id="101" num="0" /> +<cdparam x="356" y="207" /> +<sizeparam width="113" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[not(pdu.head == 1 )]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="95" > +<father id="101" num="1" /> +<cdparam x="466" y="207" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="96" > +<father id="101" num="2" /> +<cdparam x="451" y="242" /> +<sizeparam width="88" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[pdu.head == 1 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="104" > +<cdparam x="336" y="279" /> +<sizeparam width="220" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="pdu.head = 4 ; pdu.data = pdu.data + 1" /> +<TGConnectingPoint num="0" id="102" /> +<TGConnectingPoint num="1" id="103" /> +</COMPONENT> + +<COMPONENT type="20" id="108" > +<cdparam x="441" y="349" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time interval" value="null" /> +<TGConnectingPoint num="0" id="106" /> +<TGConnectingPoint num="1" id="107" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="105" > +<father id="108" num="0" /> +<cdparam x="456" y="369" /> +<sizeparam width="90" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the time interval" value="[d.dmin, d.dmax]" /> +<extraparam> +<Interval minDelay="d.dmin" maxDelay="d.dmax" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="16" id="113" > +<cdparam x="411" y="414" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="socket!pdu" /> +<TGConnectingPoint num="0" id="110" /> +<TGConnectingPoint num="1" id="111" /> +<TGConnectingPoint num="2" id="112" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="109" > +<father id="113" num="0" /> +<cdparam x="506" y="429" /> +<sizeparam width="38" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="92" maxX="100" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="d.dmin" /> +</SUBCOMPONENT> + +<COMPONENT type="13" id="115" > +<cdparam x="451" y="474" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="114" /> +</COMPONENT> + +<CONNECTOR type="101" id="116" > +<cdparam x="448" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="447" y="72" id="84" /> +<P2 x="446" y="87" id="89" /> +</CONNECTOR> +<CONNECTOR type="101" id="117" > +<cdparam x="446" y="117" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="446" y="117" id="92" /> +<P2 x="446" y="137" id="86" /> +</CONNECTOR> +<CONNECTOR type="101" id="118" > +<cdparam x="446" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to choice" value="null" /> +<P1 x="446" y="167" id="87" /> +<P2 x="446" y="187" id="97" /> +</CONNECTOR> +<CONNECTOR type="101" id="123" > +<cdparam x="406" y="212" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="406" y="212" id="98" /> +<P2 x="431" y="102" id="90" /> +<Point x="406" y="237" /> +<Point x="324" y="237" /> +<Point x="324" y="77" /> +<Point x="431" y="77" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="119" > +<father id="123" num="0" /> +<cdparam x="406" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="120" > +<father id="123" num="1" /> +<cdparam x="324" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="121" > +<father id="123" num="2" /> +<cdparam x="324" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="122" > +<father id="123" num="3" /> +<cdparam x="431" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="124" > +<cdparam x="446" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="446" y="252" id="100" /> +<P2 x="446" y="274" id="102" /> +</CONNECTOR> +<CONNECTOR type="101" id="125" > +<cdparam x="446" y="304" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time interval" value="null" /> +<P1 x="446" y="304" id="103" /> +<P2 x="446" y="344" id="106" /> +</CONNECTOR> +<CONNECTOR type="101" id="126" > +<cdparam x="446" y="384" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time interval to action state" value="null" /> +<P1 x="446" y="384" id="107" /> +<P2 x="446" y="389" id="110" /> +</CONNECTOR> +<CONNECTOR type="101" id="131" > +<cdparam x="446" y="443" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="446" y="459" id="111" /> +<P2 x="461" y="102" id="91" /> +<Point x="446" y="560" /> +<Point x="656" y="560" /> +<Point x="656" y="77" /> +<Point x="461" y="77" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="127" > +<father id="131" num="0" /> +<cdparam x="446" y="560" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="128" > +<father id="131" num="1" /> +<cdparam x="656" y="560" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="129" > +<father id="131" num="2" /> +<cdparam x="656" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="130" > +<father id="131" num="3" /> +<cdparam x="461" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="132" > +<cdparam x="534" y="458" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to stop state" value="null" /> +<P1 x="461" y="459" id="112" /> +<P2 x="461" y="469" id="114" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/COCOME_V50.xml b/preinstallTTool/linux/TTool/modeling/COCOME_V50.xml new file mode 100644 index 0000000000000000000000000000000000000000..1f095b4aa6f706ffc9b599bdc7d5ca141466d691 --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/COCOME_V50.xml @@ -0,0 +1,15974 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.92-beta1"> + +<Modeling type="ProActive Design" nameTab="ProActive Design" > +<ProactiveCSDPanel name="Main Composite Structure Diagram" minX="10" maxX="1900" minY="10" maxY="1400" > +<COMPONENT type="2104" id="13" > +<cdparam x="234" y="363" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +<TGConnectingPoint num="4" id="5" /> +<TGConnectingPoint num="5" id="6" /> +<TGConnectingPoint num="6" id="7" /> +<TGConnectingPoint num="7" id="8" /> +<TGConnectingPoint num="8" id="9" /> +<TGConnectingPoint num="9" id="10" /> +<TGConnectingPoint num="10" id="11" /> +<TGConnectingPoint num="11" id="12" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="27" > +<cdparam x="835" y="75" /> +<sizeparam width="150" height="100" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="Bank" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +<TGConnectingPoint num="4" id="23" /> +<TGConnectingPoint num="5" id="24" /> +<TGConnectingPoint num="6" id="25" /> +<TGConnectingPoint num="7" id="26" /> +<extraparam> +<Attribute access="0" id="transactionId" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="info" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="response" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="creditInfo" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="15" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2106" id="18" > +<father id="27" num="0" /> +<cdparam x="825" y="107" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="In Port" value="bank" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<extraparam> +<PortCode code="Bank1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="40" > +<cdparam x="948" y="223" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="28" /> +<TGConnectingPoint num="1" id="29" /> +<TGConnectingPoint num="2" id="30" /> +<TGConnectingPoint num="3" id="31" /> +<TGConnectingPoint num="4" id="32" /> +<TGConnectingPoint num="5" id="33" /> +<TGConnectingPoint num="6" id="34" /> +<TGConnectingPoint num="7" id="35" /> +<TGConnectingPoint num="8" id="36" /> +<TGConnectingPoint num="9" id="37" /> +<TGConnectingPoint num="10" id="38" /> +<TGConnectingPoint num="11" id="39" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="53" > +<cdparam x="10" y="382" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +<TGConnectingPoint num="4" id="45" /> +<TGConnectingPoint num="5" id="46" /> +<TGConnectingPoint num="6" id="47" /> +<TGConnectingPoint num="7" id="48" /> +<TGConnectingPoint num="8" id="49" /> +<TGConnectingPoint num="9" id="50" /> +<TGConnectingPoint num="10" id="51" /> +<TGConnectingPoint num="11" id="52" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="66" > +<cdparam x="351" y="398" /> +<sizeparam width="188" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +<TGConnectingPoint num="2" id="56" /> +<TGConnectingPoint num="3" id="57" /> +<TGConnectingPoint num="4" id="58" /> +<TGConnectingPoint num="5" id="59" /> +<TGConnectingPoint num="6" id="60" /> +<TGConnectingPoint num="7" id="61" /> +<TGConnectingPoint num="8" id="62" /> +<TGConnectingPoint num="9" id="63" /> +<TGConnectingPoint num="10" id="64" /> +<TGConnectingPoint num="11" id="65" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="123" > +<cdparam x="10" y="10" /> +<sizeparam width="682" height="307" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="TradingSystem" /> +<TGConnectingPoint num="0" id="115" /> +<TGConnectingPoint num="1" id="116" /> +<TGConnectingPoint num="2" id="117" /> +<TGConnectingPoint num="3" id="118" /> +<TGConnectingPoint num="4" id="119" /> +<TGConnectingPoint num="5" id="120" /> +<TGConnectingPoint num="6" id="121" /> +<TGConnectingPoint num="7" id="122" /> +<extraparam> +<ShowAttributes visible="0" /> +<LastPortCode code="17" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2108" id="71" > +<father id="123" num="0" /> +<cdparam x="682" y="104" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="662" minY="0" maxY="287" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="67" /> +<TGConnectingPoint num="1" id="68" /> +<TGConnectingPoint num="2" id="69" /> +<TGConnectingPoint num="3" id="70" /> +<extraparam> +<PortCode code="TradingSystem3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="95" > +<father id="123" num="1" /> +<cdparam x="427" y="72" /> +<sizeparam width="160" height="138" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="522" minY="0" maxY="169" /> +<infoparam name="Component " value="CashDeskLine" /> +<TGConnectingPoint num="0" id="87" /> +<TGConnectingPoint num="1" id="88" /> +<TGConnectingPoint num="2" id="89" /> +<TGConnectingPoint num="3" id="90" /> +<TGConnectingPoint num="4" id="91" /> +<TGConnectingPoint num="5" id="92" /> +<TGConnectingPoint num="6" id="93" /> +<TGConnectingPoint num="7" id="94" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDeskLine"/><LastPortCode code="143" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="76" > +<father id="95" num="0" /> +<cdparam x="417" y="182" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="140" minY="0" maxY="118" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="72" /> +<TGConnectingPoint num="1" id="73" /> +<TGConnectingPoint num="2" id="74" /> +<TGConnectingPoint num="3" id="75" /> +<extraparam> +<PortCode code="CashDeskLineDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="81" > +<father id="95" num="1" /> +<cdparam x="417" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="140" minY="0" maxY="118" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="77" /> +<TGConnectingPoint num="1" id="78" /> +<TGConnectingPoint num="2" id="79" /> +<TGConnectingPoint num="3" id="80" /> +<extraparam> +<PortCode code="CashDeskLineDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="86" > +<father id="95" num="2" /> +<cdparam x="577" y="105" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="140" minY="0" maxY="118" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="82" /> +<TGConnectingPoint num="1" id="83" /> +<TGConnectingPoint num="2" id="84" /> +<TGConnectingPoint num="3" id="85" /> +<extraparam> +<PortCode code="CashDeskLineDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="114" > +<father id="123" num="2" /> +<cdparam x="27" y="62" /> +<sizeparam width="170" height="148" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="512" minY="0" maxY="159" /> +<infoparam name="Component " value="Inventory" /> +<TGConnectingPoint num="0" id="106" /> +<TGConnectingPoint num="1" id="107" /> +<TGConnectingPoint num="2" id="108" /> +<TGConnectingPoint num="3" id="109" /> +<TGConnectingPoint num="4" id="110" /> +<TGConnectingPoint num="5" id="111" /> +<TGConnectingPoint num="6" id="112" /> +<TGConnectingPoint num="7" id="113" /> +<extraparam> +<Attribute access="0" id="barCode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="resp" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="32" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="100" > +<father id="114" num="0" /> +<cdparam x="187" y="104" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="150" minY="0" maxY="128" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="96" /> +<TGConnectingPoint num="1" id="97" /> +<TGConnectingPoint num="2" id="98" /> +<TGConnectingPoint num="3" id="99" /> +<extraparam> +<PortCode code="Inventory1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="105" > +<father id="114" num="1" /> +<cdparam x="187" y="181" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="150" minY="0" maxY="128" /> +<infoparam name="In Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="101" /> +<TGConnectingPoint num="1" id="102" /> +<TGConnectingPoint num="2" id="103" /> +<TGConnectingPoint num="3" id="104" /> +<extraparam> +<PortCode code="Inventory2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="136" > +<cdparam x="844" y="454" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="124" /> +<TGConnectingPoint num="1" id="125" /> +<TGConnectingPoint num="2" id="126" /> +<TGConnectingPoint num="3" id="127" /> +<TGConnectingPoint num="4" id="128" /> +<TGConnectingPoint num="5" id="129" /> +<TGConnectingPoint num="6" id="130" /> +<TGConnectingPoint num="7" id="131" /> +<TGConnectingPoint num="8" id="132" /> +<TGConnectingPoint num="9" id="133" /> +<TGConnectingPoint num="10" id="134" /> +<TGConnectingPoint num="11" id="135" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="149" > +<cdparam x="709" y="370" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="137" /> +<TGConnectingPoint num="1" id="138" /> +<TGConnectingPoint num="2" id="139" /> +<TGConnectingPoint num="3" id="140" /> +<TGConnectingPoint num="4" id="141" /> +<TGConnectingPoint num="5" id="142" /> +<TGConnectingPoint num="6" id="143" /> +<TGConnectingPoint num="7" id="144" /> +<TGConnectingPoint num="8" id="145" /> +<TGConnectingPoint num="9" id="146" /> +<TGConnectingPoint num="10" id="147" /> +<TGConnectingPoint num="11" id="148" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="162" > +<cdparam x="353" y="399" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="150" /> +<TGConnectingPoint num="1" id="151" /> +<TGConnectingPoint num="2" id="152" /> +<TGConnectingPoint num="3" id="153" /> +<TGConnectingPoint num="4" id="154" /> +<TGConnectingPoint num="5" id="155" /> +<TGConnectingPoint num="6" id="156" /> +<TGConnectingPoint num="7" id="157" /> +<TGConnectingPoint num="8" id="158" /> +<TGConnectingPoint num="9" id="159" /> +<TGConnectingPoint num="10" id="160" /> +<TGConnectingPoint num="11" id="161" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="163" > +<cdparam x="473" y="290" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="197" y="104" id="96" /> +<P2 x="284" y="388" id="3" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="165" > +<cdparam x="483" y="238" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="164" /> +<P1 x="417" y="116" id="79" /> +<P2 x="207" y="114" id="99" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="167" > +<cdparam x="483" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="166" /> +<P1 x="417" y="192" id="74" /> +<P2 x="207" y="191" id="104" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="169" > +<cdparam x="842" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="168" /> +<P1 x="597" y="115" id="85" /> +<P2 x="682" y="114" id="69" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="171" > +<cdparam x="935" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="170" /> +<P1 x="702" y="114" id="70" /> +<P2 x="825" y="117" id="16" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="172" > +<cdparam x="1113" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="835" y="127" id="15" /> +<P2 x="998" y="223" id="31" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="173" > +<cdparam x="310" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="197" y="201" id="102" /> +<P2 x="60" y="382" id="44" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="174" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="427" y="182" id="72" /> +<P2 x="351" y="410" id="54" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="175" > +<cdparam x="724" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="692" y="124" id="68" /> +<P2 x="894" y="479" id="126" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="176" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="587" y="105" id="82" /> +<P2 x="709" y="382" id="137" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="177" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="427" y="106" id="77" /> +<P2 x="353" y="411" id="150" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveSMDPanel name="CachDeskApp" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="179" > +<cdparam x="169" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="178" /> +</COMPONENT> + +<COMPONENT type="2010" id="182" > +<cdparam x="160" y="84" /> +<sizeparam width="36" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="init" /> +<TGConnectingPoint num="0" id="180" /> +<TGConnectingPoint num="1" id="181" /> +</COMPONENT> + +<COMPONENT type="2016" id="185" > +<cdparam x="138" y="50" /> +<sizeparam width="77" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="initialState" /> +<TGConnectingPoint num="0" id="183" /> +<TGConnectingPoint num="1" id="184" /> +</COMPONENT> + +<COMPONENT type="2010" id="188" > +<cdparam x="141" y="176" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="serveFIFO" /> +<TGConnectingPoint num="0" id="186" /> +<TGConnectingPoint num="1" id="187" /> +</COMPONENT> + +<COMPONENT type="2006" id="204" > +<cdparam x="168" y="220" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="192" /> +<TGConnectingPoint num="1" id="193" /> +<TGConnectingPoint num="2" id="194" /> +<TGConnectingPoint num="3" id="195" /> +<TGConnectingPoint num="4" id="196" /> +<TGConnectingPoint num="5" id="197" /> +<TGConnectingPoint num="6" id="198" /> +<TGConnectingPoint num="7" id="199" /> +<TGConnectingPoint num="8" id="200" /> +<TGConnectingPoint num="9" id="201" /> +<TGConnectingPoint num="10" id="202" /> +<TGConnectingPoint num="11" id="203" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="189" > +<father id="204" num="0" /> +<cdparam x="93" y="250" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[errorCode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="190" > +<father id="204" num="1" /> +<cdparam x="213" y="238" /> +<sizeparam width="76" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[errorCode>0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="191" > +<father id="204" num="2" /> +<cdparam x="183" y="255" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2016" id="207" > +<cdparam x="28" y="292" /> +<sizeparam width="71" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="initialized" /> +<TGConnectingPoint num="0" id="205" /> +<TGConnectingPoint num="1" id="206" /> +</COMPONENT> + +<COMPONENT type="2016" id="210" > +<cdparam x="143" y="129" /> +<sizeparam width="71" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="initialized" /> +<TGConnectingPoint num="0" id="208" /> +<TGConnectingPoint num="1" id="209" /> +</COMPONENT> + +<COMPONENT type="2002" id="213" > +<cdparam x="224" y="269" /> +<sizeparam width="86" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="log!errorCode" /> +<TGConnectingPoint num="0" id="211" /> +<TGConnectingPoint num="1" id="212" /> +<extraparam> +<Via port="log" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="215" > +<cdparam x="257" y="352" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="214" /> +</COMPONENT> + +<CONNECTOR type="121" id="216" > +<cdparam x="210" y="52" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="176" y="30" id="178" /> +<P2 x="176" y="45" id="183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="217" > +<cdparam x="211" y="288" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to submachine" value="null" /> +<P1 x="178" y="154" id="209" /> +<P2 x="179" y="171" id="186" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="218" > +<cdparam x="211" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to choice" value="null" /> +<P1 x="179" y="201" id="187" /> +<P2 x="178" y="220" id="192" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="219" > +<cdparam x="210" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to submachine" value="null" /> +<P1 x="176" y="75" id="184" /> +<P2 x="178" y="79" id="180" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="220" > +<cdparam x="207" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to state" value="null" /> +<P1 x="143" y="230" id="193" /> +<P2 x="63" y="287" id="205" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="221" > +<cdparam x="211" y="274" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="213" y="230" id="194" /> +<P2 x="267" y="264" id="211" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="222" > +<cdparam x="176" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to state" value="null" /> +<P1 x="178" y="109" id="181" /> +<P2 x="178" y="124" id="208" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="223" > +<cdparam x="362" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="267" y="294" id="212" /> +<P2 x="267" y="347" id="214" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="init" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="225" > +<cdparam x="149" y="26" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="init_start" /> +<TGConnectingPoint num="0" id="224" /> +</COMPONENT> + +<COMPONENT type="2012" id="228" > +<cdparam x="113" y="86" /> +<sizeparam width="89" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashState=0" /> +<TGConnectingPoint num="0" id="226" /> +<TGConnectingPoint num="1" id="227" /> +</COMPONENT> + +<COMPONENT type="2001" id="230" > +<cdparam x="143" y="393" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="init_stop" /> +<TGConnectingPoint num="0" id="229" /> +</COMPONENT> + +<COMPONENT type="2012" id="233" > +<cdparam x="41" y="132" /> +<sizeparam width="233" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="paymentMode=paymentMode_INVALID" /> +<TGConnectingPoint num="0" id="231" /> +<TGConnectingPoint num="1" id="232" /> +</COMPONENT> + +<COMPONENT type="2012" id="236" > +<cdparam x="115" y="226" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="products=0" /> +<TGConnectingPoint num="0" id="234" /> +<TGConnectingPoint num="1" id="235" /> +</COMPONENT> + +<COMPONENT type="301" id="245" > +<cdparam x="315" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="237" /> +<TGConnectingPoint num="1" id="238" /> +<TGConnectingPoint num="2" id="239" /> +<TGConnectingPoint num="3" id="240" /> +<TGConnectingPoint num="4" id="241" /> +<TGConnectingPoint num="5" id="242" /> +<TGConnectingPoint num="6" id="243" /> +<TGConnectingPoint num="7" id="244" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="254" > +<cdparam x="353" y="90" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="246" /> +<TGConnectingPoint num="1" id="247" /> +<TGConnectingPoint num="2" id="248" /> +<TGConnectingPoint num="3" id="249" /> +<TGConnectingPoint num="4" id="250" /> +<TGConnectingPoint num="5" id="251" /> +<TGConnectingPoint num="6" id="252" /> +<TGConnectingPoint num="7" id="253" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="263" > +<cdparam x="10" y="10" /> +<sizeparam width="124" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="INIT SUBMACHINE +" /> +<TGConnectingPoint num="0" id="255" /> +<TGConnectingPoint num="1" id="256" /> +<TGConnectingPoint num="2" id="257" /> +<TGConnectingPoint num="3" id="258" /> +<TGConnectingPoint num="4" id="259" /> +<TGConnectingPoint num="5" id="260" /> +<TGConnectingPoint num="6" id="261" /> +<TGConnectingPoint num="7" id="262" /> +<extraparam> +<Line value="INIT SUBMACHINE" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2012" id="266" > +<cdparam x="113" y="324" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=0" /> +<TGConnectingPoint num="0" id="264" /> +<TGConnectingPoint num="1" id="265" /> +</COMPONENT> + +<COMPONENT type="2012" id="269" > +<cdparam x="102" y="269" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="expressMode=0" /> +<TGConnectingPoint num="0" id="267" /> +<TGConnectingPoint num="1" id="268" /> +</COMPONENT> + +<COMPONENT type="2012" id="272" > +<cdparam x="113" y="178" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="creditInfo=0" /> +<TGConnectingPoint num="0" id="270" /> +<TGConnectingPoint num="1" id="271" /> +</COMPONENT> + +<CONNECTOR type="121" id="273" > +<cdparam x="158" y="54" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="156" y="46" id="224" /> +<P2 x="157" y="81" id="226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="274" > +<cdparam x="157" y="111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="157" y="111" id="227" /> +<P2 x="157" y="127" id="231" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="275" > +<cdparam x="159" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="157" y="157" id="232" /> +<P2 x="155" y="173" id="270" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="276" > +<cdparam x="161" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="155" y="203" id="271" /> +<P2 x="156" y="221" id="234" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="277" > +<cdparam x="311" y="309" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="156" y="251" id="235" /> +<P2 x="156" y="264" id="267" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="278" > +<cdparam x="157" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="158" y="349" id="265" /> +<P2 x="153" y="388" id="229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="279" > +<cdparam x="368" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="156" y="294" id="268" /> +<P2 x="158" y="319" id="264" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="serveFIFO" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="2006" id="295" > +<cdparam x="621" y="328" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="283" /> +<TGConnectingPoint num="1" id="284" /> +<TGConnectingPoint num="2" id="285" /> +<TGConnectingPoint num="3" id="286" /> +<TGConnectingPoint num="4" id="287" /> +<TGConnectingPoint num="5" id="288" /> +<TGConnectingPoint num="6" id="289" /> +<TGConnectingPoint num="7" id="290" /> +<TGConnectingPoint num="8" id="291" /> +<TGConnectingPoint num="9" id="292" /> +<TGConnectingPoint num="10" id="293" /> +<TGConnectingPoint num="11" id="294" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="280" > +<father id="295" num="0" /> +<cdparam x="546" y="333" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="281" > +<father id="295" num="1" /> +<cdparam x="646" y="333" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="282" > +<father id="295" num="2" /> +<cdparam x="636" y="363" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="297" > +<cdparam x="623" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="serveFIFO_start" /> +<TGConnectingPoint num="0" id="296" /> +</COMPONENT> + +<COMPONENT type="2006" id="313" > +<cdparam x="619" y="59" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="301" /> +<TGConnectingPoint num="1" id="302" /> +<TGConnectingPoint num="2" id="303" /> +<TGConnectingPoint num="3" id="304" /> +<TGConnectingPoint num="4" id="305" /> +<TGConnectingPoint num="5" id="306" /> +<TGConnectingPoint num="6" id="307" /> +<TGConnectingPoint num="7" id="308" /> +<TGConnectingPoint num="8" id="309" /> +<TGConnectingPoint num="9" id="310" /> +<TGConnectingPoint num="10" id="311" /> +<TGConnectingPoint num="11" id="312" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="298" > +<father id="313" num="0" /> +<cdparam x="544" y="64" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="299" > +<father id="313" num="1" /> +<cdparam x="644" y="64" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="300" > +<father id="313" num="2" /> +<cdparam x="634" y="94" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="329" > +<cdparam x="951" y="121" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="317" /> +<TGConnectingPoint num="1" id="318" /> +<TGConnectingPoint num="2" id="319" /> +<TGConnectingPoint num="3" id="320" /> +<TGConnectingPoint num="4" id="321" /> +<TGConnectingPoint num="5" id="322" /> +<TGConnectingPoint num="6" id="323" /> +<TGConnectingPoint num="7" id="324" /> +<TGConnectingPoint num="8" id="325" /> +<TGConnectingPoint num="9" id="326" /> +<TGConnectingPoint num="10" id="327" /> +<TGConnectingPoint num="11" id="328" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="314" > +<father id="329" num="0" /> +<cdparam x="876" y="126" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="315" > +<father id="329" num="1" /> +<cdparam x="976" y="126" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="316" > +<father id="329" num="2" /> +<cdparam x="966" y="156" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="345" > +<cdparam x="222" y="145" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="333" /> +<TGConnectingPoint num="1" id="334" /> +<TGConnectingPoint num="2" id="335" /> +<TGConnectingPoint num="3" id="336" /> +<TGConnectingPoint num="4" id="337" /> +<TGConnectingPoint num="5" id="338" /> +<TGConnectingPoint num="6" id="339" /> +<TGConnectingPoint num="7" id="340" /> +<TGConnectingPoint num="8" id="341" /> +<TGConnectingPoint num="9" id="342" /> +<TGConnectingPoint num="10" id="343" /> +<TGConnectingPoint num="11" id="344" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="330" > +<father id="345" num="0" /> +<cdparam x="147" y="150" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="331" > +<father id="345" num="1" /> +<cdparam x="247" y="150" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="332" > +<father id="345" num="2" /> +<cdparam x="237" y="180" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="361" > +<cdparam x="1137" y="195" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="349" /> +<TGConnectingPoint num="1" id="350" /> +<TGConnectingPoint num="2" id="351" /> +<TGConnectingPoint num="3" id="352" /> +<TGConnectingPoint num="4" id="353" /> +<TGConnectingPoint num="5" id="354" /> +<TGConnectingPoint num="6" id="355" /> +<TGConnectingPoint num="7" id="356" /> +<TGConnectingPoint num="8" id="357" /> +<TGConnectingPoint num="9" id="358" /> +<TGConnectingPoint num="10" id="359" /> +<TGConnectingPoint num="11" id="360" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="346" > +<father id="361" num="0" /> +<cdparam x="1062" y="200" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="347" > +<father id="361" num="1" /> +<cdparam x="1162" y="200" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="348" > +<father id="361" num="2" /> +<cdparam x="1152" y="230" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2010" id="364" > +<cdparam x="23" y="353" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="saleStarted" /> +<TGConnectingPoint num="0" id="362" /> +<TGConnectingPoint num="1" id="363" /> +</COMPONENT> + +<COMPONENT type="2010" id="367" > +<cdparam x="139" y="354" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="productBarcodeScanned" /> +<TGConnectingPoint num="0" id="365" /> +<TGConnectingPoint num="1" id="366" /> +</COMPONENT> + +<COMPONENT type="2004" id="370" > +<cdparam x="117" y="264" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="productBarcodeScanned?barCode" /> +<TGConnectingPoint num="0" id="368" /> +<TGConnectingPoint num="1" id="369" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="373" > +<cdparam x="15" y="266" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="371" /> +<TGConnectingPoint num="1" id="372" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="376" > +<cdparam x="348" y="261" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="374" /> +<TGConnectingPoint num="1" id="375" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="379" > +<cdparam x="385" y="502" /> +<sizeparam width="132" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="cashAmountEntered" /> +<TGConnectingPoint num="0" id="377" /> +<TGConnectingPoint num="1" id="378" /> +</COMPONENT> + +<COMPONENT type="2010" id="382" > +<cdparam x="344" y="356" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="saleFinished" /> +<TGConnectingPoint num="0" id="380" /> +<TGConnectingPoint num="1" id="381" /> +</COMPONENT> + +<COMPONENT type="2010" id="385" > +<cdparam x="575" y="505" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="383" /> +<TGConnectingPoint num="1" id="384" /> +</COMPONENT> + +<COMPONENT type="2004" id="388" > +<cdparam x="568" y="423" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="386" /> +<TGConnectingPoint num="1" id="387" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="391" > +<cdparam x="362" y="423" /> +<sizeparam width="181" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered?amount" /> +<TGConnectingPoint num="0" id="389" /> +<TGConnectingPoint num="1" id="390" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="394" > +<cdparam x="699" y="421" /> +<sizeparam width="183" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="creditCardScanned?creditInfo" /> +<TGConnectingPoint num="0" id="392" /> +<TGConnectingPoint num="1" id="393" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="397" > +<cdparam x="735" y="503" /> +<sizeparam width="126" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="creditCardScanned" /> +<TGConnectingPoint num="0" id="395" /> +<TGConnectingPoint num="1" id="396" /> +</COMPONENT> + +<COMPONENT type="2004" id="400" > +<cdparam x="709" y="251" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="pinEntered?pin" /> +<TGConnectingPoint num="0" id="398" /> +<TGConnectingPoint num="1" id="399" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="403" > +<cdparam x="762" y="351" /> +<sizeparam width="80" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="pinEntered" /> +<TGConnectingPoint num="0" id="401" /> +<TGConnectingPoint num="1" id="402" /> +</COMPONENT> + +<COMPONENT type="2004" id="406" > +<cdparam x="866" y="252" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="404" /> +<TGConnectingPoint num="1" id="405" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="409" > +<cdparam x="868" y="324" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="407" /> +<TGConnectingPoint num="1" id="408" /> +</COMPONENT> + +<COMPONENT type="2010" id="412" > +<cdparam x="1036" y="346" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="410" /> +<TGConnectingPoint num="1" id="411" /> +</COMPONENT> + +<COMPONENT type="2004" id="415" > +<cdparam x="1225" y="251" /> +<sizeparam width="181" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="paymentMode?paymentMode" /> +<TGConnectingPoint num="0" id="413" /> +<TGConnectingPoint num="1" id="414" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="418" > +<cdparam x="1024" y="250" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="416" /> +<TGConnectingPoint num="1" id="417" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="421" > +<cdparam x="1233" y="332" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="paymentMode" /> +<TGConnectingPoint num="0" id="419" /> +<TGConnectingPoint num="1" id="420" /> +</COMPONENT> + +<COMPONENT type="2008" id="434" > +<cdparam x="127" y="534" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="422" /> +<TGConnectingPoint num="1" id="423" /> +<TGConnectingPoint num="2" id="424" /> +<TGConnectingPoint num="3" id="425" /> +<TGConnectingPoint num="4" id="426" /> +<TGConnectingPoint num="5" id="427" /> +<TGConnectingPoint num="6" id="428" /> +<TGConnectingPoint num="7" id="429" /> +<TGConnectingPoint num="8" id="430" /> +<TGConnectingPoint num="9" id="431" /> +<TGConnectingPoint num="10" id="432" /> +<TGConnectingPoint num="11" id="433" /> +</COMPONENT> + +<COMPONENT type="2008" id="447" > +<cdparam x="661" y="587" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="435" /> +<TGConnectingPoint num="1" id="436" /> +<TGConnectingPoint num="2" id="437" /> +<TGConnectingPoint num="3" id="438" /> +<TGConnectingPoint num="4" id="439" /> +<TGConnectingPoint num="5" id="440" /> +<TGConnectingPoint num="6" id="441" /> +<TGConnectingPoint num="7" id="442" /> +<TGConnectingPoint num="8" id="443" /> +<TGConnectingPoint num="9" id="444" /> +<TGConnectingPoint num="10" id="445" /> +<TGConnectingPoint num="11" id="446" /> +</COMPONENT> + +<COMPONENT type="2008" id="460" > +<cdparam x="1153" y="478" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="448" /> +<TGConnectingPoint num="1" id="449" /> +<TGConnectingPoint num="2" id="450" /> +<TGConnectingPoint num="3" id="451" /> +<TGConnectingPoint num="4" id="452" /> +<TGConnectingPoint num="5" id="453" /> +<TGConnectingPoint num="6" id="454" /> +<TGConnectingPoint num="7" id="455" /> +<TGConnectingPoint num="8" id="456" /> +<TGConnectingPoint num="9" id="457" /> +<TGConnectingPoint num="10" id="458" /> +<TGConnectingPoint num="11" id="459" /> +</COMPONENT> + +<COMPONENT type="2008" id="473" > +<cdparam x="1111" y="519" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="461" /> +<TGConnectingPoint num="1" id="462" /> +<TGConnectingPoint num="2" id="463" /> +<TGConnectingPoint num="3" id="464" /> +<TGConnectingPoint num="4" id="465" /> +<TGConnectingPoint num="5" id="466" /> +<TGConnectingPoint num="6" id="467" /> +<TGConnectingPoint num="7" id="468" /> +<TGConnectingPoint num="8" id="469" /> +<TGConnectingPoint num="9" id="470" /> +<TGConnectingPoint num="10" id="471" /> +<TGConnectingPoint num="11" id="472" /> +</COMPONENT> + +<COMPONENT type="2008" id="486" > +<cdparam x="661" y="645" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="474" /> +<TGConnectingPoint num="1" id="475" /> +<TGConnectingPoint num="2" id="476" /> +<TGConnectingPoint num="3" id="477" /> +<TGConnectingPoint num="4" id="478" /> +<TGConnectingPoint num="5" id="479" /> +<TGConnectingPoint num="6" id="480" /> +<TGConnectingPoint num="7" id="481" /> +<TGConnectingPoint num="8" id="482" /> +<TGConnectingPoint num="9" id="483" /> +<TGConnectingPoint num="10" id="484" /> +<TGConnectingPoint num="11" id="485" /> +</COMPONENT> + +<COMPONENT type="2001" id="488" > +<cdparam x="645" y="693" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="serveFIFO_stop" /> +<TGConnectingPoint num="0" id="487" /> +</COMPONENT> + +<COMPONENT type="301" id="497" > +<cdparam x="10" y="10" /> +<sizeparam width="210" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value="CashDesk ServeFIFO SubMachine +" /> +<TGConnectingPoint num="0" id="489" /> +<TGConnectingPoint num="1" id="490" /> +<TGConnectingPoint num="2" id="491" /> +<TGConnectingPoint num="3" id="492" /> +<TGConnectingPoint num="4" id="493" /> +<TGConnectingPoint num="5" id="494" /> +<TGConnectingPoint num="6" id="495" /> +<TGConnectingPoint num="7" id="496" /> +<extraparam> +<Line value="CashDesk ServeFIFO SubMachine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="498" > +<cdparam x="563" y="97" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="594" y="69" id="302" /> +<P2 x="232" y="145" id="333" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="499" > +<cdparam x="633" y="97" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="664" y="69" id="303" /> +<P2 x="961" y="121" id="317" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="500" > +<cdparam x="598" y="132" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="629" y="104" id="304" /> +<P2 x="631" y="328" id="283" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="501" > +<cdparam x="540" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="996" y="131" id="319" /> +<P2 x="1147" y="195" id="349" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="502" > +<cdparam x="450" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="232" y="190" id="336" /> +<P2 x="222" y="259" id="368" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="503" > +<cdparam x="537" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="222" y="289" id="369" /> +<P2 x="217" y="349" id="365" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="504" > +<cdparam x="415" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="197" y="155" id="334" /> +<P2 x="56" y="261" id="371" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="505" > +<cdparam x="485" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="267" y="155" id="335" /> +<P2 x="394" y="256" id="374" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="506" > +<cdparam x="64" y="293" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="56" y="291" id="372" /> +<P2 x="64" y="348" id="362" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="507" > +<cdparam x="478" y="292" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="394" y="286" id="375" /> +<P2 x="390" y="351" id="380" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="508" > +<cdparam x="518" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="596" y="338" id="284" /> +<P2 x="452" y="418" id="389" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="509" > +<cdparam x="519" y="445" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="452" y="448" id="390" /> +<P2 x="451" y="497" id="377" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="510" > +<cdparam x="623" y="375" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="631" y="373" id="286" /> +<P2 x="621" y="418" id="386" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="511" > +<cdparam x="629" y="444" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="621" y="448" id="387" /> +<P2 x="628" y="500" id="383" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="512" > +<cdparam x="666" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="666" y="338" id="285" /> +<P2 x="790" y="416" id="392" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="513" > +<cdparam x="798" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="790" y="446" id="393" /> +<P2 x="798" y="498" id="395" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="514" > +<cdparam x="748" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="926" y="131" id="318" /> +<P2 x="761" y="246" id="398" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="515" > +<cdparam x="830" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="761" y="276" id="399" /> +<P2 x="802" y="346" id="401" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="516" > +<cdparam x="899" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="961" y="166" id="320" /> +<P2 x="936" y="247" id="404" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="517" > +<cdparam x="934" y="291" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="936" y="277" id="405" /> +<P2 x="938" y="319" id="407" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="518" > +<cdparam x="1037" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1112" y="205" id="350" /> +<P2 x="1096" y="245" id="416" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="519" > +<cdparam x="1094" y="291" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="1096" y="275" id="417" /> +<P2 x="1108" y="341" id="410" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="520" > +<cdparam x="1133" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1182" y="205" id="351" /> +<P2 x="1315" y="246" id="413" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="521" > +<cdparam x="1278" y="288" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="1315" y="276" id="414" /> +<P2 x="1281" y="327" id="419" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="522" > +<cdparam x="64" y="388" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="64" y="378" id="363" /> +<P2 x="127" y="539" id="423" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="523" > +<cdparam x="223" y="383" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="217" y="379" id="366" /> +<P2 x="132" y="534" id="424" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="524" > +<cdparam x="394" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="390" y="381" id="381" /> +<P2 x="137" y="539" id="425" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="525" > +<cdparam x="465" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="451" y="527" id="378" /> +<P2 x="661" y="592" id="436" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="526" > +<cdparam x="628" y="538" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="628" y="530" id="384" /> +<P2 x="666" y="587" id="437" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="527" > +<cdparam x="796" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="798" y="528" id="396" /> +<P2 x="671" y="592" id="438" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="528" > +<cdparam x="1281" y="357" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="1281" y="357" id="420" /> +<P2 x="1163" y="483" id="451" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="529" > +<cdparam x="1108" y="371" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="1108" y="371" id="411" /> +<P2 x="1158" y="478" id="450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="530" > +<cdparam x="934" y="375" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="938" y="349" id="408" /> +<P2 x="1153" y="483" id="449" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="531" > +<cdparam x="814" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="802" y="376" id="402" /> +<P2 x="1111" y="524" id="462" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="532" > +<cdparam x="1234" y="482" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1158" y="498" id="448" /> +<P2 x="1121" y="524" id="464" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="533" > +<cdparam x="208" y="736" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="132" y="554" id="422" /> +<P2 x="661" y="650" id="475" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="534" > +<cdparam x="656" y="733" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="666" y="607" id="435" /> +<P2 x="666" y="645" id="476" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="535" > +<cdparam x="1088" y="723" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1116" y="539" id="461" /> +<P2 x="671" y="650" id="477" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="536" > +<cdparam x="650" y="793" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="666" y="665" id="474" /> +<P2 x="655" y="688" id="487" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="537" > +<cdparam x="636" y="34" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="630" y="30" id="296" /> +<P2 x="629" y="59" id="301" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="saleStarted" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="539" > +<cdparam x="132" y="11" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="saleStarted_start" /> +<TGConnectingPoint num="0" id="538" /> +</COMPONENT> + +<COMPONENT type="2012" id="542" > +<cdparam x="12" y="144" /> +<sizeparam width="89" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashState=2" /> +<TGConnectingPoint num="0" id="540" /> +<TGConnectingPoint num="1" id="541" /> +</COMPONENT> + +<COMPONENT type="2012" id="545" > +<cdparam x="177" y="140" /> +<sizeparam width="178" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode= NotIdleException" /> +<TGConnectingPoint num="0" id="543" /> +<TGConnectingPoint num="1" id="544" /> +</COMPONENT> + +<COMPONENT type="2008" id="558" > +<cdparam x="133" y="195" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="546" /> +<TGConnectingPoint num="1" id="547" /> +<TGConnectingPoint num="2" id="548" /> +<TGConnectingPoint num="3" id="549" /> +<TGConnectingPoint num="4" id="550" /> +<TGConnectingPoint num="5" id="551" /> +<TGConnectingPoint num="6" id="552" /> +<TGConnectingPoint num="7" id="553" /> +<TGConnectingPoint num="8" id="554" /> +<TGConnectingPoint num="9" id="555" /> +<TGConnectingPoint num="10" id="556" /> +<TGConnectingPoint num="11" id="557" /> +</COMPONENT> + +<COMPONENT type="2001" id="560" > +<cdparam x="127" y="241" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="saleStarted_stop" /> +<TGConnectingPoint num="0" id="559" /> +</COMPONENT> + +<COMPONENT type="2006" id="576" > +<cdparam x="132" y="77" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="564" /> +<TGConnectingPoint num="1" id="565" /> +<TGConnectingPoint num="2" id="566" /> +<TGConnectingPoint num="3" id="567" /> +<TGConnectingPoint num="4" id="568" /> +<TGConnectingPoint num="5" id="569" /> +<TGConnectingPoint num="6" id="570" /> +<TGConnectingPoint num="7" id="571" /> +<TGConnectingPoint num="8" id="572" /> +<TGConnectingPoint num="9" id="573" /> +<TGConnectingPoint num="10" id="574" /> +<TGConnectingPoint num="11" id="575" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="561" > +<father id="576" num="0" /> +<cdparam x="57" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="562" > +<father id="576" num="1" /> +<cdparam x="157" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="563" > +<father id="576" num="2" /> +<cdparam x="147" y="112" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="585" > +<cdparam x="366" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="577" /> +<TGConnectingPoint num="1" id="578" /> +<TGConnectingPoint num="2" id="579" /> +<TGConnectingPoint num="3" id="580" /> +<TGConnectingPoint num="4" id="581" /> +<TGConnectingPoint num="5" id="582" /> +<TGConnectingPoint num="6" id="583" /> +<TGConnectingPoint num="7" id="584" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="586" > +<cdparam x="125" y="33" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="139" y="31" id="538" /> +<P2 x="142" y="77" id="564" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="587" > +<cdparam x="87" y="89" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="107" y="87" id="565" /> +<P2 x="56" y="139" id="540" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="588" > +<cdparam x="58" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="56" y="169" id="541" /> +<P2 x="133" y="200" id="547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="589" > +<cdparam x="220" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="266" y="165" id="544" /> +<P2 x="143" y="200" id="549" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="590" > +<cdparam x="132" y="281" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="138" y="215" id="546" /> +<P2 x="137" y="236" id="559" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="591" > +<cdparam x="157" y="89" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="177" y="87" id="566" /> +<P2 x="266" y="135" id="543" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="592" > +<cdparam x="122" y="124" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="142" y="122" id="567" /> +<P2 x="138" y="195" id="548" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="productBarcodeScanned" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="608" > +<cdparam x="370" y="283" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="596" /> +<TGConnectingPoint num="1" id="597" /> +<TGConnectingPoint num="2" id="598" /> +<TGConnectingPoint num="3" id="599" /> +<TGConnectingPoint num="4" id="600" /> +<TGConnectingPoint num="5" id="601" /> +<TGConnectingPoint num="6" id="602" /> +<TGConnectingPoint num="7" id="603" /> +<TGConnectingPoint num="8" id="604" /> +<TGConnectingPoint num="9" id="605" /> +<TGConnectingPoint num="10" id="606" /> +<TGConnectingPoint num="11" id="607" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="593" > +<father id="608" num="0" /> +<cdparam x="295" y="313" /> +<sizeparam width="148" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[products<(maxNbProd+1)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="594" > +<father id="608" num="1" /> +<cdparam x="401" y="288" /> +<sizeparam width="126" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[products>maxNbProd]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="595" > +<father id="608" num="2" /> +<cdparam x="385" y="318" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="624" > +<cdparam x="302" y="55" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="612" /> +<TGConnectingPoint num="1" id="613" /> +<TGConnectingPoint num="2" id="614" /> +<TGConnectingPoint num="3" id="615" /> +<TGConnectingPoint num="4" id="616" /> +<TGConnectingPoint num="5" id="617" /> +<TGConnectingPoint num="6" id="618" /> +<TGConnectingPoint num="7" id="619" /> +<TGConnectingPoint num="8" id="620" /> +<TGConnectingPoint num="9" id="621" /> +<TGConnectingPoint num="10" id="622" /> +<TGConnectingPoint num="11" id="623" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="609" > +<father id="624" num="0" /> +<cdparam x="227" y="60" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="610" > +<father id="624" num="1" /> +<cdparam x="327" y="60" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="611" > +<father id="624" num="2" /> +<cdparam x="317" y="90" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="626" > +<cdparam x="303" y="18" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="productBarcodeScanned_start" /> +<TGConnectingPoint num="0" id="625" /> +</COMPONENT> + +<COMPONENT type="301" id="635" > +<cdparam x="701" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="627" /> +<TGConnectingPoint num="1" id="628" /> +<TGConnectingPoint num="2" id="629" /> +<TGConnectingPoint num="3" id="630" /> +<TGConnectingPoint num="4" id="631" /> +<TGConnectingPoint num="5" id="632" /> +<TGConnectingPoint num="6" id="633" /> +<TGConnectingPoint num="7" id="634" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="648" > +<cdparam x="355" y="689" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="636" /> +<TGConnectingPoint num="1" id="637" /> +<TGConnectingPoint num="2" id="638" /> +<TGConnectingPoint num="3" id="639" /> +<TGConnectingPoint num="4" id="640" /> +<TGConnectingPoint num="5" id="641" /> +<TGConnectingPoint num="6" id="642" /> +<TGConnectingPoint num="7" id="643" /> +<TGConnectingPoint num="8" id="644" /> +<TGConnectingPoint num="9" id="645" /> +<TGConnectingPoint num="10" id="646" /> +<TGConnectingPoint num="11" id="647" /> +</COMPONENT> + +<COMPONENT type="2002" id="651" > +<cdparam x="240" y="103" /> +<sizeparam width="143" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="getProductReq!barCode" /> +<TGConnectingPoint num="0" id="649" /> +<TGConnectingPoint num="1" id="650" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="654" > +<cdparam x="242" y="566" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="652" /> +<TGConnectingPoint num="1" id="653" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2012" id="657" > +<cdparam x="207" y="333" /> +<sizeparam width="137" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="products=products+1" /> +<TGConnectingPoint num="0" id="655" /> +<TGConnectingPoint num="1" id="656" /> +</COMPONENT> + +<COMPONENT type="2006" id="673" > +<cdparam x="371" y="452" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="661" /> +<TGConnectingPoint num="1" id="662" /> +<TGConnectingPoint num="2" id="663" /> +<TGConnectingPoint num="3" id="664" /> +<TGConnectingPoint num="4" id="665" /> +<TGConnectingPoint num="5" id="666" /> +<TGConnectingPoint num="6" id="667" /> +<TGConnectingPoint num="7" id="668" /> +<TGConnectingPoint num="8" id="669" /> +<TGConnectingPoint num="9" id="670" /> +<TGConnectingPoint num="10" id="671" /> +<TGConnectingPoint num="11" id="672" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="658" > +<father id="673" num="0" /> +<cdparam x="296" y="482" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[expressMode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="659" > +<father id="673" num="1" /> +<cdparam x="416" y="457" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[expressMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="660" > +<father id="673" num="2" /> +<cdparam x="386" y="487" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="686" > +<cdparam x="304" y="524" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="674" /> +<TGConnectingPoint num="1" id="675" /> +<TGConnectingPoint num="2" id="676" /> +<TGConnectingPoint num="3" id="677" /> +<TGConnectingPoint num="4" id="678" /> +<TGConnectingPoint num="5" id="679" /> +<TGConnectingPoint num="6" id="680" /> +<TGConnectingPoint num="7" id="681" /> +<TGConnectingPoint num="8" id="682" /> +<TGConnectingPoint num="9" id="683" /> +<TGConnectingPoint num="10" id="684" /> +<TGConnectingPoint num="11" id="685" /> +</COMPONENT> + +<COMPONENT type="2008" id="699" > +<cdparam x="356" y="706" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="687" /> +<TGConnectingPoint num="1" id="688" /> +<TGConnectingPoint num="2" id="689" /> +<TGConnectingPoint num="3" id="690" /> +<TGConnectingPoint num="4" id="691" /> +<TGConnectingPoint num="5" id="692" /> +<TGConnectingPoint num="6" id="693" /> +<TGConnectingPoint num="7" id="694" /> +<TGConnectingPoint num="8" id="695" /> +<TGConnectingPoint num="9" id="696" /> +<TGConnectingPoint num="10" id="697" /> +<TGConnectingPoint num="11" id="698" /> +</COMPONENT> + +<COMPONENT type="2001" id="701" > +<cdparam x="351" y="742" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="productBarcodeScanned_stop" /> +<TGConnectingPoint num="0" id="700" /> +</COMPONENT> + +<COMPONENT type="2006" id="717" > +<cdparam x="490" y="507" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="705" /> +<TGConnectingPoint num="1" id="706" /> +<TGConnectingPoint num="2" id="707" /> +<TGConnectingPoint num="3" id="708" /> +<TGConnectingPoint num="4" id="709" /> +<TGConnectingPoint num="5" id="710" /> +<TGConnectingPoint num="6" id="711" /> +<TGConnectingPoint num="7" id="712" /> +<TGConnectingPoint num="8" id="713" /> +<TGConnectingPoint num="9" id="714" /> +<TGConnectingPoint num="10" id="715" /> +<TGConnectingPoint num="11" id="716" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="702" > +<father id="717" num="0" /> +<cdparam x="415" y="537" /> +<sizeparam width="148" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[products<(maxNbProd+1)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="703" > +<father id="717" num="1" /> +<cdparam x="535" y="512" /> +<sizeparam width="126" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[products>maxNbProd]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="704" > +<father id="717" num="2" /> +<cdparam x="505" y="565" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="730" > +<cdparam x="382" y="374" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="718" /> +<TGConnectingPoint num="1" id="719" /> +<TGConnectingPoint num="2" id="720" /> +<TGConnectingPoint num="3" id="721" /> +<TGConnectingPoint num="4" id="722" /> +<TGConnectingPoint num="5" id="723" /> +<TGConnectingPoint num="6" id="724" /> +<TGConnectingPoint num="7" id="725" /> +<TGConnectingPoint num="8" id="726" /> +<TGConnectingPoint num="9" id="727" /> +<TGConnectingPoint num="10" id="728" /> +<TGConnectingPoint num="11" id="729" /> +</COMPONENT> + +<COMPONENT type="2004" id="733" > +<cdparam x="226" y="156" /> +<sizeparam width="172" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="getProductResp?productOk" /> +<TGConnectingPoint num="0" id="731" /> +<TGConnectingPoint num="1" id="732" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="749" > +<cdparam x="299" y="214" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="737" /> +<TGConnectingPoint num="1" id="738" /> +<TGConnectingPoint num="2" id="739" /> +<TGConnectingPoint num="3" id="740" /> +<TGConnectingPoint num="4" id="741" /> +<TGConnectingPoint num="5" id="742" /> +<TGConnectingPoint num="6" id="743" /> +<TGConnectingPoint num="7" id="744" /> +<TGConnectingPoint num="8" id="745" /> +<TGConnectingPoint num="9" id="746" /> +<TGConnectingPoint num="10" id="747" /> +<TGConnectingPoint num="11" id="748" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="734" > +<father id="749" num="0" /> +<cdparam x="224" y="219" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[productOk==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="735" > +<father id="749" num="1" /> +<cdparam x="344" y="244" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[productOk==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="736" > +<father id="749" num="2" /> +<cdparam x="314" y="249" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="752" > +<cdparam x="40" y="264" /> +<sizeparam width="232" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=ProductNotFoundException" /> +<TGConnectingPoint num="0" id="750" /> +<TGConnectingPoint num="1" id="751" /> +</COMPONENT> + +<COMPONENT type="2012" id="755" > +<cdparam x="448" y="613" /> +<sizeparam width="282" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=ExceedNumberOfProductsException" /> +<TGConnectingPoint num="0" id="753" /> +<TGConnectingPoint num="1" id="754" /> +</COMPONENT> + +<CONNECTOR type="121" id="756" > +<cdparam x="314" y="118" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="310" y="38" id="625" /> +<P2 x="312" y="55" id="612" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="759" > +<cdparam x="279" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="277" y="65" id="613" /> +<P2 x="356" y="711" id="688" /> +<Point x="27" y="120" /> +<Point x="21" y="695" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="757" > +<father id="759" num="0" /> +<cdparam x="27" y="120" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="758" > +<father id="759" num="1" /> +<cdparam x="21" y="695" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="762" > +<cdparam x="349" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="347" y="65" id="614" /> +<P2 x="366" y="711" id="690" /> +<Point x="752" y="114" /> +<Point x="759" y="696" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="760" > +<father id="762" num="0" /> +<cdparam x="752" y="114" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="761" > +<father id="762" num="1" /> +<cdparam x="759" y="696" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="763" > +<cdparam x="314" y="202" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="312" y="100" id="615" /> +<P2 x="311" y="98" id="649" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="764" > +<cdparam x="314" y="245" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to action state" value="null" /> +<P1 x="311" y="128" id="650" /> +<P2 x="312" y="151" id="731" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="765" > +<cdparam x="344" y="337" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="346" y="462" id="662" /> +<P2 x="304" y="529" id="675" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="766" > +<cdparam x="390" y="263" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to choice" value="null" /> +<P1 x="275" y="358" id="656" /> +<P2 x="382" y="379" id="719" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="767" > +<cdparam x="382" y="485" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="309" y="544" id="674" /> +<P2 x="307" y="561" id="652" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="768" > +<cdparam x="418" y="325" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="416" y="462" id="663" /> +<P2 x="500" y="507" id="705" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="769" > +<cdparam x="448" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="465" y="517" id="706" /> +<P2 x="314" y="529" id="677" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="770" > +<cdparam x="518" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="535" y="517" id="707" /> +<P2 x="589" y="608" id="753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="771" > +<cdparam x="314" y="680" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="360" y="709" id="636" /> +<P2 x="361" y="706" id="689" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="772" > +<cdparam x="638" y="430" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="589" y="638" id="754" /> +<P2 x="365" y="694" id="639" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="773" > +<cdparam x="314" y="708" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="361" y="726" id="687" /> +<P2 x="361" y="737" id="700" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="774" > +<cdparam x="252" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="307" y="591" id="653" /> +<P2 x="360" y="689" id="638" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="775" > +<cdparam x="549" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="345" y="293" id="597" /> +<P2 x="275" y="328" id="655" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="776" > +<cdparam x="444" y="246" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="387" y="394" id="718" /> +<P2 x="381" y="452" id="661" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="778" > +<cdparam x="425" y="141" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="415" y="293" id="598" /> +<P2 x="392" y="379" id="721" /> +<Point x="515" y="354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="777" > +<father id="778" num="0" /> +<cdparam x="515" y="354" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="779" > +<cdparam x="312" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="312" y="181" id="732" /> +<P2 x="309" y="214" id="737" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="781" > +<cdparam x="344" y="224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="344" y="224" id="739" /> +<P2 x="380" y="283" id="596" /> +<Point x="377" y="226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="780" > +<father id="781" num="0" /> +<cdparam x="377" y="226" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="782" > +<cdparam x="274" y="224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="274" y="224" id="738" /> +<P2 x="156" y="259" id="750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="784" > +<cdparam x="158" y="289" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="156" y="289" id="751" /> +<P2 x="355" y="694" id="637" /> +<Point x="156" y="633" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="783" > +<father id="784" num="0" /> +<cdparam x="156" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="saleFinished" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="800" > +<cdparam x="143" y="66" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="788" /> +<TGConnectingPoint num="1" id="789" /> +<TGConnectingPoint num="2" id="790" /> +<TGConnectingPoint num="3" id="791" /> +<TGConnectingPoint num="4" id="792" /> +<TGConnectingPoint num="5" id="793" /> +<TGConnectingPoint num="6" id="794" /> +<TGConnectingPoint num="7" id="795" /> +<TGConnectingPoint num="8" id="796" /> +<TGConnectingPoint num="9" id="797" /> +<TGConnectingPoint num="10" id="798" /> +<TGConnectingPoint num="11" id="799" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="785" > +<father id="800" num="0" /> +<cdparam x="68" y="71" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==2]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="786" > +<father id="800" num="1" /> +<cdparam x="188" y="71" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="787" > +<father id="800" num="2" /> +<cdparam x="158" y="101" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==0]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="802" > +<cdparam x="147" y="20" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="saleFinished_start" /> +<TGConnectingPoint num="0" id="801" /> +</COMPONENT> + +<COMPONENT type="2012" id="805" > +<cdparam x="25" y="121" /> +<sizeparam width="89" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashState=1" /> +<TGConnectingPoint num="0" id="803" /> +<TGConnectingPoint num="1" id="804" /> +</COMPONENT> + +<COMPONENT type="2012" id="808" > +<cdparam x="127" y="197" /> +<sizeparam width="228" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=SaleNotFinishedException" /> +<TGConnectingPoint num="0" id="806" /> +<TGConnectingPoint num="1" id="807" /> +</COMPONENT> + +<COMPONENT type="2008" id="821" > +<cdparam x="136" y="252" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="809" /> +<TGConnectingPoint num="1" id="810" /> +<TGConnectingPoint num="2" id="811" /> +<TGConnectingPoint num="3" id="812" /> +<TGConnectingPoint num="4" id="813" /> +<TGConnectingPoint num="5" id="814" /> +<TGConnectingPoint num="6" id="815" /> +<TGConnectingPoint num="7" id="816" /> +<TGConnectingPoint num="8" id="817" /> +<TGConnectingPoint num="9" id="818" /> +<TGConnectingPoint num="10" id="819" /> +<TGConnectingPoint num="11" id="820" /> +</COMPONENT> + +<COMPONENT type="2001" id="823" > +<cdparam x="132" y="298" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="saleFinished_stop" /> +<TGConnectingPoint num="0" id="822" /> +</COMPONENT> + +<COMPONENT type="301" id="832" > +<cdparam x="287" y="12" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="824" /> +<TGConnectingPoint num="1" id="825" /> +<TGConnectingPoint num="2" id="826" /> +<TGConnectingPoint num="3" id="827" /> +<TGConnectingPoint num="4" id="828" /> +<TGConnectingPoint num="5" id="829" /> +<TGConnectingPoint num="6" id="830" /> +<TGConnectingPoint num="7" id="831" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="845" > +<cdparam x="239" y="148" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="833" /> +<TGConnectingPoint num="1" id="834" /> +<TGConnectingPoint num="2" id="835" /> +<TGConnectingPoint num="3" id="836" /> +<TGConnectingPoint num="4" id="837" /> +<TGConnectingPoint num="5" id="838" /> +<TGConnectingPoint num="6" id="839" /> +<TGConnectingPoint num="7" id="840" /> +<TGConnectingPoint num="8" id="841" /> +<TGConnectingPoint num="9" id="842" /> +<TGConnectingPoint num="10" id="843" /> +<TGConnectingPoint num="11" id="844" /> +</COMPONENT> + +<CONNECTOR type="121" id="846" > +<cdparam x="156" y="76" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="154" y="40" id="801" /> +<P2 x="153" y="66" id="788" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="847" > +<cdparam x="79" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="69" y="146" id="804" /> +<P2 x="136" y="257" id="810" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="848" > +<cdparam x="241" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="241" y="222" id="807" /> +<P2 x="146" y="257" id="812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="849" > +<cdparam x="153" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="141" y="272" id="809" /> +<P2 x="142" y="293" id="822" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="850" > +<cdparam x="118" y="132" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="118" y="76" id="789" /> +<P2 x="69" y="116" id="803" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="851" > +<cdparam x="153" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="153" y="111" id="791" /> +<P2 x="239" y="153" id="834" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="852" > +<cdparam x="188" y="132" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="188" y="76" id="790" /> +<P2 x="249" y="153" id="836" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="853" > +<cdparam x="202" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="244" y="168" id="833" /> +<P2 x="241" y="192" id="806" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="cashAmountEntered" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="855" > +<cdparam x="403" y="42" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="cashAmountEntered_start" /> +<TGConnectingPoint num="0" id="854" /> +</COMPONENT> + +<COMPONENT type="2002" id="858" > +<cdparam x="4" y="266" /> +<sizeparam width="238" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated!changeAmount" /> +<TGConnectingPoint num="0" id="856" /> +<TGConnectingPoint num="1" id="857" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="860" > +<cdparam x="398" y="365" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="cashAmountEntered_stop" /> +<TGConnectingPoint num="0" id="859" /> +</COMPONENT> + +<COMPONENT type="301" id="869" > +<cdparam x="575" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="861" /> +<TGConnectingPoint num="1" id="862" /> +<TGConnectingPoint num="2" id="863" /> +<TGConnectingPoint num="3" id="864" /> +<TGConnectingPoint num="4" id="865" /> +<TGConnectingPoint num="5" id="866" /> +<TGConnectingPoint num="6" id="867" /> +<TGConnectingPoint num="7" id="868" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="882" > +<cdparam x="405" y="312" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="870" /> +<TGConnectingPoint num="1" id="871" /> +<TGConnectingPoint num="2" id="872" /> +<TGConnectingPoint num="3" id="873" /> +<TGConnectingPoint num="4" id="874" /> +<TGConnectingPoint num="5" id="875" /> +<TGConnectingPoint num="6" id="876" /> +<TGConnectingPoint num="7" id="877" /> +<TGConnectingPoint num="8" id="878" /> +<TGConnectingPoint num="9" id="879" /> +<TGConnectingPoint num="10" id="880" /> +<TGConnectingPoint num="11" id="881" /> +</COMPONENT> + +<COMPONENT type="2006" id="898" > +<cdparam x="397" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="886" /> +<TGConnectingPoint num="1" id="887" /> +<TGConnectingPoint num="2" id="888" /> +<TGConnectingPoint num="3" id="889" /> +<TGConnectingPoint num="4" id="890" /> +<TGConnectingPoint num="5" id="891" /> +<TGConnectingPoint num="6" id="892" /> +<TGConnectingPoint num="7" id="893" /> +<TGConnectingPoint num="8" id="894" /> +<TGConnectingPoint num="9" id="895" /> +<TGConnectingPoint num="10" id="896" /> +<TGConnectingPoint num="11" id="897" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="883" > +<father id="898" num="0" /> +<cdparam x="322" y="115" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="884" > +<father id="898" num="1" /> +<cdparam x="422" y="111" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="885" > +<father id="898" num="2" /> +<cdparam x="412" y="144" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="911" > +<cdparam x="635" y="174" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="899" /> +<TGConnectingPoint num="1" id="900" /> +<TGConnectingPoint num="2" id="901" /> +<TGConnectingPoint num="3" id="902" /> +<TGConnectingPoint num="4" id="903" /> +<TGConnectingPoint num="5" id="904" /> +<TGConnectingPoint num="6" id="905" /> +<TGConnectingPoint num="7" id="906" /> +<TGConnectingPoint num="8" id="907" /> +<TGConnectingPoint num="9" id="908" /> +<TGConnectingPoint num="10" id="909" /> +<TGConnectingPoint num="11" id="910" /> +</COMPONENT> + +<COMPONENT type="2012" id="914" > +<cdparam x="547" y="251" /> +<sizeparam width="192" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotPayingException" /> +<TGConnectingPoint num="0" id="912" /> +<TGConnectingPoint num="1" id="913" /> +</COMPONENT> + +<COMPONENT type="2006" id="930" > +<cdparam x="213" y="168" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="918" /> +<TGConnectingPoint num="1" id="919" /> +<TGConnectingPoint num="2" id="920" /> +<TGConnectingPoint num="3" id="921" /> +<TGConnectingPoint num="4" id="922" /> +<TGConnectingPoint num="5" id="923" /> +<TGConnectingPoint num="6" id="924" /> +<TGConnectingPoint num="7" id="925" /> +<TGConnectingPoint num="8" id="926" /> +<TGConnectingPoint num="9" id="927" /> +<TGConnectingPoint num="10" id="928" /> +<TGConnectingPoint num="11" id="929" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="915" > +<father id="930" num="0" /> +<cdparam x="138" y="191" /> +<sizeparam width="104" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="916" > +<father id="930" num="1" /> +<cdparam x="238" y="173" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="917" > +<father id="930" num="2" /> +<cdparam x="231" y="213" /> +<sizeparam width="129" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[not(paymentMode==1)]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="933" > +<cdparam x="260" y="249" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="931" /> +<TGConnectingPoint num="1" id="932" /> +</COMPONENT> + +<COMPONENT type="301" id="942" > +<cdparam x="10" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="934" /> +<TGConnectingPoint num="1" id="935" /> +<TGConnectingPoint num="2" id="936" /> +<TGConnectingPoint num="3" id="937" /> +<TGConnectingPoint num="4" id="938" /> +<TGConnectingPoint num="5" id="939" /> +<TGConnectingPoint num="6" id="940" /> +<TGConnectingPoint num="7" id="941" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="943" > +<cdparam x="310" y="64" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="410" y="62" id="854" /> +<P2 x="407" y="106" id="886" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="944" > +<cdparam x="304" y="632" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="410" y="332" id="870" /> +<P2 x="408" y="360" id="859" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="945" > +<cdparam x="407" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="407" y="151" id="889" /> +<P2 x="635" y="179" id="900" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="946" > +<cdparam x="442" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="442" y="116" id="888" /> +<P2 x="640" y="174" id="901" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="947" > +<cdparam x="556" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="640" y="194" id="899" /> +<P2 x="643" y="246" id="912" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="948" > +<cdparam x="588" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="643" y="276" id="913" /> +<P2 x="415" y="317" id="873" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="949" > +<cdparam x="372" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="372" y="116" id="887" /> +<P2 x="223" y="168" id="918" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="950" > +<cdparam x="265" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="223" y="213" id="921" /> +<P2 x="385" y="244" id="931" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="951" > +<cdparam x="418" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="385" y="274" id="932" /> +<P2 x="410" y="312" id="872" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="953" > +<cdparam x="230" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="188" y="178" id="919" /> +<P2 x="123" y="261" id="856" /> +<Point x="115" y="176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="952" > +<father id="953" num="0" /> +<cdparam x="115" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="954" > +<cdparam x="165" y="301" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="123" y="291" id="857" /> +<P2 x="405" y="317" id="871" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="cashBoxClosed" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="2006" id="970" > +<cdparam x="246" y="121" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="958" /> +<TGConnectingPoint num="1" id="959" /> +<TGConnectingPoint num="2" id="960" /> +<TGConnectingPoint num="3" id="961" /> +<TGConnectingPoint num="4" id="962" /> +<TGConnectingPoint num="5" id="963" /> +<TGConnectingPoint num="6" id="964" /> +<TGConnectingPoint num="7" id="965" /> +<TGConnectingPoint num="8" id="966" /> +<TGConnectingPoint num="9" id="967" /> +<TGConnectingPoint num="10" id="968" /> +<TGConnectingPoint num="11" id="969" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="955" > +<father id="970" num="0" /> +<cdparam x="171" y="151" /> +<sizeparam width="214" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==paymentMode_CASH]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="956" > +<father id="970" num="1" /> +<cdparam x="271" y="126" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="957" > +<father id="970" num="2" /> +<cdparam x="281" y="181" /> +<sizeparam width="239" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[not(paymentMode==paymentMode_CASH)]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="986" > +<cdparam x="466" y="77" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="974" /> +<TGConnectingPoint num="1" id="975" /> +<TGConnectingPoint num="2" id="976" /> +<TGConnectingPoint num="3" id="977" /> +<TGConnectingPoint num="4" id="978" /> +<TGConnectingPoint num="5" id="979" /> +<TGConnectingPoint num="6" id="980" /> +<TGConnectingPoint num="7" id="981" /> +<TGConnectingPoint num="8" id="982" /> +<TGConnectingPoint num="9" id="983" /> +<TGConnectingPoint num="10" id="984" /> +<TGConnectingPoint num="11" id="985" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="971" > +<father id="986" num="0" /> +<cdparam x="391" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="972" > +<father id="986" num="1" /> +<cdparam x="491" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="973" > +<father id="986" num="2" /> +<cdparam x="481" y="112" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="989" > +<cdparam x="11" y="238" /> +<sizeparam width="182" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode_CASH" /> +<TGConnectingPoint num="0" id="987" /> +<TGConnectingPoint num="1" id="988" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2000" id="991" > +<cdparam x="468" y="13" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="cashBoxClosed_start" /> +<TGConnectingPoint num="0" id="990" /> +</COMPONENT> + +<COMPONENT type="301" id="1000" > +<cdparam x="672" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="992" /> +<TGConnectingPoint num="1" id="993" /> +<TGConnectingPoint num="2" id="994" /> +<TGConnectingPoint num="3" id="995" /> +<TGConnectingPoint num="4" id="996" /> +<TGConnectingPoint num="5" id="997" /> +<TGConnectingPoint num="6" id="998" /> +<TGConnectingPoint num="7" id="999" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="1013" > +<cdparam x="592" y="201" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1001" /> +<TGConnectingPoint num="1" id="1002" /> +<TGConnectingPoint num="2" id="1003" /> +<TGConnectingPoint num="3" id="1004" /> +<TGConnectingPoint num="4" id="1005" /> +<TGConnectingPoint num="5" id="1006" /> +<TGConnectingPoint num="6" id="1007" /> +<TGConnectingPoint num="7" id="1008" /> +<TGConnectingPoint num="8" id="1009" /> +<TGConnectingPoint num="9" id="1010" /> +<TGConnectingPoint num="10" id="1011" /> +<TGConnectingPoint num="11" id="1012" /> +</COMPONENT> + +<COMPONENT type="2012" id="1016" > +<cdparam x="508" y="234" /> +<sizeparam width="192" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotPayingException" /> +<TGConnectingPoint num="0" id="1014" /> +<TGConnectingPoint num="1" id="1015" /> +</COMPONENT> + +<COMPONENT type="2012" id="1019" > +<cdparam x="216" y="233" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="1017" /> +<TGConnectingPoint num="1" id="1018" /> +</COMPONENT> + +<COMPONENT type="301" id="1028" > +<cdparam x="659" y="125" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1020" /> +<TGConnectingPoint num="1" id="1021" /> +<TGConnectingPoint num="2" id="1022" /> +<TGConnectingPoint num="3" id="1023" /> +<TGConnectingPoint num="4" id="1024" /> +<TGConnectingPoint num="5" id="1025" /> +<TGConnectingPoint num="6" id="1026" /> +<TGConnectingPoint num="7" id="1027" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="1030" > +<cdparam x="365" y="374" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="cashBoxClosed_stop" /> +<TGConnectingPoint num="0" id="1029" /> +</COMPONENT> + +<COMPONENT type="2008" id="1043" > +<cdparam x="372" y="323" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1031" /> +<TGConnectingPoint num="1" id="1032" /> +<TGConnectingPoint num="2" id="1033" /> +<TGConnectingPoint num="3" id="1034" /> +<TGConnectingPoint num="4" id="1035" /> +<TGConnectingPoint num="5" id="1036" /> +<TGConnectingPoint num="6" id="1037" /> +<TGConnectingPoint num="7" id="1038" /> +<TGConnectingPoint num="8" id="1039" /> +<TGConnectingPoint num="9" id="1040" /> +<TGConnectingPoint num="10" id="1041" /> +<TGConnectingPoint num="11" id="1042" /> +</COMPONENT> + +<COMPONENT type="2010" id="1046" > +<cdparam x="124" y="308" /> +<sizeparam width="36" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="init" /> +<TGConnectingPoint num="0" id="1044" /> +<TGConnectingPoint num="1" id="1045" /> +</COMPONENT> + +<CONNECTOR type="121" id="1047" > +<cdparam x="590" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="475" y="33" id="990" /> +<P2 x="476" y="77" id="974" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1048" > +<cdparam x="784" y="197" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="476" y="122" id="977" /> +<P2 x="592" y="206" id="1002" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1049" > +<cdparam x="819" y="162" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="511" y="87" id="976" /> +<P2 x="597" y="201" id="1003" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1050" > +<cdparam x="933" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="597" y="221" id="1001" /> +<P2 x="604" y="229" id="1014" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1051" > +<cdparam x="652" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="441" y="87" id="975" /> +<P2 x="256" y="121" id="958" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1052" > +<cdparam x="545" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="256" y="166" id="961" /> +<P2 x="341" y="228" id="1017" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1053" > +<cdparam x="824" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="341" y="258" id="1018" /> +<P2 x="377" y="323" id="1033" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1054" > +<cdparam x="1105" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="604" y="259" id="1015" /> +<P2 x="382" y="328" id="1034" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1055" > +<cdparam x="488" y="569" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="377" y="343" id="1031" /> +<P2 x="375" y="369" id="1029" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1056" > +<cdparam x="317" y="149" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="221" y="131" id="959" /> +<P2 x="102" y="233" id="987" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1057" > +<cdparam x="110" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="102" y="263" id="988" /> +<P2 x="142" y="303" id="1044" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1058" > +<cdparam x="192" y="489" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="142" y="333" id="1045" /> +<P2 x="372" y="328" id="1032" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="creditCardScanned" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1060" > +<cdparam x="232" y="21" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="creditCardScanned_start" /> +<TGConnectingPoint num="0" id="1059" /> +</COMPONENT> + +<COMPONENT type="2006" id="1076" > +<cdparam x="227" y="90" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1064" /> +<TGConnectingPoint num="1" id="1065" /> +<TGConnectingPoint num="2" id="1066" /> +<TGConnectingPoint num="3" id="1067" /> +<TGConnectingPoint num="4" id="1068" /> +<TGConnectingPoint num="5" id="1069" /> +<TGConnectingPoint num="6" id="1070" /> +<TGConnectingPoint num="7" id="1071" /> +<TGConnectingPoint num="8" id="1072" /> +<TGConnectingPoint num="9" id="1073" /> +<TGConnectingPoint num="10" id="1074" /> +<TGConnectingPoint num="11" id="1075" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1061" > +<father id="1076" num="0" /> +<cdparam x="152" y="95" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[expressMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1062" > +<father id="1076" num="1" /> +<cdparam x="252" y="95" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1063" > +<father id="1076" num="2" /> +<cdparam x="246" y="126" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[expressMode==0]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1079" > +<cdparam x="18" y="185" /> +<sizeparam width="268" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotAcceptingCreditCardException" /> +<TGConnectingPoint num="0" id="1077" /> +<TGConnectingPoint num="1" id="1078" /> +</COMPONENT> + +<COMPONENT type="2006" id="1095" > +<cdparam x="466" y="165" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1083" /> +<TGConnectingPoint num="1" id="1084" /> +<TGConnectingPoint num="2" id="1085" /> +<TGConnectingPoint num="3" id="1086" /> +<TGConnectingPoint num="4" id="1087" /> +<TGConnectingPoint num="5" id="1088" /> +<TGConnectingPoint num="6" id="1089" /> +<TGConnectingPoint num="7" id="1090" /> +<TGConnectingPoint num="8" id="1091" /> +<TGConnectingPoint num="9" id="1092" /> +<TGConnectingPoint num="10" id="1093" /> +<TGConnectingPoint num="11" id="1094" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1080" > +<father id="1095" num="0" /> +<cdparam x="397" y="195" /> +<sizeparam width="215" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==paymentMode_CARD]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1081" > +<father id="1095" num="1" /> +<cdparam x="511" y="170" /> +<sizeparam width="240" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[not(paymentMode==paymentMode_CARD)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1082" > +<father id="1095" num="2" /> +<cdparam x="481" y="200" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1104" > +<cdparam x="535" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1096" /> +<TGConnectingPoint num="1" id="1097" /> +<TGConnectingPoint num="2" id="1098" /> +<TGConnectingPoint num="3" id="1099" /> +<TGConnectingPoint num="4" id="1100" /> +<TGConnectingPoint num="5" id="1101" /> +<TGConnectingPoint num="6" id="1102" /> +<TGConnectingPoint num="7" id="1103" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1120" > +<cdparam x="350" y="259" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1108" /> +<TGConnectingPoint num="1" id="1109" /> +<TGConnectingPoint num="2" id="1110" /> +<TGConnectingPoint num="3" id="1111" /> +<TGConnectingPoint num="4" id="1112" /> +<TGConnectingPoint num="5" id="1113" /> +<TGConnectingPoint num="6" id="1114" /> +<TGConnectingPoint num="7" id="1115" /> +<TGConnectingPoint num="8" id="1116" /> +<TGConnectingPoint num="9" id="1117" /> +<TGConnectingPoint num="10" id="1118" /> +<TGConnectingPoint num="11" id="1119" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1105" > +<father id="1120" num="0" /> +<cdparam x="275" y="289" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1106" > +<father id="1120" num="1" /> +<cdparam x="375" y="264" /> +<sizeparam width="107" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[not(cashState==1)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1107" > +<father id="1120" num="2" /> +<cdparam x="365" y="294" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1129" > +<cdparam x="379" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="1121" /> +<TGConnectingPoint num="1" id="1122" /> +<TGConnectingPoint num="2" id="1123" /> +<TGConnectingPoint num="3" id="1124" /> +<TGConnectingPoint num="4" id="1125" /> +<TGConnectingPoint num="5" id="1126" /> +<TGConnectingPoint num="6" id="1127" /> +<TGConnectingPoint num="7" id="1128" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="1132" > +<cdparam x="280" y="345" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="scannedOk" /> +<TGConnectingPoint num="0" id="1130" /> +<TGConnectingPoint num="1" id="1131" /> +</COMPONENT> + +<COMPONENT type="2008" id="1145" > +<cdparam x="306" y="429" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1133" /> +<TGConnectingPoint num="1" id="1134" /> +<TGConnectingPoint num="2" id="1135" /> +<TGConnectingPoint num="3" id="1136" /> +<TGConnectingPoint num="4" id="1137" /> +<TGConnectingPoint num="5" id="1138" /> +<TGConnectingPoint num="6" id="1139" /> +<TGConnectingPoint num="7" id="1140" /> +<TGConnectingPoint num="8" id="1141" /> +<TGConnectingPoint num="9" id="1142" /> +<TGConnectingPoint num="10" id="1143" /> +<TGConnectingPoint num="11" id="1144" /> +</COMPONENT> + +<COMPONENT type="2001" id="1147" > +<cdparam x="301" y="465" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="creditCardScanned_stop" /> +<TGConnectingPoint num="0" id="1146" /> +</COMPONENT> + +<COMPONENT type="2008" id="1160" > +<cdparam x="306" y="440" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1148" /> +<TGConnectingPoint num="1" id="1149" /> +<TGConnectingPoint num="2" id="1150" /> +<TGConnectingPoint num="3" id="1151" /> +<TGConnectingPoint num="4" id="1152" /> +<TGConnectingPoint num="5" id="1153" /> +<TGConnectingPoint num="6" id="1154" /> +<TGConnectingPoint num="7" id="1155" /> +<TGConnectingPoint num="8" id="1156" /> +<TGConnectingPoint num="9" id="1157" /> +<TGConnectingPoint num="10" id="1158" /> +<TGConnectingPoint num="11" id="1159" /> +</COMPONENT> + +<COMPONENT type="2012" id="1163" > +<cdparam x="408" y="297" /> +<sizeparam width="192" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotPayingException" /> +<TGConnectingPoint num="0" id="1161" /> +<TGConnectingPoint num="1" id="1162" /> +</COMPONENT> + +<COMPONENT type="2012" id="1166" > +<cdparam x="678" y="290" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="1164" /> +<TGConnectingPoint num="1" id="1165" /> +</COMPONENT> + +<CONNECTOR type="121" id="1167" > +<cdparam x="239" y="41" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="239" y="41" id="1059" /> +<P2 x="237" y="90" id="1064" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1168" > +<cdparam x="277" y="168" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="202" y="100" id="1065" /> +<P2 x="152" y="180" id="1077" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1169" > +<cdparam x="312" y="203" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="237" y="135" id="1067" /> +<P2 x="476" y="165" id="1083" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1170" > +<cdparam x="465" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="511" y="175" id="1085" /> +<P2 x="803" y="285" id="1164" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1171" > +<cdparam x="395" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="441" y="175" id="1084" /> +<P2 x="360" y="259" id="1108" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1172" > +<cdparam x="337" y="357" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to state" value="null" /> +<P1 x="325" y="269" id="1109" /> +<P2 x="321" y="340" id="1130" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1173" > +<cdparam x="313" y="607" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="311" y="449" id="1133" /> +<P2 x="311" y="440" id="1150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1174" > +<cdparam x="133" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="152" y="210" id="1078" /> +<P2 x="306" y="434" id="1134" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1175" > +<cdparam x="281" y="476" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to junction" value="null" /> +<P1 x="321" y="370" id="1131" /> +<P2 x="311" y="429" id="1135" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1176" > +<cdparam x="737" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="803" y="315" id="1165" /> +<P2 x="316" y="445" id="1151" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1177" > +<cdparam x="347" y="482" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="311" y="460" id="1148" /> +<P2 x="311" y="460" id="1146" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1178" > +<cdparam x="395" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="395" y="269" id="1110" /> +<P2 x="504" y="292" id="1161" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1179" > +<cdparam x="529" y="346" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="504" y="322" id="1162" /> +<P2 x="316" y="434" id="1136" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="pinEntered" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="1195" > +<cdparam x="116" y="307" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1183" /> +<TGConnectingPoint num="1" id="1184" /> +<TGConnectingPoint num="2" id="1185" /> +<TGConnectingPoint num="3" id="1186" /> +<TGConnectingPoint num="4" id="1187" /> +<TGConnectingPoint num="5" id="1188" /> +<TGConnectingPoint num="6" id="1189" /> +<TGConnectingPoint num="7" id="1190" /> +<TGConnectingPoint num="8" id="1191" /> +<TGConnectingPoint num="9" id="1192" /> +<TGConnectingPoint num="10" id="1193" /> +<TGConnectingPoint num="11" id="1194" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1180" > +<father id="1195" num="0" /> +<cdparam x="41" y="331" /> +<sizeparam width="40" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[info>0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1181" > +<father id="1195" num="1" /> +<cdparam x="141" y="312" /> +<sizeparam width="47" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[info==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1182" > +<father id="1195" num="2" /> +<cdparam x="131" y="342" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="1197" > +<cdparam x="273" y="17" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="pinEntered_start" /> +<TGConnectingPoint num="0" id="1196" /> +</COMPONENT> + +<COMPONENT type="2012" id="1200" > +<cdparam x="255" y="380" /> +<sizeparam width="231" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=InvalidCreditCardException" /> +<TGConnectingPoint num="0" id="1198" /> +<TGConnectingPoint num="1" id="1199" /> +</COMPONENT> + +<COMPONENT type="2002" id="1203" > +<cdparam x="185" y="52" /> +<sizeparam width="175" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardReq!creditInfo!pin" /> +<TGConnectingPoint num="0" id="1201" /> +<TGConnectingPoint num="1" id="1202" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1219" > +<cdparam x="253" y="172" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1207" /> +<TGConnectingPoint num="1" id="1208" /> +<TGConnectingPoint num="2" id="1209" /> +<TGConnectingPoint num="3" id="1210" /> +<TGConnectingPoint num="4" id="1211" /> +<TGConnectingPoint num="5" id="1212" /> +<TGConnectingPoint num="6" id="1213" /> +<TGConnectingPoint num="7" id="1214" /> +<TGConnectingPoint num="8" id="1215" /> +<TGConnectingPoint num="9" id="1216" /> +<TGConnectingPoint num="10" id="1217" /> +<TGConnectingPoint num="11" id="1218" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1204" > +<father id="1219" num="0" /> +<cdparam x="178" y="179" /> +<sizeparam width="91" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[transactionId>0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1205" > +<father id="1219" num="1" /> +<cdparam x="290" y="202" /> +<sizeparam width="98" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[transactionId==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1206" > +<father id="1219" num="2" /> +<cdparam x="268" y="207" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="1232" > +<cdparam x="374" y="307" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1220" /> +<TGConnectingPoint num="1" id="1221" /> +<TGConnectingPoint num="2" id="1222" /> +<TGConnectingPoint num="3" id="1223" /> +<TGConnectingPoint num="4" id="1224" /> +<TGConnectingPoint num="5" id="1225" /> +<TGConnectingPoint num="6" id="1226" /> +<TGConnectingPoint num="7" id="1227" /> +<TGConnectingPoint num="8" id="1228" /> +<TGConnectingPoint num="9" id="1229" /> +<TGConnectingPoint num="10" id="1230" /> +<TGConnectingPoint num="11" id="1231" /> +</COMPONENT> + +<COMPONENT type="2002" id="1235" > +<cdparam x="14" y="212" /> +<sizeparam width="161" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardReq!transactionId" /> +<TGConnectingPoint num="0" id="1233" /> +<TGConnectingPoint num="1" id="1234" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1238" > +<cdparam x="12" y="370" /> +<sizeparam width="183" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode_CARD" /> +<TGConnectingPoint num="0" id="1236" /> +<TGConnectingPoint num="1" id="1237" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="1241" > +<cdparam x="82" y="440" /> +<sizeparam width="36" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="init" /> +<TGConnectingPoint num="0" id="1239" /> +<TGConnectingPoint num="1" id="1240" /> +</COMPONENT> + +<COMPONENT type="2008" id="1254" > +<cdparam x="180" y="497" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1242" /> +<TGConnectingPoint num="1" id="1243" /> +<TGConnectingPoint num="2" id="1244" /> +<TGConnectingPoint num="3" id="1245" /> +<TGConnectingPoint num="4" id="1246" /> +<TGConnectingPoint num="5" id="1247" /> +<TGConnectingPoint num="6" id="1248" /> +<TGConnectingPoint num="7" id="1249" /> +<TGConnectingPoint num="8" id="1250" /> +<TGConnectingPoint num="9" id="1251" /> +<TGConnectingPoint num="10" id="1252" /> +<TGConnectingPoint num="11" id="1253" /> +</COMPONENT> + +<COMPONENT type="2001" id="1256" > +<cdparam x="182" y="574" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="pinEntered_stop" /> +<TGConnectingPoint num="0" id="1255" /> +</COMPONENT> + +<COMPONENT type="2004" id="1259" > +<cdparam x="183" y="100" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardResp?transactionId" /> +<TGConnectingPoint num="0" id="1257" /> +<TGConnectingPoint num="1" id="1258" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1262" > +<cdparam x="24" y="260" /> +<sizeparam width="131" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardResp?info" /> +<TGConnectingPoint num="0" id="1260" /> +<TGConnectingPoint num="1" id="1261" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="1263" > +<cdparam x="204" y="312" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="298" y="182" id="1209" /> +<P2 x="379" y="307" id="1222" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1264" > +<cdparam x="723" y="310" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="379" y="327" id="1220" /> +<P2 x="370" y="375" id="1198" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1265" > +<cdparam x="134" y="312" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="228" y="182" id="1208" /> +<P2 x="94" y="207" id="1233" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1266" > +<cdparam x="246" y="516" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="161" y="317" id="1185" /> +<P2 x="374" y="312" id="1221" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1267" > +<cdparam x="111" y="639" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="103" y="395" id="1237" /> +<P2 x="100" y="435" id="1239" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1268" > +<cdparam x="112" y="696" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="100" y="465" id="1240" /> +<P2 x="180" y="502" id="1243" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1269" > +<cdparam x="497" y="637" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="370" y="405" id="1199" /> +<P2 x="190" y="502" id="1245" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1270" > +<cdparam x="242" y="771" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="185" y="517" id="1242" /> +<P2 x="192" y="569" id="1255" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1271" > +<cdparam x="333" y="53" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="280" y="37" id="1196" /> +<P2 x="272" y="47" id="1201" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1272" > +<cdparam x="106" y="312" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="91" y="317" id="1184" /> +<P2 x="103" y="365" id="1236" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1273" > +<cdparam x="188" y="81" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="272" y="77" id="1202" /> +<P2 x="281" y="95" id="1257" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1274" > +<cdparam x="188" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="281" y="125" id="1258" /> +<P2 x="263" y="172" id="1207" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1275" > +<cdparam x="100" y="265" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="94" y="237" id="1234" /> +<P2 x="89" y="255" id="1260" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1276" > +<cdparam x="95" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="89" y="285" id="1261" /> +<P2 x="126" y="307" id="1183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="expressModeEnabled" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1278" > +<cdparam x="97" y="34" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="expressModeEnabled_start" /> +<TGConnectingPoint num="0" id="1277" /> +</COMPONENT> + +<COMPONENT type="2012" id="1281" > +<cdparam x="52" y="88" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="expressMode=1" /> +<TGConnectingPoint num="0" id="1279" /> +<TGConnectingPoint num="1" id="1280" /> +</COMPONENT> + +<COMPONENT type="2002" id="1284" > +<cdparam x="42" y="136" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1282" /> +<TGConnectingPoint num="1" id="1283" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="1286" > +<cdparam x="97" y="195" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="expressModeEnabled_stop" /> +<TGConnectingPoint num="0" id="1285" /> +</COMPONENT> + +<CONNECTOR type="121" id="1287" > +<cdparam x="106" y="26" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="104" y="54" id="1277" /> +<P2 x="106" y="83" id="1279" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1288" > +<cdparam x="106" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send msg" value="null" /> +<P1 x="106" y="113" id="1280" /> +<P2 x="107" y="131" id="1282" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1289" > +<cdparam x="107" y="161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="107" y="161" id="1283" /> +<P2 x="107" y="190" id="1285" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="expressModeDisabled" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1291" > +<cdparam x="91" y="19" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="expressModeDisabled_start" /> +<TGConnectingPoint num="0" id="1290" /> +</COMPONENT> + +<COMPONENT type="2012" id="1294" > +<cdparam x="44" y="71" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="expressMode=0" /> +<TGConnectingPoint num="0" id="1292" /> +<TGConnectingPoint num="1" id="1293" /> +</COMPONENT> + +<COMPONENT type="2002" id="1297" > +<cdparam x="32" y="125" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1295" /> +<TGConnectingPoint num="1" id="1296" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="1299" > +<cdparam x="87" y="195" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="expressModeDisabled_stop" /> +<TGConnectingPoint num="0" id="1298" /> +</COMPONENT> + +<CONNECTOR type="121" id="1300" > +<cdparam x="100" y="11" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="98" y="39" id="1290" /> +<P2 x="98" y="66" id="1292" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1301" > +<cdparam x="100" y="78" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send msg" value="null" /> +<P1 x="98" y="96" id="1293" /> +<P2 x="99" y="120" id="1295" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1302" > +<cdparam x="101" y="146" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="99" y="150" id="1296" /> +<P2 x="97" y="190" id="1298" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="paymentMode" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1304" > +<cdparam x="239" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="paymentMode_start" /> +<TGConnectingPoint num="0" id="1303" /> +</COMPONENT> + +<COMPONENT type="301" id="1313" > +<cdparam x="432" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1305" /> +<TGConnectingPoint num="1" id="1306" /> +<TGConnectingPoint num="2" id="1307" /> +<TGConnectingPoint num="3" id="1308" /> +<TGConnectingPoint num="4" id="1309" /> +<TGConnectingPoint num="5" id="1310" /> +<TGConnectingPoint num="6" id="1311" /> +<TGConnectingPoint num="7" id="1312" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1329" > +<cdparam x="226" y="74" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1317" /> +<TGConnectingPoint num="1" id="1318" /> +<TGConnectingPoint num="2" id="1319" /> +<TGConnectingPoint num="3" id="1320" /> +<TGConnectingPoint num="4" id="1321" /> +<TGConnectingPoint num="5" id="1322" /> +<TGConnectingPoint num="6" id="1323" /> +<TGConnectingPoint num="7" id="1324" /> +<TGConnectingPoint num="8" id="1325" /> +<TGConnectingPoint num="9" id="1326" /> +<TGConnectingPoint num="10" id="1327" /> +<TGConnectingPoint num="11" id="1328" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1314" > +<father id="1329" num="0" /> +<cdparam x="151" y="79" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[expressMode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1315" > +<father id="1329" num="1" /> +<cdparam x="271" y="79" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[expressMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1316" > +<father id="1329" num="2" /> +<cdparam x="241" y="109" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1345" > +<cdparam x="282" y="144" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1333" /> +<TGConnectingPoint num="1" id="1334" /> +<TGConnectingPoint num="2" id="1335" /> +<TGConnectingPoint num="3" id="1336" /> +<TGConnectingPoint num="4" id="1337" /> +<TGConnectingPoint num="5" id="1338" /> +<TGConnectingPoint num="6" id="1339" /> +<TGConnectingPoint num="7" id="1340" /> +<TGConnectingPoint num="8" id="1341" /> +<TGConnectingPoint num="9" id="1342" /> +<TGConnectingPoint num="10" id="1343" /> +<TGConnectingPoint num="11" id="1344" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1330" > +<father id="1345" num="0" /> +<cdparam x="207" y="174" /> +<sizeparam width="214" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==paymentMode_CASH]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1331" > +<father id="1345" num="1" /> +<cdparam x="307" y="149" /> +<sizeparam width="215" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[paymentMode==paymentMode_CARD]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1332" > +<father id="1345" num="2" /> +<cdparam x="297" y="179" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1348" > +<cdparam x="266" y="206" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="1346" /> +<TGConnectingPoint num="1" id="1347" /> +</COMPONENT> + +<COMPONENT type="2008" id="1361" > +<cdparam x="123" y="155" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1349" /> +<TGConnectingPoint num="1" id="1350" /> +<TGConnectingPoint num="2" id="1351" /> +<TGConnectingPoint num="3" id="1352" /> +<TGConnectingPoint num="4" id="1353" /> +<TGConnectingPoint num="5" id="1354" /> +<TGConnectingPoint num="6" id="1355" /> +<TGConnectingPoint num="7" id="1356" /> +<TGConnectingPoint num="8" id="1357" /> +<TGConnectingPoint num="9" id="1358" /> +<TGConnectingPoint num="10" id="1359" /> +<TGConnectingPoint num="11" id="1360" /> +</COMPONENT> + +<COMPONENT type="2016" id="1364" > +<cdparam x="53" y="220" /> +<sizeparam width="112" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="paymentModeOk" /> +<TGConnectingPoint num="0" id="1362" /> +<TGConnectingPoint num="1" id="1363" /> +</COMPONENT> + +<COMPONENT type="2008" id="1377" > +<cdparam x="218" y="292" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1365" /> +<TGConnectingPoint num="1" id="1366" /> +<TGConnectingPoint num="2" id="1367" /> +<TGConnectingPoint num="3" id="1368" /> +<TGConnectingPoint num="4" id="1369" /> +<TGConnectingPoint num="5" id="1370" /> +<TGConnectingPoint num="6" id="1371" /> +<TGConnectingPoint num="7" id="1372" /> +<TGConnectingPoint num="8" id="1373" /> +<TGConnectingPoint num="9" id="1374" /> +<TGConnectingPoint num="10" id="1375" /> +<TGConnectingPoint num="11" id="1376" /> +</COMPONENT> + +<COMPONENT type="2001" id="1379" > +<cdparam x="216" y="352" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="paymentMode_stop" /> +<TGConnectingPoint num="0" id="1378" /> +</COMPONENT> + +<CONNECTOR type="121" id="1380" > +<cdparam x="276" y="104" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="246" y="30" id="1303" /> +<P2 x="236" y="74" id="1317" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1381" > +<cdparam x="293" y="201" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="271" y="84" id="1319" /> +<P2 x="292" y="144" id="1333" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1382" > +<cdparam x="440" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="327" y="154" id="1335" /> +<P2 x="391" y="201" id="1346" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1383" > +<cdparam x="258" y="166" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="201" y="84" id="1318" /> +<P2 x="123" y="160" id="1350" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1384" > +<cdparam x="370" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="257" y="154" id="1334" /> +<P2 x="133" y="160" id="1352" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1385" > +<cdparam x="150" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="128" y="175" id="1349" /> +<P2 x="109" y="215" id="1362" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1386" > +<cdparam x="148" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to junction" value="null" /> +<P1 x="109" y="245" id="1363" /> +<P2 x="218" y="297" id="1366" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1387" > +<cdparam x="666" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="391" y="231" id="1347" /> +<P2 x="228" y="297" id="1368" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1388" > +<cdparam x="235" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="223" y="312" id="1365" /> +<P2 x="226" y="347" id="1378" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="ScannerController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1390" > +<cdparam x="120" y="18" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1389" /> +</COMPONENT> + +<COMPONENT type="2006" id="1406" > +<cdparam x="113" y="96" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1394" /> +<TGConnectingPoint num="1" id="1395" /> +<TGConnectingPoint num="2" id="1396" /> +<TGConnectingPoint num="3" id="1397" /> +<TGConnectingPoint num="4" id="1398" /> +<TGConnectingPoint num="5" id="1399" /> +<TGConnectingPoint num="6" id="1400" /> +<TGConnectingPoint num="7" id="1401" /> +<TGConnectingPoint num="8" id="1402" /> +<TGConnectingPoint num="9" id="1403" /> +<TGConnectingPoint num="10" id="1404" /> +<TGConnectingPoint num="11" id="1405" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1391" > +<father id="1406" num="0" /> +<cdparam x="38" y="101" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1392" > +<father id="1406" num="1" /> +<cdparam x="138" y="101" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1393" > +<father id="1406" num="2" /> +<cdparam x="128" y="131" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1409" > +<cdparam x="17" y="142" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="barCode=0" /> +<TGConnectingPoint num="0" id="1407" /> +<TGConnectingPoint num="1" id="1408" /> +</COMPONENT> + +<COMPONENT type="2012" id="1412" > +<cdparam x="142" y="143" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="barCode=1" /> +<TGConnectingPoint num="0" id="1410" /> +<TGConnectingPoint num="1" id="1411" /> +</COMPONENT> + +<COMPONENT type="2008" id="1425" > +<cdparam x="119" y="190" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1413" /> +<TGConnectingPoint num="1" id="1414" /> +<TGConnectingPoint num="2" id="1415" /> +<TGConnectingPoint num="3" id="1416" /> +<TGConnectingPoint num="4" id="1417" /> +<TGConnectingPoint num="5" id="1418" /> +<TGConnectingPoint num="6" id="1419" /> +<TGConnectingPoint num="7" id="1420" /> +<TGConnectingPoint num="8" id="1421" /> +<TGConnectingPoint num="9" id="1422" /> +<TGConnectingPoint num="10" id="1423" /> +<TGConnectingPoint num="11" id="1424" /> +</COMPONENT> + +<COMPONENT type="2002" id="1428" > +<cdparam x="24" y="227" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="productBarcodeScanned!barCode" /> +<TGConnectingPoint num="0" id="1426" /> +<TGConnectingPoint num="1" id="1427" /> +<extraparam> +<Via port="eventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="1431" > +<cdparam x="98" y="288" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1429" /> +<TGConnectingPoint num="1" id="1430" /> +</COMPONENT> + +<COMPONENT type="2016" id="1434" > +<cdparam x="106" y="66" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1432" /> +<TGConnectingPoint num="1" id="1433" /> +</COMPONENT> + +<CONNECTOR type="121" id="1435" > +<cdparam x="207" y="78" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="88" y="106" id="1395" /> +<P2 x="58" y="137" id="1407" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1436" > +<cdparam x="242" y="113" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="158" y="106" id="1396" /> +<P2 x="183" y="138" id="1410" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1437" > +<cdparam x="109" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="58" y="167" id="1408" /> +<P2 x="119" y="195" id="1414" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1438" > +<cdparam x="242" y="174" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="183" y="168" id="1411" /> +<P2 x="129" y="195" id="1416" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1439" > +<cdparam x="231" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="122" y="252" id="1427" /> +<P2 x="118" y="283" id="1429" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1440" > +<cdparam x="249" y="30" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="127" y="38" id="1389" /> +<P2 x="126" y="61" id="1432" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1441" > +<cdparam x="574" y="79" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="126" y="91" id="1433" /> +<P2 x="123" y="96" id="1394" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1442" > +<cdparam x="231" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="124" y="210" id="1413" /> +<P2 x="122" y="222" id="1426" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="PrinterController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="1458" > +<cdparam x="294" y="153" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1446" /> +<TGConnectingPoint num="1" id="1447" /> +<TGConnectingPoint num="2" id="1448" /> +<TGConnectingPoint num="3" id="1449" /> +<TGConnectingPoint num="4" id="1450" /> +<TGConnectingPoint num="5" id="1451" /> +<TGConnectingPoint num="6" id="1452" /> +<TGConnectingPoint num="7" id="1453" /> +<TGConnectingPoint num="8" id="1454" /> +<TGConnectingPoint num="9" id="1455" /> +<TGConnectingPoint num="10" id="1456" /> +<TGConnectingPoint num="11" id="1457" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1443" > +<father id="1458" num="0" /> +<cdparam x="219" y="158" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1444" > +<father id="1458" num="1" /> +<cdparam x="319" y="158" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1445" > +<father id="1458" num="2" /> +<cdparam x="309" y="188" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1474" > +<cdparam x="506" y="109" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1462" /> +<TGConnectingPoint num="1" id="1463" /> +<TGConnectingPoint num="2" id="1464" /> +<TGConnectingPoint num="3" id="1465" /> +<TGConnectingPoint num="4" id="1466" /> +<TGConnectingPoint num="5" id="1467" /> +<TGConnectingPoint num="6" id="1468" /> +<TGConnectingPoint num="7" id="1469" /> +<TGConnectingPoint num="8" id="1470" /> +<TGConnectingPoint num="9" id="1471" /> +<TGConnectingPoint num="10" id="1472" /> +<TGConnectingPoint num="11" id="1473" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1459" > +<father id="1474" num="0" /> +<cdparam x="431" y="114" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1460" > +<father id="1474" num="1" /> +<cdparam x="531" y="114" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1461" > +<father id="1474" num="2" /> +<cdparam x="521" y="144" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="1476" > +<cdparam x="510" y="26" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="serveFIFO_start" /> +<TGConnectingPoint num="0" id="1475" /> +</COMPONENT> + +<COMPONENT type="2004" id="1479" > +<cdparam x="11" y="208" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="1477" /> +<TGConnectingPoint num="1" id="1478" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1482" > +<cdparam x="173" y="209" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered?cashAmount" /> +<TGConnectingPoint num="0" id="1480" /> +<TGConnectingPoint num="1" id="1481" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1485" > +<cdparam x="404" y="206" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="1483" /> +<TGConnectingPoint num="1" id="1484" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1488" > +<cdparam x="752" y="206" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="1486" /> +<TGConnectingPoint num="1" id="1487" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1491" > +<cdparam x="638" y="206" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="1489" /> +<TGConnectingPoint num="1" id="1490" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="1504" > +<cdparam x="502" y="278" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1492" /> +<TGConnectingPoint num="1" id="1493" /> +<TGConnectingPoint num="2" id="1494" /> +<TGConnectingPoint num="3" id="1495" /> +<TGConnectingPoint num="4" id="1496" /> +<TGConnectingPoint num="5" id="1497" /> +<TGConnectingPoint num="6" id="1498" /> +<TGConnectingPoint num="7" id="1499" /> +<TGConnectingPoint num="8" id="1500" /> +<TGConnectingPoint num="9" id="1501" /> +<TGConnectingPoint num="10" id="1502" /> +<TGConnectingPoint num="11" id="1503" /> +</COMPONENT> + +<COMPONENT type="2008" id="1517" > +<cdparam x="502" y="294" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1505" /> +<TGConnectingPoint num="1" id="1506" /> +<TGConnectingPoint num="2" id="1507" /> +<TGConnectingPoint num="3" id="1508" /> +<TGConnectingPoint num="4" id="1509" /> +<TGConnectingPoint num="5" id="1510" /> +<TGConnectingPoint num="6" id="1511" /> +<TGConnectingPoint num="7" id="1512" /> +<TGConnectingPoint num="8" id="1513" /> +<TGConnectingPoint num="9" id="1514" /> +<TGConnectingPoint num="10" id="1515" /> +<TGConnectingPoint num="11" id="1516" /> +</COMPONENT> + +<COMPONENT type="2016" id="1520" > +<cdparam x="489" y="345" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1518" /> +<TGConnectingPoint num="1" id="1519" /> +</COMPONENT> + +<COMPONENT type="2016" id="1523" > +<cdparam x="497" y="65" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1521" /> +<TGConnectingPoint num="1" id="1522" /> +</COMPONENT> + +<COMPONENT type="2004" id="1526" > +<cdparam x="879" y="199" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="1524" /> +<TGConnectingPoint num="1" id="1525" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1542" > +<cdparam x="663" y="139" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1530" /> +<TGConnectingPoint num="1" id="1531" /> +<TGConnectingPoint num="2" id="1532" /> +<TGConnectingPoint num="3" id="1533" /> +<TGConnectingPoint num="4" id="1534" /> +<TGConnectingPoint num="5" id="1535" /> +<TGConnectingPoint num="6" id="1536" /> +<TGConnectingPoint num="7" id="1537" /> +<TGConnectingPoint num="8" id="1538" /> +<TGConnectingPoint num="9" id="1539" /> +<TGConnectingPoint num="10" id="1540" /> +<TGConnectingPoint num="11" id="1541" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1527" > +<father id="1542" num="0" /> +<cdparam x="588" y="144" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1528" > +<father id="1542" num="1" /> +<cdparam x="688" y="144" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1529" > +<father id="1542" num="2" /> +<cdparam x="678" y="174" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="1555" > +<cdparam x="503" y="309" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1543" /> +<TGConnectingPoint num="1" id="1544" /> +<TGConnectingPoint num="2" id="1545" /> +<TGConnectingPoint num="3" id="1546" /> +<TGConnectingPoint num="4" id="1547" /> +<TGConnectingPoint num="5" id="1548" /> +<TGConnectingPoint num="6" id="1549" /> +<TGConnectingPoint num="7" id="1550" /> +<TGConnectingPoint num="8" id="1551" /> +<TGConnectingPoint num="9" id="1552" /> +<TGConnectingPoint num="10" id="1553" /> +<TGConnectingPoint num="11" id="1554" /> +</COMPONENT> + +<CONNECTOR type="121" id="1556" > +<cdparam x="540" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="481" y="119" id="1463" /> +<P2 x="304" y="153" id="1446" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1557" > +<cdparam x="733" y="76" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="517" y="46" id="1475" /> +<P2 x="517" y="60" id="1521" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1558" > +<cdparam x="448" y="125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="269" y="163" id="1447" /> +<P2 x="81" y="203" id="1477" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1559" > +<cdparam x="483" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="304" y="198" id="1449" /> +<P2 x="277" y="204" id="1480" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1560" > +<cdparam x="518" y="125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="339" y="163" id="1448" /> +<P2 x="509" y="201" id="1483" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1561" > +<cdparam x="726" y="152" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="516" y="154" id="1465" /> +<P2 x="679" y="201" id="1489" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1562" > +<cdparam x="761" y="117" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="673" y="184" id="1533" /> +<P2 x="798" y="201" id="1486" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1563" > +<cdparam x="507" y="298" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="507" y="298" id="1492" /> +<P2 x="507" y="294" id="1507" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1564" > +<cdparam x="122" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="81" y="233" id="1478" /> +<P2 x="502" y="299" id="1506" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1565" > +<cdparam x="312" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="277" y="234" id="1481" /> +<P2 x="502" y="283" id="1493" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1566" > +<cdparam x="502" y="233" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="509" y="231" id="1484" /> +<P2 x="507" y="278" id="1494" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1567" > +<cdparam x="719" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="679" y="231" id="1490" /> +<P2 x="512" y="283" id="1495" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1568" > +<cdparam x="875" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="798" y="231" id="1487" /> +<P2 x="512" y="299" id="1508" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1569" > +<cdparam x="507" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="507" y="314" id="1505" /> +<P2 x="508" y="309" id="1545" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1570" > +<cdparam x="468" y="59" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="517" y="90" id="1522" /> +<P2 x="516" y="109" id="1462" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1571" > +<cdparam x="561" y="85" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="551" y="119" id="1464" /> +<P2 x="673" y="139" id="1530" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1572" > +<cdparam x="710" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="708" y="149" id="1532" /> +<P2 x="932" y="194" id="1524" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1573" > +<cdparam x="586" y="347" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="508" y="329" id="1543" /> +<P2 x="509" y="340" id="1518" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1574" > +<cdparam x="1064" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="932" y="224" id="1525" /> +<P2 x="513" y="314" id="1546" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CashBoxController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1576" > +<cdparam x="220" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1575" /> +</COMPONENT> + +<COMPONENT type="2002" id="1579" > +<cdparam x="182" y="139" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="1577" /> +<TGConnectingPoint num="1" id="1578" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1582" > +<cdparam x="188" y="84" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="1580" /> +<TGConnectingPoint num="1" id="1581" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1598" > +<cdparam x="207" y="210" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1586" /> +<TGConnectingPoint num="1" id="1587" /> +<TGConnectingPoint num="2" id="1588" /> +<TGConnectingPoint num="3" id="1589" /> +<TGConnectingPoint num="4" id="1590" /> +<TGConnectingPoint num="5" id="1591" /> +<TGConnectingPoint num="6" id="1592" /> +<TGConnectingPoint num="7" id="1593" /> +<TGConnectingPoint num="8" id="1594" /> +<TGConnectingPoint num="9" id="1595" /> +<TGConnectingPoint num="10" id="1596" /> +<TGConnectingPoint num="11" id="1597" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1583" > +<father id="1598" num="0" /> +<cdparam x="132" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1584" > +<father id="1598" num="1" /> +<cdparam x="232" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1585" > +<father id="1598" num="2" /> +<cdparam x="222" y="245" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1607" > +<cdparam x="579" y="95" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1599" /> +<TGConnectingPoint num="1" id="1600" /> +<TGConnectingPoint num="2" id="1601" /> +<TGConnectingPoint num="3" id="1602" /> +<TGConnectingPoint num="4" id="1603" /> +<TGConnectingPoint num="5" id="1604" /> +<TGConnectingPoint num="6" id="1605" /> +<TGConnectingPoint num="7" id="1606" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1610" > +<cdparam x="355" y="387" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="paymentMode!paymentMode_CARD" /> +<TGConnectingPoint num="0" id="1608" /> +<TGConnectingPoint num="1" id="1609" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1613" > +<cdparam x="36" y="285" /> +<sizeparam width="207" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="paymentMode!paymentMode_CASH" /> +<TGConnectingPoint num="0" id="1611" /> +<TGConnectingPoint num="1" id="1612" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1616" > +<cdparam x="11" y="528" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="1614" /> +<TGConnectingPoint num="1" id="1615" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1619" > +<cdparam x="62" y="581" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="1617" /> +<TGConnectingPoint num="1" id="1618" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1622" > +<cdparam x="12" y="484" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="1620" /> +<TGConnectingPoint num="1" id="1621" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="1635" > +<cdparam x="214" y="614" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1623" /> +<TGConnectingPoint num="1" id="1624" /> +<TGConnectingPoint num="2" id="1625" /> +<TGConnectingPoint num="3" id="1626" /> +<TGConnectingPoint num="4" id="1627" /> +<TGConnectingPoint num="5" id="1628" /> +<TGConnectingPoint num="6" id="1629" /> +<TGConnectingPoint num="7" id="1630" /> +<TGConnectingPoint num="8" id="1631" /> +<TGConnectingPoint num="9" id="1632" /> +<TGConnectingPoint num="10" id="1633" /> +<TGConnectingPoint num="11" id="1634" /> +</COMPONENT> + +<COMPONENT type="2016" id="1638" > +<cdparam x="194" y="681" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1636" /> +<TGConnectingPoint num="1" id="1637" /> +</COMPONENT> + +<COMPONENT type="2016" id="1641" > +<cdparam x="205" y="38" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1639" /> +<TGConnectingPoint num="1" id="1640" /> +</COMPONENT> + +<COMPONENT type="2006" id="1657" > +<cdparam x="125" y="340" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1645" /> +<TGConnectingPoint num="1" id="1646" /> +<TGConnectingPoint num="2" id="1647" /> +<TGConnectingPoint num="3" id="1648" /> +<TGConnectingPoint num="4" id="1649" /> +<TGConnectingPoint num="5" id="1650" /> +<TGConnectingPoint num="6" id="1651" /> +<TGConnectingPoint num="7" id="1652" /> +<TGConnectingPoint num="8" id="1653" /> +<TGConnectingPoint num="9" id="1654" /> +<TGConnectingPoint num="10" id="1655" /> +<TGConnectingPoint num="11" id="1656" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1642" > +<father id="1657" num="0" /> +<cdparam x="50" y="345" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1643" > +<father id="1657" num="1" /> +<cdparam x="150" y="345" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1644" > +<father id="1657" num="2" /> +<cdparam x="140" y="375" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1660" > +<cdparam x="13" y="398" /> +<sizeparam width="103" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashAmount=0" /> +<TGConnectingPoint num="0" id="1658" /> +<TGConnectingPoint num="1" id="1659" /> +</COMPONENT> + +<COMPONENT type="2012" id="1663" > +<cdparam x="152" y="398" /> +<sizeparam width="103" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashAmount=1" /> +<TGConnectingPoint num="0" id="1661" /> +<TGConnectingPoint num="1" id="1662" /> +</COMPONENT> + +<COMPONENT type="2008" id="1676" > +<cdparam x="120" y="444" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1664" /> +<TGConnectingPoint num="1" id="1665" /> +<TGConnectingPoint num="2" id="1666" /> +<TGConnectingPoint num="3" id="1667" /> +<TGConnectingPoint num="4" id="1668" /> +<TGConnectingPoint num="5" id="1669" /> +<TGConnectingPoint num="6" id="1670" /> +<TGConnectingPoint num="7" id="1671" /> +<TGConnectingPoint num="8" id="1672" /> +<TGConnectingPoint num="9" id="1673" /> +<TGConnectingPoint num="10" id="1674" /> +<TGConnectingPoint num="11" id="1675" /> +</COMPONENT> + +<CONNECTOR type="121" id="1677" > +<cdparam x="235" y="74" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="227" y="30" id="1575" /> +<P2 x="225" y="33" id="1639" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1678" > +<cdparam x="235" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="224" y="109" id="1581" /> +<P2 x="223" y="134" id="1577" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1679" > +<cdparam x="411" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="223" y="164" id="1578" /> +<P2 x="217" y="210" id="1586" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1680" > +<cdparam x="375" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="182" y="220" id="1587" /> +<P2 x="139" y="280" id="1611" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1681" > +<cdparam x="445" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="252" y="220" id="1588" /> +<P2 x="459" y="382" id="1608" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1682" > +<cdparam x="256" y="603" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="110" y="606" id="1618" /> +<P2 x="214" y="619" id="1624" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1683" > +<cdparam x="576" y="403" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="459" y="412" id="1609" /> +<P2 x="224" y="619" id="1626" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1684" > +<cdparam x="401" y="667" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="219" y="634" id="1623" /> +<P2 x="214" y="676" id="1636" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1685" > +<cdparam x="18" y="512" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="116" y="553" id="1615" /> +<P2 x="110" y="576" id="1617" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1686" > +<cdparam x="126" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="109" y="509" id="1621" /> +<P2 x="116" y="523" id="1614" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1687" > +<cdparam x="225" y="63" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="225" y="63" id="1640" /> +<P2 x="224" y="79" id="1580" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1688" > +<cdparam x="117" y="310" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="139" y="310" id="1612" /> +<P2 x="135" y="340" id="1645" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1689" > +<cdparam x="100" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="100" y="350" id="1646" /> +<P2 x="64" y="393" id="1658" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1690" > +<cdparam x="170" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="170" y="350" id="1647" /> +<P2 x="203" y="393" id="1661" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1691" > +<cdparam x="64" y="423" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="64" y="423" id="1659" /> +<P2 x="120" y="449" id="1665" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1692" > +<cdparam x="204" y="428" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="203" y="423" id="1662" /> +<P2 x="130" y="449" id="1667" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1693" > +<cdparam x="113" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="125" y="464" id="1664" /> +<P2 x="109" y="479" id="1620" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CashDeskGUI" minX="10" maxX="2400" minY="10" maxY="900" > +<COMPONENT type="2006" id="1709" > +<cdparam x="451" y="179" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1697" /> +<TGConnectingPoint num="1" id="1698" /> +<TGConnectingPoint num="2" id="1699" /> +<TGConnectingPoint num="3" id="1700" /> +<TGConnectingPoint num="4" id="1701" /> +<TGConnectingPoint num="5" id="1702" /> +<TGConnectingPoint num="6" id="1703" /> +<TGConnectingPoint num="7" id="1704" /> +<TGConnectingPoint num="8" id="1705" /> +<TGConnectingPoint num="9" id="1706" /> +<TGConnectingPoint num="10" id="1707" /> +<TGConnectingPoint num="11" id="1708" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1694" > +<father id="1709" num="0" /> +<cdparam x="376" y="184" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1695" > +<father id="1709" num="1" /> +<cdparam x="476" y="184" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1696" > +<father id="1709" num="2" /> +<cdparam x="466" y="214" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1725" > +<cdparam x="1261" y="197" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1713" /> +<TGConnectingPoint num="1" id="1714" /> +<TGConnectingPoint num="2" id="1715" /> +<TGConnectingPoint num="3" id="1716" /> +<TGConnectingPoint num="4" id="1717" /> +<TGConnectingPoint num="5" id="1718" /> +<TGConnectingPoint num="6" id="1719" /> +<TGConnectingPoint num="7" id="1720" /> +<TGConnectingPoint num="8" id="1721" /> +<TGConnectingPoint num="9" id="1722" /> +<TGConnectingPoint num="10" id="1723" /> +<TGConnectingPoint num="11" id="1724" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1710" > +<father id="1725" num="0" /> +<cdparam x="1186" y="202" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1711" > +<father id="1725" num="1" /> +<cdparam x="1286" y="202" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1712" > +<father id="1725" num="2" /> +<cdparam x="1276" y="232" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1741" > +<cdparam x="812" y="117" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1729" /> +<TGConnectingPoint num="1" id="1730" /> +<TGConnectingPoint num="2" id="1731" /> +<TGConnectingPoint num="3" id="1732" /> +<TGConnectingPoint num="4" id="1733" /> +<TGConnectingPoint num="5" id="1734" /> +<TGConnectingPoint num="6" id="1735" /> +<TGConnectingPoint num="7" id="1736" /> +<TGConnectingPoint num="8" id="1737" /> +<TGConnectingPoint num="9" id="1738" /> +<TGConnectingPoint num="10" id="1739" /> +<TGConnectingPoint num="11" id="1740" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1726" > +<father id="1741" num="0" /> +<cdparam x="737" y="122" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1727" > +<father id="1741" num="1" /> +<cdparam x="837" y="122" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1728" > +<father id="1741" num="2" /> +<cdparam x="827" y="152" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="1743" > +<cdparam x="811" y="19" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1742" /> +</COMPONENT> + +<COMPONENT type="2004" id="1746" > +<cdparam x="11" y="328" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="1744" /> +<TGConnectingPoint num="1" id="1745" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1749" > +<cdparam x="169" y="328" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered?cashAmount" /> +<TGConnectingPoint num="0" id="1747" /> +<TGConnectingPoint num="1" id="1748" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1752" > +<cdparam x="397" y="327" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="1750" /> +<TGConnectingPoint num="1" id="1751" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1755" > +<cdparam x="1226" y="324" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="1753" /> +<TGConnectingPoint num="1" id="1754" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1758" > +<cdparam x="1128" y="322" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="1756" /> +<TGConnectingPoint num="1" id="1757" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1761" > +<cdparam x="628" y="325" /> +<sizeparam width="115" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="invalidCreditCard" /> +<TGConnectingPoint num="0" id="1759" /> +<TGConnectingPoint num="1" id="1760" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1764" > +<cdparam x="932" y="319" /> +<sizeparam width="153" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="productBarcodeNotValid" /> +<TGConnectingPoint num="0" id="1762" /> +<TGConnectingPoint num="1" id="1763" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1767" > +<cdparam x="767" y="322" /> +<sizeparam width="139" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="creditCardScanFailed" /> +<TGConnectingPoint num="0" id="1765" /> +<TGConnectingPoint num="1" id="1766" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1783" > +<cdparam x="809" y="190" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1771" /> +<TGConnectingPoint num="1" id="1772" /> +<TGConnectingPoint num="2" id="1773" /> +<TGConnectingPoint num="3" id="1774" /> +<TGConnectingPoint num="4" id="1775" /> +<TGConnectingPoint num="5" id="1776" /> +<TGConnectingPoint num="6" id="1777" /> +<TGConnectingPoint num="7" id="1778" /> +<TGConnectingPoint num="8" id="1779" /> +<TGConnectingPoint num="9" id="1780" /> +<TGConnectingPoint num="10" id="1781" /> +<TGConnectingPoint num="11" id="1782" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1768" > +<father id="1783" num="0" /> +<cdparam x="734" y="195" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1769" > +<father id="1783" num="1" /> +<cdparam x="834" y="195" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1770" > +<father id="1783" num="2" /> +<cdparam x="824" y="225" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="1796" > +<cdparam x="811" y="482" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1784" /> +<TGConnectingPoint num="1" id="1785" /> +<TGConnectingPoint num="2" id="1786" /> +<TGConnectingPoint num="3" id="1787" /> +<TGConnectingPoint num="4" id="1788" /> +<TGConnectingPoint num="5" id="1789" /> +<TGConnectingPoint num="6" id="1790" /> +<TGConnectingPoint num="7" id="1791" /> +<TGConnectingPoint num="8" id="1792" /> +<TGConnectingPoint num="9" id="1793" /> +<TGConnectingPoint num="10" id="1794" /> +<TGConnectingPoint num="11" id="1795" /> +</COMPONENT> + +<COMPONENT type="2008" id="1809" > +<cdparam x="811" y="490" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1797" /> +<TGConnectingPoint num="1" id="1798" /> +<TGConnectingPoint num="2" id="1799" /> +<TGConnectingPoint num="3" id="1800" /> +<TGConnectingPoint num="4" id="1801" /> +<TGConnectingPoint num="5" id="1802" /> +<TGConnectingPoint num="6" id="1803" /> +<TGConnectingPoint num="7" id="1804" /> +<TGConnectingPoint num="8" id="1805" /> +<TGConnectingPoint num="9" id="1806" /> +<TGConnectingPoint num="10" id="1807" /> +<TGConnectingPoint num="11" id="1808" /> +</COMPONENT> + +<COMPONENT type="2008" id="1822" > +<cdparam x="811" y="496" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1810" /> +<TGConnectingPoint num="1" id="1811" /> +<TGConnectingPoint num="2" id="1812" /> +<TGConnectingPoint num="3" id="1813" /> +<TGConnectingPoint num="4" id="1814" /> +<TGConnectingPoint num="5" id="1815" /> +<TGConnectingPoint num="6" id="1816" /> +<TGConnectingPoint num="7" id="1817" /> +<TGConnectingPoint num="8" id="1818" /> +<TGConnectingPoint num="9" id="1819" /> +<TGConnectingPoint num="10" id="1820" /> +<TGConnectingPoint num="11" id="1821" /> +</COMPONENT> + +<COMPONENT type="2008" id="1835" > +<cdparam x="811" y="504" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1823" /> +<TGConnectingPoint num="1" id="1824" /> +<TGConnectingPoint num="2" id="1825" /> +<TGConnectingPoint num="3" id="1826" /> +<TGConnectingPoint num="4" id="1827" /> +<TGConnectingPoint num="5" id="1828" /> +<TGConnectingPoint num="6" id="1829" /> +<TGConnectingPoint num="7" id="1830" /> +<TGConnectingPoint num="8" id="1831" /> +<TGConnectingPoint num="9" id="1832" /> +<TGConnectingPoint num="10" id="1833" /> +<TGConnectingPoint num="11" id="1834" /> +</COMPONENT> + +<COMPONENT type="2016" id="1838" > +<cdparam x="798" y="551" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1836" /> +<TGConnectingPoint num="1" id="1837" /> +</COMPONENT> + +<COMPONENT type="2016" id="1841" > +<cdparam x="799" y="68" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1839" /> +<TGConnectingPoint num="1" id="1840" /> +</COMPONENT> + +<COMPONENT type="2008" id="1854" > +<cdparam x="813" y="520" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1842" /> +<TGConnectingPoint num="1" id="1843" /> +<TGConnectingPoint num="2" id="1844" /> +<TGConnectingPoint num="3" id="1845" /> +<TGConnectingPoint num="4" id="1846" /> +<TGConnectingPoint num="5" id="1847" /> +<TGConnectingPoint num="6" id="1848" /> +<TGConnectingPoint num="7" id="1849" /> +<TGConnectingPoint num="8" id="1850" /> +<TGConnectingPoint num="9" id="1851" /> +<TGConnectingPoint num="10" id="1852" /> +<TGConnectingPoint num="11" id="1853" /> +</COMPONENT> + +<COMPONENT type="2004" id="1857" > +<cdparam x="1501" y="315" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1855" /> +<TGConnectingPoint num="1" id="1856" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1860" > +<cdparam x="1334" y="322" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1858" /> +<TGConnectingPoint num="1" id="1859" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1876" > +<cdparam x="1473" y="210" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1864" /> +<TGConnectingPoint num="1" id="1865" /> +<TGConnectingPoint num="2" id="1866" /> +<TGConnectingPoint num="3" id="1867" /> +<TGConnectingPoint num="4" id="1868" /> +<TGConnectingPoint num="5" id="1869" /> +<TGConnectingPoint num="6" id="1870" /> +<TGConnectingPoint num="7" id="1871" /> +<TGConnectingPoint num="8" id="1872" /> +<TGConnectingPoint num="9" id="1873" /> +<TGConnectingPoint num="10" id="1874" /> +<TGConnectingPoint num="11" id="1875" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1861" > +<father id="1876" num="0" /> +<cdparam x="1398" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1862" > +<father id="1876" num="1" /> +<cdparam x="1498" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1863" > +<father id="1876" num="2" /> +<cdparam x="1488" y="245" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="1877" > +<cdparam x="464" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="787" y="127" id="1730" /> +<P2 x="461" y="179" id="1697" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1878" > +<cdparam x="534" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="857" y="127" id="1731" /> +<P2 x="1271" y="197" id="1713" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1879" > +<cdparam x="297" y="177" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="818" y="39" id="1742" /> +<P2 x="819" y="63" id="1839" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1880" > +<cdparam x="238" y="177" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="426" y="189" id="1698" /> +<P2 x="81" y="323" id="1744" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1881" > +<cdparam x="273" y="212" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="461" y="224" id="1700" /> +<P2 x="273" y="323" id="1747" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1882" > +<cdparam x="308" y="177" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="496" y="189" id="1699" /> +<P2 x="502" y="322" id="1750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1883" > +<cdparam x="532" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="822" y="162" id="1732" /> +<P2 x="819" y="190" id="1771" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1884" > +<cdparam x="606" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="784" y="200" id="1772" /> +<P2 x="685" y="320" id="1759" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1885" > +<cdparam x="641" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="819" y="235" id="1774" /> +<P2 x="836" y="317" id="1765" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1886" > +<cdparam x="676" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="854" y="200" id="1773" /> +<P2 x="1008" y="314" id="1762" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1887" > +<cdparam x="878" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1236" y="207" id="1714" /> +<P2 x="1169" y="317" id="1756" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1888" > +<cdparam x="913" y="164" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1271" y="242" id="1716" /> +<P2 x="1272" y="319" id="1753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1889" > +<cdparam x="814" y="466" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="502" id="1784" /> +<P2 x="816" y="490" id="1799" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1890" > +<cdparam x="816" y="488" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="510" id="1797" /> +<P2 x="816" y="496" id="1812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1891" > +<cdparam x="816" y="516" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="516" id="1810" /> +<P2 x="816" y="504" id="1825" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1892" > +<cdparam x="81" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="81" y="353" id="1745" /> +<P2 x="811" y="509" id="1824" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1893" > +<cdparam x="242" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="273" y="353" id="1748" /> +<P2 x="811" y="501" id="1811" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1894" > +<cdparam x="416" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="502" y="352" id="1751" /> +<P2 x="811" y="487" id="1785" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1895" > +<cdparam x="584" y="382" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="685" y="350" id="1760" /> +<P2 x="816" y="482" id="1786" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1896" > +<cdparam x="727" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="836" y="347" id="1766" /> +<P2 x="821" y="487" id="1787" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1897" > +<cdparam x="892" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1008" y="344" id="1763" /> +<P2 x="821" y="495" id="1800" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1898" > +<cdparam x="1057" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1169" y="347" id="1757" /> +<P2 x="821" y="501" id="1813" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1899" > +<cdparam x="1237" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1272" y="349" id="1754" /> +<P2 x="821" y="509" id="1826" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1900" > +<cdparam x="816" y="524" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="818" y="540" id="1842" /> +<P2 x="818" y="546" id="1836" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1901" > +<cdparam x="454" y="55" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="819" y="93" id="1840" /> +<P2 x="822" y="117" id="1729" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1902" > +<cdparam x="816" y="524" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="524" id="1823" /> +<P2 x="818" y="520" id="1844" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1903" > +<cdparam x="1332" y="211" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1306" y="207" id="1715" /> +<P2 x="1483" y="210" id="1864" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1904" > +<cdparam x="1469" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1448" y="220" id="1865" /> +<P2 x="1404" y="317" id="1858" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1905" > +<cdparam x="1504" y="238" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1518" y="220" id="1866" /> +<P2 x="1573" y="310" id="1855" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1906" > +<cdparam x="1475" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1404" y="347" id="1859" /> +<P2 x="813" y="525" id="1843" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1907" > +<cdparam x="1643" y="356" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1573" y="340" id="1856" /> +<P2 x="823" y="525" id="1845" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CardReaderController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1909" > +<cdparam x="172" y="15" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1908" /> +</COMPONENT> + +<COMPONENT type="2006" id="1925" > +<cdparam x="174" y="95" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1913" /> +<TGConnectingPoint num="1" id="1914" /> +<TGConnectingPoint num="2" id="1915" /> +<TGConnectingPoint num="3" id="1916" /> +<TGConnectingPoint num="4" id="1917" /> +<TGConnectingPoint num="5" id="1918" /> +<TGConnectingPoint num="6" id="1919" /> +<TGConnectingPoint num="7" id="1920" /> +<TGConnectingPoint num="8" id="1921" /> +<TGConnectingPoint num="9" id="1922" /> +<TGConnectingPoint num="10" id="1923" /> +<TGConnectingPoint num="11" id="1924" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1910" > +<father id="1925" num="0" /> +<cdparam x="99" y="100" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1911" > +<father id="1925" num="1" /> +<cdparam x="199" y="100" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1912" > +<father id="1925" num="2" /> +<cdparam x="189" y="130" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2010" id="1928" > +<cdparam x="22" y="155" /> +<sizeparam width="44" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="emit" /> +<TGConnectingPoint num="0" id="1926" /> +<TGConnectingPoint num="1" id="1927" /> +</COMPONENT> + +<COMPONENT type="2008" id="1941" > +<cdparam x="107" y="214" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1929" /> +<TGConnectingPoint num="1" id="1930" /> +<TGConnectingPoint num="2" id="1931" /> +<TGConnectingPoint num="3" id="1932" /> +<TGConnectingPoint num="4" id="1933" /> +<TGConnectingPoint num="5" id="1934" /> +<TGConnectingPoint num="6" id="1935" /> +<TGConnectingPoint num="7" id="1936" /> +<TGConnectingPoint num="8" id="1937" /> +<TGConnectingPoint num="9" id="1938" /> +<TGConnectingPoint num="10" id="1939" /> +<TGConnectingPoint num="11" id="1940" /> +</COMPONENT> + +<COMPONENT type="2006" id="1957" > +<cdparam x="381" y="263" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1945" /> +<TGConnectingPoint num="1" id="1946" /> +<TGConnectingPoint num="2" id="1947" /> +<TGConnectingPoint num="3" id="1948" /> +<TGConnectingPoint num="4" id="1949" /> +<TGConnectingPoint num="5" id="1950" /> +<TGConnectingPoint num="6" id="1951" /> +<TGConnectingPoint num="7" id="1952" /> +<TGConnectingPoint num="8" id="1953" /> +<TGConnectingPoint num="9" id="1954" /> +<TGConnectingPoint num="10" id="1955" /> +<TGConnectingPoint num="11" id="1956" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1942" > +<father id="1957" num="0" /> +<cdparam x="306" y="268" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1943" > +<father id="1957" num="1" /> +<cdparam x="406" y="268" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1944" > +<father id="1957" num="2" /> +<cdparam x="396" y="298" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2004" id="1960" > +<cdparam x="237" y="313" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1958" /> +<TGConnectingPoint num="1" id="1959" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1963" > +<cdparam x="324" y="144" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1961" /> +<TGConnectingPoint num="1" id="1962" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1966" > +<cdparam x="440" y="304" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1964" /> +<TGConnectingPoint num="1" id="1965" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1969" > +<cdparam x="114" y="155" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1967" /> +<TGConnectingPoint num="1" id="1968" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="1972" > +<cdparam x="244" y="387" /> +<sizeparam width="110" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressEnabled" /> +<TGConnectingPoint num="0" id="1970" /> +<TGConnectingPoint num="1" id="1971" /> +</COMPONENT> + +<COMPONENT type="2016" id="1975" > +<cdparam x="337" y="207" /> +<sizeparam width="110" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressEnabled" /> +<TGConnectingPoint num="0" id="1973" /> +<TGConnectingPoint num="1" id="1974" /> +</COMPONENT> + +<COMPONENT type="2016" id="1978" > +<cdparam x="129" y="52" /> +<sizeparam width="114" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressDisabled" /> +<TGConnectingPoint num="0" id="1976" /> +<TGConnectingPoint num="1" id="1977" /> +</COMPONENT> + +<COMPONENT type="2016" id="1981" > +<cdparam x="467" y="372" /> +<sizeparam width="114" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressDisabled" /> +<TGConnectingPoint num="0" id="1979" /> +<TGConnectingPoint num="1" id="1980" /> +</COMPONENT> + +<COMPONENT type="2016" id="1984" > +<cdparam x="51" y="272" /> +<sizeparam width="114" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressDisabled" /> +<TGConnectingPoint num="0" id="1982" /> +<TGConnectingPoint num="1" id="1983" /> +</COMPONENT> + +<CONNECTOR type="121" id="1985" > +<cdparam x="215" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="184" y="140" id="1916" /> +<P2 x="186" y="150" id="1967" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1986" > +<cdparam x="145" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to submachine" value="null" /> +<P1 x="149" y="105" id="1914" /> +<P2 x="44" y="150" id="1926" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1987" > +<cdparam x="337" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="186" y="180" id="1968" /> +<P2 x="117" y="219" id="1932" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1988" > +<cdparam x="78" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="44" y="180" id="1927" /> +<P2 x="107" y="219" id="1930" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1989" > +<cdparam x="215" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="219" y="105" id="1915" /> +<P2 x="394" y="139" id="1961" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1990" > +<cdparam x="424" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="356" y="273" id="1946" /> +<P2 x="307" y="308" id="1958" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1991" > +<cdparam x="494" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="426" y="273" id="1947" /> +<P2 x="512" y="299" id="1964" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1992" > +<cdparam x="179" y="35" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="179" y="35" id="1908" /> +<P2 x="186" y="47" id="1976" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1993" > +<cdparam x="130" y="410" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="112" y="234" id="1929" /> +<P2 x="108" y="267" id="1982" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1994" > +<cdparam x="459" y="225" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="394" y="169" id="1962" /> +<P2 x="392" y="202" id="1973" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1995" > +<cdparam x="375" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="307" y="338" id="1959" /> +<P2 x="299" y="382" id="1970" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1996" > +<cdparam x="186" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="186" y="77" id="1977" /> +<P2 x="184" y="95" id="1913" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1997" > +<cdparam x="458" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="392" y="232" id="1974" /> +<P2 x="391" y="263" id="1945" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1998" > +<cdparam x="689" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="512" y="329" id="1965" /> +<P2 x="524" y="367" id="1979" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="LightDisplayController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="2000" > +<cdparam x="153" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1999" /> +</COMPONENT> + +<COMPONENT type="2004" id="2003" > +<cdparam x="175" y="141" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2001" /> +<TGConnectingPoint num="1" id="2002" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2006" > +<cdparam x="12" y="145" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2004" /> +<TGConnectingPoint num="1" id="2005" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2022" > +<cdparam x="149" y="83" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2010" /> +<TGConnectingPoint num="1" id="2011" /> +<TGConnectingPoint num="2" id="2012" /> +<TGConnectingPoint num="3" id="2013" /> +<TGConnectingPoint num="4" id="2014" /> +<TGConnectingPoint num="5" id="2015" /> +<TGConnectingPoint num="6" id="2016" /> +<TGConnectingPoint num="7" id="2017" /> +<TGConnectingPoint num="8" id="2018" /> +<TGConnectingPoint num="9" id="2019" /> +<TGConnectingPoint num="10" id="2020" /> +<TGConnectingPoint num="11" id="2021" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2007" > +<father id="2022" num="0" /> +<cdparam x="74" y="88" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2008" > +<father id="2022" num="1" /> +<cdparam x="174" y="88" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2009" > +<father id="2022" num="2" /> +<cdparam x="164" y="118" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2016" id="2025" > +<cdparam x="133" y="260" /> +<sizeparam width="50" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="ready" /> +<TGConnectingPoint num="0" id="2023" /> +<TGConnectingPoint num="1" id="2024" /> +</COMPONENT> + +<COMPONENT type="2016" id="2028" > +<cdparam x="135" y="44" /> +<sizeparam width="50" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="ready" /> +<TGConnectingPoint num="0" id="2026" /> +<TGConnectingPoint num="1" id="2027" /> +</COMPONENT> + +<COMPONENT type="2008" id="2041" > +<cdparam x="156" y="216" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2029" /> +<TGConnectingPoint num="1" id="2030" /> +<TGConnectingPoint num="2" id="2031" /> +<TGConnectingPoint num="3" id="2032" /> +<TGConnectingPoint num="4" id="2033" /> +<TGConnectingPoint num="5" id="2034" /> +<TGConnectingPoint num="6" id="2035" /> +<TGConnectingPoint num="7" id="2036" /> +<TGConnectingPoint num="8" id="2037" /> +<TGConnectingPoint num="9" id="2038" /> +<TGConnectingPoint num="10" id="2039" /> +<TGConnectingPoint num="11" id="2040" /> +</COMPONENT> + +<CONNECTOR type="121" id="2042" > +<cdparam x="258" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="124" y="93" id="2011" /> +<P2 x="82" y="140" id="2004" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2043" > +<cdparam x="328" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="194" y="93" id="2012" /> +<P2 x="247" y="136" id="2001" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2044" > +<cdparam x="92" y="39" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="160" y="30" id="1999" /> +<P2 x="160" y="39" id="2026" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2045" > +<cdparam x="289" y="114" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="160" y="69" id="2027" /> +<P2 x="159" y="83" id="2010" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2046" > +<cdparam x="136" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="82" y="170" id="2005" /> +<P2 x="156" y="221" id="2030" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2047" > +<cdparam x="441" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="247" y="166" id="2002" /> +<P2 x="166" y="221" id="2032" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2048" > +<cdparam x="292" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="161" y="236" id="2029" /> +<P2 x="158" y="255" id="2023" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CashDeskChannel" minX="10" maxX="2900" minY="10" maxY="1400" > +<COMPONENT type="2006" id="2064" > +<cdparam x="568" y="177" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2052" /> +<TGConnectingPoint num="1" id="2053" /> +<TGConnectingPoint num="2" id="2054" /> +<TGConnectingPoint num="3" id="2055" /> +<TGConnectingPoint num="4" id="2056" /> +<TGConnectingPoint num="5" id="2057" /> +<TGConnectingPoint num="6" id="2058" /> +<TGConnectingPoint num="7" id="2059" /> +<TGConnectingPoint num="8" id="2060" /> +<TGConnectingPoint num="9" id="2061" /> +<TGConnectingPoint num="10" id="2062" /> +<TGConnectingPoint num="11" id="2063" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2049" > +<father id="2064" num="0" /> +<cdparam x="493" y="182" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2050" > +<father id="2064" num="1" /> +<cdparam x="593" y="182" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2051" > +<father id="2064" num="2" /> +<cdparam x="583" y="212" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2080" > +<cdparam x="567" y="135" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2068" /> +<TGConnectingPoint num="1" id="2069" /> +<TGConnectingPoint num="2" id="2070" /> +<TGConnectingPoint num="3" id="2071" /> +<TGConnectingPoint num="4" id="2072" /> +<TGConnectingPoint num="5" id="2073" /> +<TGConnectingPoint num="6" id="2074" /> +<TGConnectingPoint num="7" id="2075" /> +<TGConnectingPoint num="8" id="2076" /> +<TGConnectingPoint num="9" id="2077" /> +<TGConnectingPoint num="10" id="2078" /> +<TGConnectingPoint num="11" id="2079" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2065" > +<father id="2080" num="0" /> +<cdparam x="492" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2066" > +<father id="2080" num="1" /> +<cdparam x="592" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2067" > +<father id="2080" num="2" /> +<cdparam x="582" y="170" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2096" > +<cdparam x="1004" y="185" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2084" /> +<TGConnectingPoint num="1" id="2085" /> +<TGConnectingPoint num="2" id="2086" /> +<TGConnectingPoint num="3" id="2087" /> +<TGConnectingPoint num="4" id="2088" /> +<TGConnectingPoint num="5" id="2089" /> +<TGConnectingPoint num="6" id="2090" /> +<TGConnectingPoint num="7" id="2091" /> +<TGConnectingPoint num="8" id="2092" /> +<TGConnectingPoint num="9" id="2093" /> +<TGConnectingPoint num="10" id="2094" /> +<TGConnectingPoint num="11" id="2095" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2081" > +<father id="2096" num="0" /> +<cdparam x="929" y="190" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2082" > +<father id="2096" num="1" /> +<cdparam x="1029" y="190" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2083" > +<father id="2096" num="2" /> +<cdparam x="1019" y="220" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2112" > +<cdparam x="206" y="186" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2100" /> +<TGConnectingPoint num="1" id="2101" /> +<TGConnectingPoint num="2" id="2102" /> +<TGConnectingPoint num="3" id="2103" /> +<TGConnectingPoint num="4" id="2104" /> +<TGConnectingPoint num="5" id="2105" /> +<TGConnectingPoint num="6" id="2106" /> +<TGConnectingPoint num="7" id="2107" /> +<TGConnectingPoint num="8" id="2108" /> +<TGConnectingPoint num="9" id="2109" /> +<TGConnectingPoint num="10" id="2110" /> +<TGConnectingPoint num="11" id="2111" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2097" > +<father id="2112" num="0" /> +<cdparam x="131" y="191" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2098" > +<father id="2112" num="1" /> +<cdparam x="231" y="191" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2099" > +<father id="2112" num="2" /> +<cdparam x="221" y="221" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="2114" > +<cdparam x="944" y="17" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2113" /> +</COMPONENT> + +<COMPONENT type="2004" id="2117" > +<cdparam x="183" y="372" /> +<sizeparam width="173" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanned?cardNb" /> +<TGConnectingPoint num="0" id="2115" /> +<TGConnectingPoint num="1" id="2116" /> +<extraparam> +<Via port="cardReaderEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2120" > +<cdparam x="324" y="246" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="pinEntered?pin" /> +<TGConnectingPoint num="0" id="2118" /> +<TGConnectingPoint num="1" id="2119" /> +<extraparam> +<Via port="cardReaderEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2123" > +<cdparam x="190" y="421" /> +<sizeparam width="159" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanned!cardNb" /> +<TGConnectingPoint num="0" id="2121" /> +<TGConnectingPoint num="1" id="2122" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2126" > +<cdparam x="467" y="244" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2124" /> +<TGConnectingPoint num="1" id="2125" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2129" > +<cdparam x="473" y="306" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2127" /> +<TGConnectingPoint num="1" id="2128" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2132" > +<cdparam x="467" y="360" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2130" /> +<TGConnectingPoint num="1" id="2131" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2135" > +<cdparam x="471" y="425" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2133" /> +<TGConnectingPoint num="1" id="2134" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2148" > +<cdparam x="607" y="730" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2136" /> +<TGConnectingPoint num="1" id="2137" /> +<TGConnectingPoint num="2" id="2138" /> +<TGConnectingPoint num="3" id="2139" /> +<TGConnectingPoint num="4" id="2140" /> +<TGConnectingPoint num="5" id="2141" /> +<TGConnectingPoint num="6" id="2142" /> +<TGConnectingPoint num="7" id="2143" /> +<TGConnectingPoint num="8" id="2144" /> +<TGConnectingPoint num="9" id="2145" /> +<TGConnectingPoint num="10" id="2146" /> +<TGConnectingPoint num="11" id="2147" /> +</COMPONENT> + +<COMPONENT type="2008" id="2161" > +<cdparam x="607" y="746" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2149" /> +<TGConnectingPoint num="1" id="2150" /> +<TGConnectingPoint num="2" id="2151" /> +<TGConnectingPoint num="3" id="2152" /> +<TGConnectingPoint num="4" id="2153" /> +<TGConnectingPoint num="5" id="2154" /> +<TGConnectingPoint num="6" id="2155" /> +<TGConnectingPoint num="7" id="2156" /> +<TGConnectingPoint num="8" id="2157" /> +<TGConnectingPoint num="9" id="2158" /> +<TGConnectingPoint num="10" id="2159" /> +<TGConnectingPoint num="11" id="2160" /> +</COMPONENT> + +<COMPONENT type="2008" id="2174" > +<cdparam x="607" y="754" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2162" /> +<TGConnectingPoint num="1" id="2163" /> +<TGConnectingPoint num="2" id="2164" /> +<TGConnectingPoint num="3" id="2165" /> +<TGConnectingPoint num="4" id="2166" /> +<TGConnectingPoint num="5" id="2167" /> +<TGConnectingPoint num="6" id="2168" /> +<TGConnectingPoint num="7" id="2169" /> +<TGConnectingPoint num="8" id="2170" /> +<TGConnectingPoint num="9" id="2171" /> +<TGConnectingPoint num="10" id="2172" /> +<TGConnectingPoint num="11" id="2173" /> +</COMPONENT> + +<COMPONENT type="2004" id="2177" > +<cdparam x="597" y="247" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2175" /> +<TGConnectingPoint num="1" id="2176" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2180" > +<cdparam x="600" y="316" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2178" /> +<TGConnectingPoint num="1" id="2179" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2183" > +<cdparam x="602" y="378" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2181" /> +<TGConnectingPoint num="1" id="2182" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2186" > +<cdparam x="598" y="444" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2184" /> +<TGConnectingPoint num="1" id="2185" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2189" > +<cdparam x="735" y="251" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered?cashAmount" /> +<TGConnectingPoint num="0" id="2187" /> +<TGConnectingPoint num="1" id="2188" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2192" > +<cdparam x="742" y="328" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="2190" /> +<TGConnectingPoint num="1" id="2191" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2195" > +<cdparam x="742" y="412" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="2193" /> +<TGConnectingPoint num="1" id="2194" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2198" > +<cdparam x="742" y="482" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="2196" /> +<TGConnectingPoint num="1" id="2197" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2201" > +<cdparam x="961" y="247" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="2199" /> +<TGConnectingPoint num="1" id="2200" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2204" > +<cdparam x="968" y="308" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="2202" /> +<TGConnectingPoint num="1" id="2203" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2207" > +<cdparam x="966" y="374" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="2205" /> +<TGConnectingPoint num="1" id="2206" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2210" > +<cdparam x="1095" y="242" /> +<sizeparam width="122" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="paymentMode?pm" /> +<TGConnectingPoint num="0" id="2208" /> +<TGConnectingPoint num="1" id="2209" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2213" > +<cdparam x="1106" y="326" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="paymentMode!pm" /> +<TGConnectingPoint num="0" id="2211" /> +<TGConnectingPoint num="1" id="2212" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2226" > +<cdparam x="1190" y="635" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2214" /> +<TGConnectingPoint num="1" id="2215" /> +<TGConnectingPoint num="2" id="2216" /> +<TGConnectingPoint num="3" id="2217" /> +<TGConnectingPoint num="4" id="2218" /> +<TGConnectingPoint num="5" id="2219" /> +<TGConnectingPoint num="6" id="2220" /> +<TGConnectingPoint num="7" id="2221" /> +<TGConnectingPoint num="8" id="2222" /> +<TGConnectingPoint num="9" id="2223" /> +<TGConnectingPoint num="10" id="2224" /> +<TGConnectingPoint num="11" id="2225" /> +</COMPONENT> + +<COMPONENT type="2008" id="2239" > +<cdparam x="1190" y="625" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2227" /> +<TGConnectingPoint num="1" id="2228" /> +<TGConnectingPoint num="2" id="2229" /> +<TGConnectingPoint num="3" id="2230" /> +<TGConnectingPoint num="4" id="2231" /> +<TGConnectingPoint num="5" id="2232" /> +<TGConnectingPoint num="6" id="2233" /> +<TGConnectingPoint num="7" id="2234" /> +<TGConnectingPoint num="8" id="2235" /> +<TGConnectingPoint num="9" id="2236" /> +<TGConnectingPoint num="10" id="2237" /> +<TGConnectingPoint num="11" id="2238" /> +</COMPONENT> + +<COMPONENT type="2008" id="2252" > +<cdparam x="1189" y="615" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2240" /> +<TGConnectingPoint num="1" id="2241" /> +<TGConnectingPoint num="2" id="2242" /> +<TGConnectingPoint num="3" id="2243" /> +<TGConnectingPoint num="4" id="2244" /> +<TGConnectingPoint num="5" id="2245" /> +<TGConnectingPoint num="6" id="2246" /> +<TGConnectingPoint num="7" id="2247" /> +<TGConnectingPoint num="8" id="2248" /> +<TGConnectingPoint num="9" id="2249" /> +<TGConnectingPoint num="10" id="2250" /> +<TGConnectingPoint num="11" id="2251" /> +</COMPONENT> + +<COMPONENT type="2004" id="2255" > +<cdparam x="1235" y="244" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeScanned?barcode" /> +<TGConnectingPoint num="0" id="2253" /> +<TGConnectingPoint num="1" id="2254" /> +<extraparam> +<Via port="scannerEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2258" > +<cdparam x="1247" y="314" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeScanned!barcode" /> +<TGConnectingPoint num="0" id="2256" /> +<TGConnectingPoint num="1" id="2257" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2261" > +<cdparam x="319" y="315" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="pinEntered!pin" /> +<TGConnectingPoint num="0" id="2259" /> +<TGConnectingPoint num="1" id="2260" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2277" > +<cdparam x="1898" y="136" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2265" /> +<TGConnectingPoint num="1" id="2266" /> +<TGConnectingPoint num="2" id="2267" /> +<TGConnectingPoint num="3" id="2268" /> +<TGConnectingPoint num="4" id="2269" /> +<TGConnectingPoint num="5" id="2270" /> +<TGConnectingPoint num="6" id="2271" /> +<TGConnectingPoint num="7" id="2272" /> +<TGConnectingPoint num="8" id="2273" /> +<TGConnectingPoint num="9" id="2274" /> +<TGConnectingPoint num="10" id="2275" /> +<TGConnectingPoint num="11" id="2276" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2262" > +<father id="2277" num="0" /> +<cdparam x="1823" y="141" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2263" > +<father id="2277" num="1" /> +<cdparam x="1923" y="141" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2264" > +<father id="2277" num="2" /> +<cdparam x="1913" y="171" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2293" > +<cdparam x="1548" y="176" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2281" /> +<TGConnectingPoint num="1" id="2282" /> +<TGConnectingPoint num="2" id="2283" /> +<TGConnectingPoint num="3" id="2284" /> +<TGConnectingPoint num="4" id="2285" /> +<TGConnectingPoint num="5" id="2286" /> +<TGConnectingPoint num="6" id="2287" /> +<TGConnectingPoint num="7" id="2288" /> +<TGConnectingPoint num="8" id="2289" /> +<TGConnectingPoint num="9" id="2290" /> +<TGConnectingPoint num="10" id="2291" /> +<TGConnectingPoint num="11" id="2292" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2278" > +<father id="2293" num="0" /> +<cdparam x="1473" y="181" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2279" > +<father id="2293" num="1" /> +<cdparam x="1573" y="181" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2280" > +<father id="2293" num="2" /> +<cdparam x="1563" y="211" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2309" > +<cdparam x="941" y="82" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2297" /> +<TGConnectingPoint num="1" id="2298" /> +<TGConnectingPoint num="2" id="2299" /> +<TGConnectingPoint num="3" id="2300" /> +<TGConnectingPoint num="4" id="2301" /> +<TGConnectingPoint num="5" id="2302" /> +<TGConnectingPoint num="6" id="2303" /> +<TGConnectingPoint num="7" id="2304" /> +<TGConnectingPoint num="8" id="2305" /> +<TGConnectingPoint num="9" id="2306" /> +<TGConnectingPoint num="10" id="2307" /> +<TGConnectingPoint num="11" id="2308" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2294" > +<father id="2309" num="0" /> +<cdparam x="866" y="87" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2295" > +<father id="2309" num="1" /> +<cdparam x="966" y="87" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2296" > +<father id="2309" num="2" /> +<cdparam x="956" y="117" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="2312" > +<cdparam x="1460" y="440" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated!amount" /> +<TGConnectingPoint num="0" id="2310" /> +<TGConnectingPoint num="1" id="2311" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2315" > +<cdparam x="1465" y="377" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated!amount" /> +<TGConnectingPoint num="0" id="2313" /> +<TGConnectingPoint num="1" id="2314" /> +<extraparam> +<Via port="cashBoxControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2318" > +<cdparam x="1459" y="238" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="2316" /> +<TGConnectingPoint num="1" id="2317" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2321" > +<cdparam x="1696" y="303" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2319" /> +<TGConnectingPoint num="1" id="2320" /> +<extraparam> +<Via port="lightDisplayControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2324" > +<cdparam x="1461" y="308" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated!amount" /> +<TGConnectingPoint num="0" id="2322" /> +<TGConnectingPoint num="1" id="2323" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2327" > +<cdparam x="1692" y="435" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2325" /> +<TGConnectingPoint num="1" id="2326" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2330" > +<cdparam x="1691" y="368" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2328" /> +<TGConnectingPoint num="1" id="2329" /> +<extraparam> +<Via port="cardReaderControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2346" > +<cdparam x="2122" y="150" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2334" /> +<TGConnectingPoint num="1" id="2335" /> +<TGConnectingPoint num="2" id="2336" /> +<TGConnectingPoint num="3" id="2337" /> +<TGConnectingPoint num="4" id="2338" /> +<TGConnectingPoint num="5" id="2339" /> +<TGConnectingPoint num="6" id="2340" /> +<TGConnectingPoint num="7" id="2341" /> +<TGConnectingPoint num="8" id="2342" /> +<TGConnectingPoint num="9" id="2343" /> +<TGConnectingPoint num="10" id="2344" /> +<TGConnectingPoint num="11" id="2345" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2331" > +<father id="2346" num="0" /> +<cdparam x="2047" y="155" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2332" > +<father id="2346" num="1" /> +<cdparam x="2147" y="155" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2333" > +<father id="2346" num="2" /> +<cdparam x="2137" y="185" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="2359" > +<cdparam x="1191" y="654" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2347" /> +<TGConnectingPoint num="1" id="2348" /> +<TGConnectingPoint num="2" id="2349" /> +<TGConnectingPoint num="3" id="2350" /> +<TGConnectingPoint num="4" id="2351" /> +<TGConnectingPoint num="5" id="2352" /> +<TGConnectingPoint num="6" id="2353" /> +<TGConnectingPoint num="7" id="2354" /> +<TGConnectingPoint num="8" id="2355" /> +<TGConnectingPoint num="9" id="2356" /> +<TGConnectingPoint num="10" id="2357" /> +<TGConnectingPoint num="11" id="2358" /> +</COMPONENT> + +<COMPONENT type="2002" id="2362" > +<cdparam x="1856" y="292" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2360" /> +<TGConnectingPoint num="1" id="2361" /> +<extraparam> +<Via port="lightDisplayControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2365" > +<cdparam x="1859" y="363" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2363" /> +<TGConnectingPoint num="1" id="2364" /> +<extraparam> +<Via port="cardReaderControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2368" > +<cdparam x="2014" y="366" /> +<sizeparam width="115" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="invalidCreditCard" /> +<TGConnectingPoint num="0" id="2366" /> +<TGConnectingPoint num="1" id="2367" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2371" > +<cdparam x="1852" y="236" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2369" /> +<TGConnectingPoint num="1" id="2370" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2374" > +<cdparam x="2026" y="430" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="invalidCreditCard" /> +<TGConnectingPoint num="0" id="2372" /> +<TGConnectingPoint num="1" id="2373" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2377" > +<cdparam x="1855" y="438" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2375" /> +<TGConnectingPoint num="1" id="2376" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2380" > +<cdparam x="2157" y="368" /> +<sizeparam width="139" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanFailed" /> +<TGConnectingPoint num="0" id="2378" /> +<TGConnectingPoint num="1" id="2379" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2383" > +<cdparam x="2168" y="434" /> +<sizeparam width="129" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanFailed" /> +<TGConnectingPoint num="0" id="2381" /> +<TGConnectingPoint num="1" id="2382" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2386" > +<cdparam x="2351" y="369" /> +<sizeparam width="153" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeNotValid" /> +<TGConnectingPoint num="0" id="2384" /> +<TGConnectingPoint num="1" id="2385" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2389" > +<cdparam x="2343" y="437" /> +<sizeparam width="143" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeNotValid" /> +<TGConnectingPoint num="0" id="2387" /> +<TGConnectingPoint num="1" id="2388" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="2392" > +<cdparam x="586" y="823" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2390" /> +<TGConnectingPoint num="1" id="2391" /> +</COMPONENT> + +<COMPONENT type="2016" id="2395" > +<cdparam x="931" y="41" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2393" /> +<TGConnectingPoint num="1" id="2394" /> +</COMPONENT> + +<COMPONENT type="301" id="2404" > +<cdparam x="10" y="14" /> +<sizeparam width="206" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="CashDeskChannel State Machine +" /> +<TGConnectingPoint num="0" id="2396" /> +<TGConnectingPoint num="1" id="2397" /> +<TGConnectingPoint num="2" id="2398" /> +<TGConnectingPoint num="3" id="2399" /> +<TGConnectingPoint num="4" id="2400" /> +<TGConnectingPoint num="5" id="2401" /> +<TGConnectingPoint num="6" id="2402" /> +<TGConnectingPoint num="7" id="2403" /> +<extraparam> +<Line value="CashDeskChannel State Machine" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2407" > +<cdparam x="11" y="253" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="2405" /> +<TGConnectingPoint num="1" id="2406" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2410" > +<cdparam x="13" y="389" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="2408" /> +<TGConnectingPoint num="1" id="2409" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2413" > +<cdparam x="11" y="308" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="2411" /> +<TGConnectingPoint num="1" id="2412" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2429" > +<cdparam x="2630" y="242" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2417" /> +<TGConnectingPoint num="1" id="2418" /> +<TGConnectingPoint num="2" id="2419" /> +<TGConnectingPoint num="3" id="2420" /> +<TGConnectingPoint num="4" id="2421" /> +<TGConnectingPoint num="5" id="2422" /> +<TGConnectingPoint num="6" id="2423" /> +<TGConnectingPoint num="7" id="2424" /> +<TGConnectingPoint num="8" id="2425" /> +<TGConnectingPoint num="9" id="2426" /> +<TGConnectingPoint num="10" id="2427" /> +<TGConnectingPoint num="11" id="2428" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2414" > +<father id="2429" num="0" /> +<cdparam x="2555" y="247" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2415" > +<father id="2429" num="1" /> +<cdparam x="2655" y="247" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2416" > +<father id="2429" num="2" /> +<cdparam x="2645" y="277" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2004" id="2432" > +<cdparam x="1688" y="235" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2430" /> +<TGConnectingPoint num="1" id="2431" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2435" > +<cdparam x="2748" y="339" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2433" /> +<TGConnectingPoint num="1" id="2434" /> +<extraparam> +<Via port="expressMode" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2438" > +<cdparam x="2566" y="342" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2436" /> +<TGConnectingPoint num="1" id="2437" /> +<extraparam> +<Via port="expressMode" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2441" > +<cdparam x="2747" y="417" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2439" /> +<TGConnectingPoint num="1" id="2440" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2444" > +<cdparam x="2574" y="413" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2442" /> +<TGConnectingPoint num="1" id="2443" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2457" > +<cdparam x="1203" y="696" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2445" /> +<TGConnectingPoint num="1" id="2446" /> +<TGConnectingPoint num="2" id="2447" /> +<TGConnectingPoint num="3" id="2448" /> +<TGConnectingPoint num="4" id="2449" /> +<TGConnectingPoint num="5" id="2450" /> +<TGConnectingPoint num="6" id="2451" /> +<TGConnectingPoint num="7" id="2452" /> +<TGConnectingPoint num="8" id="2453" /> +<TGConnectingPoint num="9" id="2454" /> +<TGConnectingPoint num="10" id="2455" /> +<TGConnectingPoint num="11" id="2456" /> +</COMPONENT> + +<CONNECTOR type="121" id="2458" > +<cdparam x="379" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="542" y="145" id="2069" /> +<P2 x="216" y="186" id="2100" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2459" > +<cdparam x="449" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="612" y="145" id="2070" /> +<P2 x="1014" y="185" id="2084" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2460" > +<cdparam x="586" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="951" y="37" id="2113" /> +<P2 x="951" y="36" id="2393" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2461" > +<cdparam x="447" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="577" y="180" id="2071" /> +<P2 x="578" y="177" id="2052" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2462" > +<cdparam x="178" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="216" y="231" id="2103" /> +<P2 x="269" y="367" id="2115" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2463" > +<cdparam x="217" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="269" y="397" id="2116" /> +<P2 x="269" y="416" id="2121" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2464" > +<cdparam x="349" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="376" y="271" id="2119" /> +<P2 x="364" y="310" id="2259" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2465" > +<cdparam x="253" y="204" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="251" y="196" id="2102" /> +<P2 x="376" y="241" id="2118" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2466" > +<cdparam x="543" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="543" y="187" id="2053" /> +<P2 x="508" y="239" id="2124" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2467" > +<cdparam x="511" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="508" y="269" id="2125" /> +<P2 x="509" y="301" id="2127" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2468" > +<cdparam x="509" y="357" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="509" y="331" id="2128" /> +<P2 x="503" y="355" id="2130" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2469" > +<cdparam x="509" y="441" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="503" y="385" id="2131" /> +<P2 x="507" y="420" id="2133" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2470" > +<cdparam x="610" y="730" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="612" y="750" id="2136" /> +<P2 x="612" y="746" id="2151" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2471" > +<cdparam x="612" y="766" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="612" y="766" id="2149" /> +<P2 x="612" y="754" id="2164" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2472" > +<cdparam x="215" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="269" y="446" id="2122" /> +<P2 x="607" y="751" id="2150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2473" > +<cdparam x="346" y="360" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="364" y="340" id="2260" /> +<P2 x="607" y="735" id="2137" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2474" > +<cdparam x="509" y="511" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="507" y="450" id="2134" /> +<P2 x="612" y="730" id="2138" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2475" > +<cdparam x="663" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="643" y="272" id="2176" /> +<P2 x="641" y="311" id="2178" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2476" > +<cdparam x="661" y="363" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="641" y="341" id="2179" /> +<P2 x="643" y="373" id="2181" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2477" > +<cdparam x="661" y="447" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="643" y="403" id="2182" /> +<P2 x="639" y="439" id="2184" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2478" > +<cdparam x="613" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="613" y="187" id="2054" /> +<P2 x="643" y="242" id="2175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2479" > +<cdparam x="661" y="517" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="639" y="469" id="2185" /> +<P2 x="617" y="735" id="2139" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2480" > +<cdparam x="839" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="839" y="353" id="2191" /> +<P2 x="839" y="407" id="2193" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2481" > +<cdparam x="839" y="437" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="839" y="437" id="2194" /> +<P2 x="839" y="477" id="2196" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2482" > +<cdparam x="855" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="839" y="276" id="2188" /> +<P2 x="839" y="323" id="2190" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2483" > +<cdparam x="979" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="979" y="195" id="2085" /> +<P2 x="839" y="246" id="2187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2484" > +<cdparam x="839" y="507" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="839" y="507" id="2197" /> +<P2 x="617" y="751" id="2152" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2485" > +<cdparam x="1014" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1016" y="333" id="2203" /> +<P2 x="1014" y="369" id="2205" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2486" > +<cdparam x="1030" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1014" y="272" id="2200" /> +<P2 x="1016" y="303" id="2202" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2487" > +<cdparam x="1014" y="230" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1014" y="230" id="2087" /> +<P2 x="1014" y="242" id="2199" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2488" > +<cdparam x="1049" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1049" y="195" id="2086" /> +<P2 x="1156" y="237" id="2208" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2489" > +<cdparam x="1172" y="267" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1156" y="267" id="2209" /> +<P2 x="1160" y="321" id="2211" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2490" > +<cdparam x="1201" y="621" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1195" y="645" id="2227" /> +<P2 x="1195" y="635" id="2216" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2491" > +<cdparam x="1204" y="609" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1194" y="635" id="2240" /> +<P2 x="1195" y="625" id="2229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2492" > +<cdparam x="1174" y="336" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1160" y="351" id="2212" /> +<P2 x="1190" y="630" id="2228" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2493" > +<cdparam x="1467" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1873" y="146" id="2266" /> +<P2 x="1558" y="176" id="2281" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2494" > +<cdparam x="951" y="66" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="951" y="66" id="2394" /> +<P2 x="951" y="82" id="2297" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2495" > +<cdparam x="916" y="92" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="916" y="92" id="2298" /> +<P2 x="577" y="135" id="2068" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2496" > +<cdparam x="986" y="92" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="986" y="92" id="2299" /> +<P2 x="1908" y="136" id="2265" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2497" > +<cdparam x="1427" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1523" y="186" id="2282" /> +<P2 x="1339" y="239" id="2253" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2498" > +<cdparam x="1366" y="263" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1339" y="269" id="2254" /> +<P2 x="1344" y="309" id="2256" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2499" > +<cdparam x="1358" y="339" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1344" y="339" id="2257" /> +<P2 x="1194" y="615" id="2242" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2500" > +<cdparam x="1672" y="215" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1558" y="221" id="2284" /> +<P2 x="1564" y="233" id="2316" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2501" > +<cdparam x="1630" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1564" y="263" id="2317" /> +<P2 x="1559" y="303" id="2322" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2502" > +<cdparam x="1583" y="331" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1559" y="333" id="2323" /> +<P2 x="1563" y="372" id="2313" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2503" > +<cdparam x="1583" y="400" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1563" y="402" id="2314" /> +<P2 x="1558" y="435" id="2310" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2504" > +<cdparam x="1563" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1558" y="465" id="2311" /> +<P2 x="1199" y="620" id="2243" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2505" > +<cdparam x="1593" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1593" y="186" id="2283" /> +<P2 x="1758" y="230" id="2430" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2506" > +<cdparam x="1762" y="258" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1758" y="260" id="2431" /> +<P2 x="1761" y="298" id="2319" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2507" > +<cdparam x="1762" y="393" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1756" y="393" id="2329" /> +<P2 x="1757" y="430" id="2325" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2508" > +<cdparam x="1760" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1757" y="460" id="2326" /> +<P2 x="1200" y="630" id="2230" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2509" > +<cdparam x="1925" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1943" y="146" id="2267" /> +<P2 x="2132" y="150" id="2334" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2510" > +<cdparam x="1195" y="655" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1195" y="655" id="2214" /> +<P2 x="1196" y="654" id="2349" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2511" > +<cdparam x="1196" y="674" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1208" y="716" id="2445" /> +<P2 x="617" y="759" id="2165" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2512" > +<cdparam x="1924" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1924" y="261" id="2370" /> +<P2 x="1923" y="287" id="2360" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2513" > +<cdparam x="1923" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1923" y="317" id="2361" /> +<P2 x="1926" y="358" id="2363" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2514" > +<cdparam x="1924" y="392" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1926" y="388" id="2364" /> +<P2 x="1922" y="433" id="2375" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2515" > +<cdparam x="1890" y="179" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1908" y="181" id="2268" /> +<P2 x="1924" y="231" id="2369" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2516" > +<cdparam x="1922" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1922" y="463" id="2376" /> +<P2 x="1189" y="620" id="2241" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2517" > +<cdparam x="2097" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2097" y="160" id="2335" /> +<P2 x="2071" y="361" id="2366" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2518" > +<cdparam x="2091" y="385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2071" y="391" id="2367" /> +<P2 x="2078" y="425" id="2372" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2519" > +<cdparam x="2078" y="455" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2078" y="455" id="2373" /> +<P2 x="1200" y="640" id="2217" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2520" > +<cdparam x="2245" y="389" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2226" y="393" id="2379" /> +<P2 x="2232" y="429" id="2381" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2521" > +<cdparam x="2132" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2132" y="195" id="2337" /> +<P2 x="2226" y="363" id="2378" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2522" > +<cdparam x="2232" y="459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2232" y="459" id="2382" /> +<P2 x="1191" y="659" id="2348" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2523" > +<cdparam x="2431" y="392" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2427" y="394" id="2385" /> +<P2 x="2414" y="432" id="2387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2524" > +<cdparam x="2418" y="462" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2414" y="462" id="2388" /> +<P2 x="1201" y="659" id="2350" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2525" > +<cdparam x="612" y="774" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="612" y="774" id="2162" /> +<P2 x="606" y="818" id="2390" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2526" > +<cdparam x="1761" y="328" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1761" y="328" id="2320" /> +<P2 x="1756" y="363" id="2328" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2527" > +<cdparam x="1014" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1014" y="399" id="2206" /> +<P2 x="1190" y="640" id="2215" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2529" > +<cdparam x="181" y="196" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="181" y="196" id="2101" /> +<P2 x="81" y="248" id="2405" /> +<Point x="80" y="216" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2528" > +<father id="2529" num="0" /> +<cdparam x="80" y="216" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="2530" > +<cdparam x="81" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="81" y="278" id="2406" /> +<P2 x="81" y="303" id="2411" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2531" > +<cdparam x="81" y="333" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="81" y="333" id="2412" /> +<P2 x="83" y="384" id="2408" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2532" > +<cdparam x="83" y="414" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="83" y="414" id="2409" /> +<P2 x="607" y="759" id="2163" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2533" > +<cdparam x="2167" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="2167" y="160" id="2336" /> +<P2 x="2640" y="242" id="2417" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2534" > +<cdparam x="2605" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2605" y="252" id="2418" /> +<P2 x="2427" y="364" id="2384" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2535" > +<cdparam x="2640" y="287" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2640" y="287" id="2420" /> +<P2 x="2636" y="337" id="2436" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2536" > +<cdparam x="2675" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2675" y="252" id="2419" /> +<P2 x="2820" y="334" id="2433" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2537" > +<cdparam x="2636" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2636" y="367" id="2437" /> +<P2 x="2639" y="408" id="2442" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2538" > +<cdparam x="2820" y="364" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2820" y="364" id="2434" /> +<P2 x="2814" y="412" id="2439" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2539" > +<cdparam x="2814" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2814" y="442" id="2440" /> +<P2 x="1213" y="701" id="2448" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2540" > +<cdparam x="2621" y="430" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2639" y="438" id="2443" /> +<P2 x="1208" y="696" id="2447" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2541" > +<cdparam x="1196" y="674" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1196" y="674" id="2347" /> +<P2 x="1203" y="701" id="2446" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CommonBus" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="2543" > +<cdparam x="211" y="26" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2542" /> +</COMPONENT> + +<COMPONENT type="2004" id="2546" > +<cdparam x="137" y="114" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="2544" /> +<TGConnectingPoint num="1" id="2545" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2549" > +<cdparam x="146" y="179" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode" /> +<TGConnectingPoint num="0" id="2547" /> +<TGConnectingPoint num="1" id="2548" /> +<extraparam> +<Via port="saleRegisteredEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="2552" > +<cdparam x="193" y="261" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2550" /> +<TGConnectingPoint num="1" id="2551" /> +</COMPONENT> + +<COMPONENT type="2016" id="2555" > +<cdparam x="198" y="66" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2553" /> +<TGConnectingPoint num="1" id="2554" /> +</COMPONENT> + +<COMPONENT type="301" id="2564" > +<cdparam x="10" y="10" /> +<sizeparam width="177" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Common Bus State Machine +" /> +<TGConnectingPoint num="0" id="2556" /> +<TGConnectingPoint num="1" id="2557" /> +<TGConnectingPoint num="2" id="2558" /> +<TGConnectingPoint num="3" id="2559" /> +<TGConnectingPoint num="4" id="2560" /> +<TGConnectingPoint num="5" id="2561" /> +<TGConnectingPoint num="6" id="2562" /> +<TGConnectingPoint num="7" id="2563" /> +<extraparam> +<Line value="Common Bus State Machine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="2565" > +<cdparam x="218" y="46" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="218" y="46" id="2542" /> +<P2 x="218" y="61" id="2553" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2566" > +<cdparam x="224" y="113" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="218" y="91" id="2554" /> +<P2 x="215" y="109" id="2544" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2567" > +<cdparam x="218" y="161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="215" y="139" id="2545" /> +<P2 x="217" y="174" id="2547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2568" > +<cdparam x="219" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="217" y="204" id="2548" /> +<P2 x="213" y="256" id="2550" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="Coordinator" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="2570" > +<cdparam x="200" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2569" /> +</COMPONENT> + +<COMPONENT type="2004" id="2573" > +<cdparam x="127" y="101" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="2571" /> +<TGConnectingPoint num="1" id="2572" /> +<extraparam> +<Via port="saleRegisteredCoord" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2589" > +<cdparam x="194" y="166" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2577" /> +<TGConnectingPoint num="1" id="2578" /> +<TGConnectingPoint num="2" id="2579" /> +<TGConnectingPoint num="3" id="2580" /> +<TGConnectingPoint num="4" id="2581" /> +<TGConnectingPoint num="5" id="2582" /> +<TGConnectingPoint num="6" id="2583" /> +<TGConnectingPoint num="7" id="2584" /> +<TGConnectingPoint num="8" id="2585" /> +<TGConnectingPoint num="9" id="2586" /> +<TGConnectingPoint num="10" id="2587" /> +<TGConnectingPoint num="11" id="2588" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2574" > +<father id="2589" num="0" /> +<cdparam x="119" y="171" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2575" > +<father id="2589" num="1" /> +<cdparam x="219" y="171" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2576" > +<father id="2589" num="2" /> +<cdparam x="209" y="201" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="2592" > +<cdparam x="252" y="210" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2590" /> +<TGConnectingPoint num="1" id="2591" /> +<extraparam> +<Via port="expressModeControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2595" > +<cdparam x="37" y="212" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2593" /> +<TGConnectingPoint num="1" id="2594" /> +<extraparam> +<Via port="expressModeControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2608" > +<cdparam x="190" y="316" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2596" /> +<TGConnectingPoint num="1" id="2597" /> +<TGConnectingPoint num="2" id="2598" /> +<TGConnectingPoint num="3" id="2599" /> +<TGConnectingPoint num="4" id="2600" /> +<TGConnectingPoint num="5" id="2601" /> +<TGConnectingPoint num="6" id="2602" /> +<TGConnectingPoint num="7" id="2603" /> +<TGConnectingPoint num="8" id="2604" /> +<TGConnectingPoint num="9" id="2605" /> +<TGConnectingPoint num="10" id="2606" /> +<TGConnectingPoint num="11" id="2607" /> +</COMPONENT> + +<COMPONENT type="2016" id="2611" > +<cdparam x="175" y="374" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2609" /> +<TGConnectingPoint num="1" id="2610" /> +</COMPONENT> + +<COMPONENT type="2016" id="2614" > +<cdparam x="187" y="56" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2612" /> +<TGConnectingPoint num="1" id="2613" /> +</COMPONENT> + +<COMPONENT type="301" id="2623" > +<cdparam x="10" y="10" /> +<sizeparam width="165" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Coordinator State Machine +" /> +<TGConnectingPoint num="0" id="2615" /> +<TGConnectingPoint num="1" id="2616" /> +<TGConnectingPoint num="2" id="2617" /> +<TGConnectingPoint num="3" id="2618" /> +<TGConnectingPoint num="4" id="2619" /> +<TGConnectingPoint num="5" id="2620" /> +<TGConnectingPoint num="6" id="2621" /> +<TGConnectingPoint num="7" id="2622" /> +<extraparam> +<Line value="Coordinator State Machine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="2624" > +<cdparam x="197" y="51" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="207" y="30" id="2569" /> +<P2 x="207" y="51" id="2612" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2625" > +<cdparam x="203" y="111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="205" y="126" id="2572" /> +<P2 x="204" y="166" id="2577" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2626" > +<cdparam x="169" y="196" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="169" y="176" id="2578" /> +<P2 x="102" y="207" id="2593" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2627" > +<cdparam x="239" y="196" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="239" y="176" id="2579" /> +<P2 x="319" y="205" id="2590" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2628" > +<cdparam x="109" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="102" y="237" id="2594" /> +<P2 x="190" y="321" id="2597" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2629" > +<cdparam x="208" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="204" y="211" id="2580" /> +<P2 x="195" y="316" id="2598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2630" > +<cdparam x="324" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="319" y="235" id="2591" /> +<P2 x="200" y="321" id="2599" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2631" > +<cdparam x="275" y="73" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="207" y="81" id="2613" /> +<P2 x="205" y="96" id="2571" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2632" > +<cdparam x="215" y="334" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="195" y="336" id="2596" /> +<P2 x="195" y="369" id="2609" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveCSDPanel name="CashDeskLine" minX="10" maxX="1900" minY="10" maxY="1400" > +<COMPONENT type="2104" id="2645" > +<cdparam x="167" y="629" /> +<sizeparam width="100" height="29" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="bankIf" /> +<TGConnectingPoint num="0" id="2633" /> +<TGConnectingPoint num="1" id="2634" /> +<TGConnectingPoint num="2" id="2635" /> +<TGConnectingPoint num="3" id="2636" /> +<TGConnectingPoint num="4" id="2637" /> +<TGConnectingPoint num="5" id="2638" /> +<TGConnectingPoint num="6" id="2639" /> +<TGConnectingPoint num="7" id="2640" /> +<TGConnectingPoint num="8" id="2641" /> +<TGConnectingPoint num="9" id="2642" /> +<TGConnectingPoint num="10" id="2643" /> +<TGConnectingPoint num="11" id="2644" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2658" > +<cdparam x="904" y="66" /> +<sizeparam width="230" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="2646" /> +<TGConnectingPoint num="1" id="2647" /> +<TGConnectingPoint num="2" id="2648" /> +<TGConnectingPoint num="3" id="2649" /> +<TGConnectingPoint num="4" id="2650" /> +<TGConnectingPoint num="5" id="2651" /> +<TGConnectingPoint num="6" id="2652" /> +<TGConnectingPoint num="7" id="2653" /> +<TGConnectingPoint num="8" id="2654" /> +<TGConnectingPoint num="9" id="2655" /> +<TGConnectingPoint num="10" id="2656" /> +<TGConnectingPoint num="11" id="2657" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2671" > +<cdparam x="846" y="490" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="EventBusIf" /> +<TGConnectingPoint num="0" id="2659" /> +<TGConnectingPoint num="1" id="2660" /> +<TGConnectingPoint num="2" id="2661" /> +<TGConnectingPoint num="3" id="2662" /> +<TGConnectingPoint num="4" id="2663" /> +<TGConnectingPoint num="5" id="2664" /> +<TGConnectingPoint num="6" id="2665" /> +<TGConnectingPoint num="7" id="2666" /> +<TGConnectingPoint num="8" id="2667" /> +<TGConnectingPoint num="9" id="2668" /> +<TGConnectingPoint num="10" id="2669" /> +<TGConnectingPoint num="11" id="2670" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2684" > +<cdparam x="1262" y="199" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="PrinterIf" /> +<TGConnectingPoint num="0" id="2672" /> +<TGConnectingPoint num="1" id="2673" /> +<TGConnectingPoint num="2" id="2674" /> +<TGConnectingPoint num="3" id="2675" /> +<TGConnectingPoint num="4" id="2676" /> +<TGConnectingPoint num="5" id="2677" /> +<TGConnectingPoint num="6" id="2678" /> +<TGConnectingPoint num="7" id="2679" /> +<TGConnectingPoint num="8" id="2680" /> +<TGConnectingPoint num="9" id="2681" /> +<TGConnectingPoint num="10" id="2682" /> +<TGConnectingPoint num="11" id="2683" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2697" > +<cdparam x="395" y="351" /> +<sizeparam width="231" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="2685" /> +<TGConnectingPoint num="1" id="2686" /> +<TGConnectingPoint num="2" id="2687" /> +<TGConnectingPoint num="3" id="2688" /> +<TGConnectingPoint num="4" id="2689" /> +<TGConnectingPoint num="5" id="2690" /> +<TGConnectingPoint num="6" id="2691" /> +<TGConnectingPoint num="7" id="2692" /> +<TGConnectingPoint num="8" id="2693" /> +<TGConnectingPoint num="9" id="2694" /> +<TGConnectingPoint num="10" id="2695" /> +<TGConnectingPoint num="11" id="2696" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2710" > +<cdparam x="10" y="202" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="2698" /> +<TGConnectingPoint num="1" id="2699" /> +<TGConnectingPoint num="2" id="2700" /> +<TGConnectingPoint num="3" id="2701" /> +<TGConnectingPoint num="4" id="2702" /> +<TGConnectingPoint num="5" id="2703" /> +<TGConnectingPoint num="6" id="2704" /> +<TGConnectingPoint num="7" id="2705" /> +<TGConnectingPoint num="8" id="2706" /> +<TGConnectingPoint num="9" id="2707" /> +<TGConnectingPoint num="10" id="2708" /> +<TGConnectingPoint num="11" id="2709" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2723" > +<cdparam x="1037" y="254" /> +<sizeparam width="129" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="2711" /> +<TGConnectingPoint num="1" id="2712" /> +<TGConnectingPoint num="2" id="2713" /> +<TGConnectingPoint num="3" id="2714" /> +<TGConnectingPoint num="4" id="2715" /> +<TGConnectingPoint num="5" id="2716" /> +<TGConnectingPoint num="6" id="2717" /> +<TGConnectingPoint num="7" id="2718" /> +<TGConnectingPoint num="8" id="2719" /> +<TGConnectingPoint num="9" id="2720" /> +<TGConnectingPoint num="10" id="2721" /> +<TGConnectingPoint num="11" id="2722" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2736" > +<cdparam x="14" y="224" /> +<sizeparam width="149" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="2724" /> +<TGConnectingPoint num="1" id="2725" /> +<TGConnectingPoint num="2" id="2726" /> +<TGConnectingPoint num="3" id="2727" /> +<TGConnectingPoint num="4" id="2728" /> +<TGConnectingPoint num="5" id="2729" /> +<TGConnectingPoint num="6" id="2730" /> +<TGConnectingPoint num="7" id="2731" /> +<TGConnectingPoint num="8" id="2732" /> +<TGConnectingPoint num="9" id="2733" /> +<TGConnectingPoint num="10" id="2734" /> +<TGConnectingPoint num="11" id="2735" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2749" > +<cdparam x="1091" y="257" /> +<sizeparam width="143" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="2737" /> +<TGConnectingPoint num="1" id="2738" /> +<TGConnectingPoint num="2" id="2739" /> +<TGConnectingPoint num="3" id="2740" /> +<TGConnectingPoint num="4" id="2741" /> +<TGConnectingPoint num="5" id="2742" /> +<TGConnectingPoint num="6" id="2743" /> +<TGConnectingPoint num="7" id="2744" /> +<TGConnectingPoint num="8" id="2745" /> +<TGConnectingPoint num="9" id="2746" /> +<TGConnectingPoint num="10" id="2747" /> +<TGConnectingPoint num="11" id="2748" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2762" > +<cdparam x="1100" y="14" /> +<sizeparam width="162" height="24" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="2750" /> +<TGConnectingPoint num="1" id="2751" /> +<TGConnectingPoint num="2" id="2752" /> +<TGConnectingPoint num="3" id="2753" /> +<TGConnectingPoint num="4" id="2754" /> +<TGConnectingPoint num="5" id="2755" /> +<TGConnectingPoint num="6" id="2756" /> +<TGConnectingPoint num="7" id="2757" /> +<TGConnectingPoint num="8" id="2758" /> +<TGConnectingPoint num="9" id="2759" /> +<TGConnectingPoint num="10" id="2760" /> +<TGConnectingPoint num="11" id="2761" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2775" > +<cdparam x="790" y="978" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ExpressmodeControlIf" /> +<TGConnectingPoint num="0" id="2763" /> +<TGConnectingPoint num="1" id="2764" /> +<TGConnectingPoint num="2" id="2765" /> +<TGConnectingPoint num="3" id="2766" /> +<TGConnectingPoint num="4" id="2767" /> +<TGConnectingPoint num="5" id="2768" /> +<TGConnectingPoint num="6" id="2769" /> +<TGConnectingPoint num="7" id="2770" /> +<TGConnectingPoint num="8" id="2771" /> +<TGConnectingPoint num="9" id="2772" /> +<TGConnectingPoint num="10" id="2773" /> +<TGConnectingPoint num="11" id="2774" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2788" > +<cdparam x="491" y="517" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ExpressModelIf" /> +<TGConnectingPoint num="0" id="2776" /> +<TGConnectingPoint num="1" id="2777" /> +<TGConnectingPoint num="2" id="2778" /> +<TGConnectingPoint num="3" id="2779" /> +<TGConnectingPoint num="4" id="2780" /> +<TGConnectingPoint num="5" id="2781" /> +<TGConnectingPoint num="6" id="2782" /> +<TGConnectingPoint num="7" id="2783" /> +<TGConnectingPoint num="8" id="2784" /> +<TGConnectingPoint num="9" id="2785" /> +<TGConnectingPoint num="10" id="2786" /> +<TGConnectingPoint num="11" id="2787" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2801" > +<cdparam x="10" y="390" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="2789" /> +<TGConnectingPoint num="1" id="2790" /> +<TGConnectingPoint num="2" id="2791" /> +<TGConnectingPoint num="3" id="2792" /> +<TGConnectingPoint num="4" id="2793" /> +<TGConnectingPoint num="5" id="2794" /> +<TGConnectingPoint num="6" id="2795" /> +<TGConnectingPoint num="7" id="2796" /> +<TGConnectingPoint num="8" id="2797" /> +<TGConnectingPoint num="9" id="2798" /> +<TGConnectingPoint num="10" id="2799" /> +<TGConnectingPoint num="11" id="2800" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2814" > +<cdparam x="10" y="529" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="2802" /> +<TGConnectingPoint num="1" id="2803" /> +<TGConnectingPoint num="2" id="2804" /> +<TGConnectingPoint num="3" id="2805" /> +<TGConnectingPoint num="4" id="2806" /> +<TGConnectingPoint num="5" id="2807" /> +<TGConnectingPoint num="6" id="2808" /> +<TGConnectingPoint num="7" id="2809" /> +<TGConnectingPoint num="8" id="2810" /> +<TGConnectingPoint num="9" id="2811" /> +<TGConnectingPoint num="10" id="2812" /> +<TGConnectingPoint num="11" id="2813" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2827" > +<cdparam x="10" y="590" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="2815" /> +<TGConnectingPoint num="1" id="2816" /> +<TGConnectingPoint num="2" id="2817" /> +<TGConnectingPoint num="3" id="2818" /> +<TGConnectingPoint num="4" id="2819" /> +<TGConnectingPoint num="5" id="2820" /> +<TGConnectingPoint num="6" id="2821" /> +<TGConnectingPoint num="7" id="2822" /> +<TGConnectingPoint num="8" id="2823" /> +<TGConnectingPoint num="9" id="2824" /> +<TGConnectingPoint num="10" id="2825" /> +<TGConnectingPoint num="11" id="2826" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2840" > +<cdparam x="570" y="10" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="2828" /> +<TGConnectingPoint num="1" id="2829" /> +<TGConnectingPoint num="2" id="2830" /> +<TGConnectingPoint num="3" id="2831" /> +<TGConnectingPoint num="4" id="2832" /> +<TGConnectingPoint num="5" id="2833" /> +<TGConnectingPoint num="6" id="2834" /> +<TGConnectingPoint num="7" id="2835" /> +<TGConnectingPoint num="8" id="2836" /> +<TGConnectingPoint num="9" id="2837" /> +<TGConnectingPoint num="10" id="2838" /> +<TGConnectingPoint num="11" id="2839" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2853" > +<cdparam x="614" y="346" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="EventBusIf" /> +<TGConnectingPoint num="0" id="2841" /> +<TGConnectingPoint num="1" id="2842" /> +<TGConnectingPoint num="2" id="2843" /> +<TGConnectingPoint num="3" id="2844" /> +<TGConnectingPoint num="4" id="2845" /> +<TGConnectingPoint num="5" id="2846" /> +<TGConnectingPoint num="6" id="2847" /> +<TGConnectingPoint num="7" id="2848" /> +<TGConnectingPoint num="8" id="2849" /> +<TGConnectingPoint num="9" id="2850" /> +<TGConnectingPoint num="10" id="2851" /> +<TGConnectingPoint num="11" id="2852" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2866" > +<cdparam x="454" y="10" /> +<sizeparam width="188" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="2854" /> +<TGConnectingPoint num="1" id="2855" /> +<TGConnectingPoint num="2" id="2856" /> +<TGConnectingPoint num="3" id="2857" /> +<TGConnectingPoint num="4" id="2858" /> +<TGConnectingPoint num="5" id="2859" /> +<TGConnectingPoint num="6" id="2860" /> +<TGConnectingPoint num="7" id="2861" /> +<TGConnectingPoint num="8" id="2862" /> +<TGConnectingPoint num="9" id="2863" /> +<TGConnectingPoint num="10" id="2864" /> +<TGConnectingPoint num="11" id="2865" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="3081" > +<cdparam x="33" y="24" /> +<sizeparam width="1487" height="628" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="CashDeskLine" /> +<TGConnectingPoint num="0" id="3073" /> +<TGConnectingPoint num="1" id="3074" /> +<TGConnectingPoint num="2" id="3075" /> +<TGConnectingPoint num="3" id="3076" /> +<TGConnectingPoint num="4" id="3077" /> +<TGConnectingPoint num="5" id="3078" /> +<TGConnectingPoint num="6" id="3079" /> +<TGConnectingPoint num="7" id="3080" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDeskLine"/><LastPortCode code="141" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2108" id="2871" > +<father id="3081" num="0" /> +<cdparam x="53" y="14" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1467" minY="0" maxY="608" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="2867" /> +<TGConnectingPoint num="1" id="2868" /> +<TGConnectingPoint num="2" id="2869" /> +<TGConnectingPoint num="3" id="2870" /> +<extraparam> +<PortCode code="CashDeskLineDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2876" > +<father id="3081" num="1" /> +<cdparam x="23" y="487" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1467" minY="0" maxY="608" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="2872" /> +<TGConnectingPoint num="1" id="2873" /> +<TGConnectingPoint num="2" id="2874" /> +<TGConnectingPoint num="3" id="2875" /> +<extraparam> +<PortCode code="CashDeskLineDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2881" > +<father id="3081" num="2" /> +<cdparam x="278" y="14" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1467" minY="0" maxY="608" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="2877" /> +<TGConnectingPoint num="1" id="2878" /> +<TGConnectingPoint num="2" id="2879" /> +<TGConnectingPoint num="3" id="2880" /> +<extraparam> +<PortCode code="CashDeskLineDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="2955" > +<father id="3081" num="3" /> +<cdparam x="83" y="100" /> +<sizeparam width="1358" height="68" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="129" minY="0" maxY="560" /> +<infoparam name="Component " value="CashDesk" /> +<TGConnectingPoint num="0" id="2947" /> +<TGConnectingPoint num="1" id="2948" /> +<TGConnectingPoint num="2" id="2949" /> +<TGConnectingPoint num="3" id="2950" /> +<TGConnectingPoint num="4" id="2951" /> +<TGConnectingPoint num="5" id="2952" /> +<TGConnectingPoint num="6" id="2953" /> +<TGConnectingPoint num="7" id="2954" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDesk"/><LastPortCode code="300" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2886" > +<father id="2955" num="0" /> +<cdparam x="716" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="AppEventHandler" /> +<TGConnectingPoint num="0" id="2882" /> +<TGConnectingPoint num="1" id="2883" /> +<TGConnectingPoint num="2" id="2884" /> +<TGConnectingPoint num="3" id="2885" /> +<extraparam> +<PortCode code="CashDeskDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2891" > +<father id="2955" num="1" /> +<cdparam x="73" y="90" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="2887" /> +<TGConnectingPoint num="1" id="2888" /> +<TGConnectingPoint num="2" id="2889" /> +<TGConnectingPoint num="3" id="2890" /> +<extraparam> +<PortCode code="CashDeskDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2896" > +<father id="2955" num="2" /> +<cdparam x="73" y="154" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="eventBus" /> +<TGConnectingPoint num="0" id="2892" /> +<TGConnectingPoint num="1" id="2893" /> +<TGConnectingPoint num="2" id="2894" /> +<TGConnectingPoint num="3" id="2895" /> +<extraparam> +<PortCode code="CashDeskDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2901" > +<father id="2955" num="3" /> +<cdparam x="187" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="2897" /> +<TGConnectingPoint num="1" id="2898" /> +<TGConnectingPoint num="2" id="2899" /> +<TGConnectingPoint num="3" id="2900" /> +<extraparam> +<PortCode code="CashDeskDesign4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2906" > +<father id="2955" num="4" /> +<cdparam x="301" y="90" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="2902" /> +<TGConnectingPoint num="1" id="2903" /> +<TGConnectingPoint num="2" id="2904" /> +<TGConnectingPoint num="3" id="2905" /> +<extraparam> +<PortCode code="CashDeskDesign5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2911" > +<father id="2955" num="5" /> +<cdparam x="863" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="2907" /> +<TGConnectingPoint num="1" id="2908" /> +<TGConnectingPoint num="2" id="2909" /> +<TGConnectingPoint num="3" id="2910" /> +<extraparam> +<PortCode code="CashDeskDesign6" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2916" > +<father id="2955" num="6" /> +<cdparam x="1017" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="cashDeskGUIControl" /> +<TGConnectingPoint num="0" id="2912" /> +<TGConnectingPoint num="1" id="2913" /> +<TGConnectingPoint num="2" id="2914" /> +<TGConnectingPoint num="3" id="2915" /> +<extraparam> +<PortCode code="CashDeskDesign7" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2921" > +<father id="2955" num="7" /> +<cdparam x="335" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="2917" /> +<TGConnectingPoint num="1" id="2918" /> +<TGConnectingPoint num="2" id="2919" /> +<TGConnectingPoint num="3" id="2920" /> +<extraparam> +<PortCode code="CashDeskDesign8" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2926" > +<father id="2955" num="8" /> +<cdparam x="1167" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="2922" /> +<TGConnectingPoint num="1" id="2923" /> +<TGConnectingPoint num="2" id="2924" /> +<TGConnectingPoint num="3" id="2925" /> +<extraparam> +<PortCode code="CashDeskDesign9" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2931" > +<father id="2955" num="9" /> +<cdparam x="569" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="cashBoxEvent" /> +<TGConnectingPoint num="0" id="2927" /> +<TGConnectingPoint num="1" id="2928" /> +<TGConnectingPoint num="2" id="2929" /> +<TGConnectingPoint num="3" id="2930" /> +<extraparam> +<PortCode code="CashDeskDesign10" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2936" > +<father id="2955" num="10" /> +<cdparam x="1312" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="2932" /> +<TGConnectingPoint num="1" id="2933" /> +<TGConnectingPoint num="2" id="2934" /> +<TGConnectingPoint num="3" id="2935" /> +<extraparam> +<PortCode code="CashDeskDesign11" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2941" > +<father id="2955" num="11" /> +<cdparam x="452" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="scanner" /> +<TGConnectingPoint num="0" id="2937" /> +<TGConnectingPoint num="1" id="2938" /> +<TGConnectingPoint num="2" id="2939" /> +<TGConnectingPoint num="3" id="2940" /> +<extraparam> +<PortCode code="CashDeskDesign12" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2946" > +<father id="2955" num="12" /> +<cdparam x="1431" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="printer" /> +<TGConnectingPoint num="0" id="2942" /> +<TGConnectingPoint num="1" id="2943" /> +<TGConnectingPoint num="2" id="2944" /> +<TGConnectingPoint num="3" id="2945" /> +<extraparam> +<PortCode code="CashDeskDesign13" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3029" > +<father id="3081" num="4" /> +<cdparam x="86" y="292" /> +<sizeparam width="1357" height="78" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="130" minY="0" maxY="550" /> +<infoparam name="Component " value="EventBus" /> +<TGConnectingPoint num="0" id="3021" /> +<TGConnectingPoint num="1" id="3022" /> +<TGConnectingPoint num="2" id="3023" /> +<TGConnectingPoint num="3" id="3024" /> +<TGConnectingPoint num="4" id="3025" /> +<TGConnectingPoint num="5" id="3026" /> +<TGConnectingPoint num="6" id="3027" /> +<TGConnectingPoint num="7" id="3028" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="EventBus"/><LastPortCode code="335" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2960" > +<father id="3029" num="0" /> +<cdparam x="263" y="360" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="saleRegisteredEvent" /> +<TGConnectingPoint num="0" id="2956" /> +<TGConnectingPoint num="1" id="2957" /> +<TGConnectingPoint num="2" id="2958" /> +<TGConnectingPoint num="3" id="2959" /> +<extraparam> +<PortCode code="EventBusDesign97" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2965" > +<father id="3029" num="1" /> +<cdparam x="76" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="eventBus" /> +<TGConnectingPoint num="0" id="2961" /> +<TGConnectingPoint num="1" id="2962" /> +<TGConnectingPoint num="2" id="2963" /> +<TGConnectingPoint num="3" id="2964" /> +<extraparam> +<PortCode code="EventBusDesign77" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2970" > +<father id="3029" num="2" /> +<cdparam x="444" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="scanner" /> +<TGConnectingPoint num="0" id="2966" /> +<TGConnectingPoint num="1" id="2967" /> +<TGConnectingPoint num="2" id="2968" /> +<TGConnectingPoint num="3" id="2969" /> +<extraparam> +<PortCode code="EventBusDesign76" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2975" > +<father id="3029" num="3" /> +<cdparam x="558" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="cashBoxEnevt" /> +<TGConnectingPoint num="0" id="2971" /> +<TGConnectingPoint num="1" id="2972" /> +<TGConnectingPoint num="2" id="2973" /> +<TGConnectingPoint num="3" id="2974" /> +<extraparam> +<PortCode code="EventBusDesign75" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2980" > +<father id="3029" num="4" /> +<cdparam x="319" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="2976" /> +<TGConnectingPoint num="1" id="2977" /> +<TGConnectingPoint num="2" id="2978" /> +<TGConnectingPoint num="3" id="2979" /> +<extraparam> +<PortCode code="EventBusDesign74" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2985" > +<father id="3029" num="5" /> +<cdparam x="186" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="2981" /> +<TGConnectingPoint num="1" id="2982" /> +<TGConnectingPoint num="2" id="2983" /> +<TGConnectingPoint num="3" id="2984" /> +<extraparam> +<PortCode code="EventBusDesign73" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2990" > +<father id="3029" num="6" /> +<cdparam x="1433" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="printer" /> +<TGConnectingPoint num="0" id="2986" /> +<TGConnectingPoint num="1" id="2987" /> +<TGConnectingPoint num="2" id="2988" /> +<TGConnectingPoint num="3" id="2989" /> +<extraparam> +<PortCode code="EventBusDesign83" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2995" > +<father id="3029" num="7" /> +<cdparam x="1172" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="2991" /> +<TGConnectingPoint num="1" id="2992" /> +<TGConnectingPoint num="2" id="2993" /> +<TGConnectingPoint num="3" id="2994" /> +<extraparam> +<PortCode code="EventBusDesign82" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3000" > +<father id="3029" num="8" /> +<cdparam x="1015" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="cashDeskGui" /> +<TGConnectingPoint num="0" id="2996" /> +<TGConnectingPoint num="1" id="2997" /> +<TGConnectingPoint num="2" id="2998" /> +<TGConnectingPoint num="3" id="2999" /> +<extraparam> +<PortCode code="EventBusDesign81" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3005" > +<father id="3029" num="9" /> +<cdparam x="857" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3001" /> +<TGConnectingPoint num="1" id="3002" /> +<TGConnectingPoint num="2" id="3003" /> +<TGConnectingPoint num="3" id="3004" /> +<extraparam> +<PortCode code="EventBusDesign80" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3010" > +<father id="3029" num="10" /> +<cdparam x="710" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="appEventHandler" /> +<TGConnectingPoint num="0" id="3006" /> +<TGConnectingPoint num="1" id="3007" /> +<TGConnectingPoint num="2" id="3008" /> +<TGConnectingPoint num="3" id="3009" /> +<extraparam> +<PortCode code="EventBusDesign79" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3015" > +<father id="3029" num="11" /> +<cdparam x="1315" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3011" /> +<TGConnectingPoint num="1" id="3012" /> +<TGConnectingPoint num="2" id="3013" /> +<TGConnectingPoint num="3" id="3014" /> +<extraparam> +<PortCode code="EventBusDesign78" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3020" > +<father id="3029" num="12" /> +<cdparam x="735" y="360" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="expressMode" /> +<TGConnectingPoint num="0" id="3016" /> +<TGConnectingPoint num="1" id="3017" /> +<TGConnectingPoint num="2" id="3018" /> +<TGConnectingPoint num="3" id="3019" /> +<extraparam> +<PortCode code="EventBusDesign84" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3048" > +<father id="3081" num="5" /> +<cdparam x="137" y="533" /> +<sizeparam width="973" height="51" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="514" minY="0" maxY="577" /> +<infoparam name="Component " value="Coordinator" /> +<TGConnectingPoint num="0" id="3040" /> +<TGConnectingPoint num="1" id="3041" /> +<TGConnectingPoint num="2" id="3042" /> +<TGConnectingPoint num="3" id="3043" /> +<TGConnectingPoint num="4" id="3044" /> +<TGConnectingPoint num="5" id="3045" /> +<TGConnectingPoint num="6" id="3046" /> +<TGConnectingPoint num="7" id="3047" /> +<extraparam> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="40" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3034" > +<father id="3048" num="0" /> +<cdparam x="127" y="548" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="31" /> +<infoparam name="In Port" value="saleRegisteredCoord" /> +<TGConnectingPoint num="0" id="3030" /> +<TGConnectingPoint num="1" id="3031" /> +<TGConnectingPoint num="2" id="3032" /> +<TGConnectingPoint num="3" id="3033" /> +<extraparam> +<PortCode code="Coordinator1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3039" > +<father id="3048" num="1" /> +<cdparam x="688" y="523" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="31" /> +<infoparam name="Out Port" value="expressModeControl" /> +<TGConnectingPoint num="0" id="3035" /> +<TGConnectingPoint num="1" id="3036" /> +<TGConnectingPoint num="2" id="3037" /> +<TGConnectingPoint num="3" id="3038" /> +<extraparam> +<PortCode code="Coordinator2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3072" > +<father id="3081" num="6" /> +<cdparam x="79" y="415" /> +<sizeparam width="47" height="45" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1440" minY="0" maxY="583" /> +<infoparam name="Component " value="ds" /> +<TGConnectingPoint num="0" id="3064" /> +<TGConnectingPoint num="1" id="3065" /> +<TGConnectingPoint num="2" id="3066" /> +<TGConnectingPoint num="3" id="3067" /> +<TGConnectingPoint num="4" id="3068" /> +<TGConnectingPoint num="5" id="3069" /> +<TGConnectingPoint num="6" id="3070" /> +<TGConnectingPoint num="7" id="3071" /> +<extraparam> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="64" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3053" > +<father id="3072" num="0" /> +<cdparam x="69" y="450" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="27" minY="0" maxY="25" /> +<infoparam name="Out Port" value="pOut2" /> +<TGConnectingPoint num="0" id="3049" /> +<TGConnectingPoint num="1" id="3050" /> +<TGConnectingPoint num="2" id="3051" /> +<TGConnectingPoint num="3" id="3052" /> +<extraparam> +<PortCode code="ds3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3058" > +<father id="3072" num="1" /> +<cdparam x="116" y="450" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="27" minY="0" maxY="25" /> +<infoparam name="Out Port" value="pOut1" /> +<TGConnectingPoint num="0" id="3054" /> +<TGConnectingPoint num="1" id="3055" /> +<TGConnectingPoint num="2" id="3056" /> +<TGConnectingPoint num="3" id="3057" /> +<extraparam> +<PortCode code="ds2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3063" > +<father id="3072" num="2" /> +<cdparam x="94" y="405" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="27" minY="0" maxY="25" /> +<infoparam name="In Port" value="pIn" /> +<TGConnectingPoint num="0" id="3059" /> +<TGConnectingPoint num="1" id="3060" /> +<TGConnectingPoint num="2" id="3061" /> +<TGConnectingPoint num="3" id="3062" /> +<extraparam> +<PortCode code="ds1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="3094" > +<cdparam x="156" y="10" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="3082" /> +<TGConnectingPoint num="1" id="3083" /> +<TGConnectingPoint num="2" id="3084" /> +<TGConnectingPoint num="3" id="3085" /> +<TGConnectingPoint num="4" id="3086" /> +<TGConnectingPoint num="5" id="3087" /> +<TGConnectingPoint num="6" id="3088" /> +<TGConnectingPoint num="7" id="3089" /> +<TGConnectingPoint num="8" id="3090" /> +<TGConnectingPoint num="9" id="3091" /> +<TGConnectingPoint num="10" id="3092" /> +<TGConnectingPoint num="11" id="3093" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3107" > +<cdparam x="10" y="135" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="3095" /> +<TGConnectingPoint num="1" id="3096" /> +<TGConnectingPoint num="2" id="3097" /> +<TGConnectingPoint num="3" id="3098" /> +<TGConnectingPoint num="4" id="3099" /> +<TGConnectingPoint num="5" id="3100" /> +<TGConnectingPoint num="6" id="3101" /> +<TGConnectingPoint num="7" id="3102" /> +<TGConnectingPoint num="8" id="3103" /> +<TGConnectingPoint num="9" id="3104" /> +<TGConnectingPoint num="10" id="3105" /> +<TGConnectingPoint num="11" id="3106" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3120" > +<cdparam x="23" y="728" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3108" /> +<TGConnectingPoint num="1" id="3109" /> +<TGConnectingPoint num="2" id="3110" /> +<TGConnectingPoint num="3" id="3111" /> +<TGConnectingPoint num="4" id="3112" /> +<TGConnectingPoint num="5" id="3113" /> +<TGConnectingPoint num="6" id="3114" /> +<TGConnectingPoint num="7" id="3115" /> +<TGConnectingPoint num="8" id="3116" /> +<TGConnectingPoint num="9" id="3117" /> +<TGConnectingPoint num="10" id="3118" /> +<TGConnectingPoint num="11" id="3119" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3133" > +<cdparam x="197" y="794" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3121" /> +<TGConnectingPoint num="1" id="3122" /> +<TGConnectingPoint num="2" id="3123" /> +<TGConnectingPoint num="3" id="3124" /> +<TGConnectingPoint num="4" id="3125" /> +<TGConnectingPoint num="5" id="3126" /> +<TGConnectingPoint num="6" id="3127" /> +<TGConnectingPoint num="7" id="3128" /> +<TGConnectingPoint num="8" id="3129" /> +<TGConnectingPoint num="9" id="3130" /> +<TGConnectingPoint num="10" id="3131" /> +<TGConnectingPoint num="11" id="3132" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3146" > +<cdparam x="95" y="737" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3134" /> +<TGConnectingPoint num="1" id="3135" /> +<TGConnectingPoint num="2" id="3136" /> +<TGConnectingPoint num="3" id="3137" /> +<TGConnectingPoint num="4" id="3138" /> +<TGConnectingPoint num="5" id="3139" /> +<TGConnectingPoint num="6" id="3140" /> +<TGConnectingPoint num="7" id="3141" /> +<TGConnectingPoint num="8" id="3142" /> +<TGConnectingPoint num="9" id="3143" /> +<TGConnectingPoint num="10" id="3144" /> +<TGConnectingPoint num="11" id="3145" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3159" > +<cdparam x="367" y="709" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3147" /> +<TGConnectingPoint num="1" id="3148" /> +<TGConnectingPoint num="2" id="3149" /> +<TGConnectingPoint num="3" id="3150" /> +<TGConnectingPoint num="4" id="3151" /> +<TGConnectingPoint num="5" id="3152" /> +<TGConnectingPoint num="6" id="3153" /> +<TGConnectingPoint num="7" id="3154" /> +<TGConnectingPoint num="8" id="3155" /> +<TGConnectingPoint num="9" id="3156" /> +<TGConnectingPoint num="10" id="3157" /> +<TGConnectingPoint num="11" id="3158" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3172" > +<cdparam x="205" y="707" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3160" /> +<TGConnectingPoint num="1" id="3161" /> +<TGConnectingPoint num="2" id="3162" /> +<TGConnectingPoint num="3" id="3163" /> +<TGConnectingPoint num="4" id="3164" /> +<TGConnectingPoint num="5" id="3165" /> +<TGConnectingPoint num="6" id="3166" /> +<TGConnectingPoint num="7" id="3167" /> +<TGConnectingPoint num="8" id="3168" /> +<TGConnectingPoint num="9" id="3169" /> +<TGConnectingPoint num="10" id="3170" /> +<TGConnectingPoint num="11" id="3171" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="3173" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="726" y="158" id="2882" /> +<P2 x="904" y="78" id="2646" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3174" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="83" y="154" id="2892" /> +<P2 x="846" y="502" id="2659" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3175" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="197" y="158" id="2897" /> +<P2 x="10" y="402" id="2789" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3176" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="311" y="90" id="2902" /> +<P2 x="570" y="22" id="2828" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3178" > +<cdparam x="561" y="238" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3177" /> +<P1 x="73" y="100" id="2889" /> +<P2 x="73" y="24" id="2870" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3180" > +<cdparam x="561" y="194" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3179" /> +<P1 x="301" y="100" id="2904" /> +<P2 x="298" y="24" id="2880" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3181" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="1441" y="158" id="2942" /> +<P2 x="1262" y="211" id="2672" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3182" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="462" y="158" id="2937" /> +<P2 x="395" y="363" id="2685" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3183" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="1322" y="158" id="2932" /> +<P2 x="10" y="214" id="2698" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3184" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="579" y="158" id="2927" /> +<P2 x="1037" y="266" id="2711" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3185" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="1177" y="158" id="2922" /> +<P2 x="14" y="236" id="2724" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3186" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="345" y="158" id="2917" /> +<P2 x="1091" y="269" id="2737" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3187" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="873" y="158" id="2907" /> +<P2 x="1100" y="26" id="2750" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3189" > +<cdparam x="261" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3188" /> +<P1 x="83" y="174" id="2893" /> +<P2 x="86" y="282" id="2961" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3191" > +<cdparam x="476" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3190" /> +<P1 x="345" y="178" id="2918" /> +<P2 x="329" y="282" id="2976" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3193" > +<cdparam x="784" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3192" /> +<P1 x="579" y="178" id="2928" /> +<P2 x="568" y="282" id="2971" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3195" > +<cdparam x="607" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3194" /> +<P1 x="462" y="178" id="2938" /> +<P2 x="454" y="282" id="2966" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3197" > +<cdparam x="886" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3196" /> +<P1 x="720" y="282" id="3006" /> +<P2 x="726" y="178" id="2883" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3199" > +<cdparam x="1031" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3198" /> +<P1 x="867" y="282" id="3001" /> +<P2 x="873" y="178" id="2908" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3201" > +<cdparam x="1089" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3200" /> +<P1 x="1025" y="282" id="2996" /> +<P2 x="1027" y="178" id="2913" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3203" > +<cdparam x="1248" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3202" /> +<P1 x="1182" y="282" id="2991" /> +<P2 x="1177" y="178" id="2923" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3205" > +<cdparam x="1384" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3204" /> +<P1 x="1325" y="282" id="3011" /> +<P2 x="1322" y="178" id="2933" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3207" > +<cdparam x="1518" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3206" /> +<P1 x="1443" y="282" id="2986" /> +<P2 x="1441" y="178" id="2943" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3209" > +<cdparam x="877" y="565" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3208" /> +<P1 x="698" y="523" id="3035" /> +<P2 x="745" y="380" id="3017" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3210" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="745" y="360" id="3016" /> +<P2 x="491" y="529" id="2776" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3211" > +<cdparam x="765" y="613" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="708" y="533" id="3038" /> +<P2 x="790" y="990" id="2763" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3213" > +<cdparam x="264" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3212" /> +<P1 x="197" y="178" id="2898" /> +<P2 x="196" y="282" id="2981" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3215" > +<cdparam x="359" y="608" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3214" /> +<P1 x="273" y="380" id="2957" /> +<P2 x="104" y="405" id="3059" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3217" > +<cdparam x="258" y="721" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3216" /> +<P1 x="79" y="470" id="3050" /> +<P2 x="43" y="497" id="2875" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3218" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="86" y="282" id="2961" /> +<P2 x="614" y="358" id="2841" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3219" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="83" y="90" id="2887" /> +<P2 x="454" y="22" id="2854" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3221" > +<cdparam x="178" y="515" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3220" /> +<P1 x="126" y="470" id="3055" /> +<P2 x="137" y="548" id="3030" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3222" > +<cdparam x="326" y="32" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="288" y="14" id="2877" /> +<P2 x="156" y="22" id="3082" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3223" > +<cdparam x="101" y="52" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="63" y="34" id="2868" /> +<P2 x="60" y="135" id="3098" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3224" > +<cdparam x="71" y="505" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="33" y="487" id="2872" /> +<P2 x="23" y="740" id="3108" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3225" > +<cdparam x="129" y="474" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="79" y="450" id="3049" /> +<P2 x="197" y="806" id="3121" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3226" > +<cdparam x="166" y="484" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="116" y="460" id="3056" /> +<P2 x="95" y="749" id="3134" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3227" > +<cdparam x="144" y="439" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="94" y="415" id="3061" /> +<P2 x="367" y="721" id="3147" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3228" > +<cdparam x="207" y="598" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="137" y="568" id="3031" /> +<P2 x="205" y="719" id="3160" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveCSDPanel name="EventBus" minX="10" maxX="1900" minY="10" maxY="1900" > +<COMPONENT type="2104" id="3241" > +<cdparam x="10" y="10" /> +<sizeparam width="153" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="209" minDesiredHeight="68" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="3229" /> +<TGConnectingPoint num="1" id="3230" /> +<TGConnectingPoint num="2" id="3231" /> +<TGConnectingPoint num="3" id="3232" /> +<TGConnectingPoint num="4" id="3233" /> +<TGConnectingPoint num="5" id="3234" /> +<TGConnectingPoint num="6" id="3235" /> +<TGConnectingPoint num="7" id="3236" /> +<TGConnectingPoint num="8" id="3237" /> +<TGConnectingPoint num="9" id="3238" /> +<TGConnectingPoint num="10" id="3239" /> +<TGConnectingPoint num="11" id="3240" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3254" > +<cdparam x="756" y="10" /> +<sizeparam width="133" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="3242" /> +<TGConnectingPoint num="1" id="3243" /> +<TGConnectingPoint num="2" id="3244" /> +<TGConnectingPoint num="3" id="3245" /> +<TGConnectingPoint num="4" id="3246" /> +<TGConnectingPoint num="5" id="3247" /> +<TGConnectingPoint num="6" id="3248" /> +<TGConnectingPoint num="7" id="3249" /> +<TGConnectingPoint num="8" id="3250" /> +<TGConnectingPoint num="9" id="3251" /> +<TGConnectingPoint num="10" id="3252" /> +<TGConnectingPoint num="11" id="3253" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3267" > +<cdparam x="1252" y="820" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="3255" /> +<TGConnectingPoint num="1" id="3256" /> +<TGConnectingPoint num="2" id="3257" /> +<TGConnectingPoint num="3" id="3258" /> +<TGConnectingPoint num="4" id="3259" /> +<TGConnectingPoint num="5" id="3260" /> +<TGConnectingPoint num="6" id="3261" /> +<TGConnectingPoint num="7" id="3262" /> +<TGConnectingPoint num="8" id="3263" /> +<TGConnectingPoint num="9" id="3264" /> +<TGConnectingPoint num="10" id="3265" /> +<TGConnectingPoint num="11" id="3266" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3280" > +<cdparam x="1232" y="178" /> +<sizeparam width="198" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="3268" /> +<TGConnectingPoint num="1" id="3269" /> +<TGConnectingPoint num="2" id="3270" /> +<TGConnectingPoint num="3" id="3271" /> +<TGConnectingPoint num="4" id="3272" /> +<TGConnectingPoint num="5" id="3273" /> +<TGConnectingPoint num="6" id="3274" /> +<TGConnectingPoint num="7" id="3275" /> +<TGConnectingPoint num="8" id="3276" /> +<TGConnectingPoint num="9" id="3277" /> +<TGConnectingPoint num="10" id="3278" /> +<TGConnectingPoint num="11" id="3279" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3293" > +<cdparam x="1500" y="253" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3281" /> +<TGConnectingPoint num="1" id="3282" /> +<TGConnectingPoint num="2" id="3283" /> +<TGConnectingPoint num="3" id="3284" /> +<TGConnectingPoint num="4" id="3285" /> +<TGConnectingPoint num="5" id="3286" /> +<TGConnectingPoint num="6" id="3287" /> +<TGConnectingPoint num="7" id="3288" /> +<TGConnectingPoint num="8" id="3289" /> +<TGConnectingPoint num="9" id="3290" /> +<TGConnectingPoint num="10" id="3291" /> +<TGConnectingPoint num="11" id="3292" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3306" > +<cdparam x="1286" y="506" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="3294" /> +<TGConnectingPoint num="1" id="3295" /> +<TGConnectingPoint num="2" id="3296" /> +<TGConnectingPoint num="3" id="3297" /> +<TGConnectingPoint num="4" id="3298" /> +<TGConnectingPoint num="5" id="3299" /> +<TGConnectingPoint num="6" id="3300" /> +<TGConnectingPoint num="7" id="3301" /> +<TGConnectingPoint num="8" id="3302" /> +<TGConnectingPoint num="9" id="3303" /> +<TGConnectingPoint num="10" id="3304" /> +<TGConnectingPoint num="11" id="3305" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3319" > +<cdparam x="1230" y="17" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="3307" /> +<TGConnectingPoint num="1" id="3308" /> +<TGConnectingPoint num="2" id="3309" /> +<TGConnectingPoint num="3" id="3310" /> +<TGConnectingPoint num="4" id="3311" /> +<TGConnectingPoint num="5" id="3312" /> +<TGConnectingPoint num="6" id="3313" /> +<TGConnectingPoint num="7" id="3314" /> +<TGConnectingPoint num="8" id="3315" /> +<TGConnectingPoint num="9" id="3316" /> +<TGConnectingPoint num="10" id="3317" /> +<TGConnectingPoint num="11" id="3318" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3332" > +<cdparam x="1175" y="10" /> +<sizeparam width="143" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3320" /> +<TGConnectingPoint num="1" id="3321" /> +<TGConnectingPoint num="2" id="3322" /> +<TGConnectingPoint num="3" id="3323" /> +<TGConnectingPoint num="4" id="3324" /> +<TGConnectingPoint num="5" id="3325" /> +<TGConnectingPoint num="6" id="3326" /> +<TGConnectingPoint num="7" id="3327" /> +<TGConnectingPoint num="8" id="3328" /> +<TGConnectingPoint num="9" id="3329" /> +<TGConnectingPoint num="10" id="3330" /> +<TGConnectingPoint num="11" id="3331" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3345" > +<cdparam x="48" y="181" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3333" /> +<TGConnectingPoint num="1" id="3334" /> +<TGConnectingPoint num="2" id="3335" /> +<TGConnectingPoint num="3" id="3336" /> +<TGConnectingPoint num="4" id="3337" /> +<TGConnectingPoint num="5" id="3338" /> +<TGConnectingPoint num="6" id="3339" /> +<TGConnectingPoint num="7" id="3340" /> +<TGConnectingPoint num="8" id="3341" /> +<TGConnectingPoint num="9" id="3342" /> +<TGConnectingPoint num="10" id="3343" /> +<TGConnectingPoint num="11" id="3344" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3358" > +<cdparam x="10" y="529" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3346" /> +<TGConnectingPoint num="1" id="3347" /> +<TGConnectingPoint num="2" id="3348" /> +<TGConnectingPoint num="3" id="3349" /> +<TGConnectingPoint num="4" id="3350" /> +<TGConnectingPoint num="5" id="3351" /> +<TGConnectingPoint num="6" id="3352" /> +<TGConnectingPoint num="7" id="3353" /> +<TGConnectingPoint num="8" id="3354" /> +<TGConnectingPoint num="9" id="3355" /> +<TGConnectingPoint num="10" id="3356" /> +<TGConnectingPoint num="11" id="3357" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="3515" > +<cdparam x="72" y="26" /> +<sizeparam width="973" height="558" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="Component " value="EventBus" /> +<TGConnectingPoint num="0" id="3507" /> +<TGConnectingPoint num="1" id="3508" /> +<TGConnectingPoint num="2" id="3509" /> +<TGConnectingPoint num="3" id="3510" /> +<TGConnectingPoint num="4" id="3511" /> +<TGConnectingPoint num="5" id="3512" /> +<TGConnectingPoint num="6" id="3513" /> +<TGConnectingPoint num="7" id="3514" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="EventBus"/><LastPortCode code="331" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2108" id="3363" > +<father id="3515" num="0" /> +<cdparam x="1035" y="469" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="saleRegisteredEvent" /> +<TGConnectingPoint num="0" id="3359" /> +<TGConnectingPoint num="1" id="3360" /> +<TGConnectingPoint num="2" id="3361" /> +<TGConnectingPoint num="3" id="3362" /> +<extraparam> +<PortCode code="EventBusDesign97" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3382" > +<father id="3515" num="1" /> +<cdparam x="246" y="414" /> +<sizeparam width="394" height="84" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="579" minY="0" maxY="474" /> +<infoparam name="Component " value="CommonBus" /> +<TGConnectingPoint num="0" id="3374" /> +<TGConnectingPoint num="1" id="3375" /> +<TGConnectingPoint num="2" id="3376" /> +<TGConnectingPoint num="3" id="3377" /> +<TGConnectingPoint num="4" id="3378" /> +<TGConnectingPoint num="5" id="3379" /> +<TGConnectingPoint num="6" id="3380" /> +<TGConnectingPoint num="7" id="3381" /> +<extraparam> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="40" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3368" > +<father id="3382" num="0" /> +<cdparam x="236" y="444" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="374" minY="0" maxY="64" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3364" /> +<TGConnectingPoint num="1" id="3365" /> +<TGConnectingPoint num="2" id="3366" /> +<TGConnectingPoint num="3" id="3367" /> +<extraparam> +<PortCode code="CommonBus1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3373" > +<father id="3382" num="1" /> +<cdparam x="630" y="456" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="374" minY="0" maxY="64" /> +<infoparam name="Out Port" value="saleRegisteredEvent" /> +<TGConnectingPoint num="0" id="3369" /> +<TGConnectingPoint num="1" id="3370" /> +<TGConnectingPoint num="2" id="3371" /> +<TGConnectingPoint num="3" id="3372" /> +<extraparam> +<PortCode code="CommonBus2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3446" > +<father id="3515" num="2" /> +<cdparam x="242" y="116" /> +<sizeparam width="543" height="252" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="430" minY="0" maxY="306" /> +<infoparam name="Component " value="CashDeskChannel" /> +<TGConnectingPoint num="0" id="3438" /> +<TGConnectingPoint num="1" id="3439" /> +<TGConnectingPoint num="2" id="3440" /> +<TGConnectingPoint num="3" id="3441" /> +<TGConnectingPoint num="4" id="3442" /> +<TGConnectingPoint num="5" id="3443" /> +<TGConnectingPoint num="6" id="3444" /> +<TGConnectingPoint num="7" id="3445" /> +<extraparam> +<Attribute access="0" id="pm" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="barcode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="cardNb" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="244" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3387" > +<father id="3446" num="0" /> +<cdparam x="775" y="342" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="3383" /> +<TGConnectingPoint num="1" id="3384" /> +<TGConnectingPoint num="2" id="3385" /> +<TGConnectingPoint num="3" id="3386" /> +<extraparam> +<PortCode code="CashDeskChannel11" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3392" > +<father id="3446" num="1" /> +<cdparam x="775" y="312" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="cashDeskGUI" /> +<TGConnectingPoint num="0" id="3388" /> +<TGConnectingPoint num="1" id="3389" /> +<TGConnectingPoint num="2" id="3390" /> +<TGConnectingPoint num="3" id="3391" /> +<extraparam> +<PortCode code="CashDeskChannel10" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3397" > +<father id="3446" num="2" /> +<cdparam x="775" y="277" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3393" /> +<TGConnectingPoint num="1" id="3394" /> +<TGConnectingPoint num="2" id="3395" /> +<TGConnectingPoint num="3" id="3396" /> +<extraparam> +<PortCode code="CashDeskChannel9" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3402" > +<father id="3446" num="3" /> +<cdparam x="775" y="237" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="printer" /> +<TGConnectingPoint num="0" id="3398" /> +<TGConnectingPoint num="1" id="3399" /> +<TGConnectingPoint num="2" id="3400" /> +<TGConnectingPoint num="3" id="3401" /> +<extraparam> +<PortCode code="CashDeskChannel8" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3407" > +<father id="3446" num="4" /> +<cdparam x="775" y="202" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="appEventHandler" /> +<TGConnectingPoint num="0" id="3403" /> +<TGConnectingPoint num="1" id="3404" /> +<TGConnectingPoint num="2" id="3405" /> +<TGConnectingPoint num="3" id="3406" /> +<extraparam> +<PortCode code="CashDeskChannel7" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3412" > +<father id="3446" num="5" /> +<cdparam x="775" y="146" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3408" /> +<TGConnectingPoint num="1" id="3409" /> +<TGConnectingPoint num="2" id="3410" /> +<TGConnectingPoint num="3" id="3411" /> +<extraparam> +<PortCode code="CashDeskChannel6" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3417" > +<father id="3446" num="6" /> +<cdparam x="775" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3413" /> +<TGConnectingPoint num="1" id="3414" /> +<TGConnectingPoint num="2" id="3415" /> +<TGConnectingPoint num="3" id="3416" /> +<extraparam> +<PortCode code="CashDeskChannel5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3422" > +<father id="3446" num="7" /> +<cdparam x="623" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="scannerEvent" /> +<TGConnectingPoint num="0" id="3418" /> +<TGConnectingPoint num="1" id="3419" /> +<TGConnectingPoint num="2" id="3420" /> +<TGConnectingPoint num="3" id="3421" /> +<extraparam> +<PortCode code="CashDeskChannel4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3427" > +<father id="3446" num="8" /> +<cdparam x="255" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="cashBoxEvent" /> +<TGConnectingPoint num="0" id="3423" /> +<TGConnectingPoint num="1" id="3424" /> +<TGConnectingPoint num="2" id="3425" /> +<TGConnectingPoint num="3" id="3426" /> +<extraparam> +<PortCode code="CashDeskChannel3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3432" > +<father id="3446" num="9" /> +<cdparam x="410" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="3428" /> +<TGConnectingPoint num="1" id="3429" /> +<TGConnectingPoint num="2" id="3430" /> +<TGConnectingPoint num="3" id="3431" /> +<extraparam> +<PortCode code="CashDeskChannel2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3437" > +<father id="3446" num="10" /> +<cdparam x="232" y="192" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="expressMode" /> +<TGConnectingPoint num="0" id="3433" /> +<TGConnectingPoint num="1" id="3434" /> +<TGConnectingPoint num="2" id="3435" /> +<TGConnectingPoint num="3" id="3436" /> +<extraparam> +<PortCode code="CashDeskChannel23" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3451" > +<father id="3515" num="3" /> +<cdparam x="62" y="408" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3447" /> +<TGConnectingPoint num="1" id="3448" /> +<TGConnectingPoint num="2" id="3449" /> +<TGConnectingPoint num="3" id="3450" /> +<extraparam> +<PortCode code="EventBusDesign73" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3456" > +<father id="3515" num="4" /> +<cdparam x="423" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="3452" /> +<TGConnectingPoint num="1" id="3453" /> +<TGConnectingPoint num="2" id="3454" /> +<TGConnectingPoint num="3" id="3455" /> +<extraparam> +<PortCode code="EventBusDesign74" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3461" > +<father id="3515" num="5" /> +<cdparam x="263" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="cashBoxEnevt" /> +<TGConnectingPoint num="0" id="3457" /> +<TGConnectingPoint num="1" id="3458" /> +<TGConnectingPoint num="2" id="3459" /> +<TGConnectingPoint num="3" id="3460" /> +<extraparam> +<PortCode code="EventBusDesign75" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3466" > +<father id="3515" num="6" /> +<cdparam x="621" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="scanner" /> +<TGConnectingPoint num="0" id="3462" /> +<TGConnectingPoint num="1" id="3463" /> +<TGConnectingPoint num="2" id="3464" /> +<TGConnectingPoint num="3" id="3465" /> +<extraparam> +<PortCode code="EventBusDesign76" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3471" > +<father id="3515" num="7" /> +<cdparam x="822" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3467" /> +<TGConnectingPoint num="1" id="3468" /> +<TGConnectingPoint num="2" id="3469" /> +<TGConnectingPoint num="3" id="3470" /> +<extraparam> +<PortCode code="EventBusDesign77" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3476" > +<father id="3515" num="8" /> +<cdparam x="1035" y="129" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3472" /> +<TGConnectingPoint num="1" id="3473" /> +<TGConnectingPoint num="2" id="3474" /> +<TGConnectingPoint num="3" id="3475" /> +<extraparam> +<PortCode code="EventBusDesign78" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3481" > +<father id="3515" num="9" /> +<cdparam x="1035" y="180" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="appEventHandler" /> +<TGConnectingPoint num="0" id="3477" /> +<TGConnectingPoint num="1" id="3478" /> +<TGConnectingPoint num="2" id="3479" /> +<TGConnectingPoint num="3" id="3480" /> +<extraparam> +<PortCode code="EventBusDesign79" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3486" > +<father id="3515" num="10" /> +<cdparam x="1035" y="255" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3482" /> +<TGConnectingPoint num="1" id="3483" /> +<TGConnectingPoint num="2" id="3484" /> +<TGConnectingPoint num="3" id="3485" /> +<extraparam> +<PortCode code="EventBusDesign80" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3491" > +<father id="3515" num="11" /> +<cdparam x="1035" y="287" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="cashDeskGui" /> +<TGConnectingPoint num="0" id="3487" /> +<TGConnectingPoint num="1" id="3488" /> +<TGConnectingPoint num="2" id="3489" /> +<TGConnectingPoint num="3" id="3490" /> +<extraparam> +<PortCode code="EventBusDesign81" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3496" > +<father id="3515" num="12" /> +<cdparam x="1035" y="320" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="3492" /> +<TGConnectingPoint num="1" id="3493" /> +<TGConnectingPoint num="2" id="3494" /> +<TGConnectingPoint num="3" id="3495" /> +<extraparam> +<PortCode code="EventBusDesign82" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3501" > +<father id="3515" num="13" /> +<cdparam x="1035" y="222" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="printer" /> +<TGConnectingPoint num="0" id="3497" /> +<TGConnectingPoint num="1" id="3498" /> +<TGConnectingPoint num="2" id="3499" /> +<TGConnectingPoint num="3" id="3500" /> +<extraparam> +<PortCode code="EventBusDesign83" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3506" > +<father id="3515" num="14" /> +<cdparam x="62" y="135" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="expressMode" /> +<TGConnectingPoint num="0" id="3502" /> +<TGConnectingPoint num="1" id="3503" /> +<TGConnectingPoint num="2" id="3504" /> +<TGConnectingPoint num="3" id="3505" /> +<extraparam> +<PortCode code="EventBusDesign84" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="3528" > +<cdparam x="10" y="503" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3516" /> +<TGConnectingPoint num="1" id="3517" /> +<TGConnectingPoint num="2" id="3518" /> +<TGConnectingPoint num="3" id="3519" /> +<TGConnectingPoint num="4" id="3520" /> +<TGConnectingPoint num="5" id="3521" /> +<TGConnectingPoint num="6" id="3522" /> +<TGConnectingPoint num="7" id="3523" /> +<TGConnectingPoint num="8" id="3524" /> +<TGConnectingPoint num="9" id="3525" /> +<TGConnectingPoint num="10" id="3526" /> +<TGConnectingPoint num="11" id="3527" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3541" > +<cdparam x="18" y="670" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3529" /> +<TGConnectingPoint num="1" id="3530" /> +<TGConnectingPoint num="2" id="3531" /> +<TGConnectingPoint num="3" id="3532" /> +<TGConnectingPoint num="4" id="3533" /> +<TGConnectingPoint num="5" id="3534" /> +<TGConnectingPoint num="6" id="3535" /> +<TGConnectingPoint num="7" id="3536" /> +<TGConnectingPoint num="8" id="3537" /> +<TGConnectingPoint num="9" id="3538" /> +<TGConnectingPoint num="10" id="3539" /> +<TGConnectingPoint num="11" id="3540" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3554" > +<cdparam x="1" y="156" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3542" /> +<TGConnectingPoint num="1" id="3543" /> +<TGConnectingPoint num="2" id="3544" /> +<TGConnectingPoint num="3" id="3545" /> +<TGConnectingPoint num="4" id="3546" /> +<TGConnectingPoint num="5" id="3547" /> +<TGConnectingPoint num="6" id="3548" /> +<TGConnectingPoint num="7" id="3549" /> +<TGConnectingPoint num="8" id="3550" /> +<TGConnectingPoint num="9" id="3551" /> +<TGConnectingPoint num="10" id="3552" /> +<TGConnectingPoint num="11" id="3553" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3567" > +<cdparam x="10" y="49" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="ExpressModelIf" /> +<TGConnectingPoint num="0" id="3555" /> +<TGConnectingPoint num="1" id="3556" /> +<TGConnectingPoint num="2" id="3557" /> +<TGConnectingPoint num="3" id="3558" /> +<TGConnectingPoint num="4" id="3559" /> +<TGConnectingPoint num="5" id="3560" /> +<TGConnectingPoint num="6" id="3561" /> +<TGConnectingPoint num="7" id="3562" /> +<TGConnectingPoint num="8" id="3563" /> +<TGConnectingPoint num="9" id="3564" /> +<TGConnectingPoint num="10" id="3565" /> +<TGConnectingPoint num="11" id="3566" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3580" > +<cdparam x="103" y="654" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="ExpressModelIf" /> +<TGConnectingPoint num="0" id="3568" /> +<TGConnectingPoint num="1" id="3569" /> +<TGConnectingPoint num="2" id="3570" /> +<TGConnectingPoint num="3" id="3571" /> +<TGConnectingPoint num="4" id="3572" /> +<TGConnectingPoint num="5" id="3573" /> +<TGConnectingPoint num="6" id="3574" /> +<TGConnectingPoint num="7" id="3575" /> +<TGConnectingPoint num="8" id="3576" /> +<TGConnectingPoint num="9" id="3577" /> +<TGConnectingPoint num="10" id="3578" /> +<TGConnectingPoint num="11" id="3579" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3593" > +<cdparam x="1253" y="40" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="3581" /> +<TGConnectingPoint num="1" id="3582" /> +<TGConnectingPoint num="2" id="3583" /> +<TGConnectingPoint num="3" id="3584" /> +<TGConnectingPoint num="4" id="3585" /> +<TGConnectingPoint num="5" id="3586" /> +<TGConnectingPoint num="6" id="3587" /> +<TGConnectingPoint num="7" id="3588" /> +<TGConnectingPoint num="8" id="3589" /> +<TGConnectingPoint num="9" id="3590" /> +<TGConnectingPoint num="10" id="3591" /> +<TGConnectingPoint num="11" id="3592" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3606" > +<cdparam x="1319" y="34" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="3594" /> +<TGConnectingPoint num="1" id="3595" /> +<TGConnectingPoint num="2" id="3596" /> +<TGConnectingPoint num="3" id="3597" /> +<TGConnectingPoint num="4" id="3598" /> +<TGConnectingPoint num="5" id="3599" /> +<TGConnectingPoint num="6" id="3600" /> +<TGConnectingPoint num="7" id="3601" /> +<TGConnectingPoint num="8" id="3602" /> +<TGConnectingPoint num="9" id="3603" /> +<TGConnectingPoint num="10" id="3604" /> +<TGConnectingPoint num="11" id="3605" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3619" > +<cdparam x="1361" y="429" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3607" /> +<TGConnectingPoint num="1" id="3608" /> +<TGConnectingPoint num="2" id="3609" /> +<TGConnectingPoint num="3" id="3610" /> +<TGConnectingPoint num="4" id="3611" /> +<TGConnectingPoint num="5" id="3612" /> +<TGConnectingPoint num="6" id="3613" /> +<TGConnectingPoint num="7" id="3614" /> +<TGConnectingPoint num="8" id="3615" /> +<TGConnectingPoint num="9" id="3616" /> +<TGConnectingPoint num="10" id="3617" /> +<TGConnectingPoint num="11" id="3618" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3632" > +<cdparam x="1336" y="185" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="85" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="PrinterIf" /> +<TGConnectingPoint num="0" id="3620" /> +<TGConnectingPoint num="1" id="3621" /> +<TGConnectingPoint num="2" id="3622" /> +<TGConnectingPoint num="3" id="3623" /> +<TGConnectingPoint num="4" id="3624" /> +<TGConnectingPoint num="5" id="3625" /> +<TGConnectingPoint num="6" id="3626" /> +<TGConnectingPoint num="7" id="3627" /> +<TGConnectingPoint num="8" id="3628" /> +<TGConnectingPoint num="9" id="3629" /> +<TGConnectingPoint num="10" id="3630" /> +<TGConnectingPoint num="11" id="3631" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3645" > +<cdparam x="1318" y="393" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3633" /> +<TGConnectingPoint num="1" id="3634" /> +<TGConnectingPoint num="2" id="3635" /> +<TGConnectingPoint num="3" id="3636" /> +<TGConnectingPoint num="4" id="3637" /> +<TGConnectingPoint num="5" id="3638" /> +<TGConnectingPoint num="6" id="3639" /> +<TGConnectingPoint num="7" id="3640" /> +<TGConnectingPoint num="8" id="3641" /> +<TGConnectingPoint num="9" id="3642" /> +<TGConnectingPoint num="10" id="3643" /> +<TGConnectingPoint num="11" id="3644" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3658" > +<cdparam x="1237" y="430" /> +<sizeparam width="120" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="cashDeskGUIIf" /> +<TGConnectingPoint num="0" id="3646" /> +<TGConnectingPoint num="1" id="3647" /> +<TGConnectingPoint num="2" id="3648" /> +<TGConnectingPoint num="3" id="3649" /> +<TGConnectingPoint num="4" id="3650" /> +<TGConnectingPoint num="5" id="3651" /> +<TGConnectingPoint num="6" id="3652" /> +<TGConnectingPoint num="7" id="3653" /> +<TGConnectingPoint num="8" id="3654" /> +<TGConnectingPoint num="9" id="3655" /> +<TGConnectingPoint num="10" id="3656" /> +<TGConnectingPoint num="11" id="3657" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3671" > +<cdparam x="186" y="628" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3659" /> +<TGConnectingPoint num="1" id="3660" /> +<TGConnectingPoint num="2" id="3661" /> +<TGConnectingPoint num="3" id="3662" /> +<TGConnectingPoint num="4" id="3663" /> +<TGConnectingPoint num="5" id="3664" /> +<TGConnectingPoint num="6" id="3665" /> +<TGConnectingPoint num="7" id="3666" /> +<TGConnectingPoint num="8" id="3667" /> +<TGConnectingPoint num="9" id="3668" /> +<TGConnectingPoint num="10" id="3669" /> +<TGConnectingPoint num="11" id="3670" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3684" > +<cdparam x="691" y="634" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3672" /> +<TGConnectingPoint num="1" id="3673" /> +<TGConnectingPoint num="2" id="3674" /> +<TGConnectingPoint num="3" id="3675" /> +<TGConnectingPoint num="4" id="3676" /> +<TGConnectingPoint num="5" id="3677" /> +<TGConnectingPoint num="6" id="3678" /> +<TGConnectingPoint num="7" id="3679" /> +<TGConnectingPoint num="8" id="3680" /> +<TGConnectingPoint num="9" id="3681" /> +<TGConnectingPoint num="10" id="3682" /> +<TGConnectingPoint num="11" id="3683" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="3685" > +<cdparam x="511" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="265" y="126" id="3424" /> +<P2 x="60" y="10" id="3232" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3686" > +<cdparam x="633" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="633" y="106" id="3418" /> +<P2 x="806" y="35" id="3244" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3687" > +<cdparam x="856" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="795" y="212" id="3406" /> +<P2 x="1232" y="190" id="3268" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3688" > +<cdparam x="490" y="230" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="410" y="116" id="3430" /> +<P2 x="1225" y="35" id="3322" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3690" > +<cdparam x="553" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3689" /> +<P1 x="433" y="36" id="3453" /> +<P2 x="420" y="106" id="3428" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3692" > +<cdparam x="344" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3691" /> +<P1 x="273" y="36" id="3458" /> +<P2 x="265" y="106" id="3423" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3694" > +<cdparam x="788" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3693" /> +<P1 x="631" y="36" id="3463" /> +<P2 x="623" y="116" id="3420" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3696" > +<cdparam x="950" y="220" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3695" /> +<P1 x="832" y="36" id="3468" /> +<P2 x="785" y="106" id="3413" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3697" > +<cdparam x="972" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="146" id="3408" /> +<P2 x="1230" y="29" id="3307" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3699" > +<cdparam x="982" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3698" /> +<P1 x="795" y="156" id="3411" /> +<P2 x="1035" y="139" id="3474" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3701" > +<cdparam x="972" y="336" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3700" /> +<P1 x="785" y="222" id="3404" /> +<P2 x="1035" y="190" id="3479" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3703" > +<cdparam x="982" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3702" /> +<P1 x="795" y="247" id="3401" /> +<P2 x="1035" y="232" id="3499" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3705" > +<cdparam x="972" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3704" /> +<P1 x="795" y="287" id="3396" /> +<P2 x="1035" y="265" id="3484" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3706" > +<cdparam x="970" y="408" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="297" id="3394" /> +<P2 x="1286" y="518" id="3294" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3708" > +<cdparam x="980" y="433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3707" /> +<P1 x="795" y="322" id="3391" /> +<P2 x="1035" y="297" id="3489" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3709" > +<cdparam x="970" y="477" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="362" id="3384" /> +<P2 x="1252" y="832" id="3255" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3711" > +<cdparam x="980" y="467" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3710" /> +<P1 x="795" y="352" id="3386" /> +<P2 x="1035" y="330" id="3494" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3713" > +<cdparam x="145" y="307" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3712" /> +<P1 x="82" y="145" id="3505" /> +<P2 x="232" y="202" id="3435" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3715" > +<cdparam x="899" y="639" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3714" /> +<P1 x="650" y="466" id="3372" /> +<P2 x="1035" y="479" id="3361" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3716" > +<cdparam x="338" y="311" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="242" y="212" id="3434" /> +<P2 x="103" y="666" id="3568" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3717" > +<cdparam x="97" y="227" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="62" y="145" id="3504" /> +<P2 x="10" y="61" id="3555" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3718" > +<cdparam x="824" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="795" y="116" id="3416" /> +<P2 x="1253" y="52" id="3581" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3719" > +<cdparam x="867" y="98" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="832" y="16" id="3467" /> +<P2 x="1319" y="46" id="3594" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3720" > +<cdparam x="820" y="323" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="237" id="3398" /> +<P2 x="1336" y="197" id="3620" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3721" > +<cdparam x="820" y="418" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="332" id="3389" /> +<P2 x="1237" y="442" id="3646" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3723" > +<cdparam x="82" y="418" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3722" /> +<P1 x="82" y="418" id="3450" /> +<P2 x="246" y="444" id="3364" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3724" > +<cdparam x="246" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="246" y="464" id="3365" /> +<P2 x="186" y="640" id="3659" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3725" > +<cdparam x="640" y="476" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="640" y="476" id="3370" /> +<P2 x="741" y="634" id="3675" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveCSDPanel name="CashDesk" minX="10" maxX="1900" minY="10" maxY="1400" > +<COMPONENT type="2104" id="3738" > +<cdparam x="515" y="46" /> +<sizeparam width="230" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="255" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="3726" /> +<TGConnectingPoint num="1" id="3727" /> +<TGConnectingPoint num="2" id="3728" /> +<TGConnectingPoint num="3" id="3729" /> +<TGConnectingPoint num="4" id="3730" /> +<TGConnectingPoint num="5" id="3731" /> +<TGConnectingPoint num="6" id="3732" /> +<TGConnectingPoint num="7" id="3733" /> +<TGConnectingPoint num="8" id="3734" /> +<TGConnectingPoint num="9" id="3735" /> +<TGConnectingPoint num="10" id="3736" /> +<TGConnectingPoint num="11" id="3737" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3751" > +<cdparam x="406" y="453" /> +<sizeparam width="230" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="255" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="3739" /> +<TGConnectingPoint num="1" id="3740" /> +<TGConnectingPoint num="2" id="3741" /> +<TGConnectingPoint num="3" id="3742" /> +<TGConnectingPoint num="4" id="3743" /> +<TGConnectingPoint num="5" id="3744" /> +<TGConnectingPoint num="6" id="3745" /> +<TGConnectingPoint num="7" id="3746" /> +<TGConnectingPoint num="8" id="3747" /> +<TGConnectingPoint num="9" id="3748" /> +<TGConnectingPoint num="10" id="3749" /> +<TGConnectingPoint num="11" id="3750" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="3972" > +<cdparam x="28" y="208" /> +<sizeparam width="1331" height="272" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="CashDesk" /> +<TGConnectingPoint num="0" id="3964" /> +<TGConnectingPoint num="1" id="3965" /> +<TGConnectingPoint num="2" id="3966" /> +<TGConnectingPoint num="3" id="3967" /> +<TGConnectingPoint num="4" id="3968" /> +<TGConnectingPoint num="5" id="3969" /> +<TGConnectingPoint num="6" id="3970" /> +<TGConnectingPoint num="7" id="3971" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDesk"/><LastPortCode code="299" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2106" id="3756" > +<father id="3972" num="0" /> +<cdparam x="1259" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="printer" /> +<TGConnectingPoint num="0" id="3752" /> +<TGConnectingPoint num="1" id="3753" /> +<TGConnectingPoint num="2" id="3754" /> +<TGConnectingPoint num="3" id="3755" /> +<extraparam> +<PortCode code="CashDeskDesign13" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3761" > +<father id="3972" num="1" /> +<cdparam x="1106" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="scanner" /> +<TGConnectingPoint num="0" id="3757" /> +<TGConnectingPoint num="1" id="3758" /> +<TGConnectingPoint num="2" id="3759" /> +<TGConnectingPoint num="3" id="3760" /> +<extraparam> +<PortCode code="CashDeskDesign12" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3766" > +<father id="3972" num="2" /> +<cdparam x="428" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3762" /> +<TGConnectingPoint num="1" id="3763" /> +<TGConnectingPoint num="2" id="3764" /> +<TGConnectingPoint num="3" id="3765" /> +<extraparam> +<PortCode code="CashDeskDesign11" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3771" > +<father id="3972" num="3" /> +<cdparam x="938" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="cashBoxEvent" /> +<TGConnectingPoint num="0" id="3767" /> +<TGConnectingPoint num="1" id="3768" /> +<TGConnectingPoint num="2" id="3769" /> +<TGConnectingPoint num="3" id="3770" /> +<extraparam> +<PortCode code="CashDeskDesign10" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3776" > +<father id="3972" num="4" /> +<cdparam x="992" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="3772" /> +<TGConnectingPoint num="1" id="3773" /> +<TGConnectingPoint num="2" id="3774" /> +<TGConnectingPoint num="3" id="3775" /> +<extraparam> +<PortCode code="CashDeskDesign9" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3781" > +<father id="3972" num="5" /> +<cdparam x="581" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="3777" /> +<TGConnectingPoint num="1" id="3778" /> +<TGConnectingPoint num="2" id="3779" /> +<TGConnectingPoint num="3" id="3780" /> +<extraparam> +<PortCode code="CashDeskDesign8" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3786" > +<father id="3972" num="6" /> +<cdparam x="798" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="cashDeskGUIControl" /> +<TGConnectingPoint num="0" id="3782" /> +<TGConnectingPoint num="1" id="3783" /> +<TGConnectingPoint num="2" id="3784" /> +<TGConnectingPoint num="3" id="3785" /> +<extraparam> +<PortCode code="CashDeskDesign7" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3791" > +<father id="3972" num="7" /> +<cdparam x="604" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3787" /> +<TGConnectingPoint num="1" id="3788" /> +<TGConnectingPoint num="2" id="3789" /> +<TGConnectingPoint num="3" id="3790" /> +<extraparam> +<PortCode code="CashDeskDesign6" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3796" > +<father id="3972" num="8" /> +<cdparam x="199" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="3792" /> +<TGConnectingPoint num="1" id="3793" /> +<TGConnectingPoint num="2" id="3794" /> +<TGConnectingPoint num="3" id="3795" /> +<extraparam> +<PortCode code="CashDeskDesign5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3801" > +<father id="3972" num="9" /> +<cdparam x="92" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3797" /> +<TGConnectingPoint num="1" id="3798" /> +<TGConnectingPoint num="2" id="3799" /> +<TGConnectingPoint num="3" id="3800" /> +<extraparam> +<PortCode code="CashDeskDesign4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3806" > +<father id="3972" num="10" /> +<cdparam x="18" y="343" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3802" /> +<TGConnectingPoint num="1" id="3803" /> +<TGConnectingPoint num="2" id="3804" /> +<TGConnectingPoint num="3" id="3805" /> +<extraparam> +<PortCode code="CashDeskDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3811" > +<father id="3972" num="11" /> +<cdparam x="48" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="3807" /> +<TGConnectingPoint num="1" id="3808" /> +<TGConnectingPoint num="2" id="3809" /> +<TGConnectingPoint num="3" id="3810" /> +<extraparam> +<PortCode code="CashDeskDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3816" > +<father id="3972" num="12" /> +<cdparam x="333" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="AppEventHandler" /> +<TGConnectingPoint num="0" id="3812" /> +<TGConnectingPoint num="1" id="3813" /> +<TGConnectingPoint num="2" id="3814" /> +<TGConnectingPoint num="3" id="3815" /> +<extraparam> +<PortCode code="CashDeskDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3830" > +<father id="3972" num="13" /> +<cdparam x="328" y="264" /> +<sizeparam width="212" height="60" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1119" minY="0" maxY="212" /> +<infoparam name="Component " value="LightDisplayController" /> +<TGConnectingPoint num="0" id="3822" /> +<TGConnectingPoint num="1" id="3823" /> +<TGConnectingPoint num="2" id="3824" /> +<TGConnectingPoint num="3" id="3825" /> +<TGConnectingPoint num="4" id="3826" /> +<TGConnectingPoint num="5" id="3827" /> +<TGConnectingPoint num="6" id="3828" /> +<TGConnectingPoint num="7" id="3829" /> +<extraparam> +<ShowAttributes visible="0" /> +<LastPortCode code="37" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3821" > +<father id="3830" num="0" /> +<cdparam x="445" y="314" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="192" minY="0" maxY="40" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3817" /> +<TGConnectingPoint num="1" id="3818" /> +<TGConnectingPoint num="2" id="3819" /> +<TGConnectingPoint num="3" id="3820" /> +<extraparam> +<PortCode code="LightDisplayController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3849" > +<father id="3972" num="14" /> +<cdparam x="556" y="265" /> +<sizeparam width="148" height="62" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1183" minY="0" maxY="210" /> +<infoparam name="Component " value="CardReaderController" /> +<TGConnectingPoint num="0" id="3841" /> +<TGConnectingPoint num="1" id="3842" /> +<TGConnectingPoint num="2" id="3843" /> +<TGConnectingPoint num="3" id="3844" /> +<TGConnectingPoint num="4" id="3845" /> +<TGConnectingPoint num="5" id="3846" /> +<TGConnectingPoint num="6" id="3847" /> +<TGConnectingPoint num="7" id="3848" /> +<extraparam> +<Attribute access="0" id="cardNb" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="74" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3835" > +<father id="3849" num="0" /> +<cdparam x="613" y="255" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="128" minY="0" maxY="42" /> +<infoparam name="Out Port" value="event" /> +<TGConnectingPoint num="0" id="3831" /> +<TGConnectingPoint num="1" id="3832" /> +<TGConnectingPoint num="2" id="3833" /> +<TGConnectingPoint num="3" id="3834" /> +<extraparam> +<PortCode code="CardReaderController2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3840" > +<father id="3849" num="1" /> +<cdparam x="619" y="317" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="128" minY="0" maxY="42" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3836" /> +<TGConnectingPoint num="1" id="3837" /> +<TGConnectingPoint num="2" id="3838" /> +<TGConnectingPoint num="3" id="3839" /> +<extraparam> +<PortCode code="CardReaderController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3863" > +<father id="3972" num="15" /> +<cdparam x="722" y="263" /> +<sizeparam width="141" height="71" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1190" minY="0" maxY="201" /> +<infoparam name="Component " value="CashDeskGUI" /> +<TGConnectingPoint num="0" id="3855" /> +<TGConnectingPoint num="1" id="3856" /> +<TGConnectingPoint num="2" id="3857" /> +<TGConnectingPoint num="3" id="3858" /> +<TGConnectingPoint num="4" id="3859" /> +<TGConnectingPoint num="5" id="3860" /> +<TGConnectingPoint num="6" id="3861" /> +<TGConnectingPoint num="7" id="3862" /> +<extraparam> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="26" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3854" > +<father id="3863" num="0" /> +<cdparam x="794" y="324" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="121" minY="0" maxY="51" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3850" /> +<TGConnectingPoint num="1" id="3851" /> +<TGConnectingPoint num="2" id="3852" /> +<TGConnectingPoint num="3" id="3853" /> +<extraparam> +<PortCode code="CashDeskGUI1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3882" > +<father id="3972" num="16" /> +<cdparam x="889" y="275" /> +<sizeparam width="136" height="66" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1195" minY="0" maxY="206" /> +<infoparam name="Component " value="CashBoxController" /> +<TGConnectingPoint num="0" id="3874" /> +<TGConnectingPoint num="1" id="3875" /> +<TGConnectingPoint num="2" id="3876" /> +<TGConnectingPoint num="3" id="3877" /> +<TGConnectingPoint num="4" id="3878" /> +<TGConnectingPoint num="5" id="3879" /> +<TGConnectingPoint num="6" id="3880" /> +<TGConnectingPoint num="7" id="3881" /> +<extraparam> +<Attribute access="0" id="paymentMode_CARD" type="0" initialValue="2" typeOther="" /> +<Attribute access="0" id="paymentMode_CASH" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="50" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3868" > +<father id="3882" num="0" /> +<cdparam x="926" y="265" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="116" minY="0" maxY="46" /> +<infoparam name="Out Port" value="event" /> +<TGConnectingPoint num="0" id="3864" /> +<TGConnectingPoint num="1" id="3865" /> +<TGConnectingPoint num="2" id="3866" /> +<TGConnectingPoint num="3" id="3867" /> +<extraparam> +<PortCode code="CashBoxController2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3873" > +<father id="3882" num="1" /> +<cdparam x="984" y="331" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="116" minY="0" maxY="46" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3869" /> +<TGConnectingPoint num="1" id="3870" /> +<TGConnectingPoint num="2" id="3871" /> +<TGConnectingPoint num="3" id="3872" /> +<extraparam> +<PortCode code="CashBoxController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3896" > +<father id="3972" num="17" /> +<cdparam x="1228" y="273" /> +<sizeparam width="128" height="64" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1203" minY="0" maxY="208" /> +<infoparam name="Component " value="PrinterController" /> +<TGConnectingPoint num="0" id="3888" /> +<TGConnectingPoint num="1" id="3889" /> +<TGConnectingPoint num="2" id="3890" /> +<TGConnectingPoint num="3" id="3891" /> +<TGConnectingPoint num="4" id="3892" /> +<TGConnectingPoint num="5" id="3893" /> +<TGConnectingPoint num="6" id="3894" /> +<TGConnectingPoint num="7" id="3895" /> +<extraparam> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="50" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3887" > +<father id="3896" num="0" /> +<cdparam x="1270" y="327" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="In Port" value="printer" /> +<TGConnectingPoint num="0" id="3883" /> +<TGConnectingPoint num="1" id="3884" /> +<TGConnectingPoint num="2" id="3885" /> +<TGConnectingPoint num="3" id="3886" /> +<extraparam> +<PortCode code="PrinterController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3910" > +<father id="3972" num="18" /> +<cdparam x="1064" y="280" /> +<sizeparam width="134" height="64" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1197" minY="0" maxY="208" /> +<infoparam name="Component " value="ScannerController" /> +<TGConnectingPoint num="0" id="3902" /> +<TGConnectingPoint num="1" id="3903" /> +<TGConnectingPoint num="2" id="3904" /> +<TGConnectingPoint num="3" id="3905" /> +<TGConnectingPoint num="4" id="3906" /> +<TGConnectingPoint num="5" id="3907" /> +<TGConnectingPoint num="6" id="3908" /> +<TGConnectingPoint num="7" id="3909" /> +<extraparam> +<Attribute access="0" id="barCode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="52" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3901" > +<father id="3910" num="0" /> +<cdparam x="1111" y="270" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Out Port" value="eventHandler" /> +<TGConnectingPoint num="0" id="3897" /> +<TGConnectingPoint num="1" id="3898" /> +<TGConnectingPoint num="2" id="3899" /> +<TGConnectingPoint num="3" id="3900" /> +<extraparam> +<PortCode code="ScannerController2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3949" > +<father id="3972" num="19" /> +<cdparam x="111" y="281" /> +<sizeparam width="163" height="158" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1168" minY="0" maxY="114" /> +<infoparam name="Component " value="CachDeskApp" /> +<TGConnectingPoint num="0" id="3941" /> +<TGConnectingPoint num="1" id="3942" /> +<TGConnectingPoint num="2" id="3943" /> +<TGConnectingPoint num="3" id="3944" /> +<TGConnectingPoint num="4" id="3945" /> +<TGConnectingPoint num="5" id="3946" /> +<TGConnectingPoint num="6" id="3947" /> +<TGConnectingPoint num="7" id="3948" /> +<extraparam> +<Attribute access="0" id="products" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="cashState" type="0" initialValue="0" typeOther="" /> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="creditInfo" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="product" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="expressMode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="ExceedNumberOfProductsException" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="SaleNotFinishedException" type="0" initialValue="2" typeOther="" /> +<Attribute access="0" id="WrongPaymentModeException" type="0" initialValue="3" typeOther="" /> +<Attribute access="0" id="NotPayingException" type="0" initialValue="4" typeOther="" /> +<Attribute access="0" id="NotAcceptingCreditCardException" type="0" initialValue="5" typeOther="" /> +<Attribute access="0" id="InvalidCreditCardException" type="0" initialValue="5" typeOther="" /> +<Attribute access="0" id="NotIdleException" type="0" initialValue="6" typeOther="" /> +<Attribute access="0" id="errorCode" type="0" initialValue="0" typeOther="" /> +<Attribute access="0" id="paymentMode_INVALID" type="0" initialValue="0" typeOther="" /> +<Attribute access="0" id="paymentMode_CARD" type="0" initialValue="2" typeOther="" /> +<Attribute access="0" id="paymentMode_CASH" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="transactionId" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="info" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="barCode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="maxNbProd" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="productOk" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="ProductNotFoundException" type="0" initialValue="7" typeOther="" /> +<Attribute access="0" id="changeAmount" type="0" initialValue="1" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="327" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3915" > +<father id="3949" num="0" /> +<cdparam x="101" y="403" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3911" /> +<TGConnectingPoint num="1" id="3912" /> +<TGConnectingPoint num="2" id="3913" /> +<TGConnectingPoint num="3" id="3914" /> +<extraparam> +<PortCode code="CachDeskApp5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3920" > +<father id="3949" num="1" /> +<cdparam x="101" y="370" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="Out Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3916" /> +<TGConnectingPoint num="1" id="3917" /> +<TGConnectingPoint num="2" id="3918" /> +<TGConnectingPoint num="3" id="3919" /> +<extraparam> +<PortCode code="CachDeskApp4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3925" > +<father id="3949" num="2" /> +<cdparam x="101" y="315" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="3921" /> +<TGConnectingPoint num="1" id="3922" /> +<TGConnectingPoint num="2" id="3923" /> +<TGConnectingPoint num="3" id="3924" /> +<extraparam> +<PortCode code="CachDeskApp2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3930" > +<father id="3949" num="3" /> +<cdparam x="264" y="341" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="In Port" value="AEH" /> +<TGConnectingPoint num="0" id="3926" /> +<TGConnectingPoint num="1" id="3927" /> +<TGConnectingPoint num="2" id="3928" /> +<TGConnectingPoint num="3" id="3929" /> +<extraparam> +<PortCode code="CachDeskApp1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3935" > +<father id="3949" num="4" /> +<cdparam x="264" y="386" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Out Port" value="log" /> +<TGConnectingPoint num="0" id="3931" /> +<TGConnectingPoint num="1" id="3932" /> +<TGConnectingPoint num="2" id="3933" /> +<TGConnectingPoint num="3" id="3934" /> +<extraparam> +<PortCode code="CachDeskApp272" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3940" > +<father id="3949" num="5" /> +<cdparam x="173" y="271" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="3936" /> +<TGConnectingPoint num="1" id="3937" /> +<TGConnectingPoint num="2" id="3938" /> +<TGConnectingPoint num="3" id="3939" /> +<extraparam> +<PortCode code="CachDeskApp285" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3963" > +<father id="3972" num="20" /> +<cdparam x="333" y="378" /> +<sizeparam width="68" height="51" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1263" minY="0" maxY="221" /> +<infoparam name="Component " value="logger" /> +<TGConnectingPoint num="0" id="3955" /> +<TGConnectingPoint num="1" id="3956" /> +<TGConnectingPoint num="2" id="3957" /> +<TGConnectingPoint num="3" id="3958" /> +<TGConnectingPoint num="4" id="3959" /> +<TGConnectingPoint num="5" id="3960" /> +<TGConnectingPoint num="6" id="3961" /> +<TGConnectingPoint num="7" id="3962" /> +<extraparam> +<Attribute access="0" id="errorCode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="10" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3954" > +<father id="3963" num="0" /> +<cdparam x="323" y="394" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="In Port" value="l" /> +<TGConnectingPoint num="0" id="3950" /> +<TGConnectingPoint num="1" id="3951" /> +<TGConnectingPoint num="2" id="3952" /> +<TGConnectingPoint num="3" id="3953" /> +<extraparam> +<PortCode code="logger1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="3985" > +<cdparam x="369" y="795" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3973" /> +<TGConnectingPoint num="1" id="3974" /> +<TGConnectingPoint num="2" id="3975" /> +<TGConnectingPoint num="3" id="3976" /> +<TGConnectingPoint num="4" id="3977" /> +<TGConnectingPoint num="5" id="3978" /> +<TGConnectingPoint num="6" id="3979" /> +<TGConnectingPoint num="7" id="3980" /> +<TGConnectingPoint num="8" id="3981" /> +<TGConnectingPoint num="9" id="3982" /> +<TGConnectingPoint num="10" id="3983" /> +<TGConnectingPoint num="11" id="3984" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3998" > +<cdparam x="578" y="15" /> +<sizeparam width="143" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3986" /> +<TGConnectingPoint num="1" id="3987" /> +<TGConnectingPoint num="2" id="3988" /> +<TGConnectingPoint num="3" id="3989" /> +<TGConnectingPoint num="4" id="3990" /> +<TGConnectingPoint num="5" id="3991" /> +<TGConnectingPoint num="6" id="3992" /> +<TGConnectingPoint num="7" id="3993" /> +<TGConnectingPoint num="8" id="3994" /> +<TGConnectingPoint num="9" id="3995" /> +<TGConnectingPoint num="10" id="3996" /> +<TGConnectingPoint num="11" id="3997" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4011" > +<cdparam x="718" y="497" /> +<sizeparam width="143" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3999" /> +<TGConnectingPoint num="1" id="4000" /> +<TGConnectingPoint num="2" id="4001" /> +<TGConnectingPoint num="3" id="4002" /> +<TGConnectingPoint num="4" id="4003" /> +<TGConnectingPoint num="5" id="4004" /> +<TGConnectingPoint num="6" id="4005" /> +<TGConnectingPoint num="7" id="4006" /> +<TGConnectingPoint num="8" id="4007" /> +<TGConnectingPoint num="9" id="4008" /> +<TGConnectingPoint num="10" id="4009" /> +<TGConnectingPoint num="11" id="4010" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4024" > +<cdparam x="746" y="47" /> +<sizeparam width="129" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="209" minDesiredHeight="68" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="4012" /> +<TGConnectingPoint num="1" id="4013" /> +<TGConnectingPoint num="2" id="4014" /> +<TGConnectingPoint num="3" id="4015" /> +<TGConnectingPoint num="4" id="4016" /> +<TGConnectingPoint num="5" id="4017" /> +<TGConnectingPoint num="6" id="4018" /> +<TGConnectingPoint num="7" id="4019" /> +<TGConnectingPoint num="8" id="4020" /> +<TGConnectingPoint num="9" id="4021" /> +<TGConnectingPoint num="10" id="4022" /> +<TGConnectingPoint num="11" id="4023" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4037" > +<cdparam x="980" y="106" /> +<sizeparam width="129" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="209" minDesiredHeight="68" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="4025" /> +<TGConnectingPoint num="1" id="4026" /> +<TGConnectingPoint num="2" id="4027" /> +<TGConnectingPoint num="3" id="4028" /> +<TGConnectingPoint num="4" id="4029" /> +<TGConnectingPoint num="5" id="4030" /> +<TGConnectingPoint num="6" id="4031" /> +<TGConnectingPoint num="7" id="4032" /> +<TGConnectingPoint num="8" id="4033" /> +<TGConnectingPoint num="9" id="4034" /> +<TGConnectingPoint num="10" id="4035" /> +<TGConnectingPoint num="11" id="4036" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4050" > +<cdparam x="1053" y="611" /> +<sizeparam width="149" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="4038" /> +<TGConnectingPoint num="1" id="4039" /> +<TGConnectingPoint num="2" id="4040" /> +<TGConnectingPoint num="3" id="4041" /> +<TGConnectingPoint num="4" id="4042" /> +<TGConnectingPoint num="5" id="4043" /> +<TGConnectingPoint num="6" id="4044" /> +<TGConnectingPoint num="7" id="4045" /> +<TGConnectingPoint num="8" id="4046" /> +<TGConnectingPoint num="9" id="4047" /> +<TGConnectingPoint num="10" id="4048" /> +<TGConnectingPoint num="11" id="4049" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4063" > +<cdparam x="1069" y="588" /> +<sizeparam width="149" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="4051" /> +<TGConnectingPoint num="1" id="4052" /> +<TGConnectingPoint num="2" id="4053" /> +<TGConnectingPoint num="3" id="4054" /> +<TGConnectingPoint num="4" id="4055" /> +<TGConnectingPoint num="5" id="4056" /> +<TGConnectingPoint num="6" id="4057" /> +<TGConnectingPoint num="7" id="4058" /> +<TGConnectingPoint num="8" id="4059" /> +<TGConnectingPoint num="9" id="4060" /> +<TGConnectingPoint num="10" id="4061" /> +<TGConnectingPoint num="11" id="4062" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4076" > +<cdparam x="328" y="603" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="4064" /> +<TGConnectingPoint num="1" id="4065" /> +<TGConnectingPoint num="2" id="4066" /> +<TGConnectingPoint num="3" id="4067" /> +<TGConnectingPoint num="4" id="4068" /> +<TGConnectingPoint num="5" id="4069" /> +<TGConnectingPoint num="6" id="4070" /> +<TGConnectingPoint num="7" id="4071" /> +<TGConnectingPoint num="8" id="4072" /> +<TGConnectingPoint num="9" id="4073" /> +<TGConnectingPoint num="10" id="4074" /> +<TGConnectingPoint num="11" id="4075" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4089" > +<cdparam x="403" y="609" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="4077" /> +<TGConnectingPoint num="1" id="4078" /> +<TGConnectingPoint num="2" id="4079" /> +<TGConnectingPoint num="3" id="4080" /> +<TGConnectingPoint num="4" id="4081" /> +<TGConnectingPoint num="5" id="4082" /> +<TGConnectingPoint num="6" id="4083" /> +<TGConnectingPoint num="7" id="4084" /> +<TGConnectingPoint num="8" id="4085" /> +<TGConnectingPoint num="9" id="4086" /> +<TGConnectingPoint num="10" id="4087" /> +<TGConnectingPoint num="11" id="4088" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4102" > +<cdparam x="1096" y="25" /> +<sizeparam width="231" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="4090" /> +<TGConnectingPoint num="1" id="4091" /> +<TGConnectingPoint num="2" id="4092" /> +<TGConnectingPoint num="3" id="4093" /> +<TGConnectingPoint num="4" id="4094" /> +<TGConnectingPoint num="5" id="4095" /> +<TGConnectingPoint num="6" id="4096" /> +<TGConnectingPoint num="7" id="4097" /> +<TGConnectingPoint num="8" id="4098" /> +<TGConnectingPoint num="9" id="4099" /> +<TGConnectingPoint num="10" id="4100" /> +<TGConnectingPoint num="11" id="4101" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4115" > +<cdparam x="993" y="12" /> +<sizeparam width="231" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="4103" /> +<TGConnectingPoint num="1" id="4104" /> +<TGConnectingPoint num="2" id="4105" /> +<TGConnectingPoint num="3" id="4106" /> +<TGConnectingPoint num="4" id="4107" /> +<TGConnectingPoint num="5" id="4108" /> +<TGConnectingPoint num="6" id="4109" /> +<TGConnectingPoint num="7" id="4110" /> +<TGConnectingPoint num="8" id="4111" /> +<TGConnectingPoint num="9" id="4112" /> +<TGConnectingPoint num="10" id="4113" /> +<TGConnectingPoint num="11" id="4114" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4128" > +<cdparam x="620" y="606" /> +<sizeparam width="162" height="24" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="4116" /> +<TGConnectingPoint num="1" id="4117" /> +<TGConnectingPoint num="2" id="4118" /> +<TGConnectingPoint num="3" id="4119" /> +<TGConnectingPoint num="4" id="4120" /> +<TGConnectingPoint num="5" id="4121" /> +<TGConnectingPoint num="6" id="4122" /> +<TGConnectingPoint num="7" id="4123" /> +<TGConnectingPoint num="8" id="4124" /> +<TGConnectingPoint num="9" id="4125" /> +<TGConnectingPoint num="10" id="4126" /> +<TGConnectingPoint num="11" id="4127" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4141" > +<cdparam x="579" y="594" /> +<sizeparam width="162" height="24" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="4129" /> +<TGConnectingPoint num="1" id="4130" /> +<TGConnectingPoint num="2" id="4131" /> +<TGConnectingPoint num="3" id="4132" /> +<TGConnectingPoint num="4" id="4133" /> +<TGConnectingPoint num="5" id="4134" /> +<TGConnectingPoint num="6" id="4135" /> +<TGConnectingPoint num="7" id="4136" /> +<TGConnectingPoint num="8" id="4137" /> +<TGConnectingPoint num="9" id="4138" /> +<TGConnectingPoint num="10" id="4139" /> +<TGConnectingPoint num="11" id="4140" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4154" > +<cdparam x="10" y="388" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="4142" /> +<TGConnectingPoint num="1" id="4143" /> +<TGConnectingPoint num="2" id="4144" /> +<TGConnectingPoint num="3" id="4145" /> +<TGConnectingPoint num="4" id="4146" /> +<TGConnectingPoint num="5" id="4147" /> +<TGConnectingPoint num="6" id="4148" /> +<TGConnectingPoint num="7" id="4149" /> +<TGConnectingPoint num="8" id="4150" /> +<TGConnectingPoint num="9" id="4151" /> +<TGConnectingPoint num="10" id="4152" /> +<TGConnectingPoint num="11" id="4153" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4167" > +<cdparam x="10" y="464" /> +<sizeparam width="100" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="4155" /> +<TGConnectingPoint num="1" id="4156" /> +<TGConnectingPoint num="2" id="4157" /> +<TGConnectingPoint num="3" id="4158" /> +<TGConnectingPoint num="4" id="4159" /> +<TGConnectingPoint num="5" id="4160" /> +<TGConnectingPoint num="6" id="4161" /> +<TGConnectingPoint num="7" id="4162" /> +<TGConnectingPoint num="8" id="4163" /> +<TGConnectingPoint num="9" id="4164" /> +<TGConnectingPoint num="10" id="4165" /> +<TGConnectingPoint num="11" id="4166" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4180" > +<cdparam x="1332" y="584" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="85" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="PrinterIf" /> +<TGConnectingPoint num="0" id="4168" /> +<TGConnectingPoint num="1" id="4169" /> +<TGConnectingPoint num="2" id="4170" /> +<TGConnectingPoint num="3" id="4171" /> +<TGConnectingPoint num="4" id="4172" /> +<TGConnectingPoint num="5" id="4173" /> +<TGConnectingPoint num="6" id="4174" /> +<TGConnectingPoint num="7" id="4175" /> +<TGConnectingPoint num="8" id="4176" /> +<TGConnectingPoint num="9" id="4177" /> +<TGConnectingPoint num="10" id="4178" /> +<TGConnectingPoint num="11" id="4179" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4193" > +<cdparam x="1331" y="732" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="4181" /> +<TGConnectingPoint num="1" id="4182" /> +<TGConnectingPoint num="2" id="4183" /> +<TGConnectingPoint num="3" id="4184" /> +<TGConnectingPoint num="4" id="4185" /> +<TGConnectingPoint num="5" id="4186" /> +<TGConnectingPoint num="6" id="4187" /> +<TGConnectingPoint num="7" id="4188" /> +<TGConnectingPoint num="8" id="4189" /> +<TGConnectingPoint num="9" id="4190" /> +<TGConnectingPoint num="10" id="4191" /> +<TGConnectingPoint num="11" id="4192" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4206" > +<cdparam x="1566" y="552" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="85" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="PrinterIf" /> +<TGConnectingPoint num="0" id="4194" /> +<TGConnectingPoint num="1" id="4195" /> +<TGConnectingPoint num="2" id="4196" /> +<TGConnectingPoint num="3" id="4197" /> +<TGConnectingPoint num="4" id="4198" /> +<TGConnectingPoint num="5" id="4199" /> +<TGConnectingPoint num="6" id="4200" /> +<TGConnectingPoint num="7" id="4201" /> +<TGConnectingPoint num="8" id="4202" /> +<TGConnectingPoint num="9" id="4203" /> +<TGConnectingPoint num="10" id="4204" /> +<TGConnectingPoint num="11" id="4205" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4219" > +<cdparam x="1653" y="722" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="4207" /> +<TGConnectingPoint num="1" id="4208" /> +<TGConnectingPoint num="2" id="4209" /> +<TGConnectingPoint num="3" id="4210" /> +<TGConnectingPoint num="4" id="4211" /> +<TGConnectingPoint num="5" id="4212" /> +<TGConnectingPoint num="6" id="4213" /> +<TGConnectingPoint num="7" id="4214" /> +<TGConnectingPoint num="8" id="4215" /> +<TGConnectingPoint num="9" id="4216" /> +<TGConnectingPoint num="10" id="4217" /> +<TGConnectingPoint num="11" id="4218" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4232" > +<cdparam x="943" y="526" /> +<sizeparam width="120" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="cashDeskGUIIf" /> +<TGConnectingPoint num="0" id="4220" /> +<TGConnectingPoint num="1" id="4221" /> +<TGConnectingPoint num="2" id="4222" /> +<TGConnectingPoint num="3" id="4223" /> +<TGConnectingPoint num="4" id="4224" /> +<TGConnectingPoint num="5" id="4225" /> +<TGConnectingPoint num="6" id="4226" /> +<TGConnectingPoint num="7" id="4227" /> +<TGConnectingPoint num="8" id="4228" /> +<TGConnectingPoint num="9" id="4229" /> +<TGConnectingPoint num="10" id="4230" /> +<TGConnectingPoint num="11" id="4231" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4245" > +<cdparam x="202" y="412" /> +<sizeparam width="85" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LogIf" /> +<TGConnectingPoint num="0" id="4233" /> +<TGConnectingPoint num="1" id="4234" /> +<TGConnectingPoint num="2" id="4235" /> +<TGConnectingPoint num="3" id="4236" /> +<TGConnectingPoint num="4" id="4237" /> +<TGConnectingPoint num="5" id="4238" /> +<TGConnectingPoint num="6" id="4239" /> +<TGConnectingPoint num="7" id="4240" /> +<TGConnectingPoint num="8" id="4241" /> +<TGConnectingPoint num="9" id="4242" /> +<TGConnectingPoint num="10" id="4243" /> +<TGConnectingPoint num="11" id="4244" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="log" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4258" > +<cdparam x="340" y="412" /> +<sizeparam width="85" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LogIf" /> +<TGConnectingPoint num="0" id="4246" /> +<TGConnectingPoint num="1" id="4247" /> +<TGConnectingPoint num="2" id="4248" /> +<TGConnectingPoint num="3" id="4249" /> +<TGConnectingPoint num="4" id="4250" /> +<TGConnectingPoint num="5" id="4251" /> +<TGConnectingPoint num="6" id="4252" /> +<TGConnectingPoint num="7" id="4253" /> +<TGConnectingPoint num="8" id="4254" /> +<TGConnectingPoint num="9" id="4255" /> +<TGConnectingPoint num="10" id="4256" /> +<TGConnectingPoint num="11" id="4257" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="log" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4271" > +<cdparam x="430" y="10" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="4259" /> +<TGConnectingPoint num="1" id="4260" /> +<TGConnectingPoint num="2" id="4261" /> +<TGConnectingPoint num="3" id="4262" /> +<TGConnectingPoint num="4" id="4263" /> +<TGConnectingPoint num="5" id="4264" /> +<TGConnectingPoint num="6" id="4265" /> +<TGConnectingPoint num="7" id="4266" /> +<TGConnectingPoint num="8" id="4267" /> +<TGConnectingPoint num="9" id="4268" /> +<TGConnectingPoint num="10" id="4269" /> +<TGConnectingPoint num="11" id="4270" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4284" > +<cdparam x="274" y="12" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="4272" /> +<TGConnectingPoint num="1" id="4273" /> +<TGConnectingPoint num="2" id="4274" /> +<TGConnectingPoint num="3" id="4275" /> +<TGConnectingPoint num="4" id="4276" /> +<TGConnectingPoint num="5" id="4277" /> +<TGConnectingPoint num="6" id="4278" /> +<TGConnectingPoint num="7" id="4279" /> +<TGConnectingPoint num="8" id="4280" /> +<TGConnectingPoint num="9" id="4281" /> +<TGConnectingPoint num="10" id="4282" /> +<TGConnectingPoint num="11" id="4283" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4297" > +<cdparam x="151" y="10" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="4285" /> +<TGConnectingPoint num="1" id="4286" /> +<TGConnectingPoint num="2" id="4287" /> +<TGConnectingPoint num="3" id="4288" /> +<TGConnectingPoint num="4" id="4289" /> +<TGConnectingPoint num="5" id="4290" /> +<TGConnectingPoint num="6" id="4291" /> +<TGConnectingPoint num="7" id="4292" /> +<TGConnectingPoint num="8" id="4293" /> +<TGConnectingPoint num="9" id="4294" /> +<TGConnectingPoint num="10" id="4295" /> +<TGConnectingPoint num="11" id="4296" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4310" > +<cdparam x="81" y="10" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="4298" /> +<TGConnectingPoint num="1" id="4299" /> +<TGConnectingPoint num="2" id="4300" /> +<TGConnectingPoint num="3" id="4301" /> +<TGConnectingPoint num="4" id="4302" /> +<TGConnectingPoint num="5" id="4303" /> +<TGConnectingPoint num="6" id="4304" /> +<TGConnectingPoint num="7" id="4305" /> +<TGConnectingPoint num="8" id="4306" /> +<TGConnectingPoint num="9" id="4307" /> +<TGConnectingPoint num="10" id="4308" /> +<TGConnectingPoint num="11" id="4309" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4323" > +<cdparam x="209" y="447" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="4311" /> +<TGConnectingPoint num="1" id="4312" /> +<TGConnectingPoint num="2" id="4313" /> +<TGConnectingPoint num="3" id="4314" /> +<TGConnectingPoint num="4" id="4315" /> +<TGConnectingPoint num="5" id="4316" /> +<TGConnectingPoint num="6" id="4317" /> +<TGConnectingPoint num="7" id="4318" /> +<TGConnectingPoint num="8" id="4319" /> +<TGConnectingPoint num="9" id="4320" /> +<TGConnectingPoint num="10" id="4321" /> +<TGConnectingPoint num="11" id="4322" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="4324" > +<cdparam x="927" y="422" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="274" y="341" id="3926" /> +<P2 x="406" y="465" id="3739" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4325" > +<cdparam x="1220" y="424" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="1121" y="290" id="3898" /> +<P2 x="993" y="24" id="4103" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4326" > +<cdparam x="627" y="256" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="623" y="275" id="3832" /> +<P2 x="768" y="497" id="4002" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4327" > +<cdparam x="915" y="370" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="994" y="351" id="3870" /> +<P2 x="1119" y="588" id="4054" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4328" > +<cdparam x="828" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="936" y="285" id="3865" /> +<P2 x="980" y="118" id="4025" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4329" > +<cdparam x="345" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="343" y="198" id="3812" /> +<P2 x="515" y="58" id="3726" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4331" > +<cdparam x="244" y="352" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4330" /> +<P1 x="333" y="208" id="3814" /> +<P2 x="284" y="351" id="3929" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4333" > +<cdparam x="173" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4332" /> +<P1 x="101" y="325" id="3923" /> +<P2 x="68" y="208" id="3810" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4335" > +<cdparam x="183" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4334" /> +<P1 x="111" y="370" id="3916" /> +<P2 x="38" y="353" id="3805" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4337" > +<cdparam x="173" y="412" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4336" /> +<P1 x="101" y="413" id="3913" /> +<P2 x="102" y="470" id="3797" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4338" > +<cdparam x="92" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="102" y="490" id="3798" /> +<P2 x="419" y="795" id="3976" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4340" > +<cdparam x="547" y="448" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4339" /> +<P1 x="614" y="470" id="3787" /> +<P2 x="619" y="327" id="3838" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4342" > +<cdparam x="625" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4341" /> +<P1 x="623" y="255" id="3831" /> +<P2 x="591" y="218" id="3778" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4344" > +<cdparam x="805" y="320" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4343" /> +<P1 x="808" y="470" id="3782" /> +<P2 x="804" y="344" id="3851" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4346" > +<cdparam x="945" y="448" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4345" /> +<P1 x="1002" y="470" id="3772" /> +<P2 x="984" y="341" id="3871" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4348" > +<cdparam x="925" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4347" /> +<P1 x="936" y="265" id="3864" /> +<P2 x="948" y="218" id="3768" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4350" > +<cdparam x="410" y="316" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4349" /> +<P1 x="438" y="470" id="3762" /> +<P2 x="445" y="324" id="3819" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4352" > +<cdparam x="1095" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4351" /> +<P1 x="1121" y="270" id="3897" /> +<P2 x="1116" y="218" id="3758" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4354" > +<cdparam x="1303" y="309" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4353" /> +<P1 x="1269" y="470" id="3752" /> +<P2 x="1290" y="337" id="3886" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4355" > +<cdparam x="416" y="258" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="455" y="334" id="3818" /> +<P2 x="453" y="609" id="4080" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4356" > +<cdparam x="556" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="591" y="198" id="3777" /> +<P2 x="628" y="40" id="3988" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4357" > +<cdparam x="887" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="948" y="198" id="3767" /> +<P2 x="796" y="72" id="4014" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4358" > +<cdparam x="947" y="575" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="1002" y="490" id="3773" /> +<P2 x="1053" y="623" id="4038" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4359" > +<cdparam x="274" y="575" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="438" y="490" id="3763" /> +<P2 x="378" y="603" id="4067" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4360" > +<cdparam x="1116" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="1116" y="198" id="3757" /> +<P2 x="1096" y="37" id="4090" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4361" > +<cdparam x="635" y="436" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="639" y="327" id="3839" /> +<P2 x="670" y="606" id="4119" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4362" > +<cdparam x="617" y="551" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="614" y="490" id="3788" /> +<P2 x="629" y="594" id="4132" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4363" > +<cdparam x="128" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="18" y="353" id="3804" /> +<P2 x="60" y="388" id="4145" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4364" > +<cdparam x="251" y="390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="101" y="380" id="3918" /> +<P2 x="60" y="464" id="4158" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4365" > +<cdparam x="1379" y="511" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="1269" y="490" id="3753" /> +<P2 x="1382" y="584" id="4171" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4366" > +<cdparam x="1371" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="1280" y="347" id="3884" /> +<P2 x="1616" y="552" id="4197" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4367" > +<cdparam x="880" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="794" y="334" id="3852" /> +<P2 x="943" y="538" id="4220" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4369" > +<cdparam x="304" y="216" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4368" /> +<P1 x="284" y="396" id="3934" /> +<P2 x="323" y="404" id="3952" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4370" > +<cdparam x="339" y="258" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="333" y="414" id="3951" /> +<P2 x="390" y="412" id="4249" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4371" > +<cdparam x="294" y="226" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="274" y="406" id="3932" /> +<P2 x="252" y="412" id="4236" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4372" > +<cdparam x="239" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="219" y="208" id="3795" /> +<P2 x="480" y="35" id="4261" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4374" > +<cdparam x="236" y="126" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4373" /> +<P1 x="183" y="271" id="3936" /> +<P2 x="209" y="218" id="3793" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4375" > +<cdparam x="220" y="189" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="193" y="281" id="3939" /> +<P2 x="274" y="24" id="4272" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4376" > +<cdparam x="85" y="106" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="58" y="198" id="3807" /> +<P2 x="151" y="22" id="4285" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4377" > +<cdparam x="138" y="223" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="111" y="315" id="3921" /> +<P2 x="81" y="22" id="4298" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4378" > +<cdparam x="148" y="323" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="121" y="413" id="3914" /> +<P2 x="209" y="459" id="4311" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveSMDPanel name="ds" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="4380" > +<cdparam x="81" y="58" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4379" /> +</COMPONENT> + +<COMPONENT type="2004" id="4383" > +<cdparam x="13" y="149" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="4381" /> +<TGConnectingPoint num="1" id="4382" /> +<extraparam> +<Via port="pIn" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="4386" > +<cdparam x="21" y="200" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode" /> +<TGConnectingPoint num="0" id="4384" /> +<TGConnectingPoint num="1" id="4385" /> +<extraparam> +<Via port="pOut1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="4389" > +<cdparam x="17" y="265" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode" /> +<TGConnectingPoint num="0" id="4387" /> +<TGConnectingPoint num="1" id="4388" /> +<extraparam> +<Via port="pOut2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4392" > +<cdparam x="68" y="346" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4390" /> +<TGConnectingPoint num="1" id="4391" /> +</COMPONENT> + +<COMPONENT type="2016" id="4395" > +<cdparam x="69" y="97" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4393" /> +<TGConnectingPoint num="1" id="4394" /> +</COMPONENT> + +<COMPONENT type="301" id="4404" > +<cdparam x="20" y="10" /> +<sizeparam width="188" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="DS (Dispatcher) State Machine +" /> +<TGConnectingPoint num="0" id="4396" /> +<TGConnectingPoint num="1" id="4397" /> +<TGConnectingPoint num="2" id="4398" /> +<TGConnectingPoint num="3" id="4399" /> +<TGConnectingPoint num="4" id="4400" /> +<TGConnectingPoint num="5" id="4401" /> +<TGConnectingPoint num="6" id="4402" /> +<TGConnectingPoint num="7" id="4403" /> +<extraparam> +<Line value="DS (Dispatcher) State Machine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="4405" > +<cdparam x="97" y="134" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="88" y="78" id="4379" /> +<P2 x="89" y="92" id="4393" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4406" > +<cdparam x="97" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="91" y="174" id="4382" /> +<P2 x="92" y="195" id="4384" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4407" > +<cdparam x="97" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="92" y="225" id="4385" /> +<P2 x="88" y="260" id="4387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4408" > +<cdparam x="106" y="126" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="89" y="122" id="4394" /> +<P2 x="91" y="144" id="4381" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4409" > +<cdparam x="110" y="326" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="88" y="290" id="4388" /> +<P2 x="88" y="341" id="4390" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="Inventory" minX="10" maxX="2400" minY="10" maxY="1400" > +<COMPONENT type="2006" id="4425" > +<cdparam x="212" y="105" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4413" /> +<TGConnectingPoint num="1" id="4414" /> +<TGConnectingPoint num="2" id="4415" /> +<TGConnectingPoint num="3" id="4416" /> +<TGConnectingPoint num="4" id="4417" /> +<TGConnectingPoint num="5" id="4418" /> +<TGConnectingPoint num="6" id="4419" /> +<TGConnectingPoint num="7" id="4420" /> +<TGConnectingPoint num="8" id="4421" /> +<TGConnectingPoint num="9" id="4422" /> +<TGConnectingPoint num="10" id="4423" /> +<TGConnectingPoint num="11" id="4424" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4410" > +<father id="4425" num="0" /> +<cdparam x="137" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4411" > +<father id="4425" num="1" /> +<cdparam x="237" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4412" > +<father id="4425" num="2" /> +<cdparam x="227" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="4427" > +<cdparam x="213" y="12" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4426" /> +</COMPONENT> + +<COMPONENT type="2004" id="4430" > +<cdparam x="40" y="157" /> +<sizeparam width="157" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="send msg" value="getProductReq?barCode" /> +<TGConnectingPoint num="0" id="4428" /> +<TGConnectingPoint num="1" id="4429" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="4433" > +<cdparam x="261" y="162" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="4431" /> +<TGConnectingPoint num="1" id="4432" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="4446" > +<cdparam x="199" y="465" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4434" /> +<TGConnectingPoint num="1" id="4435" /> +<TGConnectingPoint num="2" id="4436" /> +<TGConnectingPoint num="3" id="4437" /> +<TGConnectingPoint num="4" id="4438" /> +<TGConnectingPoint num="5" id="4439" /> +<TGConnectingPoint num="6" id="4440" /> +<TGConnectingPoint num="7" id="4441" /> +<TGConnectingPoint num="8" id="4442" /> +<TGConnectingPoint num="9" id="4443" /> +<TGConnectingPoint num="10" id="4444" /> +<TGConnectingPoint num="11" id="4445" /> +</COMPONENT> + +<COMPONENT type="2016" id="4449" > +<cdparam x="185" y="533" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4447" /> +<TGConnectingPoint num="1" id="4448" /> +</COMPONENT> + +<COMPONENT type="2016" id="4452" > +<cdparam x="201" y="60" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4450" /> +<TGConnectingPoint num="1" id="4451" /> +</COMPONENT> + +<COMPONENT type="2006" id="4468" > +<cdparam x="105" y="232" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4456" /> +<TGConnectingPoint num="1" id="4457" /> +<TGConnectingPoint num="2" id="4458" /> +<TGConnectingPoint num="3" id="4459" /> +<TGConnectingPoint num="4" id="4460" /> +<TGConnectingPoint num="5" id="4461" /> +<TGConnectingPoint num="6" id="4462" /> +<TGConnectingPoint num="7" id="4463" /> +<TGConnectingPoint num="8" id="4464" /> +<TGConnectingPoint num="9" id="4465" /> +<TGConnectingPoint num="10" id="4466" /> +<TGConnectingPoint num="11" id="4467" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4453" > +<father id="4468" num="0" /> +<cdparam x="30" y="245" /> +<sizeparam width="75" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[barCode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4454" > +<father id="4468" num="1" /> +<cdparam x="130" y="237" /> +<sizeparam width="75" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[barCode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4455" > +<father id="4468" num="2" /> +<cdparam x="120" y="267" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="4471" > +<cdparam x="144" y="299" /> +<sizeparam width="59" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="action state" value="resp=1" /> +<TGConnectingPoint num="0" id="4469" /> +<TGConnectingPoint num="1" id="4470" /> +</COMPONENT> + +<COMPONENT type="2012" id="4474" > +<cdparam x="13" y="288" /> +<sizeparam width="59" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="action state" value="resp=0" /> +<TGConnectingPoint num="0" id="4472" /> +<TGConnectingPoint num="1" id="4473" /> +</COMPONENT> + +<COMPONENT type="2002" id="4477" > +<cdparam x="31" y="376" /> +<sizeparam width="127" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="send msg" value="getProductResp!resp" /> +<TGConnectingPoint num="0" id="4475" /> +<TGConnectingPoint num="1" id="4476" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="4490" > +<cdparam x="89" y="344" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4478" /> +<TGConnectingPoint num="1" id="4479" /> +<TGConnectingPoint num="2" id="4480" /> +<TGConnectingPoint num="3" id="4481" /> +<TGConnectingPoint num="4" id="4482" /> +<TGConnectingPoint num="5" id="4483" /> +<TGConnectingPoint num="6" id="4484" /> +<TGConnectingPoint num="7" id="4485" /> +<TGConnectingPoint num="8" id="4486" /> +<TGConnectingPoint num="9" id="4487" /> +<TGConnectingPoint num="10" id="4488" /> +<TGConnectingPoint num="11" id="4489" /> +</COMPONENT> + +<CONNECTOR type="121" id="4491" > +<cdparam x="254" y="50" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="220" y="32" id="4426" /> +<P2 x="221" y="55" id="4450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4492" > +<cdparam x="254" y="103" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="221" y="85" id="4451" /> +<P2 x="222" y="105" id="4413" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4493" > +<cdparam x="221" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="187" y="115" id="4414" /> +<P2 x="118" y="152" id="4428" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4494" > +<cdparam x="291" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="257" y="115" id="4415" /> +<P2 x="339" y="157" id="4431" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4495" > +<cdparam x="467" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="339" y="187" id="4432" /> +<P2 x="209" y="470" id="4437" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4496" > +<cdparam x="166" y="272" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="204" y="485" id="4434" /> +<P2 x="205" y="528" id="4447" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4497" > +<cdparam x="96" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="118" y="182" id="4429" /> +<P2 x="115" y="232" id="4456" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4498" > +<cdparam x="80" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="80" y="242" id="4457" /> +<P2 x="42" y="283" id="4472" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4499" > +<cdparam x="150" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="150" y="242" id="4458" /> +<P2 x="173" y="294" id="4469" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4500" > +<cdparam x="42" y="321" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="42" y="313" id="4473" /> +<P2 x="89" y="349" id="4479" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4501" > +<cdparam x="190" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="173" y="324" id="4470" /> +<P2 x="99" y="349" id="4481" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4502" > +<cdparam x="94" y="364" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="94" y="364" id="4478" /> +<P2 x="94" y="371" id="4475" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4503" > +<cdparam x="90" y="409" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="94" y="401" id="4476" /> +<P2 x="199" y="470" id="4435" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="Bank" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="4519" > +<cdparam x="439" y="220" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4507" /> +<TGConnectingPoint num="1" id="4508" /> +<TGConnectingPoint num="2" id="4509" /> +<TGConnectingPoint num="3" id="4510" /> +<TGConnectingPoint num="4" id="4511" /> +<TGConnectingPoint num="5" id="4512" /> +<TGConnectingPoint num="6" id="4513" /> +<TGConnectingPoint num="7" id="4514" /> +<TGConnectingPoint num="8" id="4515" /> +<TGConnectingPoint num="9" id="4516" /> +<TGConnectingPoint num="10" id="4517" /> +<TGConnectingPoint num="11" id="4518" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4504" > +<father id="4519" num="0" /> +<cdparam x="364" y="233" /> +<sizeparam width="98" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[transactionId==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4505" > +<father id="4519" num="1" /> +<cdparam x="484" y="245" /> +<sizeparam width="98" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[transactionId==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4506" > +<father id="4519" num="2" /> +<cdparam x="454" y="255" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="4521" > +<cdparam x="305" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4520" /> +</COMPONENT> + +<COMPONENT type="2006" id="4537" > +<cdparam x="303" y="105" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4525" /> +<TGConnectingPoint num="1" id="4526" /> +<TGConnectingPoint num="2" id="4527" /> +<TGConnectingPoint num="3" id="4528" /> +<TGConnectingPoint num="4" id="4529" /> +<TGConnectingPoint num="5" id="4530" /> +<TGConnectingPoint num="6" id="4531" /> +<TGConnectingPoint num="7" id="4532" /> +<TGConnectingPoint num="8" id="4533" /> +<TGConnectingPoint num="9" id="4534" /> +<TGConnectingPoint num="10" id="4535" /> +<TGConnectingPoint num="11" id="4536" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4522" > +<father id="4537" num="0" /> +<cdparam x="228" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4523" > +<father id="4537" num="1" /> +<cdparam x="328" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4524" > +<father id="4537" num="2" /> +<cdparam x="318" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2004" id="4540" > +<cdparam x="68" y="160" /> +<sizeparam width="193" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardReq?creditInfo?pin" /> +<TGConnectingPoint num="0" id="4538" /> +<TGConnectingPoint num="1" id="4539" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="4543" > +<cdparam x="367" y="155" /> +<sizeparam width="175" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardReq?transactionId" /> +<TGConnectingPoint num="0" id="4541" /> +<TGConnectingPoint num="1" id="4542" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4546" > +<cdparam x="263" y="668" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4544" /> +<TGConnectingPoint num="1" id="4545" /> +</COMPONENT> + +<COMPONENT type="2016" id="4549" > +<cdparam x="295" y="51" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4547" /> +<TGConnectingPoint num="1" id="4548" /> +</COMPONENT> + +<COMPONENT type="2008" id="4562" > +<cdparam x="280" y="586" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4550" /> +<TGConnectingPoint num="1" id="4551" /> +<TGConnectingPoint num="2" id="4552" /> +<TGConnectingPoint num="3" id="4553" /> +<TGConnectingPoint num="4" id="4554" /> +<TGConnectingPoint num="5" id="4555" /> +<TGConnectingPoint num="6" id="4556" /> +<TGConnectingPoint num="7" id="4557" /> +<TGConnectingPoint num="8" id="4558" /> +<TGConnectingPoint num="9" id="4559" /> +<TGConnectingPoint num="10" id="4560" /> +<TGConnectingPoint num="11" id="4561" /> +</COMPONENT> + +<COMPONENT type="2012" id="4565" > +<cdparam x="14" y="380" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="transactionId=1" /> +<TGConnectingPoint num="0" id="4563" /> +<TGConnectingPoint num="1" id="4564" /> +</COMPONENT> + +<COMPONENT type="2012" id="4568" > +<cdparam x="176" y="377" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="transactionId=0" /> +<TGConnectingPoint num="0" id="4566" /> +<TGConnectingPoint num="1" id="4567" /> +</COMPONENT> + +<COMPONENT type="2008" id="4581" > +<cdparam x="222" y="311" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4569" /> +<TGConnectingPoint num="1" id="4570" /> +<TGConnectingPoint num="2" id="4571" /> +<TGConnectingPoint num="3" id="4572" /> +<TGConnectingPoint num="4" id="4573" /> +<TGConnectingPoint num="5" id="4574" /> +<TGConnectingPoint num="6" id="4575" /> +<TGConnectingPoint num="7" id="4576" /> +<TGConnectingPoint num="8" id="4577" /> +<TGConnectingPoint num="9" id="4578" /> +<TGConnectingPoint num="10" id="4579" /> +<TGConnectingPoint num="11" id="4580" /> +</COMPONENT> + +<COMPONENT type="2006" id="4597" > +<cdparam x="103" y="305" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4585" /> +<TGConnectingPoint num="1" id="4586" /> +<TGConnectingPoint num="2" id="4587" /> +<TGConnectingPoint num="3" id="4588" /> +<TGConnectingPoint num="4" id="4589" /> +<TGConnectingPoint num="5" id="4590" /> +<TGConnectingPoint num="6" id="4591" /> +<TGConnectingPoint num="7" id="4592" /> +<TGConnectingPoint num="8" id="4593" /> +<TGConnectingPoint num="9" id="4594" /> +<TGConnectingPoint num="10" id="4595" /> +<TGConnectingPoint num="11" id="4596" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4582" > +<father id="4597" num="0" /> +<cdparam x="28" y="310" /> +<sizeparam width="44" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[pin==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4583" > +<father id="4597" num="1" /> +<cdparam x="128" y="310" /> +<sizeparam width="44" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[pin==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4584" > +<father id="4597" num="2" /> +<cdparam x="118" y="340" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="4610" > +<cdparam x="138" y="435" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4598" /> +<TGConnectingPoint num="1" id="4599" /> +<TGConnectingPoint num="2" id="4600" /> +<TGConnectingPoint num="3" id="4601" /> +<TGConnectingPoint num="4" id="4602" /> +<TGConnectingPoint num="5" id="4603" /> +<TGConnectingPoint num="6" id="4604" /> +<TGConnectingPoint num="7" id="4605" /> +<TGConnectingPoint num="8" id="4606" /> +<TGConnectingPoint num="9" id="4607" /> +<TGConnectingPoint num="10" id="4608" /> +<TGConnectingPoint num="11" id="4609" /> +</COMPONENT> + +<COMPONENT type="2002" id="4613" > +<cdparam x="45" y="481" /> +<sizeparam width="183" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardResp!transactionId" /> +<TGConnectingPoint num="0" id="4611" /> +<TGConnectingPoint num="1" id="4612" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="4629" > +<cdparam x="159" y="228" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4617" /> +<TGConnectingPoint num="1" id="4618" /> +<TGConnectingPoint num="2" id="4619" /> +<TGConnectingPoint num="3" id="4620" /> +<TGConnectingPoint num="4" id="4621" /> +<TGConnectingPoint num="5" id="4622" /> +<TGConnectingPoint num="6" id="4623" /> +<TGConnectingPoint num="7" id="4624" /> +<TGConnectingPoint num="8" id="4625" /> +<TGConnectingPoint num="9" id="4626" /> +<TGConnectingPoint num="10" id="4627" /> +<TGConnectingPoint num="11" id="4628" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4614" > +<father id="4629" num="0" /> +<cdparam x="84" y="256" /> +<sizeparam width="77" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[creditInfo==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4615" > +<father id="4629" num="1" /> +<cdparam x="204" y="253" /> +<sizeparam width="77" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[creditInfo==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4616" > +<father id="4629" num="2" /> +<cdparam x="174" y="263" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="4642" > +<cdparam x="530" y="312" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4630" /> +<TGConnectingPoint num="1" id="4631" /> +<TGConnectingPoint num="2" id="4632" /> +<TGConnectingPoint num="3" id="4633" /> +<TGConnectingPoint num="4" id="4634" /> +<TGConnectingPoint num="5" id="4635" /> +<TGConnectingPoint num="6" id="4636" /> +<TGConnectingPoint num="7" id="4637" /> +<TGConnectingPoint num="8" id="4638" /> +<TGConnectingPoint num="9" id="4639" /> +<TGConnectingPoint num="10" id="4640" /> +<TGConnectingPoint num="11" id="4641" /> +</COMPONENT> + +<COMPONENT type="2006" id="4658" > +<cdparam x="394" y="304" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4646" /> +<TGConnectingPoint num="1" id="4647" /> +<TGConnectingPoint num="2" id="4648" /> +<TGConnectingPoint num="3" id="4649" /> +<TGConnectingPoint num="4" id="4650" /> +<TGConnectingPoint num="5" id="4651" /> +<TGConnectingPoint num="6" id="4652" /> +<TGConnectingPoint num="7" id="4653" /> +<TGConnectingPoint num="8" id="4654" /> +<TGConnectingPoint num="9" id="4655" /> +<TGConnectingPoint num="10" id="4656" /> +<TGConnectingPoint num="11" id="4657" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4643" > +<father id="4658" num="0" /> +<cdparam x="319" y="309" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4644" > +<father id="4658" num="1" /> +<cdparam x="419" y="309" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4645" > +<father id="4658" num="2" /> +<cdparam x="409" y="339" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="4661" > +<cdparam x="332" y="388" /> +<sizeparam width="87" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="response=1" /> +<TGConnectingPoint num="0" id="4659" /> +<TGConnectingPoint num="1" id="4660" /> +</COMPONENT> + +<COMPONENT type="2012" id="4664" > +<cdparam x="496" y="373" /> +<sizeparam width="87" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="response=0" /> +<TGConnectingPoint num="0" id="4662" /> +<TGConnectingPoint num="1" id="4663" /> +</COMPONENT> + +<COMPONENT type="2008" id="4677" > +<cdparam x="446" y="444" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4665" /> +<TGConnectingPoint num="1" id="4666" /> +<TGConnectingPoint num="2" id="4667" /> +<TGConnectingPoint num="3" id="4668" /> +<TGConnectingPoint num="4" id="4669" /> +<TGConnectingPoint num="5" id="4670" /> +<TGConnectingPoint num="6" id="4671" /> +<TGConnectingPoint num="7" id="4672" /> +<TGConnectingPoint num="8" id="4673" /> +<TGConnectingPoint num="9" id="4674" /> +<TGConnectingPoint num="10" id="4675" /> +<TGConnectingPoint num="11" id="4676" /> +</COMPONENT> + +<COMPONENT type="2002" id="4680" > +<cdparam x="375" y="498" /> +<sizeparam width="150" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardResp!response" /> +<TGConnectingPoint num="0" id="4678" /> +<TGConnectingPoint num="1" id="4679" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="4681" > +<cdparam x="324" y="30" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="312" y="30" id="4520" /> +<P2 x="315" y="46" id="4547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4682" > +<cdparam x="324" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="315" y="76" id="4548" /> +<P2 x="313" y="105" id="4525" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4683" > +<cdparam x="550" y="392" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="285" y="606" id="4550" /> +<P2 x="283" y="663" id="4544" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4684" > +<cdparam x="400" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="278" y="115" id="4526" /> +<P2 x="164" y="155" id="4538" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4685" > +<cdparam x="285" y="210" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="164" y="185" id="4539" /> +<P2 x="169" y="228" id="4617" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4686" > +<cdparam x="470" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="348" y="115" id="4527" /> +<P2 x="454" y="150" id="4541" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4687" > +<cdparam x="445" y="389" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="227" y="331" id="4569" /> +<P2 x="228" y="372" id="4566" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4688" > +<cdparam x="302" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="204" y="238" id="4619" /> +<P2 x="227" y="311" id="4571" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4689" > +<cdparam x="232" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="134" y="238" id="4618" /> +<P2 x="113" y="305" id="4585" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4690" > +<cdparam x="131" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="78" y="315" id="4586" /> +<P2 x="66" y="375" id="4563" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4691" > +<cdparam x="201" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="148" y="315" id="4587" /> +<P2 x="222" y="316" id="4570" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4692" > +<cdparam x="124" y="468" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="66" y="405" id="4564" /> +<P2 x="138" y="440" id="4599" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4693" > +<cdparam x="444" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="228" y="402" id="4567" /> +<P2 x="148" y="440" id="4601" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4694" > +<cdparam x="285" y="553" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="143" y="455" id="4598" /> +<P2 x="136" y="476" id="4611" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4695" > +<cdparam x="284" y="620" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="136" y="506" id="4612" /> +<P2 x="280" y="591" id="4551" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4696" > +<cdparam x="700" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="454" y="180" id="4542" /> +<P2 x="449" y="220" id="4507" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4697" > +<cdparam x="773" y="390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="535" y="332" id="4630" /> +<P2 x="539" y="368" id="4662" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4698" > +<cdparam x="542" y="274" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="484" y="230" id="4509" /> +<P2 x="535" y="312" id="4632" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4699" > +<cdparam x="472" y="274" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="414" y="230" id="4508" /> +<P2 x="404" y="304" id="4646" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4700" > +<cdparam x="523" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="439" y="314" id="4648" /> +<P2 x="530" y="317" id="4631" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4701" > +<cdparam x="453" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="369" y="314" id="4647" /> +<P2 x="375" y="383" id="4659" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4702" > +<cdparam x="433" y="493" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="375" y="413" id="4660" /> +<P2 x="446" y="449" id="4666" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4703" > +<cdparam x="631" y="504" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="539" y="398" id="4663" /> +<P2 x="456" y="449" id="4668" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4704" > +<cdparam x="721" y="607" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="451" y="464" id="4665" /> +<P2 x="450" y="493" id="4678" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4705" > +<cdparam x="717" y="689" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="450" y="523" id="4679" /> +<P2 x="290" y="591" id="4553" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="logger" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="4707" > +<cdparam x="211" y="29" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4706" /> +</COMPONENT> + +<COMPONENT type="2004" id="4710" > +<cdparam x="168" y="122" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="log?errorCode" /> +<TGConnectingPoint num="0" id="4708" /> +<TGConnectingPoint num="1" id="4709" /> +<extraparam> +<Via port="l" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4713" > +<cdparam x="191" y="231" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4711" /> +<TGConnectingPoint num="1" id="4712" /> +</COMPONENT> + +<COMPONENT type="2016" id="4716" > +<cdparam x="196" y="65" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4714" /> +<TGConnectingPoint num="1" id="4715" /> +</COMPONENT> + +<CONNECTOR type="121" id="4717" > +<cdparam x="218" y="49" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="218" y="49" id="4706" /> +<P2 x="216" y="60" id="4714" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4718" > +<cdparam x="216" y="90" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="216" y="90" id="4715" /> +<P2 x="218" y="117" id="4708" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4719" > +<cdparam x="218" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="218" y="147" id="4709" /> +<P2 x="211" y="226" id="4711" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="someLogger" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="4721" > +<cdparam x="245" y="18" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4720" /> +</COMPONENT> + +<COMPONENT type="2004" id="4724" > +<cdparam x="238" y="116" /> +<sizeparam width="44" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="log1" /> +<TGConnectingPoint num="0" id="4722" /> +<TGConnectingPoint num="1" id="4723" /> +<extraparam> +<Via port="p" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4727" > +<cdparam x="239" y="176" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="state" /> +<TGConnectingPoint num="0" id="4725" /> +<TGConnectingPoint num="1" id="4726" /> +</COMPONENT> + +<COMPONENT type="2016" id="4730" > +<cdparam x="232" y="58" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="state" /> +<TGConnectingPoint num="0" id="4728" /> +<TGConnectingPoint num="1" id="4729" /> +</COMPONENT> + +<CONNECTOR type="121" id="4731" > +<cdparam x="238" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="252" y="38" id="4720" /> +<P2 x="255" y="53" id="4728" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4732" > +<cdparam x="255" y="83" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="255" y="83" id="4729" /> +<P2 x="260" y="111" id="4722" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4733" > +<cdparam x="260" y="141" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="260" y="141" id="4723" /> +<P2 x="262" y="171" id="4725" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="emit" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="4749" > +<cdparam x="147" y="57" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4737" /> +<TGConnectingPoint num="1" id="4738" /> +<TGConnectingPoint num="2" id="4739" /> +<TGConnectingPoint num="3" id="4740" /> +<TGConnectingPoint num="4" id="4741" /> +<TGConnectingPoint num="5" id="4742" /> +<TGConnectingPoint num="6" id="4743" /> +<TGConnectingPoint num="7" id="4744" /> +<TGConnectingPoint num="8" id="4745" /> +<TGConnectingPoint num="9" id="4746" /> +<TGConnectingPoint num="10" id="4747" /> +<TGConnectingPoint num="11" id="4748" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4734" > +<father id="4749" num="0" /> +<cdparam x="72" y="62" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4735" > +<father id="4749" num="1" /> +<cdparam x="172" y="62" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4736" > +<father id="4749" num="2" /> +<cdparam x="162" y="92" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="4765" > +<cdparam x="140" y="225" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4753" /> +<TGConnectingPoint num="1" id="4754" /> +<TGConnectingPoint num="2" id="4755" /> +<TGConnectingPoint num="3" id="4756" /> +<TGConnectingPoint num="4" id="4757" /> +<TGConnectingPoint num="5" id="4758" /> +<TGConnectingPoint num="6" id="4759" /> +<TGConnectingPoint num="7" id="4760" /> +<TGConnectingPoint num="8" id="4761" /> +<TGConnectingPoint num="9" id="4762" /> +<TGConnectingPoint num="10" id="4763" /> +<TGConnectingPoint num="11" id="4764" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4750" > +<father id="4765" num="0" /> +<cdparam x="65" y="230" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4751" > +<father id="4765" num="1" /> +<cdparam x="165" y="230" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4752" > +<father id="4765" num="2" /> +<cdparam x="155" y="260" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="4768" > +<cdparam x="72" y="182" /> +<sizeparam width="159" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="creditCardScanned!cardNb" /> +<TGConnectingPoint num="0" id="4766" /> +<TGConnectingPoint num="1" id="4767" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="4771" > +<cdparam x="95" y="329" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="pinEntered!pin" /> +<TGConnectingPoint num="0" id="4769" /> +<TGConnectingPoint num="1" id="4770" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2012" id="4774" > +<cdparam x="173" y="107" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cardNb=1" /> +<TGConnectingPoint num="0" id="4772" /> +<TGConnectingPoint num="1" id="4773" /> +</COMPONENT> + +<COMPONENT type="2012" id="4777" > +<cdparam x="66" y="100" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cardNb=0" /> +<TGConnectingPoint num="0" id="4775" /> +<TGConnectingPoint num="1" id="4776" /> +</COMPONENT> + +<COMPONENT type="2008" id="4790" > +<cdparam x="146" y="148" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4778" /> +<TGConnectingPoint num="1" id="4779" /> +<TGConnectingPoint num="2" id="4780" /> +<TGConnectingPoint num="3" id="4781" /> +<TGConnectingPoint num="4" id="4782" /> +<TGConnectingPoint num="5" id="4783" /> +<TGConnectingPoint num="6" id="4784" /> +<TGConnectingPoint num="7" id="4785" /> +<TGConnectingPoint num="8" id="4786" /> +<TGConnectingPoint num="9" id="4787" /> +<TGConnectingPoint num="10" id="4788" /> +<TGConnectingPoint num="11" id="4789" /> +</COMPONENT> + +<COMPONENT type="2012" id="4793" > +<cdparam x="185" y="269" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="pin=1" /> +<TGConnectingPoint num="0" id="4791" /> +<TGConnectingPoint num="1" id="4792" /> +</COMPONENT> + +<COMPONENT type="2012" id="4796" > +<cdparam x="62" y="264" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="pin=0" /> +<TGConnectingPoint num="0" id="4794" /> +<TGConnectingPoint num="1" id="4795" /> +</COMPONENT> + +<COMPONENT type="2008" id="4809" > +<cdparam x="136" y="289" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4797" /> +<TGConnectingPoint num="1" id="4798" /> +<TGConnectingPoint num="2" id="4799" /> +<TGConnectingPoint num="3" id="4800" /> +<TGConnectingPoint num="4" id="4801" /> +<TGConnectingPoint num="5" id="4802" /> +<TGConnectingPoint num="6" id="4803" /> +<TGConnectingPoint num="7" id="4804" /> +<TGConnectingPoint num="8" id="4805" /> +<TGConnectingPoint num="9" id="4806" /> +<TGConnectingPoint num="10" id="4807" /> +<TGConnectingPoint num="11" id="4808" /> +</COMPONENT> + +<COMPONENT type="2000" id="4811" > +<cdparam x="152" y="12" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="emit_start" /> +<TGConnectingPoint num="0" id="4810" /> +</COMPONENT> + +<COMPONENT type="2001" id="4813" > +<cdparam x="130" y="392" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="emit_stop" /> +<TGConnectingPoint num="0" id="4812" /> +</COMPONENT> + +<CONNECTOR type="121" id="4814" > +<cdparam x="134" y="10" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="122" y="67" id="4738" /> +<P2 x="103" y="95" id="4775" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4815" > +<cdparam x="204" y="10" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="192" y="67" id="4739" /> +<P2 x="210" y="102" id="4772" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4816" > +<cdparam x="99" y="185" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="103" y="125" id="4776" /> +<P2 x="146" y="153" id="4779" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4817" > +<cdparam x="226" y="192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="210" y="132" id="4773" /> +<P2 x="156" y="153" id="4781" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4818" > +<cdparam x="153" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="151" y="168" id="4778" /> +<P2 x="151" y="177" id="4766" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4819" > +<cdparam x="127" y="233" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="115" y="235" id="4754" /> +<P2 x="87" y="259" id="4794" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4820" > +<cdparam x="197" y="233" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="185" y="235" id="4755" /> +<P2 x="210" y="264" id="4791" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4821" > +<cdparam x="92" y="409" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="87" y="289" id="4795" /> +<P2 x="136" y="294" id="4798" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4822" > +<cdparam x="219" y="416" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="210" y="294" id="4792" /> +<P2 x="146" y="294" id="4800" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4823" > +<cdparam x="151" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="151" y="207" id="4767" /> +<P2 x="150" y="225" id="4753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4824" > +<cdparam x="113" y="493" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="141" y="309" id="4797" /> +<P2 x="140" y="324" id="4769" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4825" > +<cdparam x="165" y="57" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="159" y="32" id="4810" /> +<P2 x="157" y="57" id="4737" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4826" > +<cdparam x="136" y="579" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="140" y="354" id="4770" /> +<P2 x="140" y="387" id="4812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/CoffeeMachine_Avatar.xml b/preinstallTTool/linux/TTool/modeling/CoffeeMachine_Avatar.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5806191f354c6140f8ab8f7ffbfbf624d26d74c --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/CoffeeMachine_Avatar.xml @@ -0,0 +1,3136 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta1"> + +<Modeling type="Avatar Requirement" nameTab="AVATAR Requirements" > +<AvatarRDPanel name="AVATAR RD" minX="10" maxX="1900" minY="10" maxY="900" zoom="1.0" > +<COMPONENT type="5200" id="32" > +<cdparam x="661" y="17" /> +<sizeparam width="278" height="120" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="59" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req00" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +<TGConnectingPoint num="4" id="5" /> +<TGConnectingPoint num="5" id="6" /> +<TGConnectingPoint num="6" id="7" /> +<TGConnectingPoint num="7" id="8" /> +<TGConnectingPoint num="8" id="9" /> +<TGConnectingPoint num="9" id="10" /> +<TGConnectingPoint num="10" id="11" /> +<TGConnectingPoint num="11" id="12" /> +<TGConnectingPoint num="12" id="13" /> +<TGConnectingPoint num="13" id="14" /> +<TGConnectingPoint num="14" id="15" /> +<TGConnectingPoint num="15" id="16" /> +<TGConnectingPoint num="16" id="17" /> +<TGConnectingPoint num="17" id="18" /> +<TGConnectingPoint num="18" id="19" /> +<TGConnectingPoint num="19" id="20" /> +<TGConnectingPoint num="20" id="21" /> +<TGConnectingPoint num="21" id="22" /> +<TGConnectingPoint num="22" id="23" /> +<TGConnectingPoint num="23" id="24" /> +<TGConnectingPoint num="24" id="25" /> +<TGConnectingPoint num="25" id="26" /> +<TGConnectingPoint num="26" id="27" /> +<TGConnectingPoint num="27" id="28" /> +<TGConnectingPoint num="28" id="29" /> +<TGConnectingPoint num="29" id="30" /> +<TGConnectingPoint num="30" id="31" /> +<extraparam> +<textline data="A coin not used within 50 seconds " /> +<textline data="must be ejected" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="64" > +<cdparam x="47" y="457" /> +<sizeparam width="301" height="120" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="113" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="Req_Availability" /> +<TGConnectingPoint num="0" id="33" /> +<TGConnectingPoint num="1" id="34" /> +<TGConnectingPoint num="2" id="35" /> +<TGConnectingPoint num="3" id="36" /> +<TGConnectingPoint num="4" id="37" /> +<TGConnectingPoint num="5" id="38" /> +<TGConnectingPoint num="6" id="39" /> +<TGConnectingPoint num="7" id="40" /> +<TGConnectingPoint num="8" id="41" /> +<TGConnectingPoint num="9" id="42" /> +<TGConnectingPoint num="10" id="43" /> +<TGConnectingPoint num="11" id="44" /> +<TGConnectingPoint num="12" id="45" /> +<TGConnectingPoint num="13" id="46" /> +<TGConnectingPoint num="14" id="47" /> +<TGConnectingPoint num="15" id="48" /> +<TGConnectingPoint num="16" id="49" /> +<TGConnectingPoint num="17" id="50" /> +<TGConnectingPoint num="18" id="51" /> +<TGConnectingPoint num="19" id="52" /> +<TGConnectingPoint num="20" id="53" /> +<TGConnectingPoint num="21" id="54" /> +<TGConnectingPoint num="22" id="55" /> +<TGConnectingPoint num="23" id="56" /> +<TGConnectingPoint num="24" id="57" /> +<TGConnectingPoint num="25" id="58" /> +<TGConnectingPoint num="26" id="59" /> +<TGConnectingPoint num="27" id="60" /> +<TGConnectingPoint num="28" id="61" /> +<TGConnectingPoint num="29" id="62" /> +<TGConnectingPoint num="30" id="63" /> +<extraparam> +<textline data="The availability of the machine shall be" /> +<textline data="no less than 99.99%" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="96" > +<cdparam x="10" y="182" /> +<sizeparam width="150" height="120" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="136" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="Req_CoffeeMachine" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +<TGConnectingPoint num="2" id="67" /> +<TGConnectingPoint num="3" id="68" /> +<TGConnectingPoint num="4" id="69" /> +<TGConnectingPoint num="5" id="70" /> +<TGConnectingPoint num="6" id="71" /> +<TGConnectingPoint num="7" id="72" /> +<TGConnectingPoint num="8" id="73" /> +<TGConnectingPoint num="9" id="74" /> +<TGConnectingPoint num="10" id="75" /> +<TGConnectingPoint num="11" id="76" /> +<TGConnectingPoint num="12" id="77" /> +<TGConnectingPoint num="13" id="78" /> +<TGConnectingPoint num="14" id="79" /> +<TGConnectingPoint num="15" id="80" /> +<TGConnectingPoint num="16" id="81" /> +<TGConnectingPoint num="17" id="82" /> +<TGConnectingPoint num="18" id="83" /> +<TGConnectingPoint num="19" id="84" /> +<TGConnectingPoint num="20" id="85" /> +<TGConnectingPoint num="21" id="86" /> +<TGConnectingPoint num="22" id="87" /> +<TGConnectingPoint num="23" id="88" /> +<TGConnectingPoint num="24" id="89" /> +<TGConnectingPoint num="25" id="90" /> +<TGConnectingPoint num="26" id="91" /> +<TGConnectingPoint num="27" id="92" /> +<TGConnectingPoint num="28" id="93" /> +<TGConnectingPoint num="29" id="94" /> +<TGConnectingPoint num="30" id="95" /> +<extraparam> +<textline data="Requirements of the coffee machine" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5201" id="112" > +<cdparam x="627" y="376" /> +<sizeparam width="171" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="158" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="AvatarProperty" value="BeverageDeliverProperty" /> +<TGConnectingPoint num="0" id="97" /> +<TGConnectingPoint num="1" id="98" /> +<TGConnectingPoint num="2" id="99" /> +<TGConnectingPoint num="3" id="100" /> +<TGConnectingPoint num="4" id="101" /> +<TGConnectingPoint num="5" id="102" /> +<TGConnectingPoint num="6" id="103" /> +<TGConnectingPoint num="7" id="104" /> +<TGConnectingPoint num="8" id="105" /> +<TGConnectingPoint num="9" id="106" /> +<TGConnectingPoint num="10" id="107" /> +<TGConnectingPoint num="11" id="108" /> +<TGConnectingPoint num="12" id="109" /> +<TGConnectingPoint num="13" id="110" /> +<TGConnectingPoint num="14" id="111" /> +</COMPONENT> + +<COMPONENT type="5201" id="128" > +<cdparam x="580" y="246" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="128" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="AvatarProperty" value="WalletCoinProperty" /> +<TGConnectingPoint num="0" id="113" /> +<TGConnectingPoint num="1" id="114" /> +<TGConnectingPoint num="2" id="115" /> +<TGConnectingPoint num="3" id="116" /> +<TGConnectingPoint num="4" id="117" /> +<TGConnectingPoint num="5" id="118" /> +<TGConnectingPoint num="6" id="119" /> +<TGConnectingPoint num="7" id="120" /> +<TGConnectingPoint num="8" id="121" /> +<TGConnectingPoint num="9" id="122" /> +<TGConnectingPoint num="10" id="123" /> +<TGConnectingPoint num="11" id="124" /> +<TGConnectingPoint num="12" id="125" /> +<TGConnectingPoint num="13" id="126" /> +<TGConnectingPoint num="14" id="127" /> +</COMPONENT> + +<COMPONENT type="5200" id="160" > +<cdparam x="234" y="147" /> +<sizeparam width="271" height="104" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req1" /> +<TGConnectingPoint num="0" id="129" /> +<TGConnectingPoint num="1" id="130" /> +<TGConnectingPoint num="2" id="131" /> +<TGConnectingPoint num="3" id="132" /> +<TGConnectingPoint num="4" id="133" /> +<TGConnectingPoint num="5" id="134" /> +<TGConnectingPoint num="6" id="135" /> +<TGConnectingPoint num="7" id="136" /> +<TGConnectingPoint num="8" id="137" /> +<TGConnectingPoint num="9" id="138" /> +<TGConnectingPoint num="10" id="139" /> +<TGConnectingPoint num="11" id="140" /> +<TGConnectingPoint num="12" id="141" /> +<TGConnectingPoint num="13" id="142" /> +<TGConnectingPoint num="14" id="143" /> +<TGConnectingPoint num="15" id="144" /> +<TGConnectingPoint num="16" id="145" /> +<TGConnectingPoint num="17" id="146" /> +<TGConnectingPoint num="18" id="147" /> +<TGConnectingPoint num="19" id="148" /> +<TGConnectingPoint num="20" id="149" /> +<TGConnectingPoint num="21" id="150" /> +<TGConnectingPoint num="22" id="151" /> +<TGConnectingPoint num="23" id="152" /> +<TGConnectingPoint num="24" id="153" /> +<TGConnectingPoint num="25" id="154" /> +<TGConnectingPoint num="26" id="155" /> +<TGConnectingPoint num="27" id="156" /> +<TGConnectingPoint num="28" id="157" /> +<TGConnectingPoint num="29" id="158" /> +<TGConnectingPoint num="30" id="159" /> +<extraparam> +<textline data="A wallet must never contain a " /> +<textline data="negative number of coins" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5201" id="176" > +<cdparam x="582" y="155" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="117" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="AvatarProperty" value="OneCoinProperty" /> +<TGConnectingPoint num="0" id="161" /> +<TGConnectingPoint num="1" id="162" /> +<TGConnectingPoint num="2" id="163" /> +<TGConnectingPoint num="3" id="164" /> +<TGConnectingPoint num="4" id="165" /> +<TGConnectingPoint num="5" id="166" /> +<TGConnectingPoint num="6" id="167" /> +<TGConnectingPoint num="7" id="168" /> +<TGConnectingPoint num="8" id="169" /> +<TGConnectingPoint num="9" id="170" /> +<TGConnectingPoint num="10" id="171" /> +<TGConnectingPoint num="11" id="172" /> +<TGConnectingPoint num="12" id="173" /> +<TGConnectingPoint num="13" id="174" /> +<TGConnectingPoint num="14" id="175" /> +</COMPONENT> + +<COMPONENT type="5200" id="208" > +<cdparam x="192" y="16" /> +<sizeparam width="304" height="110" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req0" /> +<TGConnectingPoint num="0" id="177" /> +<TGConnectingPoint num="1" id="178" /> +<TGConnectingPoint num="2" id="179" /> +<TGConnectingPoint num="3" id="180" /> +<TGConnectingPoint num="4" id="181" /> +<TGConnectingPoint num="5" id="182" /> +<TGConnectingPoint num="6" id="183" /> +<TGConnectingPoint num="7" id="184" /> +<TGConnectingPoint num="8" id="185" /> +<TGConnectingPoint num="9" id="186" /> +<TGConnectingPoint num="10" id="187" /> +<TGConnectingPoint num="11" id="188" /> +<TGConnectingPoint num="12" id="189" /> +<TGConnectingPoint num="13" id="190" /> +<TGConnectingPoint num="14" id="191" /> +<TGConnectingPoint num="15" id="192" /> +<TGConnectingPoint num="16" id="193" /> +<TGConnectingPoint num="17" id="194" /> +<TGConnectingPoint num="18" id="195" /> +<TGConnectingPoint num="19" id="196" /> +<TGConnectingPoint num="20" id="197" /> +<TGConnectingPoint num="21" id="198" /> +<TGConnectingPoint num="22" id="199" /> +<TGConnectingPoint num="23" id="200" /> +<TGConnectingPoint num="24" id="201" /> +<TGConnectingPoint num="25" id="202" /> +<TGConnectingPoint num="26" id="203" /> +<TGConnectingPoint num="27" id="204" /> +<TGConnectingPoint num="28" id="205" /> +<TGConnectingPoint num="29" id="206" /> +<TGConnectingPoint num="30" id="207" /> +<extraparam> +<textline data="The coffee machine never has one coin " /> +<textline data=" inserted more than 50 units of time" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="123" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="240" > +<cdparam x="206" y="294" /> +<sizeparam width="357" height="135" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req2" /> +<TGConnectingPoint num="0" id="209" /> +<TGConnectingPoint num="1" id="210" /> +<TGConnectingPoint num="2" id="211" /> +<TGConnectingPoint num="3" id="212" /> +<TGConnectingPoint num="4" id="213" /> +<TGConnectingPoint num="5" id="214" /> +<TGConnectingPoint num="6" id="215" /> +<TGConnectingPoint num="7" id="216" /> +<TGConnectingPoint num="8" id="217" /> +<TGConnectingPoint num="9" id="218" /> +<TGConnectingPoint num="10" id="219" /> +<TGConnectingPoint num="11" id="220" /> +<TGConnectingPoint num="12" id="221" /> +<TGConnectingPoint num="13" id="222" /> +<TGConnectingPoint num="14" id="223" /> +<TGConnectingPoint num="15" id="224" /> +<TGConnectingPoint num="16" id="225" /> +<TGConnectingPoint num="17" id="226" /> +<TGConnectingPoint num="18" id="227" /> +<TGConnectingPoint num="19" id="228" /> +<TGConnectingPoint num="20" id="229" /> +<TGConnectingPoint num="21" id="230" /> +<TGConnectingPoint num="22" id="231" /> +<TGConnectingPoint num="23" id="232" /> +<TGConnectingPoint num="24" id="233" /> +<TGConnectingPoint num="25" id="234" /> +<TGConnectingPoint num="26" id="235" /> +<TGConnectingPoint num="27" id="236" /> +<TGConnectingPoint num="28" id="237" /> +<TGConnectingPoint num="29" id="238" /> +<TGConnectingPoint num="30" id="239" /> +<extraparam> +<textline data="When the application starts, if the wallet contains " /> +<textline data="at least 2 coins, then a beverage may be delivered. " /> +<textline data="On the contrary, if the wallet contains less than 2" /> +<textline data="coins, no beverage will be delivered by the" /> +<textline data="machine." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="5202" id="242" > +<cdparam x="659" y="79" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="241" /> +<P1 x="661" y="47" id="1" /> +<P2 x="496" y="43" id="180" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="244" > +<cdparam x="124" y="457" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="243" /> +<P1 x="122" y="457" id="39" /> +<P2 x="122" y="302" id="76" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="246" > +<cdparam x="244" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="245" /> +<P1 x="206" y="327" id="209" /> +<P2 x="160" y="272" id="70" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="248" > +<cdparam x="249" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="247" /> +<P1 x="234" y="199" id="130" /> +<P2 x="160" y="212" id="68" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="250" > +<cdparam x="237" y="98" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="249" /> +<P1 x="192" y="98" id="179" /> +<P2 x="122" y="182" id="73" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="252" > +<cdparam x="538" y="537" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="251" /> +<P1 x="627" y="391" id="98" /> +<P2 x="563" y="361" id="225" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="254" > +<cdparam x="545" y="329" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="253" /> +<P1 x="580" y="261" id="114" /> +<P2 x="505" y="199" id="145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="256" > +<cdparam x="563" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="255" /> +<P1 x="582" y="170" id="162" /> +<P2 x="496" y="98" id="194" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</AvatarRDPanel> + +<AvatarPDPanel name="AVATAR PD" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0000000000000004" > +<CONNECTOR type="5312" id="258" > +<cdparam x="582" y="248" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="257" /> +<P1 x="502" y="258" id="383" /> +<P2 x="502" y="334" id="271" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="264" > +<cdparam x="247" y="616" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="261" /> +<TGConnectingPoint num="1" id="262" /> +<TGConnectingPoint num="2" id="263" /> +<P1 x="492" y="126" id="346" /> +<P2 x="492" y="209" id="387" /> +<Point x="467" y="147" /> +<Point x="467" y="192" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="259" > +<father id="264" num="0" /> +<cdparam x="467" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="260" > +<father id="264" num="1" /> +<cdparam x="467" y="192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5311" id="266" > +<cdparam x="280" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="265" /> +<P1 x="313" y="261" id="309" /> +<P2 x="361" y="261" id="284" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="268" > +<cdparam x="473" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="267" /> +<P1 x="390" y="286" id="282" /> +<P2 x="390" y="331" id="276" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="270" > +<cdparam x="276" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="269" /> +<P1 x="309" y="211" id="296" /> +<P2 x="361" y="211" id="283" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="275" > +<cdparam x="446" y="334" /> +<sizeparam width="112" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="WalletCoinProperty" /> +<TGConnectingPoint num="0" id="271" /> +<TGConnectingPoint num="1" id="272" /> +<TGConnectingPoint num="2" id="273" /> +<TGConnectingPoint num="3" id="274" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5308" id="280" > +<cdparam x="340" y="331" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="oneCoinProperty" /> +<TGConnectingPoint num="0" id="276" /> +<TGConnectingPoint num="1" id="277" /> +<TGConnectingPoint num="2" id="278" /> +<TGConnectingPoint num="3" id="279" /> +<extraparam> +<liveness data="1" /> +<not data="true" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="293" > +<cdparam x="361" y="187" /> +<sizeparam width="59" height="99" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value=">50" /> +<TGConnectingPoint num="0" id="281" /> +<TGConnectingPoint num="1" id="282" /> +<TGConnectingPoint num="2" id="283" /> +<TGConnectingPoint num="3" id="284" /> +<TGConnectingPoint num="4" id="285" /> +<TGConnectingPoint num="5" id="286" /> +<TGConnectingPoint num="6" id="287" /> +<TGConnectingPoint num="7" id="288" /> +<TGConnectingPoint num="8" id="289" /> +<TGConnectingPoint num="9" id="290" /> +<TGConnectingPoint num="10" id="291" /> +<TGConnectingPoint num="11" id="292" /> +</COMPONENT> + +<COMPONENT type="5300" id="344" > +<cdparam x="150" y="142" /> +<sizeparam width="168" height="154" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="320" /> +<TGConnectingPoint num="1" id="321" /> +<TGConnectingPoint num="2" id="322" /> +<TGConnectingPoint num="3" id="323" /> +<TGConnectingPoint num="4" id="324" /> +<TGConnectingPoint num="5" id="325" /> +<TGConnectingPoint num="6" id="326" /> +<TGConnectingPoint num="7" id="327" /> +<TGConnectingPoint num="8" id="328" /> +<TGConnectingPoint num="9" id="329" /> +<TGConnectingPoint num="10" id="330" /> +<TGConnectingPoint num="11" id="331" /> +<TGConnectingPoint num="12" id="332" /> +<TGConnectingPoint num="13" id="333" /> +<TGConnectingPoint num="14" id="334" /> +<TGConnectingPoint num="15" id="335" /> +<TGConnectingPoint num="16" id="336" /> +<TGConnectingPoint num="17" id="337" /> +<TGConnectingPoint num="18" id="338" /> +<TGConnectingPoint num="19" id="339" /> +<TGConnectingPoint num="20" id="340" /> +<TGConnectingPoint num="21" id="341" /> +<TGConnectingPoint num="22" id="342" /> +<TGConnectingPoint num="23" id="343" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="306" > +<father id="344" num="0" /> +<cdparam x="170" y="191" /> +<sizeparam width="139" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="29" minY="0" maxY="114" /> +<infoparam name="TGComponent" value="WaitingForFirstCoin_exit" /> +<TGConnectingPoint num="0" id="294" /> +<TGConnectingPoint num="1" id="295" /> +<TGConnectingPoint num="2" id="296" /> +<TGConnectingPoint num="3" id="297" /> +<TGConnectingPoint num="4" id="298" /> +<TGConnectingPoint num="5" id="299" /> +<TGConnectingPoint num="6" id="300" /> +<TGConnectingPoint num="7" id="301" /> +<TGConnectingPoint num="8" id="302" /> +<TGConnectingPoint num="9" id="303" /> +<TGConnectingPoint num="10" id="304" /> +<TGConnectingPoint num="11" id="305" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="319" > +<father id="344" num="1" /> +<cdparam x="165" y="241" /> +<sizeparam width="148" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="20" minY="0" maxY="114" /> +<infoparam name="TGComponent" value="WaitingForFirstCoin_enter" /> +<TGConnectingPoint num="0" id="307" /> +<TGConnectingPoint num="1" id="308" /> +<TGConnectingPoint num="2" id="309" /> +<TGConnectingPoint num="3" id="310" /> +<TGConnectingPoint num="4" id="311" /> +<TGConnectingPoint num="5" id="312" /> +<TGConnectingPoint num="6" id="313" /> +<TGConnectingPoint num="7" id="314" /> +<TGConnectingPoint num="8" id="315" /> +<TGConnectingPoint num="9" id="316" /> +<TGConnectingPoint num="10" id="317" /> +<TGConnectingPoint num="11" id="318" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="382" > +<cdparam x="459" y="61" /> +<sizeparam width="150" height="116" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Wallet" /> +<TGConnectingPoint num="0" id="358" /> +<TGConnectingPoint num="1" id="359" /> +<TGConnectingPoint num="2" id="360" /> +<TGConnectingPoint num="3" id="361" /> +<TGConnectingPoint num="4" id="362" /> +<TGConnectingPoint num="5" id="363" /> +<TGConnectingPoint num="6" id="364" /> +<TGConnectingPoint num="7" id="365" /> +<TGConnectingPoint num="8" id="366" /> +<TGConnectingPoint num="9" id="367" /> +<TGConnectingPoint num="10" id="368" /> +<TGConnectingPoint num="11" id="369" /> +<TGConnectingPoint num="12" id="370" /> +<TGConnectingPoint num="13" id="371" /> +<TGConnectingPoint num="14" id="372" /> +<TGConnectingPoint num="15" id="373" /> +<TGConnectingPoint num="16" id="374" /> +<TGConnectingPoint num="17" id="375" /> +<TGConnectingPoint num="18" id="376" /> +<TGConnectingPoint num="19" id="377" /> +<TGConnectingPoint num="20" id="378" /> +<TGConnectingPoint num="21" id="379" /> +<TGConnectingPoint num="22" id="380" /> +<TGConnectingPoint num="23" id="381" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="357" > +<father id="382" num="0" /> +<cdparam x="492" y="102" /> +<sizeparam width="100" height="49" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="50" minY="0" maxY="67" /> +<infoparam name="TGComponent" value="nbOfCoins" /> +<TGConnectingPoint num="0" id="345" /> +<TGConnectingPoint num="1" id="346" /> +<TGConnectingPoint num="2" id="347" /> +<TGConnectingPoint num="3" id="348" /> +<TGConnectingPoint num="4" id="349" /> +<TGConnectingPoint num="5" id="350" /> +<TGConnectingPoint num="6" id="351" /> +<TGConnectingPoint num="7" id="352" /> +<TGConnectingPoint num="8" id="353" /> +<TGConnectingPoint num="9" id="354" /> +<TGConnectingPoint num="10" id="355" /> +<TGConnectingPoint num="11" id="356" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="394" > +<cdparam x="467" y="209" /> +<sizeparam width="100" height="49" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="nbOfCoins >= 0" /> +<TGConnectingPoint num="0" id="383" /> +<TGConnectingPoint num="1" id="384" /> +<TGConnectingPoint num="2" id="385" /> +<TGConnectingPoint num="3" id="386" /> +<TGConnectingPoint num="4" id="387" /> +<TGConnectingPoint num="5" id="388" /> +<TGConnectingPoint num="6" id="389" /> +<TGConnectingPoint num="7" id="390" /> +<TGConnectingPoint num="8" id="391" /> +<TGConnectingPoint num="9" id="392" /> +<TGConnectingPoint num="10" id="393" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="AVATAR PD" minX="10" maxX="1400" minY="10" maxY="1400" zoom="1.0" > +<CONNECTOR type="5312" id="396" > +<cdparam x="580" y="547" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="395" /> +<P1 x="634" y="495" id="571" /> +<P2 x="635" y="562" id="428" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="398" > +<cdparam x="506" y="493" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="397" /> +<P1 x="577" y="471" id="582" /> +<P2 x="654" y="495" id="572" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="400" > +<cdparam x="694" y="460" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="399" /> +<P1 x="694" y="472" id="424" /> +<P2 x="674" y="505" id="573" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="406" > +<cdparam x="581" y="133" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="403" /> +<TGConnectingPoint num="1" id="404" /> +<TGConnectingPoint num="2" id="405" /> +<P1 x="581" y="154" id="479" /> +<P2 x="546" y="305" id="549" /> +<Point x="518" y="154" /> +<Point x="518" y="305" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="401" > +<father id="406" num="0" /> +<cdparam x="518" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="402" > +<father id="406" num="1" /> +<cdparam x="518" y="305" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5311" id="410" > +<cdparam x="631" y="143" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="408" /> +<TGConnectingPoint num="1" id="409" /> +<P1 x="631" y="164" id="474" /> +<P2 x="667" y="310" id="536" /> +<Point x="631" y="310" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="407" > +<father id="410" num="0" /> +<cdparam x="631" y="310" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5312" id="412" > +<cdparam x="695" y="396" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="411" /> +<P1 x="696" y="385" id="535" /> +<P2 x="694" y="417" id="423" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="416" > +<cdparam x="877" y="168" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="414" /> +<TGConnectingPoint num="1" id="415" /> +<P1 x="721" y="158" id="485" /> +<P2 x="700" y="204" id="526" /> +<Point x="700" y="158" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="413" > +<father id="416" num="0" /> +<cdparam x="700" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5312" id="418" > +<cdparam x="915" y="307" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="417" /> +<P1 x="710" y="254" id="522" /> +<P2 x="711" y="285" id="534" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="420" > +<cdparam x="993" y="581" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="419" /> +<P1 x="576" y="385" id="548" /> +<P2 x="577" y="416" id="581" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="422" > +<cdparam x="426" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="421" /> +<P1 x="491" y="345" id="435" /> +<P2 x="546" y="345" id="553" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="427" > +<cdparam x="644" y="417" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="prop01" /> +<TGConnectingPoint num="0" id="423" /> +<TGConnectingPoint num="1" id="424" /> +<TGConnectingPoint num="2" id="425" /> +<TGConnectingPoint num="3" id="426" /> +<extraparam> +<liveness data="1" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5308" id="432" > +<cdparam x="562" y="562" /> +<sizeparam width="146" height="54" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BeverageDeliverProperty" /> +<TGConnectingPoint num="0" id="428" /> +<TGConnectingPoint num="1" id="429" /> +<TGConnectingPoint num="2" id="430" /> +<TGConnectingPoint num="3" id="431" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5300" id="470" > +<cdparam x="372" y="227" /> +<sizeparam width="132" height="153" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="446" /> +<TGConnectingPoint num="1" id="447" /> +<TGConnectingPoint num="2" id="448" /> +<TGConnectingPoint num="3" id="449" /> +<TGConnectingPoint num="4" id="450" /> +<TGConnectingPoint num="5" id="451" /> +<TGConnectingPoint num="6" id="452" /> +<TGConnectingPoint num="7" id="453" /> +<TGConnectingPoint num="8" id="454" /> +<TGConnectingPoint num="9" id="455" /> +<TGConnectingPoint num="10" id="456" /> +<TGConnectingPoint num="11" id="457" /> +<TGConnectingPoint num="12" id="458" /> +<TGConnectingPoint num="13" id="459" /> +<TGConnectingPoint num="14" id="460" /> +<TGConnectingPoint num="15" id="461" /> +<TGConnectingPoint num="16" id="462" /> +<TGConnectingPoint num="17" id="463" /> +<TGConnectingPoint num="18" id="464" /> +<TGConnectingPoint num="19" id="465" /> +<TGConnectingPoint num="20" id="466" /> +<TGConnectingPoint num="21" id="467" /> +<TGConnectingPoint num="22" id="468" /> +<TGConnectingPoint num="23" id="469" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="445" > +<father id="470" num="0" /> +<cdparam x="391" y="326" /> +<sizeparam width="100" height="39" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="32" minY="0" maxY="114" /> +<infoparam name="TGComponent" value="beverageReady" /> +<TGConnectingPoint num="0" id="433" /> +<TGConnectingPoint num="1" id="434" /> +<TGConnectingPoint num="2" id="435" /> +<TGConnectingPoint num="3" id="436" /> +<TGConnectingPoint num="4" id="437" /> +<TGConnectingPoint num="5" id="438" /> +<TGConnectingPoint num="6" id="439" /> +<TGConnectingPoint num="7" id="440" /> +<TGConnectingPoint num="8" id="441" /> +<TGConnectingPoint num="9" id="442" /> +<TGConnectingPoint num="10" id="443" /> +<TGConnectingPoint num="11" id="444" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="521" > +<cdparam x="563" y="78" /> +<sizeparam width="268" height="115" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="Wallet" /> +<TGConnectingPoint num="0" id="497" /> +<TGConnectingPoint num="1" id="498" /> +<TGConnectingPoint num="2" id="499" /> +<TGConnectingPoint num="3" id="500" /> +<TGConnectingPoint num="4" id="501" /> +<TGConnectingPoint num="5" id="502" /> +<TGConnectingPoint num="6" id="503" /> +<TGConnectingPoint num="7" id="504" /> +<TGConnectingPoint num="8" id="505" /> +<TGConnectingPoint num="9" id="506" /> +<TGConnectingPoint num="10" id="507" /> +<TGConnectingPoint num="11" id="508" /> +<TGConnectingPoint num="12" id="509" /> +<TGConnectingPoint num="13" id="510" /> +<TGConnectingPoint num="14" id="511" /> +<TGConnectingPoint num="15" id="512" /> +<TGConnectingPoint num="16" id="513" /> +<TGConnectingPoint num="17" id="514" /> +<TGConnectingPoint num="18" id="515" /> +<TGConnectingPoint num="19" id="516" /> +<TGConnectingPoint num="20" id="517" /> +<TGConnectingPoint num="21" id="518" /> +<TGConnectingPoint num="22" id="519" /> +<TGConnectingPoint num="23" id="520" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="483" > +<father id="521" num="0" /> +<cdparam x="581" y="125" /> +<sizeparam width="100" height="39" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="168" minY="0" maxY="76" /> +<infoparam name="TGComponent" value="Start" /> +<TGConnectingPoint num="0" id="471" /> +<TGConnectingPoint num="1" id="472" /> +<TGConnectingPoint num="2" id="473" /> +<TGConnectingPoint num="3" id="474" /> +<TGConnectingPoint num="4" id="475" /> +<TGConnectingPoint num="5" id="476" /> +<TGConnectingPoint num="6" id="477" /> +<TGConnectingPoint num="7" id="478" /> +<TGConnectingPoint num="8" id="479" /> +<TGConnectingPoint num="9" id="480" /> +<TGConnectingPoint num="10" id="481" /> +<TGConnectingPoint num="11" id="482" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5303" id="496" > +<father id="521" num="1" /> +<cdparam x="721" y="133" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="168" minY="0" maxY="65" /> +<infoparam name="TGComponent" value="nbOfCoins" /> +<TGConnectingPoint num="0" id="484" /> +<TGConnectingPoint num="1" id="485" /> +<TGConnectingPoint num="2" id="486" /> +<TGConnectingPoint num="3" id="487" /> +<TGConnectingPoint num="4" id="488" /> +<TGConnectingPoint num="5" id="489" /> +<TGConnectingPoint num="6" id="490" /> +<TGConnectingPoint num="7" id="491" /> +<TGConnectingPoint num="8" id="492" /> +<TGConnectingPoint num="9" id="493" /> +<TGConnectingPoint num="10" id="494" /> +<TGConnectingPoint num="11" id="495" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="533" > +<cdparam x="675" y="204" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="nbOfCoins > 1" /> +<TGConnectingPoint num="0" id="522" /> +<TGConnectingPoint num="1" id="523" /> +<TGConnectingPoint num="2" id="524" /> +<TGConnectingPoint num="3" id="525" /> +<TGConnectingPoint num="4" id="526" /> +<TGConnectingPoint num="5" id="527" /> +<TGConnectingPoint num="6" id="528" /> +<TGConnectingPoint num="7" id="529" /> +<TGConnectingPoint num="8" id="530" /> +<TGConnectingPoint num="9" id="531" /> +<TGConnectingPoint num="10" id="532" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="546" > +<cdparam x="667" y="285" /> +<sizeparam width="59" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="=0" /> +<TGConnectingPoint num="0" id="534" /> +<TGConnectingPoint num="1" id="535" /> +<TGConnectingPoint num="2" id="536" /> +<TGConnectingPoint num="3" id="537" /> +<TGConnectingPoint num="4" id="538" /> +<TGConnectingPoint num="5" id="539" /> +<TGConnectingPoint num="6" id="540" /> +<TGConnectingPoint num="7" id="541" /> +<TGConnectingPoint num="8" id="542" /> +<TGConnectingPoint num="9" id="543" /> +<TGConnectingPoint num="10" id="544" /> +<TGConnectingPoint num="11" id="545" /> +</COMPONENT> + +<COMPONENT type="5301" id="567" > +<cdparam x="546" y="285" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<LS>>" /> +<TGConnectingPoint num="0" id="547" /> +<TGConnectingPoint num="1" id="548" /> +<TGConnectingPoint num="2" id="549" /> +<TGConnectingPoint num="3" id="550" /> +<TGConnectingPoint num="4" id="551" /> +<TGConnectingPoint num="5" id="552" /> +<TGConnectingPoint num="6" id="553" /> +<TGConnectingPoint num="7" id="554" /> +<TGConnectingPoint num="8" id="555" /> +<TGConnectingPoint num="9" id="556" /> +<TGConnectingPoint num="10" id="557" /> +<TGConnectingPoint num="11" id="558" /> +<TGConnectingPoint num="12" id="559" /> +<TGConnectingPoint num="13" id="560" /> +<TGConnectingPoint num="14" id="561" /> +<TGConnectingPoint num="15" id="562" /> +<TGConnectingPoint num="16" id="563" /> +<TGConnectingPoint num="17" id="564" /> +<TGConnectingPoint num="18" id="565" /> +<TGConnectingPoint num="19" id="566" /> +</COMPONENT> + +<COMPONENT type="5309" id="580" > +<cdparam x="594" y="495" /> +<sizeparam width="80" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<=>" /> +<TGConnectingPoint num="0" id="568" /> +<TGConnectingPoint num="1" id="569" /> +<TGConnectingPoint num="2" id="570" /> +<TGConnectingPoint num="3" id="571" /> +<TGConnectingPoint num="4" id="572" /> +<TGConnectingPoint num="5" id="573" /> +<TGConnectingPoint num="6" id="574" /> +<TGConnectingPoint num="7" id="575" /> +<TGConnectingPoint num="8" id="576" /> +<TGConnectingPoint num="9" id="577" /> +<TGConnectingPoint num="10" id="578" /> +<TGConnectingPoint num="11" id="579" /> +</COMPONENT> + +<COMPONENT type="5308" id="585" > +<cdparam x="527" y="416" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="prop02" /> +<TGConnectingPoint num="0" id="581" /> +<TGConnectingPoint num="1" id="582" /> +<TGConnectingPoint num="2" id="583" /> +<TGConnectingPoint num="3" id="584" /> +<extraparam> +<liveness data="1" /> +<not data="false" /> +</extraparam> +</COMPONENT> + + +</AvatarPDPanel> + +</Modeling> + + + + +<Modeling type="AVATAR Design" nameTab="AVATAR Design" > +<AVATARBlockDiagramPanel name="AVATAR Block Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<MainCode value="void __user_init() {"/> +<MainCode value="}"/> +<Optimized value="true" /> +<Validated value="Wallet;CoffeeMachine;CoffeeButton;TeaButton;" /> +<Ignored value="" /> + +<CONNECTOR type="5002" id="587" > +<cdparam x="321" y="567" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block1 to Block0" value="" /> +<TGConnectingPoint num="0" id="586" /> +<P1 x="559" y="330" id="648" /> +<P2 x="560" y="377" id="681" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in pushCoffeeButton()" /> +<oso value="out push()" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="589" > +<cdparam x="275" y="114" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="588" /> +<P1 x="306" y="109" id="603" /> +<P2 x="445" y="108" id="677" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in getCoin(int nbOfCoins)" /> +<osd value="out ejectCoin(int nbOfCoins)" /> +<isd value="in getCoin(int nbOfCoins)" /> +<oso value="out putCoin(int nbOfCoins)" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="591" > +<cdparam x="623" y="565" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block1 to Block0" value="" /> +<TGConnectingPoint num="0" id="590" /> +<P1 x="789" y="326" id="623" /> +<P2 x="790" y="377" id="682" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in pushTeaButton()" /> +<oso value="out push()" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<COMPONENT type="5000" id="616" > +<cdparam x="106" y="55" /> +<sizeparam width="200" height="218" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Wallet" /> +<TGConnectingPoint num="0" id="592" /> +<TGConnectingPoint num="1" id="593" /> +<TGConnectingPoint num="2" id="594" /> +<TGConnectingPoint num="3" id="595" /> +<TGConnectingPoint num="4" id="596" /> +<TGConnectingPoint num="5" id="597" /> +<TGConnectingPoint num="6" id="598" /> +<TGConnectingPoint num="7" id="599" /> +<TGConnectingPoint num="8" id="600" /> +<TGConnectingPoint num="9" id="601" /> +<TGConnectingPoint num="10" id="602" /> +<TGConnectingPoint num="11" id="603" /> +<TGConnectingPoint num="12" id="604" /> +<TGConnectingPoint num="13" id="605" /> +<TGConnectingPoint num="14" id="606" /> +<TGConnectingPoint num="15" id="607" /> +<TGConnectingPoint num="16" id="608" /> +<TGConnectingPoint num="17" id="609" /> +<TGConnectingPoint num="18" id="610" /> +<TGConnectingPoint num="19" id="611" /> +<TGConnectingPoint num="20" id="612" /> +<TGConnectingPoint num="21" id="613" /> +<TGConnectingPoint num="22" id="614" /> +<TGConnectingPoint num="23" id="615" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="nbOfCoins" value="2" type="8" typeOther="" /> +<Attribute access="0" id="x" value="1" type="8" typeOther="" /> +<Attribute access="0" id="minUserDelay" value="50" type="8" typeOther="" /> +<Attribute access="0" id="maxUserDelay" value="70" type="8" typeOther="" /> +<Method value="contentOfWallet(int nbOfCoins)" /> +<Signal value="in getCoin(int nbOfCoins)" /> +<Signal value="out putCoin(int nbOfCoins)" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="691" > +<cdparam x="445" y="19" /> +<sizeparam width="461" height="358" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="667" /> +<TGConnectingPoint num="1" id="668" /> +<TGConnectingPoint num="2" id="669" /> +<TGConnectingPoint num="3" id="670" /> +<TGConnectingPoint num="4" id="671" /> +<TGConnectingPoint num="5" id="672" /> +<TGConnectingPoint num="6" id="673" /> +<TGConnectingPoint num="7" id="674" /> +<TGConnectingPoint num="8" id="675" /> +<TGConnectingPoint num="9" id="676" /> +<TGConnectingPoint num="10" id="677" /> +<TGConnectingPoint num="11" id="678" /> +<TGConnectingPoint num="12" id="679" /> +<TGConnectingPoint num="13" id="680" /> +<TGConnectingPoint num="14" id="681" /> +<TGConnectingPoint num="15" id="682" /> +<TGConnectingPoint num="16" id="683" /> +<TGConnectingPoint num="17" id="684" /> +<TGConnectingPoint num="18" id="685" /> +<TGConnectingPoint num="19" id="686" /> +<TGConnectingPoint num="20" id="687" /> +<TGConnectingPoint num="21" id="688" /> +<TGConnectingPoint num="22" id="689" /> +<TGConnectingPoint num="23" id="690" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="teaMinDelay" value="3" type="8" typeOther="" /> +<Attribute access="0" id="teaMaxDelay" value="8" type="8" typeOther="" /> +<Attribute access="0" id="coffeeMinDelay" value="5" type="8" typeOther="" /> +<Attribute access="0" id="coffeeMaxDelay" value="10" type="8" typeOther="" /> +<Attribute access="0" id="coinDelay" value="50" type="8" typeOther="" /> +<Attribute access="0" id="x" value="0" type="8" typeOther="" /> +<Attribute access="0" id="nbOfCoins" value="0" type="8" typeOther="" /> +<Method value="beverageReady()" /> +<Signal value="in pushCoffeeButton()" /> +<Signal value="in pushTeaButton()" /> +<Signal value="in getCoin(int nbOfCoins)" /> +<Signal value="out ejectCoin(int nbOfCoins)" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5000" id="641" > +<father id="691" num="0" /> +<cdparam x="695" y="224" /> +<sizeparam width="189" height="102" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="272" minY="0" maxY="256" /> +<infoparam name="Block1" value="TeaButton" /> +<TGConnectingPoint num="0" id="617" /> +<TGConnectingPoint num="1" id="618" /> +<TGConnectingPoint num="2" id="619" /> +<TGConnectingPoint num="3" id="620" /> +<TGConnectingPoint num="4" id="621" /> +<TGConnectingPoint num="5" id="622" /> +<TGConnectingPoint num="6" id="623" /> +<TGConnectingPoint num="7" id="624" /> +<TGConnectingPoint num="8" id="625" /> +<TGConnectingPoint num="9" id="626" /> +<TGConnectingPoint num="10" id="627" /> +<TGConnectingPoint num="11" id="628" /> +<TGConnectingPoint num="12" id="629" /> +<TGConnectingPoint num="13" id="630" /> +<TGConnectingPoint num="14" id="631" /> +<TGConnectingPoint num="15" id="632" /> +<TGConnectingPoint num="16" id="633" /> +<TGConnectingPoint num="17" id="634" /> +<TGConnectingPoint num="18" id="635" /> +<TGConnectingPoint num="19" id="636" /> +<TGConnectingPoint num="20" id="637" /> +<TGConnectingPoint num="21" id="638" /> +<TGConnectingPoint num="22" id="639" /> +<TGConnectingPoint num="23" id="640" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="mechanicalDelay" value="10" type="8" typeOther="" /> +<Signal value="out push()" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="666" > +<father id="691" num="1" /> +<cdparam x="464" y="228" /> +<sizeparam width="190" height="102" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="271" minY="0" maxY="256" /> +<infoparam name="Block1" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="642" /> +<TGConnectingPoint num="1" id="643" /> +<TGConnectingPoint num="2" id="644" /> +<TGConnectingPoint num="3" id="645" /> +<TGConnectingPoint num="4" id="646" /> +<TGConnectingPoint num="5" id="647" /> +<TGConnectingPoint num="6" id="648" /> +<TGConnectingPoint num="7" id="649" /> +<TGConnectingPoint num="8" id="650" /> +<TGConnectingPoint num="9" id="651" /> +<TGConnectingPoint num="10" id="652" /> +<TGConnectingPoint num="11" id="653" /> +<TGConnectingPoint num="12" id="654" /> +<TGConnectingPoint num="13" id="655" /> +<TGConnectingPoint num="14" id="656" /> +<TGConnectingPoint num="15" id="657" /> +<TGConnectingPoint num="16" id="658" /> +<TGConnectingPoint num="17" id="659" /> +<TGConnectingPoint num="18" id="660" /> +<TGConnectingPoint num="19" id="661" /> +<TGConnectingPoint num="20" id="662" /> +<TGConnectingPoint num="21" id="663" /> +<TGConnectingPoint num="22" id="664" /> +<TGConnectingPoint num="23" id="665" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="mechanicalDelay" value="10" type="8" typeOther="" /> +<Signal value="out push()" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARBlockDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Wallet" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="698" > +<cdparam x="516" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="697" /> +<P1 x="485" y="219" id="739" /> +<P2 x="485" y="274" id="750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="696" > +<father id="698" num="0" /> +<cdparam x="493" y="251" /> +<sizeparam width="161" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="692" /> +<TGConnectingPoint num="1" id="693" /> +<TGConnectingPoint num="2" id="694" /> +<TGConnectingPoint num="3" id="695" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = nbOfCoins + x" /> +<actions value="contentOfWallet(nbOfCoins)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="705" > +<cdparam x="382" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="704" /> +<P1 x="382" y="165" id="846" /> +<P2 x="485" y="189" id="738" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="703" > +<father id="705" num="0" /> +<cdparam x="382" y="205" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="699" /> +<TGConnectingPoint num="1" id="700" /> +<TGConnectingPoint num="2" id="701" /> +<TGConnectingPoint num="3" id="702" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="712" > +<cdparam x="223" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="711" /> +<P1 x="251" y="231" id="728" /> +<P2 x="252" y="300" id="791" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="710" > +<father id="712" num="0" /> +<cdparam x="175" y="246" /> +<sizeparam width="205" height="45" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="706" /> +<TGConnectingPoint num="1" id="707" /> +<TGConnectingPoint num="2" id="708" /> +<TGConnectingPoint num="3" id="709" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="minUserDelay" /> +<afterMax value="maxUserDelay" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = nbOfCoins - x" /> +<actions value="contentOfWallet(nbOfCoins)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="719" > +<cdparam x="357" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="718" /> +<P1 x="357" y="165" id="845" /> +<P2 x="251" y="201" id="727" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="717" > +<father id="719" num="0" /> +<cdparam x="220" y="174" /> +<sizeparam width="93" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="713" /> +<TGConnectingPoint num="1" id="714" /> +<TGConnectingPoint num="2" id="715" /> +<TGConnectingPoint num="3" id="716" /> +<extraparam> +<guard value="[nbOfCoins > 0]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="726" > +<cdparam x="369" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="725" /> +<P1 x="370" y="64" id="872" /> +<P2 x="370" y="135" id="832" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="724" > +<father id="726" num="0" /> +<cdparam x="376" y="105" /> +<sizeparam width="156" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="720" /> +<TGConnectingPoint num="1" id="721" /> +<TGConnectingPoint num="2" id="722" /> +<TGConnectingPoint num="3" id="723" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="contentOfWallet(nbOfCoins)" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="737" > +<cdparam x="217" y="206" /> +<sizeparam width="69" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="putCoin(x)" /> +<TGConnectingPoint num="0" id="727" /> +<TGConnectingPoint num="1" id="728" /> +<TGConnectingPoint num="2" id="729" /> +<TGConnectingPoint num="3" id="730" /> +<TGConnectingPoint num="4" id="731" /> +<TGConnectingPoint num="5" id="732" /> +<TGConnectingPoint num="6" id="733" /> +<TGConnectingPoint num="7" id="734" /> +<TGConnectingPoint num="8" id="735" /> +<TGConnectingPoint num="9" id="736" /> +</COMPONENT> + +<COMPONENT type="5104" id="748" > +<cdparam x="447" y="194" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="getCoin(x)" /> +<TGConnectingPoint num="0" id="738" /> +<TGConnectingPoint num="1" id="739" /> +<TGConnectingPoint num="2" id="740" /> +<TGConnectingPoint num="3" id="741" /> +<TGConnectingPoint num="4" id="742" /> +<TGConnectingPoint num="5" id="743" /> +<TGConnectingPoint num="6" id="744" /> +<TGConnectingPoint num="7" id="745" /> +<TGConnectingPoint num="8" id="746" /> +<TGConnectingPoint num="9" id="747" /> +</COMPONENT> + +<COMPONENT type="5106" id="789" > +<cdparam x="460" y="274" /> +<sizeparam width="50" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="749" /> +<TGConnectingPoint num="1" id="750" /> +<TGConnectingPoint num="2" id="751" /> +<TGConnectingPoint num="3" id="752" /> +<TGConnectingPoint num="4" id="753" /> +<TGConnectingPoint num="5" id="754" /> +<TGConnectingPoint num="6" id="755" /> +<TGConnectingPoint num="7" id="756" /> +<TGConnectingPoint num="8" id="757" /> +<TGConnectingPoint num="9" id="758" /> +<TGConnectingPoint num="10" id="759" /> +<TGConnectingPoint num="11" id="760" /> +<TGConnectingPoint num="12" id="761" /> +<TGConnectingPoint num="13" id="762" /> +<TGConnectingPoint num="14" id="763" /> +<TGConnectingPoint num="15" id="764" /> +<TGConnectingPoint num="16" id="765" /> +<TGConnectingPoint num="17" id="766" /> +<TGConnectingPoint num="18" id="767" /> +<TGConnectingPoint num="19" id="768" /> +<TGConnectingPoint num="20" id="769" /> +<TGConnectingPoint num="21" id="770" /> +<TGConnectingPoint num="22" id="771" /> +<TGConnectingPoint num="23" id="772" /> +<TGConnectingPoint num="24" id="773" /> +<TGConnectingPoint num="25" id="774" /> +<TGConnectingPoint num="26" id="775" /> +<TGConnectingPoint num="27" id="776" /> +<TGConnectingPoint num="28" id="777" /> +<TGConnectingPoint num="29" id="778" /> +<TGConnectingPoint num="30" id="779" /> +<TGConnectingPoint num="31" id="780" /> +<TGConnectingPoint num="32" id="781" /> +<TGConnectingPoint num="33" id="782" /> +<TGConnectingPoint num="34" id="783" /> +<TGConnectingPoint num="35" id="784" /> +<TGConnectingPoint num="36" id="785" /> +<TGConnectingPoint num="37" id="786" /> +<TGConnectingPoint num="38" id="787" /> +<TGConnectingPoint num="39" id="788" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="830" > +<cdparam x="227" y="300" /> +<sizeparam width="50" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="790" /> +<TGConnectingPoint num="1" id="791" /> +<TGConnectingPoint num="2" id="792" /> +<TGConnectingPoint num="3" id="793" /> +<TGConnectingPoint num="4" id="794" /> +<TGConnectingPoint num="5" id="795" /> +<TGConnectingPoint num="6" id="796" /> +<TGConnectingPoint num="7" id="797" /> +<TGConnectingPoint num="8" id="798" /> +<TGConnectingPoint num="9" id="799" /> +<TGConnectingPoint num="10" id="800" /> +<TGConnectingPoint num="11" id="801" /> +<TGConnectingPoint num="12" id="802" /> +<TGConnectingPoint num="13" id="803" /> +<TGConnectingPoint num="14" id="804" /> +<TGConnectingPoint num="15" id="805" /> +<TGConnectingPoint num="16" id="806" /> +<TGConnectingPoint num="17" id="807" /> +<TGConnectingPoint num="18" id="808" /> +<TGConnectingPoint num="19" id="809" /> +<TGConnectingPoint num="20" id="810" /> +<TGConnectingPoint num="21" id="811" /> +<TGConnectingPoint num="22" id="812" /> +<TGConnectingPoint num="23" id="813" /> +<TGConnectingPoint num="24" id="814" /> +<TGConnectingPoint num="25" id="815" /> +<TGConnectingPoint num="26" id="816" /> +<TGConnectingPoint num="27" id="817" /> +<TGConnectingPoint num="28" id="818" /> +<TGConnectingPoint num="29" id="819" /> +<TGConnectingPoint num="30" id="820" /> +<TGConnectingPoint num="31" id="821" /> +<TGConnectingPoint num="32" id="822" /> +<TGConnectingPoint num="33" id="823" /> +<TGConnectingPoint num="34" id="824" /> +<TGConnectingPoint num="35" id="825" /> +<TGConnectingPoint num="36" id="826" /> +<TGConnectingPoint num="37" id="827" /> +<TGConnectingPoint num="38" id="828" /> +<TGConnectingPoint num="39" id="829" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="871" > +<cdparam x="345" y="135" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="831" /> +<TGConnectingPoint num="1" id="832" /> +<TGConnectingPoint num="2" id="833" /> +<TGConnectingPoint num="3" id="834" /> +<TGConnectingPoint num="4" id="835" /> +<TGConnectingPoint num="5" id="836" /> +<TGConnectingPoint num="6" id="837" /> +<TGConnectingPoint num="7" id="838" /> +<TGConnectingPoint num="8" id="839" /> +<TGConnectingPoint num="9" id="840" /> +<TGConnectingPoint num="10" id="841" /> +<TGConnectingPoint num="11" id="842" /> +<TGConnectingPoint num="12" id="843" /> +<TGConnectingPoint num="13" id="844" /> +<TGConnectingPoint num="14" id="845" /> +<TGConnectingPoint num="15" id="846" /> +<TGConnectingPoint num="16" id="847" /> +<TGConnectingPoint num="17" id="848" /> +<TGConnectingPoint num="18" id="849" /> +<TGConnectingPoint num="19" id="850" /> +<TGConnectingPoint num="20" id="851" /> +<TGConnectingPoint num="21" id="852" /> +<TGConnectingPoint num="22" id="853" /> +<TGConnectingPoint num="23" id="854" /> +<TGConnectingPoint num="24" id="855" /> +<TGConnectingPoint num="25" id="856" /> +<TGConnectingPoint num="26" id="857" /> +<TGConnectingPoint num="27" id="858" /> +<TGConnectingPoint num="28" id="859" /> +<TGConnectingPoint num="29" id="860" /> +<TGConnectingPoint num="30" id="861" /> +<TGConnectingPoint num="31" id="862" /> +<TGConnectingPoint num="32" id="863" /> +<TGConnectingPoint num="33" id="864" /> +<TGConnectingPoint num="34" id="865" /> +<TGConnectingPoint num="35" id="866" /> +<TGConnectingPoint num="36" id="867" /> +<TGConnectingPoint num="37" id="868" /> +<TGConnectingPoint num="38" id="869" /> +<TGConnectingPoint num="39" id="870" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="873" > +<cdparam x="363" y="44" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="872" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="CoffeeMachine" minX="10" maxX="1400" minY="10" maxY="1400" > +<CONNECTOR type="5102" id="880" > +<cdparam x="691" y="288" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="879" /> +<P1 x="699" y="289" id="1018" /> +<P2 x="699" y="316" id="990" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="878" > +<father id="880" num="0" /> +<cdparam x="691" y="328" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="874" /> +<TGConnectingPoint num="1" id="875" /> +<TGConnectingPoint num="2" id="876" /> +<TGConnectingPoint num="3" id="877" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="887" > +<cdparam x="481" y="501" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="886" /> +<P1 x="437" y="525" id="1220" /> +<P2 x="323" y="748" id="1146" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="885" > +<father id="887" num="0" /> +<cdparam x="420" y="552" /> +<sizeparam width="85" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="881" /> +<TGConnectingPoint num="1" id="882" /> +<TGConnectingPoint num="2" id="883" /> +<TGConnectingPoint num="3" id="884" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = 0" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="894" > +<cdparam x="555" y="559" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="893" /> +<P1 x="321" y="455" id="1247" /> +<P2 x="437" y="495" id="1219" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="892" > +<father id="894" num="0" /> +<cdparam x="395" y="448" /> +<sizeparam width="94" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="888" /> +<TGConnectingPoint num="1" id="889" /> +<TGConnectingPoint num="2" id="890" /> +<TGConnectingPoint num="3" id="891" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="coinDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="901" > +<cdparam x="355" y="545" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="900" /> +<P1 x="293" y="552" id="1285" /> +<P2 x="289" y="748" id="1138" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="899" > +<father id="901" num="0" /> +<cdparam x="284" y="594" /> +<sizeparam width="228" height="45" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="895" /> +<TGConnectingPoint num="1" id="896" /> +<TGConnectingPoint num="2" id="897" /> +<TGConnectingPoint num="3" id="898" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="teaMinDelay" /> +<computeMax value="teaMaxDelay" /> +<actions value="nbOfCoins = 0" /> +<actions value="beverageReady()" /> +<filesToIncludeLine value="" /> +<codeToIncludeLine value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="908" > +<cdparam x="295" y="465" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="907" /> +<P1 x="288" y="475" id="1258" /> +<P2 x="293" y="522" id="1284" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="906" > +<father id="908" num="0" /> +<cdparam x="295" y="505" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="902" /> +<TGConnectingPoint num="1" id="903" /> +<TGConnectingPoint num="2" id="904" /> +<TGConnectingPoint num="3" id="905" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="915" > +<cdparam x="148" y="549" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="914" /> +<P1 x="121" y="552" id="1231" /> +<P2 x="255" y="748" id="1145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="913" > +<father id="915" num="0" /> +<cdparam x="32" y="587" /> +<sizeparam width="262" height="45" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="909" /> +<TGConnectingPoint num="1" id="910" /> +<TGConnectingPoint num="2" id="911" /> +<TGConnectingPoint num="3" id="912" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="coffeeMinDelay" /> +<computeMax value="coffeeMaxDelay" /> +<actions value="nbOfCoins = 0" /> +<actions value="beverageReady()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="922" > +<cdparam x="229" y="465" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="921" /> +<P1 x="222" y="475" id="1257" /> +<P2 x="121" y="522" id="1230" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="920" > +<father id="922" num="0" /> +<cdparam x="229" y="505" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="916" /> +<TGConnectingPoint num="1" id="917" /> +<TGConnectingPoint num="2" id="918" /> +<TGConnectingPoint num="3" id="919" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="929" > +<cdparam x="280" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="928" /> +<P1 x="256" y="419" id="1241" /> +<P2 x="255" y="435" id="1244" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="927" > +<father id="929" num="0" /> +<cdparam x="280" y="460" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="923" /> +<TGConnectingPoint num="1" id="924" /> +<TGConnectingPoint num="2" id="925" /> +<TGConnectingPoint num="3" id="926" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="936" > +<cdparam x="667" y="346" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="935" /> +<P1 x="699" y="346" id="991" /> +<P2 x="699" y="381" id="1179" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="934" > +<father id="936" num="0" /> +<cdparam x="707" y="368" /> +<sizeparam width="85" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="930" /> +<TGConnectingPoint num="1" id="931" /> +<TGConnectingPoint num="2" id="932" /> +<TGConnectingPoint num="3" id="933" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = 0" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="943" > +<cdparam x="348" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="942" /> +<P1 x="388" y="208" id="1057" /> +<P2 x="649" y="264" id="1015" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="941" > +<father id="943" num="0" /> +<cdparam x="411" y="206" /> +<sizeparam width="94" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="937" /> +<TGConnectingPoint num="1" id="938" /> +<TGConnectingPoint num="2" id="939" /> +<TGConnectingPoint num="3" id="940" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="coinDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="950" > +<cdparam x="243" y="319" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="949" /> +<P1 x="277" y="305" id="1002" /> +<P2 x="306" y="370" id="1296" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="948" > +<father id="950" num="0" /> +<cdparam x="243" y="359" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="944" /> +<TGConnectingPoint num="1" id="945" /> +<TGConnectingPoint num="2" id="946" /> +<TGConnectingPoint num="3" id="947" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="957" > +<cdparam x="270" y="224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="956" /> +<P1 x="270" y="228" id="1067" /> +<P2 x="277" y="275" id="1001" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="955" > +<father id="957" num="0" /> +<cdparam x="270" y="264" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="951" /> +<TGConnectingPoint num="1" id="952" /> +<TGConnectingPoint num="2" id="953" /> +<TGConnectingPoint num="3" id="954" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="964" > +<cdparam x="309" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="963" /> +<P1 x="306" y="166" id="980" /> +<P2 x="309" y="188" id="1054" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="962" > +<father id="964" num="0" /> +<cdparam x="328" y="178" /> +<sizeparam width="165" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="958" /> +<TGConnectingPoint num="1" id="959" /> +<TGConnectingPoint num="2" id="960" /> +<TGConnectingPoint num="3" id="961" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = nbOfCoins + x" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="971" > +<cdparam x="303" y="103" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="970" /> +<P1 x="303" y="103" id="1102" /> +<P2 x="306" y="136" id="979" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="969" > +<father id="971" num="0" /> +<cdparam x="303" y="143" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="965" /> +<TGConnectingPoint num="1" id="966" /> +<TGConnectingPoint num="2" id="967" /> +<TGConnectingPoint num="3" id="968" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="978" > +<cdparam x="303" y="40" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="977" /> +<P1 x="303" y="40" id="1094" /> +<P2 x="303" y="63" id="1097" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="976" > +<father id="978" num="0" /> +<cdparam x="303" y="80" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="972" /> +<TGConnectingPoint num="1" id="973" /> +<TGConnectingPoint num="2" id="974" /> +<TGConnectingPoint num="3" id="975" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5104" id="989" > +<cdparam x="268" y="141" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Receive signal" value="getCoin(x)" /> +<TGConnectingPoint num="0" id="979" /> +<TGConnectingPoint num="1" id="980" /> +<TGConnectingPoint num="2" id="981" /> +<TGConnectingPoint num="3" id="982" /> +<TGConnectingPoint num="4" id="983" /> +<TGConnectingPoint num="5" id="984" /> +<TGConnectingPoint num="6" id="985" /> +<TGConnectingPoint num="7" id="986" /> +<TGConnectingPoint num="8" id="987" /> +<TGConnectingPoint num="9" id="988" /> +</COMPONENT> + +<COMPONENT type="5103" id="1000" > +<cdparam x="634" y="321" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Send signal" value="ejectCoin(nbOfCoins)" /> +<TGConnectingPoint num="0" id="990" /> +<TGConnectingPoint num="1" id="991" /> +<TGConnectingPoint num="2" id="992" /> +<TGConnectingPoint num="3" id="993" /> +<TGConnectingPoint num="4" id="994" /> +<TGConnectingPoint num="5" id="995" /> +<TGConnectingPoint num="6" id="996" /> +<TGConnectingPoint num="7" id="997" /> +<TGConnectingPoint num="8" id="998" /> +<TGConnectingPoint num="9" id="999" /> +</COMPONENT> + +<COMPONENT type="5104" id="1011" > +<cdparam x="239" y="280" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Receive signal" value="getCoin(x)" /> +<TGConnectingPoint num="0" id="1001" /> +<TGConnectingPoint num="1" id="1002" /> +<TGConnectingPoint num="2" id="1003" /> +<TGConnectingPoint num="3" id="1004" /> +<TGConnectingPoint num="4" id="1005" /> +<TGConnectingPoint num="5" id="1006" /> +<TGConnectingPoint num="6" id="1007" /> +<TGConnectingPoint num="7" id="1008" /> +<TGConnectingPoint num="8" id="1009" /> +<TGConnectingPoint num="9" id="1010" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="5106" id="1052" > +<cdparam x="649" y="239" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="ejectState" /> +<TGConnectingPoint num="0" id="1012" /> +<TGConnectingPoint num="1" id="1013" /> +<TGConnectingPoint num="2" id="1014" /> +<TGConnectingPoint num="3" id="1015" /> +<TGConnectingPoint num="4" id="1016" /> +<TGConnectingPoint num="5" id="1017" /> +<TGConnectingPoint num="6" id="1018" /> +<TGConnectingPoint num="7" id="1019" /> +<TGConnectingPoint num="8" id="1020" /> +<TGConnectingPoint num="9" id="1021" /> +<TGConnectingPoint num="10" id="1022" /> +<TGConnectingPoint num="11" id="1023" /> +<TGConnectingPoint num="12" id="1024" /> +<TGConnectingPoint num="13" id="1025" /> +<TGConnectingPoint num="14" id="1026" /> +<TGConnectingPoint num="15" id="1027" /> +<TGConnectingPoint num="16" id="1028" /> +<TGConnectingPoint num="17" id="1029" /> +<TGConnectingPoint num="18" id="1030" /> +<TGConnectingPoint num="19" id="1031" /> +<TGConnectingPoint num="20" id="1032" /> +<TGConnectingPoint num="21" id="1033" /> +<TGConnectingPoint num="22" id="1034" /> +<TGConnectingPoint num="23" id="1035" /> +<TGConnectingPoint num="24" id="1036" /> +<TGConnectingPoint num="25" id="1037" /> +<TGConnectingPoint num="26" id="1038" /> +<TGConnectingPoint num="27" id="1039" /> +<TGConnectingPoint num="28" id="1040" /> +<TGConnectingPoint num="29" id="1041" /> +<TGConnectingPoint num="30" id="1042" /> +<TGConnectingPoint num="31" id="1043" /> +<TGConnectingPoint num="32" id="1044" /> +<TGConnectingPoint num="33" id="1045" /> +<TGConnectingPoint num="34" id="1046" /> +<TGConnectingPoint num="35" id="1047" /> +<TGConnectingPoint num="36" id="1048" /> +<TGConnectingPoint num="37" id="1049" /> +<TGConnectingPoint num="38" id="1050" /> +<TGConnectingPoint num="39" id="1051" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1093" > +<cdparam x="231" y="188" /> +<sizeparam width="157" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForSecondCoin" /> +<TGConnectingPoint num="0" id="1053" /> +<TGConnectingPoint num="1" id="1054" /> +<TGConnectingPoint num="2" id="1055" /> +<TGConnectingPoint num="3" id="1056" /> +<TGConnectingPoint num="4" id="1057" /> +<TGConnectingPoint num="5" id="1058" /> +<TGConnectingPoint num="6" id="1059" /> +<TGConnectingPoint num="7" id="1060" /> +<TGConnectingPoint num="8" id="1061" /> +<TGConnectingPoint num="9" id="1062" /> +<TGConnectingPoint num="10" id="1063" /> +<TGConnectingPoint num="11" id="1064" /> +<TGConnectingPoint num="12" id="1065" /> +<TGConnectingPoint num="13" id="1066" /> +<TGConnectingPoint num="14" id="1067" /> +<TGConnectingPoint num="15" id="1068" /> +<TGConnectingPoint num="16" id="1069" /> +<TGConnectingPoint num="17" id="1070" /> +<TGConnectingPoint num="18" id="1071" /> +<TGConnectingPoint num="19" id="1072" /> +<TGConnectingPoint num="20" id="1073" /> +<TGConnectingPoint num="21" id="1074" /> +<TGConnectingPoint num="22" id="1075" /> +<TGConnectingPoint num="23" id="1076" /> +<TGConnectingPoint num="24" id="1077" /> +<TGConnectingPoint num="25" id="1078" /> +<TGConnectingPoint num="26" id="1079" /> +<TGConnectingPoint num="27" id="1080" /> +<TGConnectingPoint num="28" id="1081" /> +<TGConnectingPoint num="29" id="1082" /> +<TGConnectingPoint num="30" id="1083" /> +<TGConnectingPoint num="31" id="1084" /> +<TGConnectingPoint num="32" id="1085" /> +<TGConnectingPoint num="33" id="1086" /> +<TGConnectingPoint num="34" id="1087" /> +<TGConnectingPoint num="35" id="1088" /> +<TGConnectingPoint num="36" id="1089" /> +<TGConnectingPoint num="37" id="1090" /> +<TGConnectingPoint num="38" id="1091" /> +<TGConnectingPoint num="39" id="1092" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="1095" > +<cdparam x="296" y="20" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1094" /> +</COMPONENT> + +<COMPONENT type="5106" id="1136" > +<cdparam x="235" y="63" /> +<sizeparam width="137" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForFirstCoin" /> +<TGConnectingPoint num="0" id="1096" /> +<TGConnectingPoint num="1" id="1097" /> +<TGConnectingPoint num="2" id="1098" /> +<TGConnectingPoint num="3" id="1099" /> +<TGConnectingPoint num="4" id="1100" /> +<TGConnectingPoint num="5" id="1101" /> +<TGConnectingPoint num="6" id="1102" /> +<TGConnectingPoint num="7" id="1103" /> +<TGConnectingPoint num="8" id="1104" /> +<TGConnectingPoint num="9" id="1105" /> +<TGConnectingPoint num="10" id="1106" /> +<TGConnectingPoint num="11" id="1107" /> +<TGConnectingPoint num="12" id="1108" /> +<TGConnectingPoint num="13" id="1109" /> +<TGConnectingPoint num="14" id="1110" /> +<TGConnectingPoint num="15" id="1111" /> +<TGConnectingPoint num="16" id="1112" /> +<TGConnectingPoint num="17" id="1113" /> +<TGConnectingPoint num="18" id="1114" /> +<TGConnectingPoint num="19" id="1115" /> +<TGConnectingPoint num="20" id="1116" /> +<TGConnectingPoint num="21" id="1117" /> +<TGConnectingPoint num="22" id="1118" /> +<TGConnectingPoint num="23" id="1119" /> +<TGConnectingPoint num="24" id="1120" /> +<TGConnectingPoint num="25" id="1121" /> +<TGConnectingPoint num="26" id="1122" /> +<TGConnectingPoint num="27" id="1123" /> +<TGConnectingPoint num="28" id="1124" /> +<TGConnectingPoint num="29" id="1125" /> +<TGConnectingPoint num="30" id="1126" /> +<TGConnectingPoint num="31" id="1127" /> +<TGConnectingPoint num="32" id="1128" /> +<TGConnectingPoint num="33" id="1129" /> +<TGConnectingPoint num="34" id="1130" /> +<TGConnectingPoint num="35" id="1131" /> +<TGConnectingPoint num="36" id="1132" /> +<TGConnectingPoint num="37" id="1133" /> +<TGConnectingPoint num="38" id="1134" /> +<TGConnectingPoint num="39" id="1135" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1177" > +<cdparam x="221" y="748" /> +<sizeparam width="137" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForFirstCoin" /> +<TGConnectingPoint num="0" id="1137" /> +<TGConnectingPoint num="1" id="1138" /> +<TGConnectingPoint num="2" id="1139" /> +<TGConnectingPoint num="3" id="1140" /> +<TGConnectingPoint num="4" id="1141" /> +<TGConnectingPoint num="5" id="1142" /> +<TGConnectingPoint num="6" id="1143" /> +<TGConnectingPoint num="7" id="1144" /> +<TGConnectingPoint num="8" id="1145" /> +<TGConnectingPoint num="9" id="1146" /> +<TGConnectingPoint num="10" id="1147" /> +<TGConnectingPoint num="11" id="1148" /> +<TGConnectingPoint num="12" id="1149" /> +<TGConnectingPoint num="13" id="1150" /> +<TGConnectingPoint num="14" id="1151" /> +<TGConnectingPoint num="15" id="1152" /> +<TGConnectingPoint num="16" id="1153" /> +<TGConnectingPoint num="17" id="1154" /> +<TGConnectingPoint num="18" id="1155" /> +<TGConnectingPoint num="19" id="1156" /> +<TGConnectingPoint num="20" id="1157" /> +<TGConnectingPoint num="21" id="1158" /> +<TGConnectingPoint num="22" id="1159" /> +<TGConnectingPoint num="23" id="1160" /> +<TGConnectingPoint num="24" id="1161" /> +<TGConnectingPoint num="25" id="1162" /> +<TGConnectingPoint num="26" id="1163" /> +<TGConnectingPoint num="27" id="1164" /> +<TGConnectingPoint num="28" id="1165" /> +<TGConnectingPoint num="29" id="1166" /> +<TGConnectingPoint num="30" id="1167" /> +<TGConnectingPoint num="31" id="1168" /> +<TGConnectingPoint num="32" id="1169" /> +<TGConnectingPoint num="33" id="1170" /> +<TGConnectingPoint num="34" id="1171" /> +<TGConnectingPoint num="35" id="1172" /> +<TGConnectingPoint num="36" id="1173" /> +<TGConnectingPoint num="37" id="1174" /> +<TGConnectingPoint num="38" id="1175" /> +<TGConnectingPoint num="39" id="1176" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1218" > +<cdparam x="631" y="381" /> +<sizeparam width="137" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForFirstCoin" /> +<TGConnectingPoint num="0" id="1178" /> +<TGConnectingPoint num="1" id="1179" /> +<TGConnectingPoint num="2" id="1180" /> +<TGConnectingPoint num="3" id="1181" /> +<TGConnectingPoint num="4" id="1182" /> +<TGConnectingPoint num="5" id="1183" /> +<TGConnectingPoint num="6" id="1184" /> +<TGConnectingPoint num="7" id="1185" /> +<TGConnectingPoint num="8" id="1186" /> +<TGConnectingPoint num="9" id="1187" /> +<TGConnectingPoint num="10" id="1188" /> +<TGConnectingPoint num="11" id="1189" /> +<TGConnectingPoint num="12" id="1190" /> +<TGConnectingPoint num="13" id="1191" /> +<TGConnectingPoint num="14" id="1192" /> +<TGConnectingPoint num="15" id="1193" /> +<TGConnectingPoint num="16" id="1194" /> +<TGConnectingPoint num="17" id="1195" /> +<TGConnectingPoint num="18" id="1196" /> +<TGConnectingPoint num="19" id="1197" /> +<TGConnectingPoint num="20" id="1198" /> +<TGConnectingPoint num="21" id="1199" /> +<TGConnectingPoint num="22" id="1200" /> +<TGConnectingPoint num="23" id="1201" /> +<TGConnectingPoint num="24" id="1202" /> +<TGConnectingPoint num="25" id="1203" /> +<TGConnectingPoint num="26" id="1204" /> +<TGConnectingPoint num="27" id="1205" /> +<TGConnectingPoint num="28" id="1206" /> +<TGConnectingPoint num="29" id="1207" /> +<TGConnectingPoint num="30" id="1208" /> +<TGConnectingPoint num="31" id="1209" /> +<TGConnectingPoint num="32" id="1210" /> +<TGConnectingPoint num="33" id="1211" /> +<TGConnectingPoint num="34" id="1212" /> +<TGConnectingPoint num="35" id="1213" /> +<TGConnectingPoint num="36" id="1214" /> +<TGConnectingPoint num="37" id="1215" /> +<TGConnectingPoint num="38" id="1216" /> +<TGConnectingPoint num="39" id="1217" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1335" > +<cdparam x="18" y="370" /> +<sizeparam width="577" height="354" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="Beverage" /> +<TGConnectingPoint num="0" id="1295" /> +<TGConnectingPoint num="1" id="1296" /> +<TGConnectingPoint num="2" id="1297" /> +<TGConnectingPoint num="3" id="1298" /> +<TGConnectingPoint num="4" id="1299" /> +<TGConnectingPoint num="5" id="1300" /> +<TGConnectingPoint num="6" id="1301" /> +<TGConnectingPoint num="7" id="1302" /> +<TGConnectingPoint num="8" id="1303" /> +<TGConnectingPoint num="9" id="1304" /> +<TGConnectingPoint num="10" id="1305" /> +<TGConnectingPoint num="11" id="1306" /> +<TGConnectingPoint num="12" id="1307" /> +<TGConnectingPoint num="13" id="1308" /> +<TGConnectingPoint num="14" id="1309" /> +<TGConnectingPoint num="15" id="1310" /> +<TGConnectingPoint num="16" id="1311" /> +<TGConnectingPoint num="17" id="1312" /> +<TGConnectingPoint num="18" id="1313" /> +<TGConnectingPoint num="19" id="1314" /> +<TGConnectingPoint num="20" id="1315" /> +<TGConnectingPoint num="21" id="1316" /> +<TGConnectingPoint num="22" id="1317" /> +<TGConnectingPoint num="23" id="1318" /> +<TGConnectingPoint num="24" id="1319" /> +<TGConnectingPoint num="25" id="1320" /> +<TGConnectingPoint num="26" id="1321" /> +<TGConnectingPoint num="27" id="1322" /> +<TGConnectingPoint num="28" id="1323" /> +<TGConnectingPoint num="29" id="1324" /> +<TGConnectingPoint num="30" id="1325" /> +<TGConnectingPoint num="31" id="1326" /> +<TGConnectingPoint num="32" id="1327" /> +<TGConnectingPoint num="33" id="1328" /> +<TGConnectingPoint num="34" id="1329" /> +<TGConnectingPoint num="35" id="1330" /> +<TGConnectingPoint num="36" id="1331" /> +<TGConnectingPoint num="37" id="1332" /> +<TGConnectingPoint num="38" id="1333" /> +<TGConnectingPoint num="39" id="1334" /> +<extraparam> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5103" id="1229" > +<father id="1335" num="0" /> +<cdparam x="372" y="500" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="447" minY="0" maxY="334" /> +<infoparam name="Send signal" value="ejectCoin(nbOfCoins)" /> +<TGConnectingPoint num="0" id="1219" /> +<TGConnectingPoint num="1" id="1220" /> +<TGConnectingPoint num="2" id="1221" /> +<TGConnectingPoint num="3" id="1222" /> +<TGConnectingPoint num="4" id="1223" /> +<TGConnectingPoint num="5" id="1224" /> +<TGConnectingPoint num="6" id="1225" /> +<TGConnectingPoint num="7" id="1226" /> +<TGConnectingPoint num="8" id="1227" /> +<TGConnectingPoint num="9" id="1228" /> +<accessibility /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5104" id="1240" > +<father id="1335" num="1" /> +<cdparam x="58" y="527" /> +<sizeparam width="127" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="450" minY="0" maxY="334" /> +<infoparam name="Send signal" value="pushCoffeeButton()" /> +<TGConnectingPoint num="0" id="1230" /> +<TGConnectingPoint num="1" id="1231" /> +<TGConnectingPoint num="2" id="1232" /> +<TGConnectingPoint num="3" id="1233" /> +<TGConnectingPoint num="4" id="1234" /> +<TGConnectingPoint num="5" id="1235" /> +<TGConnectingPoint num="6" id="1236" /> +<TGConnectingPoint num="7" id="1237" /> +<TGConnectingPoint num="8" id="1238" /> +<TGConnectingPoint num="9" id="1239" /> +<accessibility /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5100" id="1242" > +<father id="1335" num="2" /> +<cdparam x="249" y="399" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="562" minY="0" maxY="339" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1241" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5106" id="1283" > +<father id="1335" num="3" /> +<cdparam x="189" y="435" /> +<sizeparam width="132" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="445" minY="0" maxY="314" /> +<infoparam name="state0" value="WaitingForSelection" /> +<TGConnectingPoint num="0" id="1243" /> +<TGConnectingPoint num="1" id="1244" /> +<TGConnectingPoint num="2" id="1245" /> +<TGConnectingPoint num="3" id="1246" /> +<TGConnectingPoint num="4" id="1247" /> +<TGConnectingPoint num="5" id="1248" /> +<TGConnectingPoint num="6" id="1249" /> +<TGConnectingPoint num="7" id="1250" /> +<TGConnectingPoint num="8" id="1251" /> +<TGConnectingPoint num="9" id="1252" /> +<TGConnectingPoint num="10" id="1253" /> +<TGConnectingPoint num="11" id="1254" /> +<TGConnectingPoint num="12" id="1255" /> +<TGConnectingPoint num="13" id="1256" /> +<TGConnectingPoint num="14" id="1257" /> +<TGConnectingPoint num="15" id="1258" /> +<TGConnectingPoint num="16" id="1259" /> +<TGConnectingPoint num="17" id="1260" /> +<TGConnectingPoint num="18" id="1261" /> +<TGConnectingPoint num="19" id="1262" /> +<TGConnectingPoint num="20" id="1263" /> +<TGConnectingPoint num="21" id="1264" /> +<TGConnectingPoint num="22" id="1265" /> +<TGConnectingPoint num="23" id="1266" /> +<TGConnectingPoint num="24" id="1267" /> +<TGConnectingPoint num="25" id="1268" /> +<TGConnectingPoint num="26" id="1269" /> +<TGConnectingPoint num="27" id="1270" /> +<TGConnectingPoint num="28" id="1271" /> +<TGConnectingPoint num="29" id="1272" /> +<TGConnectingPoint num="30" id="1273" /> +<TGConnectingPoint num="31" id="1274" /> +<TGConnectingPoint num="32" id="1275" /> +<TGConnectingPoint num="33" id="1276" /> +<TGConnectingPoint num="34" id="1277" /> +<TGConnectingPoint num="35" id="1278" /> +<TGConnectingPoint num="36" id="1279" /> +<TGConnectingPoint num="37" id="1280" /> +<TGConnectingPoint num="38" id="1281" /> +<TGConnectingPoint num="39" id="1282" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5104" id="1294" > +<father id="1335" num="4" /> +<cdparam x="237" y="527" /> +<sizeparam width="112" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="465" minY="0" maxY="334" /> +<infoparam name="Send signal" value="pushTeaButton()" /> +<TGConnectingPoint num="0" id="1284" /> +<TGConnectingPoint num="1" id="1285" /> +<TGConnectingPoint num="2" id="1286" /> +<TGConnectingPoint num="3" id="1287" /> +<TGConnectingPoint num="4" id="1288" /> +<TGConnectingPoint num="5" id="1289" /> +<TGConnectingPoint num="6" id="1290" /> +<TGConnectingPoint num="7" id="1291" /> +<TGConnectingPoint num="8" id="1292" /> +<TGConnectingPoint num="9" id="1293" /> +<accessibility /> +</SUBCOMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="CoffeeButton" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="1342" > +<cdparam x="177" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Send signal" value="null" /> +<TGConnectingPoint num="0" id="1341" /> +<P1 x="340" y="233" id="1448" /> +<P2 x="353" y="252" id="1450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1340" > +<father id="1342" num="0" /> +<cdparam x="177" y="239" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1336" /> +<TGConnectingPoint num="1" id="1337" /> +<TGConnectingPoint num="2" id="1338" /> +<TGConnectingPoint num="3" id="1339" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1349" > +<cdparam x="322" y="69" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="1348" /> +<P1 x="322" y="69" id="1446" /> +<P2 x="323" y="88" id="1406" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1347" > +<father id="1349" num="0" /> +<cdparam x="322" y="109" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1343" /> +<TGConnectingPoint num="1" id="1344" /> +<TGConnectingPoint num="2" id="1345" /> +<TGConnectingPoint num="3" id="1346" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1356" > +<cdparam x="377" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="1355" /> +<P1 x="323" y="118" id="1411" /> +<P2 x="356" y="174" id="1462" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1354" > +<father id="1356" num="0" /> +<cdparam x="377" y="184" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1350" /> +<TGConnectingPoint num="1" id="1351" /> +<TGConnectingPoint num="2" id="1352" /> +<TGConnectingPoint num="3" id="1353" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1363" > +<cdparam x="377" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="1362" /> +<P1 x="353" y="282" id="1451" /> +<P2 x="399" y="352" id="1365" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1361" > +<father id="1363" num="0" /> +<cdparam x="417" y="335" /> +<sizeparam width="135" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1357" /> +<TGConnectingPoint num="1" id="1358" /> +<TGConnectingPoint num="2" id="1359" /> +<TGConnectingPoint num="3" id="1360" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="mechanicalDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="1404" > +<cdparam x="374" y="352" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1364" /> +<TGConnectingPoint num="1" id="1365" /> +<TGConnectingPoint num="2" id="1366" /> +<TGConnectingPoint num="3" id="1367" /> +<TGConnectingPoint num="4" id="1368" /> +<TGConnectingPoint num="5" id="1369" /> +<TGConnectingPoint num="6" id="1370" /> +<TGConnectingPoint num="7" id="1371" /> +<TGConnectingPoint num="8" id="1372" /> +<TGConnectingPoint num="9" id="1373" /> +<TGConnectingPoint num="10" id="1374" /> +<TGConnectingPoint num="11" id="1375" /> +<TGConnectingPoint num="12" id="1376" /> +<TGConnectingPoint num="13" id="1377" /> +<TGConnectingPoint num="14" id="1378" /> +<TGConnectingPoint num="15" id="1379" /> +<TGConnectingPoint num="16" id="1380" /> +<TGConnectingPoint num="17" id="1381" /> +<TGConnectingPoint num="18" id="1382" /> +<TGConnectingPoint num="19" id="1383" /> +<TGConnectingPoint num="20" id="1384" /> +<TGConnectingPoint num="21" id="1385" /> +<TGConnectingPoint num="22" id="1386" /> +<TGConnectingPoint num="23" id="1387" /> +<TGConnectingPoint num="24" id="1388" /> +<TGConnectingPoint num="25" id="1389" /> +<TGConnectingPoint num="26" id="1390" /> +<TGConnectingPoint num="27" id="1391" /> +<TGConnectingPoint num="28" id="1392" /> +<TGConnectingPoint num="29" id="1393" /> +<TGConnectingPoint num="30" id="1394" /> +<TGConnectingPoint num="31" id="1395" /> +<TGConnectingPoint num="32" id="1396" /> +<TGConnectingPoint num="33" id="1397" /> +<TGConnectingPoint num="34" id="1398" /> +<TGConnectingPoint num="35" id="1399" /> +<TGConnectingPoint num="36" id="1400" /> +<TGConnectingPoint num="37" id="1401" /> +<TGConnectingPoint num="38" id="1402" /> +<TGConnectingPoint num="39" id="1403" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1445" > +<cdparam x="298" y="88" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1405" /> +<TGConnectingPoint num="1" id="1406" /> +<TGConnectingPoint num="2" id="1407" /> +<TGConnectingPoint num="3" id="1408" /> +<TGConnectingPoint num="4" id="1409" /> +<TGConnectingPoint num="5" id="1410" /> +<TGConnectingPoint num="6" id="1411" /> +<TGConnectingPoint num="7" id="1412" /> +<TGConnectingPoint num="8" id="1413" /> +<TGConnectingPoint num="9" id="1414" /> +<TGConnectingPoint num="10" id="1415" /> +<TGConnectingPoint num="11" id="1416" /> +<TGConnectingPoint num="12" id="1417" /> +<TGConnectingPoint num="13" id="1418" /> +<TGConnectingPoint num="14" id="1419" /> +<TGConnectingPoint num="15" id="1420" /> +<TGConnectingPoint num="16" id="1421" /> +<TGConnectingPoint num="17" id="1422" /> +<TGConnectingPoint num="18" id="1423" /> +<TGConnectingPoint num="19" id="1424" /> +<TGConnectingPoint num="20" id="1425" /> +<TGConnectingPoint num="21" id="1426" /> +<TGConnectingPoint num="22" id="1427" /> +<TGConnectingPoint num="23" id="1428" /> +<TGConnectingPoint num="24" id="1429" /> +<TGConnectingPoint num="25" id="1430" /> +<TGConnectingPoint num="26" id="1431" /> +<TGConnectingPoint num="27" id="1432" /> +<TGConnectingPoint num="28" id="1433" /> +<TGConnectingPoint num="29" id="1434" /> +<TGConnectingPoint num="30" id="1435" /> +<TGConnectingPoint num="31" id="1436" /> +<TGConnectingPoint num="32" id="1437" /> +<TGConnectingPoint num="33" id="1438" /> +<TGConnectingPoint num="34" id="1439" /> +<TGConnectingPoint num="35" id="1440" /> +<TGConnectingPoint num="36" id="1441" /> +<TGConnectingPoint num="37" id="1442" /> +<TGConnectingPoint num="38" id="1443" /> +<TGConnectingPoint num="39" id="1444" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="1447" > +<cdparam x="315" y="49" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1446" /> +</COMPONENT> + +<COMPONENT type="5106" id="1501" > +<cdparam x="264" y="174" /> +<sizeparam width="184" height="130" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="state0" /> +<TGConnectingPoint num="0" id="1461" /> +<TGConnectingPoint num="1" id="1462" /> +<TGConnectingPoint num="2" id="1463" /> +<TGConnectingPoint num="3" id="1464" /> +<TGConnectingPoint num="4" id="1465" /> +<TGConnectingPoint num="5" id="1466" /> +<TGConnectingPoint num="6" id="1467" /> +<TGConnectingPoint num="7" id="1468" /> +<TGConnectingPoint num="8" id="1469" /> +<TGConnectingPoint num="9" id="1470" /> +<TGConnectingPoint num="10" id="1471" /> +<TGConnectingPoint num="11" id="1472" /> +<TGConnectingPoint num="12" id="1473" /> +<TGConnectingPoint num="13" id="1474" /> +<TGConnectingPoint num="14" id="1475" /> +<TGConnectingPoint num="15" id="1476" /> +<TGConnectingPoint num="16" id="1477" /> +<TGConnectingPoint num="17" id="1478" /> +<TGConnectingPoint num="18" id="1479" /> +<TGConnectingPoint num="19" id="1480" /> +<TGConnectingPoint num="20" id="1481" /> +<TGConnectingPoint num="21" id="1482" /> +<TGConnectingPoint num="22" id="1483" /> +<TGConnectingPoint num="23" id="1484" /> +<TGConnectingPoint num="24" id="1485" /> +<TGConnectingPoint num="25" id="1486" /> +<TGConnectingPoint num="26" id="1487" /> +<TGConnectingPoint num="27" id="1488" /> +<TGConnectingPoint num="28" id="1489" /> +<TGConnectingPoint num="29" id="1490" /> +<TGConnectingPoint num="30" id="1491" /> +<TGConnectingPoint num="31" id="1492" /> +<TGConnectingPoint num="32" id="1493" /> +<TGConnectingPoint num="33" id="1494" /> +<TGConnectingPoint num="34" id="1495" /> +<TGConnectingPoint num="35" id="1496" /> +<TGConnectingPoint num="36" id="1497" /> +<TGConnectingPoint num="37" id="1498" /> +<TGConnectingPoint num="38" id="1499" /> +<TGConnectingPoint num="39" id="1500" /> +<extraparam> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5100" id="1449" > +<father id="1501" num="0" /> +<cdparam x="333" y="213" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="169" minY="0" maxY="115" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1448" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5103" id="1460" > +<father id="1501" num="1" /> +<cdparam x="330" y="257" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="138" minY="0" maxY="110" /> +<infoparam name="Send signal" value="push()" /> +<TGConnectingPoint num="0" id="1450" /> +<TGConnectingPoint num="1" id="1451" /> +<TGConnectingPoint num="2" id="1452" /> +<TGConnectingPoint num="3" id="1453" /> +<TGConnectingPoint num="4" id="1454" /> +<TGConnectingPoint num="5" id="1455" /> +<TGConnectingPoint num="6" id="1456" /> +<TGConnectingPoint num="7" id="1457" /> +<TGConnectingPoint num="8" id="1458" /> +<TGConnectingPoint num="9" id="1459" /> +</SUBCOMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="TeaButton" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="1508" > +<cdparam x="363" y="193" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="1507" /> +<P1 x="363" y="204" id="1524" /> +<P2 x="362" y="257" id="1535" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1506" > +<father id="1508" num="0" /> +<cdparam x="380" y="228" /> +<sizeparam width="135" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1502" /> +<TGConnectingPoint num="1" id="1503" /> +<TGConnectingPoint num="2" id="1504" /> +<TGConnectingPoint num="3" id="1505" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="mechanicalDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1515" > +<cdparam x="363" y="150" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="1514" /> +<P1 x="363" y="150" id="1581" /> +<P2 x="363" y="174" id="1523" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1513" > +<father id="1515" num="0" /> +<cdparam x="363" y="190" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1509" /> +<TGConnectingPoint num="1" id="1510" /> +<TGConnectingPoint num="2" id="1511" /> +<TGConnectingPoint num="3" id="1512" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1522" > +<cdparam x="362" y="101" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="1521" /> +<P1 x="362" y="101" id="1616" /> +<P2 x="363" y="120" id="1576" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1520" > +<father id="1522" num="0" /> +<cdparam x="362" y="141" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1516" /> +<TGConnectingPoint num="1" id="1517" /> +<TGConnectingPoint num="2" id="1518" /> +<TGConnectingPoint num="3" id="1519" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="1533" > +<cdparam x="340" y="179" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="push()" /> +<TGConnectingPoint num="0" id="1523" /> +<TGConnectingPoint num="1" id="1524" /> +<TGConnectingPoint num="2" id="1525" /> +<TGConnectingPoint num="3" id="1526" /> +<TGConnectingPoint num="4" id="1527" /> +<TGConnectingPoint num="5" id="1528" /> +<TGConnectingPoint num="6" id="1529" /> +<TGConnectingPoint num="7" id="1530" /> +<TGConnectingPoint num="8" id="1531" /> +<TGConnectingPoint num="9" id="1532" /> +</COMPONENT> + +<COMPONENT type="5106" id="1574" > +<cdparam x="337" y="257" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1534" /> +<TGConnectingPoint num="1" id="1535" /> +<TGConnectingPoint num="2" id="1536" /> +<TGConnectingPoint num="3" id="1537" /> +<TGConnectingPoint num="4" id="1538" /> +<TGConnectingPoint num="5" id="1539" /> +<TGConnectingPoint num="6" id="1540" /> +<TGConnectingPoint num="7" id="1541" /> +<TGConnectingPoint num="8" id="1542" /> +<TGConnectingPoint num="9" id="1543" /> +<TGConnectingPoint num="10" id="1544" /> +<TGConnectingPoint num="11" id="1545" /> +<TGConnectingPoint num="12" id="1546" /> +<TGConnectingPoint num="13" id="1547" /> +<TGConnectingPoint num="14" id="1548" /> +<TGConnectingPoint num="15" id="1549" /> +<TGConnectingPoint num="16" id="1550" /> +<TGConnectingPoint num="17" id="1551" /> +<TGConnectingPoint num="18" id="1552" /> +<TGConnectingPoint num="19" id="1553" /> +<TGConnectingPoint num="20" id="1554" /> +<TGConnectingPoint num="21" id="1555" /> +<TGConnectingPoint num="22" id="1556" /> +<TGConnectingPoint num="23" id="1557" /> +<TGConnectingPoint num="24" id="1558" /> +<TGConnectingPoint num="25" id="1559" /> +<TGConnectingPoint num="26" id="1560" /> +<TGConnectingPoint num="27" id="1561" /> +<TGConnectingPoint num="28" id="1562" /> +<TGConnectingPoint num="29" id="1563" /> +<TGConnectingPoint num="30" id="1564" /> +<TGConnectingPoint num="31" id="1565" /> +<TGConnectingPoint num="32" id="1566" /> +<TGConnectingPoint num="33" id="1567" /> +<TGConnectingPoint num="34" id="1568" /> +<TGConnectingPoint num="35" id="1569" /> +<TGConnectingPoint num="36" id="1570" /> +<TGConnectingPoint num="37" id="1571" /> +<TGConnectingPoint num="38" id="1572" /> +<TGConnectingPoint num="39" id="1573" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1615" > +<cdparam x="338" y="120" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1575" /> +<TGConnectingPoint num="1" id="1576" /> +<TGConnectingPoint num="2" id="1577" /> +<TGConnectingPoint num="3" id="1578" /> +<TGConnectingPoint num="4" id="1579" /> +<TGConnectingPoint num="5" id="1580" /> +<TGConnectingPoint num="6" id="1581" /> +<TGConnectingPoint num="7" id="1582" /> +<TGConnectingPoint num="8" id="1583" /> +<TGConnectingPoint num="9" id="1584" /> +<TGConnectingPoint num="10" id="1585" /> +<TGConnectingPoint num="11" id="1586" /> +<TGConnectingPoint num="12" id="1587" /> +<TGConnectingPoint num="13" id="1588" /> +<TGConnectingPoint num="14" id="1589" /> +<TGConnectingPoint num="15" id="1590" /> +<TGConnectingPoint num="16" id="1591" /> +<TGConnectingPoint num="17" id="1592" /> +<TGConnectingPoint num="18" id="1593" /> +<TGConnectingPoint num="19" id="1594" /> +<TGConnectingPoint num="20" id="1595" /> +<TGConnectingPoint num="21" id="1596" /> +<TGConnectingPoint num="22" id="1597" /> +<TGConnectingPoint num="23" id="1598" /> +<TGConnectingPoint num="24" id="1599" /> +<TGConnectingPoint num="25" id="1600" /> +<TGConnectingPoint num="26" id="1601" /> +<TGConnectingPoint num="27" id="1602" /> +<TGConnectingPoint num="28" id="1603" /> +<TGConnectingPoint num="29" id="1604" /> +<TGConnectingPoint num="30" id="1605" /> +<TGConnectingPoint num="31" id="1606" /> +<TGConnectingPoint num="32" id="1607" /> +<TGConnectingPoint num="33" id="1608" /> +<TGConnectingPoint num="34" id="1609" /> +<TGConnectingPoint num="35" id="1610" /> +<TGConnectingPoint num="36" id="1611" /> +<TGConnectingPoint num="37" id="1612" /> +<TGConnectingPoint num="38" id="1613" /> +<TGConnectingPoint num="39" id="1614" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="1617" > +<cdparam x="355" y="81" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1616" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/DrinkMachineV10.xml b/preinstallTTool/linux/TTool/modeling/DrinkMachineV10.xml new file mode 100644 index 0000000000000000000000000000000000000000..d515aafcda1e97c1d25f5272c5e30694edbe4417 --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/DrinkMachineV10.xml @@ -0,0 +1,4368 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.91-beta6"> + +<Modeling type="Analysis" nameTab="Analysis" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="502" id="2" > +<cdparam x="341" y="46" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1" /> +</COMPONENT> + +<COMPONENT type="506" id="13" > +<cdparam x="308" y="77" /> +<sizeparam width="80" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="initInstances" /> +<TGConnectingPoint num="0" id="3" /> +<TGConnectingPoint num="1" id="4" /> +<TGConnectingPoint num="2" id="5" /> +<TGConnectingPoint num="3" id="6" /> +<TGConnectingPoint num="4" id="7" /> +<TGConnectingPoint num="5" id="8" /> +<TGConnectingPoint num="6" id="9" /> +<TGConnectingPoint num="7" id="10" /> +<TGConnectingPoint num="8" id="11" /> +<TGConnectingPoint num="9" id="12" /> +</COMPONENT> + +<COMPONENT type="504" id="18" > +<cdparam x="241" y="192" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +</COMPONENT> + +<COMPONENT type="508" id="29" > +<cdparam x="202" y="233" /> +<sizeparam width="108" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="CoinManagement" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +<TGConnectingPoint num="4" id="23" /> +<TGConnectingPoint num="5" id="24" /> +<TGConnectingPoint num="6" id="25" /> +<TGConnectingPoint num="7" id="26" /> +<TGConnectingPoint num="8" id="27" /> +<TGConnectingPoint num="9" id="28" /> +</COMPONENT> + +<COMPONENT type="508" id="40" > +<cdparam x="189" y="290" /> +<sizeparam width="134" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="BeverageManagement" /> +<TGConnectingPoint num="0" id="30" /> +<TGConnectingPoint num="1" id="31" /> +<TGConnectingPoint num="2" id="32" /> +<TGConnectingPoint num="3" id="33" /> +<TGConnectingPoint num="4" id="34" /> +<TGConnectingPoint num="5" id="35" /> +<TGConnectingPoint num="6" id="36" /> +<TGConnectingPoint num="7" id="37" /> +<TGConnectingPoint num="8" id="38" /> +<TGConnectingPoint num="9" id="39" /> +</COMPONENT> + +<COMPONENT type="506" id="51" > +<cdparam x="410" y="224" /> +<sizeparam width="80" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="Maintenance" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +<TGConnectingPoint num="4" id="45" /> +<TGConnectingPoint num="5" id="46" /> +<TGConnectingPoint num="6" id="47" /> +<TGConnectingPoint num="7" id="48" /> +<TGConnectingPoint num="8" id="49" /> +<TGConnectingPoint num="9" id="50" /> +</COMPONENT> + +<COMPONENT type="503" id="53" > +<cdparam x="440" y="285" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="52" /> +</COMPONENT> + +<COMPONENT type="507" id="68" > +<cdparam x="273" y="151" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +<TGConnectingPoint num="2" id="56" /> +<TGConnectingPoint num="3" id="57" /> +<TGConnectingPoint num="4" id="58" /> +<TGConnectingPoint num="5" id="59" /> +<TGConnectingPoint num="6" id="60" /> +<TGConnectingPoint num="7" id="61" /> +<TGConnectingPoint num="8" id="62" /> +<TGConnectingPoint num="9" id="63" /> +<TGConnectingPoint num="10" id="64" /> +<TGConnectingPoint num="11" id="65" /> +<TGConnectingPoint num="12" id="66" /> +<TGConnectingPoint num="13" id="67" /> +</COMPONENT> + +<CONNECTOR type="105" id="69" > +<cdparam x="348" y="66" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Reference to a SD" value="null" /> +<P1 x="348" y="66" id="1" /> +<P2 x="348" y="72" id="3" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="70" > +<cdparam x="348" y="117" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to junction" value="null" /> +<P1 x="348" y="117" id="4" /> +<P2 x="348" y="151" id="54" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="71" > +<cdparam x="256" y="222" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to Reference to a SD" value="null" /> +<P1 x="256" y="222" id="17" /> +<P2 x="256" y="228" id="19" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="72" > +<cdparam x="261" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to Reference to an IOD" value="null" /> +<P1 x="256" y="273" id="20" /> +<P2 x="256" y="285" id="30" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="77" > +<cdparam x="256" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="256" y="330" id="31" /> +<P2 x="241" y="207" id="15" /> +<Point x="256" y="350" /> +<Point x="150" y="350" /> +<Point x="150" y="187" /> +<Point x="241" y="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="73" > +<father id="77" num="0" /> +<cdparam x="256" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="74" > +<father id="77" num="1" /> +<cdparam x="150" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="75" > +<father id="77" num="2" /> +<cdparam x="150" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="76" > +<father id="77" num="3" /> +<cdparam x="241" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="78" > +<cdparam x="397" y="155" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from sequence to Reference to a SD" value="null" /> +<P1 x="397" y="156" id="59" /> +<P2 x="450" y="219" id="41" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="79" > +<cdparam x="450" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="450" y="264" id="42" /> +<P2 x="450" y="280" id="52" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="80" > +<cdparam x="298" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="298" y="156" id="55" /> +<P2 x="256" y="192" id="14" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<InteractionOverviewDiagramPanel name="BeverageManagement" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="501" id="96" > +<cdparam x="335" y="100" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="84" /> +<TGConnectingPoint num="1" id="85" /> +<TGConnectingPoint num="2" id="86" /> +<TGConnectingPoint num="3" id="87" /> +<TGConnectingPoint num="4" id="88" /> +<TGConnectingPoint num="5" id="89" /> +<TGConnectingPoint num="6" id="90" /> +<TGConnectingPoint num="7" id="91" /> +<TGConnectingPoint num="8" id="92" /> +<TGConnectingPoint num="9" id="93" /> +<TGConnectingPoint num="10" id="94" /> +<TGConnectingPoint num="11" id="95" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="81" > +<father id="96" num="0" /> +<cdparam x="260" y="130" /> +<sizeparam width="122" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[Machine/nbCoin == 2]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="82" > +<father id="96" num="1" /> +<cdparam x="370" y="110" /> +<sizeparam width="147" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[Machine/not(nbCoin == 2)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="83" > +<father id="96" num="2" /> +<cdparam x="355" y="145" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="502" id="98" > +<cdparam x="343" y="58" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="97" /> +</COMPONENT> + +<COMPONENT type="503" id="100" > +<cdparam x="461" y="166" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="99" /> +</COMPONENT> + +<COMPONENT type="506" id="111" > +<cdparam x="210" y="195" /> +<sizeparam width="94" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="setButtonTimer" /> +<TGConnectingPoint num="0" id="101" /> +<TGConnectingPoint num="1" id="102" /> +<TGConnectingPoint num="2" id="103" /> +<TGConnectingPoint num="3" id="104" /> +<TGConnectingPoint num="4" id="105" /> +<TGConnectingPoint num="5" id="106" /> +<TGConnectingPoint num="6" id="107" /> +<TGConnectingPoint num="7" id="108" /> +<TGConnectingPoint num="8" id="109" /> +<TGConnectingPoint num="9" id="110" /> +</COMPONENT> + +<COMPONENT type="501" id="127" > +<cdparam x="242" y="267" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="115" /> +<TGConnectingPoint num="1" id="116" /> +<TGConnectingPoint num="2" id="117" /> +<TGConnectingPoint num="3" id="118" /> +<TGConnectingPoint num="4" id="119" /> +<TGConnectingPoint num="5" id="120" /> +<TGConnectingPoint num="6" id="121" /> +<TGConnectingPoint num="7" id="122" /> +<TGConnectingPoint num="8" id="123" /> +<TGConnectingPoint num="9" id="124" /> +<TGConnectingPoint num="10" id="125" /> +<TGConnectingPoint num="11" id="126" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="127" num="0" /> +<cdparam x="217" y="277" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="113" > +<father id="127" num="1" /> +<cdparam x="277" y="277" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="114" > +<father id="127" num="2" /> +<cdparam x="262" y="312" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="506" id="138" > +<cdparam x="195" y="380" /> +<sizeparam width="125" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="coffeeButtonPressed" /> +<TGConnectingPoint num="0" id="128" /> +<TGConnectingPoint num="1" id="129" /> +<TGConnectingPoint num="2" id="130" /> +<TGConnectingPoint num="3" id="131" /> +<TGConnectingPoint num="4" id="132" /> +<TGConnectingPoint num="5" id="133" /> +<TGConnectingPoint num="6" id="134" /> +<TGConnectingPoint num="7" id="135" /> +<TGConnectingPoint num="8" id="136" /> +<TGConnectingPoint num="9" id="137" /> +</COMPONENT> + +<COMPONENT type="506" id="149" > +<cdparam x="63" y="379" /> +<sizeparam width="109" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="teaButtonPressed" /> +<TGConnectingPoint num="0" id="139" /> +<TGConnectingPoint num="1" id="140" /> +<TGConnectingPoint num="2" id="141" /> +<TGConnectingPoint num="3" id="142" /> +<TGConnectingPoint num="4" id="143" /> +<TGConnectingPoint num="5" id="144" /> +<TGConnectingPoint num="6" id="145" /> +<TGConnectingPoint num="7" id="146" /> +<TGConnectingPoint num="8" id="147" /> +<TGConnectingPoint num="9" id="148" /> +</COMPONENT> + +<COMPONENT type="506" id="160" > +<cdparam x="385" y="379" /> +<sizeparam width="79" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerExpires" /> +<TGConnectingPoint num="0" id="150" /> +<TGConnectingPoint num="1" id="151" /> +<TGConnectingPoint num="2" id="152" /> +<TGConnectingPoint num="3" id="153" /> +<TGConnectingPoint num="4" id="154" /> +<TGConnectingPoint num="5" id="155" /> +<TGConnectingPoint num="6" id="156" /> +<TGConnectingPoint num="7" id="157" /> +<TGConnectingPoint num="8" id="158" /> +<TGConnectingPoint num="9" id="159" /> +</COMPONENT> + +<COMPONENT type="506" id="171" > +<cdparam x="387" y="440" /> +<sizeparam width="74" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="coinEjected" /> +<TGConnectingPoint num="0" id="161" /> +<TGConnectingPoint num="1" id="162" /> +<TGConnectingPoint num="2" id="163" /> +<TGConnectingPoint num="3" id="164" /> +<TGConnectingPoint num="4" id="165" /> +<TGConnectingPoint num="5" id="166" /> +<TGConnectingPoint num="6" id="167" /> +<TGConnectingPoint num="7" id="168" /> +<TGConnectingPoint num="8" id="169" /> +<TGConnectingPoint num="9" id="170" /> +</COMPONENT> + +<COMPONENT type="503" id="173" > +<cdparam x="414" y="500" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="172" /> +</COMPONENT> + +<COMPONENT type="503" id="175" > +<cdparam x="173" y="558" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="174" /> +</COMPONENT> + +<COMPONENT type="506" id="186" > +<cdparam x="148" y="501" /> +<sizeparam width="71" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerReset" /> +<TGConnectingPoint num="0" id="176" /> +<TGConnectingPoint num="1" id="177" /> +<TGConnectingPoint num="2" id="178" /> +<TGConnectingPoint num="3" id="179" /> +<TGConnectingPoint num="4" id="180" /> +<TGConnectingPoint num="5" id="181" /> +<TGConnectingPoint num="6" id="182" /> +<TGConnectingPoint num="7" id="183" /> +<TGConnectingPoint num="8" id="184" /> +<TGConnectingPoint num="9" id="185" /> +</COMPONENT> + +<COMPONENT type="504" id="191" > +<cdparam x="168" y="457" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="187" /> +<TGConnectingPoint num="1" id="188" /> +<TGConnectingPoint num="2" id="189" /> +<TGConnectingPoint num="3" id="190" /> +</COMPONENT> + +<CONNECTOR type="105" id="192" > +<cdparam x="349" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="350" y="78" id="97" /> +<P2 x="350" y="90" id="84" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="193" > +<cdparam x="390" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="390" y="115" id="86" /> +<P2 x="471" y="161" id="99" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="195" > +<cdparam x="310" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="310" y="115" id="85" /> +<P2 x="257" y="190" id="101" /> +<Point x="257" y="181" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="194" > +<father id="195" num="0" /> +<cdparam x="257" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="196" > +<cdparam x="257" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to choice" value="null" /> +<P1 x="257" y="235" id="102" /> +<P2 x="257" y="257" id="115" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="198" > +<cdparam x="217" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="217" y="282" id="116" /> +<P2 x="117" y="374" id="139" /> +<Point x="117" y="361" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="197" > +<father id="198" num="0" /> +<cdparam x="117" y="361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="199" > +<cdparam x="257" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="257" y="322" id="118" /> +<P2 x="257" y="375" id="128" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="200" > +<cdparam x="297" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="297" y="282" id="117" /> +<P2 x="424" y="374" id="150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="201" > +<cdparam x="424" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to Reference to a SD" value="null" /> +<P1 x="424" y="419" id="151" /> +<P2 x="424" y="435" id="161" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="202" > +<cdparam x="424" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="424" y="480" id="162" /> +<P2 x="424" y="495" id="172" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="203" > +<cdparam x="117" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="117" y="419" id="140" /> +<P2 x="168" y="472" id="188" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="204" > +<cdparam x="257" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="257" y="420" id="129" /> +<P2 x="198" y="472" id="189" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="205" > +<cdparam x="183" y="487" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to Reference to a SD" value="null" /> +<P1 x="183" y="487" id="190" /> +<P2 x="183" y="496" id="176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="206" > +<cdparam x="183" y="541" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="183" y="541" id="177" /> +<P2 x="183" y="553" id="174" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<InteractionOverviewDiagramPanel name="CoinManagement" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="501" id="222" > +<cdparam x="345" y="315" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="210" /> +<TGConnectingPoint num="1" id="211" /> +<TGConnectingPoint num="2" id="212" /> +<TGConnectingPoint num="3" id="213" /> +<TGConnectingPoint num="4" id="214" /> +<TGConnectingPoint num="5" id="215" /> +<TGConnectingPoint num="6" id="216" /> +<TGConnectingPoint num="7" id="217" /> +<TGConnectingPoint num="8" id="218" /> +<TGConnectingPoint num="9" id="219" /> +<TGConnectingPoint num="10" id="220" /> +<TGConnectingPoint num="11" id="221" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="207" > +<father id="222" num="0" /> +<cdparam x="270" y="331" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[Wallet/coin>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="208" > +<father id="222" num="1" /> +<cdparam x="380" y="325" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="209" > +<father id="222" num="2" /> +<cdparam x="365" y="360" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="506" id="233" > +<cdparam x="325" y="187" /> +<sizeparam width="70" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="insertCoin" /> +<TGConnectingPoint num="0" id="223" /> +<TGConnectingPoint num="1" id="224" /> +<TGConnectingPoint num="2" id="225" /> +<TGConnectingPoint num="3" id="226" /> +<TGConnectingPoint num="4" id="227" /> +<TGConnectingPoint num="5" id="228" /> +<TGConnectingPoint num="6" id="229" /> +<TGConnectingPoint num="7" id="230" /> +<TGConnectingPoint num="8" id="231" /> +<TGConnectingPoint num="9" id="232" /> +</COMPONENT> + +<COMPONENT type="506" id="244" > +<cdparam x="231" y="370" /> +<sizeparam width="70" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="insertCoin" /> +<TGConnectingPoint num="0" id="234" /> +<TGConnectingPoint num="1" id="235" /> +<TGConnectingPoint num="2" id="236" /> +<TGConnectingPoint num="3" id="237" /> +<TGConnectingPoint num="4" id="238" /> +<TGConnectingPoint num="5" id="239" /> +<TGConnectingPoint num="6" id="240" /> +<TGConnectingPoint num="7" id="241" /> +<TGConnectingPoint num="8" id="242" /> +<TGConnectingPoint num="9" id="243" /> +</COMPONENT> + +<COMPONENT type="506" id="255" > +<cdparam x="433" y="417" /> +<sizeparam width="74" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="coinEjected" /> +<TGConnectingPoint num="0" id="245" /> +<TGConnectingPoint num="1" id="246" /> +<TGConnectingPoint num="2" id="247" /> +<TGConnectingPoint num="3" id="248" /> +<TGConnectingPoint num="4" id="249" /> +<TGConnectingPoint num="5" id="250" /> +<TGConnectingPoint num="6" id="251" /> +<TGConnectingPoint num="7" id="252" /> +<TGConnectingPoint num="8" id="253" /> +<TGConnectingPoint num="9" id="254" /> +</COMPONENT> + +<COMPONENT type="502" id="257" > +<cdparam x="353" y="69" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="256" /> +</COMPONENT> + +<COMPONENT type="503" id="259" > +<cdparam x="256" y="475" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="258" /> +</COMPONENT> + +<COMPONENT type="503" id="261" > +<cdparam x="460" y="492" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="260" /> +</COMPONENT> + +<COMPONENT type="501" id="277" > +<cdparam x="345" y="114" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="265" /> +<TGConnectingPoint num="1" id="266" /> +<TGConnectingPoint num="2" id="267" /> +<TGConnectingPoint num="3" id="268" /> +<TGConnectingPoint num="4" id="269" /> +<TGConnectingPoint num="5" id="270" /> +<TGConnectingPoint num="6" id="271" /> +<TGConnectingPoint num="7" id="272" /> +<TGConnectingPoint num="8" id="273" /> +<TGConnectingPoint num="9" id="274" /> +<TGConnectingPoint num="10" id="275" /> +<TGConnectingPoint num="11" id="276" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="262" > +<father id="277" num="0" /> +<cdparam x="320" y="124" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="263" > +<father id="277" num="1" /> +<cdparam x="380" y="124" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="264" > +<father id="277" num="2" /> +<cdparam x="365" y="159" /> +<sizeparam width="80" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[Wallet/coin>0]" /> +</SUBCOMPONENT> + +<COMPONENT type="506" id="288" > +<cdparam x="318" y="249" /> +<sizeparam width="85" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="setCoinTimer" /> +<TGConnectingPoint num="0" id="278" /> +<TGConnectingPoint num="1" id="279" /> +<TGConnectingPoint num="2" id="280" /> +<TGConnectingPoint num="3" id="281" /> +<TGConnectingPoint num="4" id="282" /> +<TGConnectingPoint num="5" id="283" /> +<TGConnectingPoint num="6" id="284" /> +<TGConnectingPoint num="7" id="285" /> +<TGConnectingPoint num="8" id="286" /> +<TGConnectingPoint num="9" id="287" /> +</COMPONENT> + +<COMPONENT type="506" id="299" > +<cdparam x="431" y="357" /> +<sizeparam width="79" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerExpires" /> +<TGConnectingPoint num="0" id="289" /> +<TGConnectingPoint num="1" id="290" /> +<TGConnectingPoint num="2" id="291" /> +<TGConnectingPoint num="3" id="292" /> +<TGConnectingPoint num="4" id="293" /> +<TGConnectingPoint num="5" id="294" /> +<TGConnectingPoint num="6" id="295" /> +<TGConnectingPoint num="7" id="296" /> +<TGConnectingPoint num="8" id="297" /> +<TGConnectingPoint num="9" id="298" /> +</COMPONENT> + +<COMPONENT type="506" id="310" > +<cdparam x="231" y="422" /> +<sizeparam width="71" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerReset" /> +<TGConnectingPoint num="0" id="300" /> +<TGConnectingPoint num="1" id="301" /> +<TGConnectingPoint num="2" id="302" /> +<TGConnectingPoint num="3" id="303" /> +<TGConnectingPoint num="4" id="304" /> +<TGConnectingPoint num="5" id="305" /> +<TGConnectingPoint num="6" id="306" /> +<TGConnectingPoint num="7" id="307" /> +<TGConnectingPoint num="8" id="308" /> +<TGConnectingPoint num="9" id="309" /> +</COMPONENT> + +<CONNECTOR type="105" id="311" > +<cdparam x="360" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to choice" value="null" /> +<P1 x="360" y="227" id="224" /> +<P2 x="360" y="244" id="278" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="312" > +<cdparam x="318" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="320" y="330" id="211" /> +<P2 x="266" y="365" id="234" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="313" > +<cdparam x="398" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="400" y="330" id="212" /> +<P2 x="470" y="352" id="289" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="314" > +<cdparam x="357" y="172" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Reference to a SD" value="null" /> +<P1 x="360" y="89" id="256" /> +<P2 x="360" y="104" id="265" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="315" > +<cdparam x="266" y="410" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="266" y="410" id="235" /> +<P2 x="266" y="417" id="300" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="316" > +<cdparam x="470" y="457" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="470" y="457" id="246" /> +<P2 x="470" y="487" id="260" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="317" > +<cdparam x="360" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="360" y="169" id="268" /> +<P2 x="360" y="182" id="223" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="318" > +<cdparam x="366" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to choice" value="null" /> +<P1 x="360" y="289" id="279" /> +<P2 x="360" y="305" id="210" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="319" > +<cdparam x="470" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to Reference to a SD" value="null" /> +<P1 x="470" y="397" id="290" /> +<P2 x="470" y="412" id="245" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="320" > +<cdparam x="266" y="461" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="266" y="462" id="301" /> +<P2 x="266" y="470" id="258" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<SequenceDiagramPanel name="initInstances" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="372" > +<cdparam x="350" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="348" /> +<TGConnectingPoint num="1" id="349" /> +<TGConnectingPoint num="2" id="350" /> +<TGConnectingPoint num="3" id="351" /> +<TGConnectingPoint num="4" id="352" /> +<TGConnectingPoint num="5" id="353" /> +<TGConnectingPoint num="6" id="354" /> +<TGConnectingPoint num="7" id="355" /> +<TGConnectingPoint num="8" id="356" /> +<TGConnectingPoint num="9" id="357" /> +<TGConnectingPoint num="10" id="358" /> +<TGConnectingPoint num="11" id="359" /> +<TGConnectingPoint num="12" id="360" /> +<TGConnectingPoint num="13" id="361" /> +<TGConnectingPoint num="14" id="362" /> +<TGConnectingPoint num="15" id="363" /> +<TGConnectingPoint num="16" id="364" /> +<TGConnectingPoint num="17" id="365" /> +<TGConnectingPoint num="18" id="366" /> +<TGConnectingPoint num="19" id="367" /> +<TGConnectingPoint num="20" id="368" /> +<TGConnectingPoint num="21" id="369" /> +<TGConnectingPoint num="22" id="370" /> +<TGConnectingPoint num="23" id="371" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="329" > +<father id="372" num="0" /> +<cdparam x="355" y="79" /> +<sizeparam width="95" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="buttonDelay = 6" /> +<TGConnectingPoint num="0" id="321" /> +<TGConnectingPoint num="1" id="322" /> +<TGConnectingPoint num="2" id="323" /> +<TGConnectingPoint num="3" id="324" /> +<TGConnectingPoint num="4" id="325" /> +<TGConnectingPoint num="5" id="326" /> +<TGConnectingPoint num="6" id="327" /> +<TGConnectingPoint num="7" id="328" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="338" > +<father id="372" num="1" /> +<cdparam x="355" y="112" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="coinDelay = 5" /> +<TGConnectingPoint num="0" id="330" /> +<TGConnectingPoint num="1" id="331" /> +<TGConnectingPoint num="2" id="332" /> +<TGConnectingPoint num="3" id="333" /> +<TGConnectingPoint num="4" id="334" /> +<TGConnectingPoint num="5" id="335" /> +<TGConnectingPoint num="6" id="336" /> +<TGConnectingPoint num="7" id="337" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="347" > +<father id="372" num="2" /> +<cdparam x="355" y="153" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="339" /> +<TGConnectingPoint num="1" id="340" /> +<TGConnectingPoint num="2" id="341" /> +<TGConnectingPoint num="3" id="342" /> +<TGConnectingPoint num="4" id="343" /> +<TGConnectingPoint num="5" id="344" /> +<TGConnectingPoint num="6" id="345" /> +<TGConnectingPoint num="7" id="346" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="424" > +<cdparam x="186" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="400" /> +<TGConnectingPoint num="1" id="401" /> +<TGConnectingPoint num="2" id="402" /> +<TGConnectingPoint num="3" id="403" /> +<TGConnectingPoint num="4" id="404" /> +<TGConnectingPoint num="5" id="405" /> +<TGConnectingPoint num="6" id="406" /> +<TGConnectingPoint num="7" id="407" /> +<TGConnectingPoint num="8" id="408" /> +<TGConnectingPoint num="9" id="409" /> +<TGConnectingPoint num="10" id="410" /> +<TGConnectingPoint num="11" id="411" /> +<TGConnectingPoint num="12" id="412" /> +<TGConnectingPoint num="13" id="413" /> +<TGConnectingPoint num="14" id="414" /> +<TGConnectingPoint num="15" id="415" /> +<TGConnectingPoint num="16" id="416" /> +<TGConnectingPoint num="17" id="417" /> +<TGConnectingPoint num="18" id="418" /> +<TGConnectingPoint num="19" id="419" /> +<TGConnectingPoint num="20" id="420" /> +<TGConnectingPoint num="21" id="421" /> +<TGConnectingPoint num="22" id="422" /> +<TGConnectingPoint num="23" id="423" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="381" > +<father id="424" num="0" /> +<cdparam x="191" y="66" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="coin=2" /> +<TGConnectingPoint num="0" id="373" /> +<TGConnectingPoint num="1" id="374" /> +<TGConnectingPoint num="2" id="375" /> +<TGConnectingPoint num="3" id="376" /> +<TGConnectingPoint num="4" id="377" /> +<TGConnectingPoint num="5" id="378" /> +<TGConnectingPoint num="6" id="379" /> +<TGConnectingPoint num="7" id="380" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="390" > +<father id="424" num="1" /> +<cdparam x="191" y="99" /> +<sizeparam width="86" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="userDelay = 4" /> +<TGConnectingPoint num="0" id="382" /> +<TGConnectingPoint num="1" id="383" /> +<TGConnectingPoint num="2" id="384" /> +<TGConnectingPoint num="3" id="385" /> +<TGConnectingPoint num="4" id="386" /> +<TGConnectingPoint num="5" id="387" /> +<TGConnectingPoint num="6" id="388" /> +<TGConnectingPoint num="7" id="389" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="399" > +<father id="424" num="2" /> +<cdparam x="191" y="132" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="userLatency = 1" /> +<TGConnectingPoint num="0" id="391" /> +<TGConnectingPoint num="1" id="392" /> +<TGConnectingPoint num="2" id="393" /> +<TGConnectingPoint num="3" id="394" /> +<TGConnectingPoint num="4" id="395" /> +<TGConnectingPoint num="5" id="396" /> +<TGConnectingPoint num="6" id="397" /> +<TGConnectingPoint num="7" id="398" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="458" > +<cdparam x="633" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="434" /> +<TGConnectingPoint num="1" id="435" /> +<TGConnectingPoint num="2" id="436" /> +<TGConnectingPoint num="3" id="437" /> +<TGConnectingPoint num="4" id="438" /> +<TGConnectingPoint num="5" id="439" /> +<TGConnectingPoint num="6" id="440" /> +<TGConnectingPoint num="7" id="441" /> +<TGConnectingPoint num="8" id="442" /> +<TGConnectingPoint num="9" id="443" /> +<TGConnectingPoint num="10" id="444" /> +<TGConnectingPoint num="11" id="445" /> +<TGConnectingPoint num="12" id="446" /> +<TGConnectingPoint num="13" id="447" /> +<TGConnectingPoint num="14" id="448" /> +<TGConnectingPoint num="15" id="449" /> +<TGConnectingPoint num="16" id="450" /> +<TGConnectingPoint num="17" id="451" /> +<TGConnectingPoint num="18" id="452" /> +<TGConnectingPoint num="19" id="453" /> +<TGConnectingPoint num="20" id="454" /> +<TGConnectingPoint num="21" id="455" /> +<TGConnectingPoint num="22" id="456" /> +<TGConnectingPoint num="23" id="457" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="433" > +<father id="458" num="0" /> +<cdparam x="638" y="74" /> +<sizeparam width="125" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="mechanicalDelay = 3" /> +<TGConnectingPoint num="0" id="425" /> +<TGConnectingPoint num="1" id="426" /> +<TGConnectingPoint num="2" id="427" /> +<TGConnectingPoint num="3" id="428" /> +<TGConnectingPoint num="4" id="429" /> +<TGConnectingPoint num="5" id="430" /> +<TGConnectingPoint num="6" id="431" /> +<TGConnectingPoint num="7" id="432" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="492" > +<cdparam x="493" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="TeaButton" /> +<TGConnectingPoint num="0" id="468" /> +<TGConnectingPoint num="1" id="469" /> +<TGConnectingPoint num="2" id="470" /> +<TGConnectingPoint num="3" id="471" /> +<TGConnectingPoint num="4" id="472" /> +<TGConnectingPoint num="5" id="473" /> +<TGConnectingPoint num="6" id="474" /> +<TGConnectingPoint num="7" id="475" /> +<TGConnectingPoint num="8" id="476" /> +<TGConnectingPoint num="9" id="477" /> +<TGConnectingPoint num="10" id="478" /> +<TGConnectingPoint num="11" id="479" /> +<TGConnectingPoint num="12" id="480" /> +<TGConnectingPoint num="13" id="481" /> +<TGConnectingPoint num="14" id="482" /> +<TGConnectingPoint num="15" id="483" /> +<TGConnectingPoint num="16" id="484" /> +<TGConnectingPoint num="17" id="485" /> +<TGConnectingPoint num="18" id="486" /> +<TGConnectingPoint num="19" id="487" /> +<TGConnectingPoint num="20" id="488" /> +<TGConnectingPoint num="21" id="489" /> +<TGConnectingPoint num="22" id="490" /> +<TGConnectingPoint num="23" id="491" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="467" > +<father id="492" num="0" /> +<cdparam x="498" y="74" /> +<sizeparam width="125" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="mechanicalDelay = 2" /> +<TGConnectingPoint num="0" id="459" /> +<TGConnectingPoint num="1" id="460" /> +<TGConnectingPoint num="2" id="461" /> +<TGConnectingPoint num="3" id="462" /> +<TGConnectingPoint num="4" id="463" /> +<TGConnectingPoint num="5" id="464" /> +<TGConnectingPoint num="6" id="465" /> +<TGConnectingPoint num="7" id="466" /> +</SUBCOMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="coffeeButtonPressed" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="526" > +<cdparam x="351" y="79" /> +<sizeparam width="10" height="258" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="502" /> +<TGConnectingPoint num="1" id="503" /> +<TGConnectingPoint num="2" id="504" /> +<TGConnectingPoint num="3" id="505" /> +<TGConnectingPoint num="4" id="506" /> +<TGConnectingPoint num="5" id="507" /> +<TGConnectingPoint num="6" id="508" /> +<TGConnectingPoint num="7" id="509" /> +<TGConnectingPoint num="8" id="510" /> +<TGConnectingPoint num="9" id="511" /> +<TGConnectingPoint num="10" id="512" /> +<TGConnectingPoint num="11" id="513" /> +<TGConnectingPoint num="12" id="514" /> +<TGConnectingPoint num="13" id="515" /> +<TGConnectingPoint num="14" id="516" /> +<TGConnectingPoint num="15" id="517" /> +<TGConnectingPoint num="16" id="518" /> +<TGConnectingPoint num="17" id="519" /> +<TGConnectingPoint num="18" id="520" /> +<TGConnectingPoint num="19" id="521" /> +<TGConnectingPoint num="20" id="522" /> +<TGConnectingPoint num="21" id="523" /> +<TGConnectingPoint num="22" id="524" /> +<TGConnectingPoint num="23" id="525" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="501" > +<father id="526" num="0" /> +<cdparam x="356" y="158" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="218" /> +<infoparam name="time interval" value="[mechanicalDelay, mechanicalDelay]" /> +<TGConnectingPoint num="0" id="493" /> +<TGConnectingPoint num="1" id="494" /> +<TGConnectingPoint num="2" id="495" /> +<TGConnectingPoint num="3" id="496" /> +<TGConnectingPoint num="4" id="497" /> +<TGConnectingPoint num="5" id="498" /> +<TGConnectingPoint num="6" id="499" /> +<TGConnectingPoint num="7" id="500" /> +<extraparam> +<Interval minDelay="mechanicalDelay" maxDelay="mechanicalDelay" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="578" > +<cdparam x="148" y="79" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="554" /> +<TGConnectingPoint num="1" id="555" /> +<TGConnectingPoint num="2" id="556" /> +<TGConnectingPoint num="3" id="557" /> +<TGConnectingPoint num="4" id="558" /> +<TGConnectingPoint num="5" id="559" /> +<TGConnectingPoint num="6" id="560" /> +<TGConnectingPoint num="7" id="561" /> +<TGConnectingPoint num="8" id="562" /> +<TGConnectingPoint num="9" id="563" /> +<TGConnectingPoint num="10" id="564" /> +<TGConnectingPoint num="11" id="565" /> +<TGConnectingPoint num="12" id="566" /> +<TGConnectingPoint num="13" id="567" /> +<TGConnectingPoint num="14" id="568" /> +<TGConnectingPoint num="15" id="569" /> +<TGConnectingPoint num="16" id="570" /> +<TGConnectingPoint num="17" id="571" /> +<TGConnectingPoint num="18" id="572" /> +<TGConnectingPoint num="19" id="573" /> +<TGConnectingPoint num="20" id="574" /> +<TGConnectingPoint num="21" id="575" /> +<TGConnectingPoint num="22" id="576" /> +<TGConnectingPoint num="23" id="577" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="535" > +<father id="578" num="0" /> +<cdparam x="153" y="146" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="210" /> +<infoparam name="time interval" value="[5, 7]" /> +<TGConnectingPoint num="0" id="527" /> +<TGConnectingPoint num="1" id="528" /> +<TGConnectingPoint num="2" id="529" /> +<TGConnectingPoint num="3" id="530" /> +<TGConnectingPoint num="4" id="531" /> +<TGConnectingPoint num="5" id="532" /> +<TGConnectingPoint num="6" id="533" /> +<TGConnectingPoint num="7" id="534" /> +<extraparam> +<Interval minDelay="5" maxDelay="7" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="544" > +<father id="578" num="1" /> +<cdparam x="153" y="212" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="deliverCoffee" /> +<TGConnectingPoint num="0" id="536" /> +<TGConnectingPoint num="1" id="537" /> +<TGConnectingPoint num="2" id="538" /> +<TGConnectingPoint num="3" id="539" /> +<TGConnectingPoint num="4" id="540" /> +<TGConnectingPoint num="5" id="541" /> +<TGConnectingPoint num="6" id="542" /> +<TGConnectingPoint num="7" id="543" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="553" > +<father id="578" num="2" /> +<cdparam x="153" y="256" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="545" /> +<TGConnectingPoint num="1" id="546" /> +<TGConnectingPoint num="2" id="547" /> +<TGConnectingPoint num="3" id="548" /> +<TGConnectingPoint num="4" id="549" /> +<TGConnectingPoint num="5" id="550" /> +<TGConnectingPoint num="6" id="551" /> +<TGConnectingPoint num="7" id="552" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="579" > +<cdparam x="356" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="push" /> +<P1 x="356" y="119" id="505" /> +<P2 x="153" y="119" id="557" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="coinEjected" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="638" > +<cdparam x="478" y="54" /> +<sizeparam width="10" height="500" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="589" /> +<TGConnectingPoint num="1" id="590" /> +<TGConnectingPoint num="2" id="591" /> +<TGConnectingPoint num="3" id="592" /> +<TGConnectingPoint num="4" id="593" /> +<TGConnectingPoint num="5" id="594" /> +<TGConnectingPoint num="6" id="595" /> +<TGConnectingPoint num="7" id="596" /> +<TGConnectingPoint num="8" id="597" /> +<TGConnectingPoint num="9" id="598" /> +<TGConnectingPoint num="10" id="599" /> +<TGConnectingPoint num="11" id="600" /> +<TGConnectingPoint num="12" id="601" /> +<TGConnectingPoint num="13" id="602" /> +<TGConnectingPoint num="14" id="603" /> +<TGConnectingPoint num="15" id="604" /> +<TGConnectingPoint num="16" id="605" /> +<TGConnectingPoint num="17" id="606" /> +<TGConnectingPoint num="18" id="607" /> +<TGConnectingPoint num="19" id="608" /> +<TGConnectingPoint num="20" id="609" /> +<TGConnectingPoint num="21" id="610" /> +<TGConnectingPoint num="22" id="611" /> +<TGConnectingPoint num="23" id="612" /> +<TGConnectingPoint num="24" id="613" /> +<TGConnectingPoint num="25" id="614" /> +<TGConnectingPoint num="26" id="615" /> +<TGConnectingPoint num="27" id="616" /> +<TGConnectingPoint num="28" id="617" /> +<TGConnectingPoint num="29" id="618" /> +<TGConnectingPoint num="30" id="619" /> +<TGConnectingPoint num="31" id="620" /> +<TGConnectingPoint num="32" id="621" /> +<TGConnectingPoint num="33" id="622" /> +<TGConnectingPoint num="34" id="623" /> +<TGConnectingPoint num="35" id="624" /> +<TGConnectingPoint num="36" id="625" /> +<TGConnectingPoint num="37" id="626" /> +<TGConnectingPoint num="38" id="627" /> +<TGConnectingPoint num="39" id="628" /> +<TGConnectingPoint num="40" id="629" /> +<TGConnectingPoint num="41" id="630" /> +<TGConnectingPoint num="42" id="631" /> +<TGConnectingPoint num="43" id="632" /> +<TGConnectingPoint num="44" id="633" /> +<TGConnectingPoint num="45" id="634" /> +<TGConnectingPoint num="46" id="635" /> +<TGConnectingPoint num="47" id="636" /> +<TGConnectingPoint num="48" id="637" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="588" > +<father id="638" num="0" /> +<cdparam x="483" y="187" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="580" /> +<TGConnectingPoint num="1" id="581" /> +<TGConnectingPoint num="2" id="582" /> +<TGConnectingPoint num="3" id="583" /> +<TGConnectingPoint num="4" id="584" /> +<TGConnectingPoint num="5" id="585" /> +<TGConnectingPoint num="6" id="586" /> +<TGConnectingPoint num="7" id="587" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="706" > +<cdparam x="264" y="54" /> +<sizeparam width="10" height="500" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="657" /> +<TGConnectingPoint num="1" id="658" /> +<TGConnectingPoint num="2" id="659" /> +<TGConnectingPoint num="3" id="660" /> +<TGConnectingPoint num="4" id="661" /> +<TGConnectingPoint num="5" id="662" /> +<TGConnectingPoint num="6" id="663" /> +<TGConnectingPoint num="7" id="664" /> +<TGConnectingPoint num="8" id="665" /> +<TGConnectingPoint num="9" id="666" /> +<TGConnectingPoint num="10" id="667" /> +<TGConnectingPoint num="11" id="668" /> +<TGConnectingPoint num="12" id="669" /> +<TGConnectingPoint num="13" id="670" /> +<TGConnectingPoint num="14" id="671" /> +<TGConnectingPoint num="15" id="672" /> +<TGConnectingPoint num="16" id="673" /> +<TGConnectingPoint num="17" id="674" /> +<TGConnectingPoint num="18" id="675" /> +<TGConnectingPoint num="19" id="676" /> +<TGConnectingPoint num="20" id="677" /> +<TGConnectingPoint num="21" id="678" /> +<TGConnectingPoint num="22" id="679" /> +<TGConnectingPoint num="23" id="680" /> +<TGConnectingPoint num="24" id="681" /> +<TGConnectingPoint num="25" id="682" /> +<TGConnectingPoint num="26" id="683" /> +<TGConnectingPoint num="27" id="684" /> +<TGConnectingPoint num="28" id="685" /> +<TGConnectingPoint num="29" id="686" /> +<TGConnectingPoint num="30" id="687" /> +<TGConnectingPoint num="31" id="688" /> +<TGConnectingPoint num="32" id="689" /> +<TGConnectingPoint num="33" id="690" /> +<TGConnectingPoint num="34" id="691" /> +<TGConnectingPoint num="35" id="692" /> +<TGConnectingPoint num="36" id="693" /> +<TGConnectingPoint num="37" id="694" /> +<TGConnectingPoint num="38" id="695" /> +<TGConnectingPoint num="39" id="696" /> +<TGConnectingPoint num="40" id="697" /> +<TGConnectingPoint num="41" id="698" /> +<TGConnectingPoint num="42" id="699" /> +<TGConnectingPoint num="43" id="700" /> +<TGConnectingPoint num="44" id="701" /> +<TGConnectingPoint num="45" id="702" /> +<TGConnectingPoint num="46" id="703" /> +<TGConnectingPoint num="47" id="704" /> +<TGConnectingPoint num="48" id="705" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="647" > +<father id="706" num="0" /> +<cdparam x="269" y="193" /> +<sizeparam width="122" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="coin = coin + nbCoin" /> +<TGConnectingPoint num="0" id="639" /> +<TGConnectingPoint num="1" id="640" /> +<TGConnectingPoint num="2" id="641" /> +<TGConnectingPoint num="3" id="642" /> +<TGConnectingPoint num="4" id="643" /> +<TGConnectingPoint num="5" id="644" /> +<TGConnectingPoint num="6" id="645" /> +<TGConnectingPoint num="7" id="646" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="656" > +<father id="706" num="1" /> +<cdparam x="269" y="238" /> +<sizeparam width="65" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="print(coin)" /> +<TGConnectingPoint num="0" id="648" /> +<TGConnectingPoint num="1" id="649" /> +<TGConnectingPoint num="2" id="650" /> +<TGConnectingPoint num="3" id="651" /> +<TGConnectingPoint num="4" id="652" /> +<TGConnectingPoint num="5" id="653" /> +<TGConnectingPoint num="6" id="654" /> +<TGConnectingPoint num="7" id="655" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="707" > +<cdparam x="483" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="ejectCoin(nbCoin)" /> +<P1 x="483" y="154" id="598" /> +<P2 x="269" y="154" id="666" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="insertCoin" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="759" > +<cdparam x="195" y="37" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="735" /> +<TGConnectingPoint num="1" id="736" /> +<TGConnectingPoint num="2" id="737" /> +<TGConnectingPoint num="3" id="738" /> +<TGConnectingPoint num="4" id="739" /> +<TGConnectingPoint num="5" id="740" /> +<TGConnectingPoint num="6" id="741" /> +<TGConnectingPoint num="7" id="742" /> +<TGConnectingPoint num="8" id="743" /> +<TGConnectingPoint num="9" id="744" /> +<TGConnectingPoint num="10" id="745" /> +<TGConnectingPoint num="11" id="746" /> +<TGConnectingPoint num="12" id="747" /> +<TGConnectingPoint num="13" id="748" /> +<TGConnectingPoint num="14" id="749" /> +<TGConnectingPoint num="15" id="750" /> +<TGConnectingPoint num="16" id="751" /> +<TGConnectingPoint num="17" id="752" /> +<TGConnectingPoint num="18" id="753" /> +<TGConnectingPoint num="19" id="754" /> +<TGConnectingPoint num="20" id="755" /> +<TGConnectingPoint num="21" id="756" /> +<TGConnectingPoint num="22" id="757" /> +<TGConnectingPoint num="23" id="758" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="716" > +<father id="759" num="0" /> +<cdparam x="200" y="123" /> +<sizeparam width="86" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="coin = coin - 1" /> +<TGConnectingPoint num="0" id="708" /> +<TGConnectingPoint num="1" id="709" /> +<TGConnectingPoint num="2" id="710" /> +<TGConnectingPoint num="3" id="711" /> +<TGConnectingPoint num="4" id="712" /> +<TGConnectingPoint num="5" id="713" /> +<TGConnectingPoint num="6" id="714" /> +<TGConnectingPoint num="7" id="715" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="608" id="725" > +<father id="759" num="1" /> +<cdparam x="200" y="191" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="210" /> +<infoparam name="time interval" value="[userDelay, userDelay + userLatency]" /> +<TGConnectingPoint num="0" id="717" /> +<TGConnectingPoint num="1" id="718" /> +<TGConnectingPoint num="2" id="719" /> +<TGConnectingPoint num="3" id="720" /> +<TGConnectingPoint num="4" id="721" /> +<TGConnectingPoint num="5" id="722" /> +<TGConnectingPoint num="6" id="723" /> +<TGConnectingPoint num="7" id="724" /> +<extraparam> +<Interval minDelay="userDelay" maxDelay="userDelay + userLatency" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="734" > +<father id="759" num="2" /> +<cdparam x="200" y="159" /> +<sizeparam width="65" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="print(coin)" /> +<TGConnectingPoint num="0" id="726" /> +<TGConnectingPoint num="1" id="727" /> +<TGConnectingPoint num="2" id="728" /> +<TGConnectingPoint num="3" id="729" /> +<TGConnectingPoint num="4" id="730" /> +<TGConnectingPoint num="5" id="731" /> +<TGConnectingPoint num="6" id="732" /> +<TGConnectingPoint num="7" id="733" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="793" > +<cdparam x="409" y="37" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="769" /> +<TGConnectingPoint num="1" id="770" /> +<TGConnectingPoint num="2" id="771" /> +<TGConnectingPoint num="3" id="772" /> +<TGConnectingPoint num="4" id="773" /> +<TGConnectingPoint num="5" id="774" /> +<TGConnectingPoint num="6" id="775" /> +<TGConnectingPoint num="7" id="776" /> +<TGConnectingPoint num="8" id="777" /> +<TGConnectingPoint num="9" id="778" /> +<TGConnectingPoint num="10" id="779" /> +<TGConnectingPoint num="11" id="780" /> +<TGConnectingPoint num="12" id="781" /> +<TGConnectingPoint num="13" id="782" /> +<TGConnectingPoint num="14" id="783" /> +<TGConnectingPoint num="15" id="784" /> +<TGConnectingPoint num="16" id="785" /> +<TGConnectingPoint num="17" id="786" /> +<TGConnectingPoint num="18" id="787" /> +<TGConnectingPoint num="19" id="788" /> +<TGConnectingPoint num="20" id="789" /> +<TGConnectingPoint num="21" id="790" /> +<TGConnectingPoint num="22" id="791" /> +<TGConnectingPoint num="23" id="792" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="768" > +<father id="793" num="0" /> +<cdparam x="414" y="122" /> +<sizeparam width="123" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = nbCoin + 1" /> +<TGConnectingPoint num="0" id="760" /> +<TGConnectingPoint num="1" id="761" /> +<TGConnectingPoint num="2" id="762" /> +<TGConnectingPoint num="3" id="763" /> +<TGConnectingPoint num="4" id="764" /> +<TGConnectingPoint num="5" id="765" /> +<TGConnectingPoint num="6" id="766" /> +<TGConnectingPoint num="7" id="767" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="794" > +<cdparam x="200" y="87" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="putCoin" /> +<P1 x="200" y="87" id="739" /> +<P2 x="414" y="87" id="773" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="setButtonTimer" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="828" > +<cdparam x="463" y="104" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="804" /> +<TGConnectingPoint num="1" id="805" /> +<TGConnectingPoint num="2" id="806" /> +<TGConnectingPoint num="3" id="807" /> +<TGConnectingPoint num="4" id="808" /> +<TGConnectingPoint num="5" id="809" /> +<TGConnectingPoint num="6" id="810" /> +<TGConnectingPoint num="7" id="811" /> +<TGConnectingPoint num="8" id="812" /> +<TGConnectingPoint num="9" id="813" /> +<TGConnectingPoint num="10" id="814" /> +<TGConnectingPoint num="11" id="815" /> +<TGConnectingPoint num="12" id="816" /> +<TGConnectingPoint num="13" id="817" /> +<TGConnectingPoint num="14" id="818" /> +<TGConnectingPoint num="15" id="819" /> +<TGConnectingPoint num="16" id="820" /> +<TGConnectingPoint num="17" id="821" /> +<TGConnectingPoint num="18" id="822" /> +<TGConnectingPoint num="19" id="823" /> +<TGConnectingPoint num="20" id="824" /> +<TGConnectingPoint num="21" id="825" /> +<TGConnectingPoint num="22" id="826" /> +<TGConnectingPoint num="23" id="827" /> +</COMPONENT> +<SUBCOMPONENT type="603" id="803" > +<father id="828" num="0" /> +<cdparam x="481" y="121" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="setting timer" value="{timer=timer1, duration=buttonDelay}" /> +<TGConnectingPoint num="0" id="795" /> +<TGConnectingPoint num="1" id="796" /> +<TGConnectingPoint num="2" id="797" /> +<TGConnectingPoint num="3" id="798" /> +<TGConnectingPoint num="4" id="799" /> +<TGConnectingPoint num="5" id="800" /> +<TGConnectingPoint num="6" id="801" /> +<TGConnectingPoint num="7" id="802" /> +<extraparam> +<Interval timer="timer1" duration="buttonDelay" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="853" > +<cdparam x="249" y="104" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="829" /> +<TGConnectingPoint num="1" id="830" /> +<TGConnectingPoint num="2" id="831" /> +<TGConnectingPoint num="3" id="832" /> +<TGConnectingPoint num="4" id="833" /> +<TGConnectingPoint num="5" id="834" /> +<TGConnectingPoint num="6" id="835" /> +<TGConnectingPoint num="7" id="836" /> +<TGConnectingPoint num="8" id="837" /> +<TGConnectingPoint num="9" id="838" /> +<TGConnectingPoint num="10" id="839" /> +<TGConnectingPoint num="11" id="840" /> +<TGConnectingPoint num="12" id="841" /> +<TGConnectingPoint num="13" id="842" /> +<TGConnectingPoint num="14" id="843" /> +<TGConnectingPoint num="15" id="844" /> +<TGConnectingPoint num="16" id="845" /> +<TGConnectingPoint num="17" id="846" /> +<TGConnectingPoint num="18" id="847" /> +<TGConnectingPoint num="19" id="848" /> +<TGConnectingPoint num="20" id="849" /> +<TGConnectingPoint num="21" id="850" /> +<TGConnectingPoint num="22" id="851" /> +<TGConnectingPoint num="23" id="852" /> +</COMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="setCoinTimer" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="878" > +<cdparam x="242" y="83" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="854" /> +<TGConnectingPoint num="1" id="855" /> +<TGConnectingPoint num="2" id="856" /> +<TGConnectingPoint num="3" id="857" /> +<TGConnectingPoint num="4" id="858" /> +<TGConnectingPoint num="5" id="859" /> +<TGConnectingPoint num="6" id="860" /> +<TGConnectingPoint num="7" id="861" /> +<TGConnectingPoint num="8" id="862" /> +<TGConnectingPoint num="9" id="863" /> +<TGConnectingPoint num="10" id="864" /> +<TGConnectingPoint num="11" id="865" /> +<TGConnectingPoint num="12" id="866" /> +<TGConnectingPoint num="13" id="867" /> +<TGConnectingPoint num="14" id="868" /> +<TGConnectingPoint num="15" id="869" /> +<TGConnectingPoint num="16" id="870" /> +<TGConnectingPoint num="17" id="871" /> +<TGConnectingPoint num="18" id="872" /> +<TGConnectingPoint num="19" id="873" /> +<TGConnectingPoint num="20" id="874" /> +<TGConnectingPoint num="21" id="875" /> +<TGConnectingPoint num="22" id="876" /> +<TGConnectingPoint num="23" id="877" /> +</COMPONENT> + +<COMPONENT type="606" id="912" > +<cdparam x="456" y="83" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="888" /> +<TGConnectingPoint num="1" id="889" /> +<TGConnectingPoint num="2" id="890" /> +<TGConnectingPoint num="3" id="891" /> +<TGConnectingPoint num="4" id="892" /> +<TGConnectingPoint num="5" id="893" /> +<TGConnectingPoint num="6" id="894" /> +<TGConnectingPoint num="7" id="895" /> +<TGConnectingPoint num="8" id="896" /> +<TGConnectingPoint num="9" id="897" /> +<TGConnectingPoint num="10" id="898" /> +<TGConnectingPoint num="11" id="899" /> +<TGConnectingPoint num="12" id="900" /> +<TGConnectingPoint num="13" id="901" /> +<TGConnectingPoint num="14" id="902" /> +<TGConnectingPoint num="15" id="903" /> +<TGConnectingPoint num="16" id="904" /> +<TGConnectingPoint num="17" id="905" /> +<TGConnectingPoint num="18" id="906" /> +<TGConnectingPoint num="19" id="907" /> +<TGConnectingPoint num="20" id="908" /> +<TGConnectingPoint num="21" id="909" /> +<TGConnectingPoint num="22" id="910" /> +<TGConnectingPoint num="23" id="911" /> +</COMPONENT> +<SUBCOMPONENT type="603" id="887" > +<father id="912" num="0" /> +<cdparam x="474" y="100" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="setting timer" value="{timer=timer1, duration=coinDelay}" /> +<TGConnectingPoint num="0" id="879" /> +<TGConnectingPoint num="1" id="880" /> +<TGConnectingPoint num="2" id="881" /> +<TGConnectingPoint num="3" id="882" /> +<TGConnectingPoint num="4" id="883" /> +<TGConnectingPoint num="5" id="884" /> +<TGConnectingPoint num="6" id="885" /> +<TGConnectingPoint num="7" id="886" /> +<extraparam> +<Interval timer="timer1" duration="coinDelay" /> +</extraparam> +</SUBCOMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="teaButtonPressed" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="964" > +<cdparam x="227" y="85" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="940" /> +<TGConnectingPoint num="1" id="941" /> +<TGConnectingPoint num="2" id="942" /> +<TGConnectingPoint num="3" id="943" /> +<TGConnectingPoint num="4" id="944" /> +<TGConnectingPoint num="5" id="945" /> +<TGConnectingPoint num="6" id="946" /> +<TGConnectingPoint num="7" id="947" /> +<TGConnectingPoint num="8" id="948" /> +<TGConnectingPoint num="9" id="949" /> +<TGConnectingPoint num="10" id="950" /> +<TGConnectingPoint num="11" id="951" /> +<TGConnectingPoint num="12" id="952" /> +<TGConnectingPoint num="13" id="953" /> +<TGConnectingPoint num="14" id="954" /> +<TGConnectingPoint num="15" id="955" /> +<TGConnectingPoint num="16" id="956" /> +<TGConnectingPoint num="17" id="957" /> +<TGConnectingPoint num="18" id="958" /> +<TGConnectingPoint num="19" id="959" /> +<TGConnectingPoint num="20" id="960" /> +<TGConnectingPoint num="21" id="961" /> +<TGConnectingPoint num="22" id="962" /> +<TGConnectingPoint num="23" id="963" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="921" > +<father id="964" num="0" /> +<cdparam x="232" y="166" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="210" /> +<infoparam name="time interval" value="[6, 8]" /> +<TGConnectingPoint num="0" id="913" /> +<TGConnectingPoint num="1" id="914" /> +<TGConnectingPoint num="2" id="915" /> +<TGConnectingPoint num="3" id="916" /> +<TGConnectingPoint num="4" id="917" /> +<TGConnectingPoint num="5" id="918" /> +<TGConnectingPoint num="6" id="919" /> +<TGConnectingPoint num="7" id="920" /> +<extraparam> +<Interval minDelay="6" maxDelay="8" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="930" > +<father id="964" num="1" /> +<cdparam x="232" y="238" /> +<sizeparam width="67" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="deliverTea" /> +<TGConnectingPoint num="0" id="922" /> +<TGConnectingPoint num="1" id="923" /> +<TGConnectingPoint num="2" id="924" /> +<TGConnectingPoint num="3" id="925" /> +<TGConnectingPoint num="4" id="926" /> +<TGConnectingPoint num="5" id="927" /> +<TGConnectingPoint num="6" id="928" /> +<TGConnectingPoint num="7" id="929" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="939" > +<father id="964" num="2" /> +<cdparam x="232" y="280" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="931" /> +<TGConnectingPoint num="1" id="932" /> +<TGConnectingPoint num="2" id="933" /> +<TGConnectingPoint num="3" id="934" /> +<TGConnectingPoint num="4" id="935" /> +<TGConnectingPoint num="5" id="936" /> +<TGConnectingPoint num="6" id="937" /> +<TGConnectingPoint num="7" id="938" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="998" > +<cdparam x="430" y="85" /> +<sizeparam width="10" height="258" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="TeaButton" /> +<TGConnectingPoint num="0" id="974" /> +<TGConnectingPoint num="1" id="975" /> +<TGConnectingPoint num="2" id="976" /> +<TGConnectingPoint num="3" id="977" /> +<TGConnectingPoint num="4" id="978" /> +<TGConnectingPoint num="5" id="979" /> +<TGConnectingPoint num="6" id="980" /> +<TGConnectingPoint num="7" id="981" /> +<TGConnectingPoint num="8" id="982" /> +<TGConnectingPoint num="9" id="983" /> +<TGConnectingPoint num="10" id="984" /> +<TGConnectingPoint num="11" id="985" /> +<TGConnectingPoint num="12" id="986" /> +<TGConnectingPoint num="13" id="987" /> +<TGConnectingPoint num="14" id="988" /> +<TGConnectingPoint num="15" id="989" /> +<TGConnectingPoint num="16" id="990" /> +<TGConnectingPoint num="17" id="991" /> +<TGConnectingPoint num="18" id="992" /> +<TGConnectingPoint num="19" id="993" /> +<TGConnectingPoint num="20" id="994" /> +<TGConnectingPoint num="21" id="995" /> +<TGConnectingPoint num="22" id="996" /> +<TGConnectingPoint num="23" id="997" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="973" > +<father id="998" num="0" /> +<cdparam x="435" y="164" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="218" /> +<infoparam name="time interval" value="[mechanicalDelay, mechanicalDelay]" /> +<TGConnectingPoint num="0" id="965" /> +<TGConnectingPoint num="1" id="966" /> +<TGConnectingPoint num="2" id="967" /> +<TGConnectingPoint num="3" id="968" /> +<TGConnectingPoint num="4" id="969" /> +<TGConnectingPoint num="5" id="970" /> +<TGConnectingPoint num="6" id="971" /> +<TGConnectingPoint num="7" id="972" /> +<extraparam> +<Interval minDelay="mechanicalDelay" maxDelay="mechanicalDelay" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="999" > +<cdparam x="435" y="129" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="push" /> +<P1 x="435" y="125" id="977" /> +<P2 x="232" y="125" id="943" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="timerExpires" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1033" > +<cdparam x="598" y="88" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="1009" /> +<TGConnectingPoint num="1" id="1010" /> +<TGConnectingPoint num="2" id="1011" /> +<TGConnectingPoint num="3" id="1012" /> +<TGConnectingPoint num="4" id="1013" /> +<TGConnectingPoint num="5" id="1014" /> +<TGConnectingPoint num="6" id="1015" /> +<TGConnectingPoint num="7" id="1016" /> +<TGConnectingPoint num="8" id="1017" /> +<TGConnectingPoint num="9" id="1018" /> +<TGConnectingPoint num="10" id="1019" /> +<TGConnectingPoint num="11" id="1020" /> +<TGConnectingPoint num="12" id="1021" /> +<TGConnectingPoint num="13" id="1022" /> +<TGConnectingPoint num="14" id="1023" /> +<TGConnectingPoint num="15" id="1024" /> +<TGConnectingPoint num="16" id="1025" /> +<TGConnectingPoint num="17" id="1026" /> +<TGConnectingPoint num="18" id="1027" /> +<TGConnectingPoint num="19" id="1028" /> +<TGConnectingPoint num="20" id="1029" /> +<TGConnectingPoint num="21" id="1030" /> +<TGConnectingPoint num="22" id="1031" /> +<TGConnectingPoint num="23" id="1032" /> +</COMPONENT> +<SUBCOMPONENT type="605" id="1008" > +<father id="1033" num="0" /> +<cdparam x="616" y="111" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="timer expiration" value="{timer=timer1}" /> +<TGConnectingPoint num="0" id="1000" /> +<TGConnectingPoint num="1" id="1001" /> +<TGConnectingPoint num="2" id="1002" /> +<TGConnectingPoint num="3" id="1003" /> +<TGConnectingPoint num="4" id="1004" /> +<TGConnectingPoint num="5" id="1005" /> +<TGConnectingPoint num="6" id="1006" /> +<TGConnectingPoint num="7" id="1007" /> +<extraparam> +<Interval timer="timer1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1058" > +<cdparam x="384" y="88" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="1034" /> +<TGConnectingPoint num="1" id="1035" /> +<TGConnectingPoint num="2" id="1036" /> +<TGConnectingPoint num="3" id="1037" /> +<TGConnectingPoint num="4" id="1038" /> +<TGConnectingPoint num="5" id="1039" /> +<TGConnectingPoint num="6" id="1040" /> +<TGConnectingPoint num="7" id="1041" /> +<TGConnectingPoint num="8" id="1042" /> +<TGConnectingPoint num="9" id="1043" /> +<TGConnectingPoint num="10" id="1044" /> +<TGConnectingPoint num="11" id="1045" /> +<TGConnectingPoint num="12" id="1046" /> +<TGConnectingPoint num="13" id="1047" /> +<TGConnectingPoint num="14" id="1048" /> +<TGConnectingPoint num="15" id="1049" /> +<TGConnectingPoint num="16" id="1050" /> +<TGConnectingPoint num="17" id="1051" /> +<TGConnectingPoint num="18" id="1052" /> +<TGConnectingPoint num="19" id="1053" /> +<TGConnectingPoint num="20" id="1054" /> +<TGConnectingPoint num="21" id="1055" /> +<TGConnectingPoint num="22" id="1056" /> +<TGConnectingPoint num="23" id="1057" /> +</COMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="timerReset" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1092" > +<cdparam x="622" y="91" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="1068" /> +<TGConnectingPoint num="1" id="1069" /> +<TGConnectingPoint num="2" id="1070" /> +<TGConnectingPoint num="3" id="1071" /> +<TGConnectingPoint num="4" id="1072" /> +<TGConnectingPoint num="5" id="1073" /> +<TGConnectingPoint num="6" id="1074" /> +<TGConnectingPoint num="7" id="1075" /> +<TGConnectingPoint num="8" id="1076" /> +<TGConnectingPoint num="9" id="1077" /> +<TGConnectingPoint num="10" id="1078" /> +<TGConnectingPoint num="11" id="1079" /> +<TGConnectingPoint num="12" id="1080" /> +<TGConnectingPoint num="13" id="1081" /> +<TGConnectingPoint num="14" id="1082" /> +<TGConnectingPoint num="15" id="1083" /> +<TGConnectingPoint num="16" id="1084" /> +<TGConnectingPoint num="17" id="1085" /> +<TGConnectingPoint num="18" id="1086" /> +<TGConnectingPoint num="19" id="1087" /> +<TGConnectingPoint num="20" id="1088" /> +<TGConnectingPoint num="21" id="1089" /> +<TGConnectingPoint num="22" id="1090" /> +<TGConnectingPoint num="23" id="1091" /> +</COMPONENT> +<SUBCOMPONENT type="604" id="1067" > +<father id="1092" num="0" /> +<cdparam x="640" y="128" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="timer cancellation" value="{timer=timer1}" /> +<TGConnectingPoint num="0" id="1059" /> +<TGConnectingPoint num="1" id="1060" /> +<TGConnectingPoint num="2" id="1061" /> +<TGConnectingPoint num="3" id="1062" /> +<TGConnectingPoint num="4" id="1063" /> +<TGConnectingPoint num="5" id="1064" /> +<TGConnectingPoint num="6" id="1065" /> +<TGConnectingPoint num="7" id="1066" /> +<extraparam> +<Interval timer="timer1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1117" > +<cdparam x="408" y="91" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="1093" /> +<TGConnectingPoint num="1" id="1094" /> +<TGConnectingPoint num="2" id="1095" /> +<TGConnectingPoint num="3" id="1096" /> +<TGConnectingPoint num="4" id="1097" /> +<TGConnectingPoint num="5" id="1098" /> +<TGConnectingPoint num="6" id="1099" /> +<TGConnectingPoint num="7" id="1100" /> +<TGConnectingPoint num="8" id="1101" /> +<TGConnectingPoint num="9" id="1102" /> +<TGConnectingPoint num="10" id="1103" /> +<TGConnectingPoint num="11" id="1104" /> +<TGConnectingPoint num="12" id="1105" /> +<TGConnectingPoint num="13" id="1106" /> +<TGConnectingPoint num="14" id="1107" /> +<TGConnectingPoint num="15" id="1108" /> +<TGConnectingPoint num="16" id="1109" /> +<TGConnectingPoint num="17" id="1110" /> +<TGConnectingPoint num="18" id="1111" /> +<TGConnectingPoint num="19" id="1112" /> +<TGConnectingPoint num="20" id="1113" /> +<TGConnectingPoint num="21" id="1114" /> +<TGConnectingPoint num="22" id="1115" /> +<TGConnectingPoint num="23" id="1116" /> +</COMPONENT> + + +</SequenceDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="1150" > +<cdparam x="175" y="197" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Wallet" /> +<TGConnectingPoint num="0" id="1118" /> +<TGConnectingPoint num="1" id="1119" /> +<TGConnectingPoint num="2" id="1120" /> +<TGConnectingPoint num="3" id="1121" /> +<TGConnectingPoint num="4" id="1122" /> +<TGConnectingPoint num="5" id="1123" /> +<TGConnectingPoint num="6" id="1124" /> +<TGConnectingPoint num="7" id="1125" /> +<TGConnectingPoint num="8" id="1126" /> +<TGConnectingPoint num="9" id="1127" /> +<TGConnectingPoint num="10" id="1128" /> +<TGConnectingPoint num="11" id="1129" /> +<TGConnectingPoint num="12" id="1130" /> +<TGConnectingPoint num="13" id="1131" /> +<TGConnectingPoint num="14" id="1132" /> +<TGConnectingPoint num="15" id="1133" /> +<TGConnectingPoint num="16" id="1134" /> +<TGConnectingPoint num="17" id="1135" /> +<TGConnectingPoint num="18" id="1136" /> +<TGConnectingPoint num="19" id="1137" /> +<TGConnectingPoint num="20" id="1138" /> +<TGConnectingPoint num="21" id="1139" /> +<TGConnectingPoint num="22" id="1140" /> +<TGConnectingPoint num="23" id="1141" /> +<TGConnectingPoint num="24" id="1142" /> +<TGConnectingPoint num="25" id="1143" /> +<TGConnectingPoint num="26" id="1144" /> +<TGConnectingPoint num="27" id="1145" /> +<TGConnectingPoint num="28" id="1146" /> +<TGConnectingPoint num="29" id="1147" /> +<TGConnectingPoint num="30" id="1148" /> +<TGConnectingPoint num="31" id="1149" /> +</COMPONENT> + +<COMPONENT type="701" id="1175" > +<cdparam x="396" y="143" /> +<sizeparam width="95" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Serve beverage" /> +<TGConnectingPoint num="0" id="1151" /> +<TGConnectingPoint num="1" id="1152" /> +<TGConnectingPoint num="2" id="1153" /> +<TGConnectingPoint num="3" id="1154" /> +<TGConnectingPoint num="4" id="1155" /> +<TGConnectingPoint num="5" id="1156" /> +<TGConnectingPoint num="6" id="1157" /> +<TGConnectingPoint num="7" id="1158" /> +<TGConnectingPoint num="8" id="1159" /> +<TGConnectingPoint num="9" id="1160" /> +<TGConnectingPoint num="10" id="1161" /> +<TGConnectingPoint num="11" id="1162" /> +<TGConnectingPoint num="12" id="1163" /> +<TGConnectingPoint num="13" id="1164" /> +<TGConnectingPoint num="14" id="1165" /> +<TGConnectingPoint num="15" id="1166" /> +<TGConnectingPoint num="16" id="1167" /> +<TGConnectingPoint num="17" id="1168" /> +<TGConnectingPoint num="18" id="1169" /> +<TGConnectingPoint num="19" id="1170" /> +<TGConnectingPoint num="20" id="1171" /> +<TGConnectingPoint num="21" id="1172" /> +<TGConnectingPoint num="22" id="1173" /> +<TGConnectingPoint num="23" id="1174" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1200" > +<cdparam x="275" y="198" /> +<sizeparam width="87" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Manage coins" /> +<TGConnectingPoint num="0" id="1176" /> +<TGConnectingPoint num="1" id="1177" /> +<TGConnectingPoint num="2" id="1178" /> +<TGConnectingPoint num="3" id="1179" /> +<TGConnectingPoint num="4" id="1180" /> +<TGConnectingPoint num="5" id="1181" /> +<TGConnectingPoint num="6" id="1182" /> +<TGConnectingPoint num="7" id="1183" /> +<TGConnectingPoint num="8" id="1184" /> +<TGConnectingPoint num="9" id="1185" /> +<TGConnectingPoint num="10" id="1186" /> +<TGConnectingPoint num="11" id="1187" /> +<TGConnectingPoint num="12" id="1188" /> +<TGConnectingPoint num="13" id="1189" /> +<TGConnectingPoint num="14" id="1190" /> +<TGConnectingPoint num="15" id="1191" /> +<TGConnectingPoint num="16" id="1192" /> +<TGConnectingPoint num="17" id="1193" /> +<TGConnectingPoint num="18" id="1194" /> +<TGConnectingPoint num="19" id="1195" /> +<TGConnectingPoint num="20" id="1196" /> +<TGConnectingPoint num="21" id="1197" /> +<TGConnectingPoint num="22" id="1198" /> +<TGConnectingPoint num="23" id="1199" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1225" > +<cdparam x="519" y="273" /> +<sizeparam width="74" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Prepare tea" /> +<TGConnectingPoint num="0" id="1201" /> +<TGConnectingPoint num="1" id="1202" /> +<TGConnectingPoint num="2" id="1203" /> +<TGConnectingPoint num="3" id="1204" /> +<TGConnectingPoint num="4" id="1205" /> +<TGConnectingPoint num="5" id="1206" /> +<TGConnectingPoint num="6" id="1207" /> +<TGConnectingPoint num="7" id="1208" /> +<TGConnectingPoint num="8" id="1209" /> +<TGConnectingPoint num="9" id="1210" /> +<TGConnectingPoint num="10" id="1211" /> +<TGConnectingPoint num="11" id="1212" /> +<TGConnectingPoint num="12" id="1213" /> +<TGConnectingPoint num="13" id="1214" /> +<TGConnectingPoint num="14" id="1215" /> +<TGConnectingPoint num="15" id="1216" /> +<TGConnectingPoint num="16" id="1217" /> +<TGConnectingPoint num="17" id="1218" /> +<TGConnectingPoint num="18" id="1219" /> +<TGConnectingPoint num="19" id="1220" /> +<TGConnectingPoint num="20" id="1221" /> +<TGConnectingPoint num="21" id="1222" /> +<TGConnectingPoint num="22" id="1223" /> +<TGConnectingPoint num="23" id="1224" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1250" > +<cdparam x="335" y="287" /> +<sizeparam width="90" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Prepare coffee" /> +<TGConnectingPoint num="0" id="1226" /> +<TGConnectingPoint num="1" id="1227" /> +<TGConnectingPoint num="2" id="1228" /> +<TGConnectingPoint num="3" id="1229" /> +<TGConnectingPoint num="4" id="1230" /> +<TGConnectingPoint num="5" id="1231" /> +<TGConnectingPoint num="6" id="1232" /> +<TGConnectingPoint num="7" id="1233" /> +<TGConnectingPoint num="8" id="1234" /> +<TGConnectingPoint num="9" id="1235" /> +<TGConnectingPoint num="10" id="1236" /> +<TGConnectingPoint num="11" id="1237" /> +<TGConnectingPoint num="12" id="1238" /> +<TGConnectingPoint num="13" id="1239" /> +<TGConnectingPoint num="14" id="1240" /> +<TGConnectingPoint num="15" id="1241" /> +<TGConnectingPoint num="16" id="1242" /> +<TGConnectingPoint num="17" id="1243" /> +<TGConnectingPoint num="18" id="1244" /> +<TGConnectingPoint num="19" id="1245" /> +<TGConnectingPoint num="20" id="1246" /> +<TGConnectingPoint num="21" id="1247" /> +<TGConnectingPoint num="22" id="1248" /> +<TGConnectingPoint num="23" id="1249" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="1259" > +<cdparam x="258" y="119" /> +<sizeparam width="348" height="214" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="1251" /> +<TGConnectingPoint num="1" id="1252" /> +<TGConnectingPoint num="2" id="1253" /> +<TGConnectingPoint num="3" id="1254" /> +<TGConnectingPoint num="4" id="1255" /> +<TGConnectingPoint num="5" id="1256" /> +<TGConnectingPoint num="6" id="1257" /> +<TGConnectingPoint num="7" id="1258" /> +</COMPONENT> + +<COMPONENT type="700" id="1292" > +<cdparam x="420" y="411" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Button" /> +<TGConnectingPoint num="0" id="1260" /> +<TGConnectingPoint num="1" id="1261" /> +<TGConnectingPoint num="2" id="1262" /> +<TGConnectingPoint num="3" id="1263" /> +<TGConnectingPoint num="4" id="1264" /> +<TGConnectingPoint num="5" id="1265" /> +<TGConnectingPoint num="6" id="1266" /> +<TGConnectingPoint num="7" id="1267" /> +<TGConnectingPoint num="8" id="1268" /> +<TGConnectingPoint num="9" id="1269" /> +<TGConnectingPoint num="10" id="1270" /> +<TGConnectingPoint num="11" id="1271" /> +<TGConnectingPoint num="12" id="1272" /> +<TGConnectingPoint num="13" id="1273" /> +<TGConnectingPoint num="14" id="1274" /> +<TGConnectingPoint num="15" id="1275" /> +<TGConnectingPoint num="16" id="1276" /> +<TGConnectingPoint num="17" id="1277" /> +<TGConnectingPoint num="18" id="1278" /> +<TGConnectingPoint num="19" id="1279" /> +<TGConnectingPoint num="20" id="1280" /> +<TGConnectingPoint num="21" id="1281" /> +<TGConnectingPoint num="22" id="1282" /> +<TGConnectingPoint num="23" id="1283" /> +<TGConnectingPoint num="24" id="1284" /> +<TGConnectingPoint num="25" id="1285" /> +<TGConnectingPoint num="26" id="1286" /> +<TGConnectingPoint num="27" id="1287" /> +<TGConnectingPoint num="28" id="1288" /> +<TGConnectingPoint num="29" id="1289" /> +<TGConnectingPoint num="30" id="1290" /> +<TGConnectingPoint num="31" id="1291" /> +</COMPONENT> + +<COMPONENT type="700" id="1325" > +<cdparam x="268" y="344" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="1293" /> +<TGConnectingPoint num="1" id="1294" /> +<TGConnectingPoint num="2" id="1295" /> +<TGConnectingPoint num="3" id="1296" /> +<TGConnectingPoint num="4" id="1297" /> +<TGConnectingPoint num="5" id="1298" /> +<TGConnectingPoint num="6" id="1299" /> +<TGConnectingPoint num="7" id="1300" /> +<TGConnectingPoint num="8" id="1301" /> +<TGConnectingPoint num="9" id="1302" /> +<TGConnectingPoint num="10" id="1303" /> +<TGConnectingPoint num="11" id="1304" /> +<TGConnectingPoint num="12" id="1305" /> +<TGConnectingPoint num="13" id="1306" /> +<TGConnectingPoint num="14" id="1307" /> +<TGConnectingPoint num="15" id="1308" /> +<TGConnectingPoint num="16" id="1309" /> +<TGConnectingPoint num="17" id="1310" /> +<TGConnectingPoint num="18" id="1311" /> +<TGConnectingPoint num="19" id="1312" /> +<TGConnectingPoint num="20" id="1313" /> +<TGConnectingPoint num="21" id="1314" /> +<TGConnectingPoint num="22" id="1315" /> +<TGConnectingPoint num="23" id="1316" /> +<TGConnectingPoint num="24" id="1317" /> +<TGConnectingPoint num="25" id="1318" /> +<TGConnectingPoint num="26" id="1319" /> +<TGConnectingPoint num="27" id="1320" /> +<TGConnectingPoint num="28" id="1321" /> +<TGConnectingPoint num="29" id="1322" /> +<TGConnectingPoint num="30" id="1323" /> +<TGConnectingPoint num="31" id="1324" /> +</COMPONENT> + +<COMPONENT type="700" id="1358" > +<cdparam x="569" y="344" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="TeaButton" /> +<TGConnectingPoint num="0" id="1326" /> +<TGConnectingPoint num="1" id="1327" /> +<TGConnectingPoint num="2" id="1328" /> +<TGConnectingPoint num="3" id="1329" /> +<TGConnectingPoint num="4" id="1330" /> +<TGConnectingPoint num="5" id="1331" /> +<TGConnectingPoint num="6" id="1332" /> +<TGConnectingPoint num="7" id="1333" /> +<TGConnectingPoint num="8" id="1334" /> +<TGConnectingPoint num="9" id="1335" /> +<TGConnectingPoint num="10" id="1336" /> +<TGConnectingPoint num="11" id="1337" /> +<TGConnectingPoint num="12" id="1338" /> +<TGConnectingPoint num="13" id="1339" /> +<TGConnectingPoint num="14" id="1340" /> +<TGConnectingPoint num="15" id="1341" /> +<TGConnectingPoint num="16" id="1342" /> +<TGConnectingPoint num="17" id="1343" /> +<TGConnectingPoint num="18" id="1344" /> +<TGConnectingPoint num="19" id="1345" /> +<TGConnectingPoint num="20" id="1346" /> +<TGConnectingPoint num="21" id="1347" /> +<TGConnectingPoint num="22" id="1348" /> +<TGConnectingPoint num="23" id="1349" /> +<TGConnectingPoint num="24" id="1350" /> +<TGConnectingPoint num="25" id="1351" /> +<TGConnectingPoint num="26" id="1352" /> +<TGConnectingPoint num="27" id="1353" /> +<TGConnectingPoint num="28" id="1354" /> +<TGConnectingPoint num="29" id="1355" /> +<TGConnectingPoint num="30" id="1356" /> +<TGConnectingPoint num="31" id="1357" /> +</COMPONENT> + +<CONNECTOR type="111" id="1359" > +<cdparam x="395" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="396" y="163" id="1152" /> +<P2 x="318" y="198" id="1176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1360" > +<cdparam x="442" y="189" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="443" y="183" id="1158" /> +<P2 x="556" y="273" id="1201" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1361" > +<cdparam x="490" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="443" y="183" id="1154" /> +<P2 x="380" y="287" id="1226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1362" > +<cdparam x="299" y="376" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to actor" value="null" /> +<P1 x="298" y="379" id="1302" /> +<P2 x="420" y="446" id="1262" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1363" > +<cdparam x="569" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to actor" value="null" /> +<P1 x="569" y="379" id="1328" /> +<P2 x="450" y="446" id="1269" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1364" > +<cdparam x="275" y="218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="275" y="218" id="1177" /> +<P2 x="205" y="232" id="1127" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1365" > +<cdparam x="491" y="293" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="335" y="307" id="1227" /> +<P2 x="298" y="344" id="1300" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1366" > +<cdparam x="427" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="556" y="313" id="1204" /> +<P2 x="569" y="361" id="1327" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +<SequenceDiagramPanel name="Maintenance" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1434" > +<cdparam x="354" y="98" /> +<sizeparam width="10" height="500" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="1385" /> +<TGConnectingPoint num="1" id="1386" /> +<TGConnectingPoint num="2" id="1387" /> +<TGConnectingPoint num="3" id="1388" /> +<TGConnectingPoint num="4" id="1389" /> +<TGConnectingPoint num="5" id="1390" /> +<TGConnectingPoint num="6" id="1391" /> +<TGConnectingPoint num="7" id="1392" /> +<TGConnectingPoint num="8" id="1393" /> +<TGConnectingPoint num="9" id="1394" /> +<TGConnectingPoint num="10" id="1395" /> +<TGConnectingPoint num="11" id="1396" /> +<TGConnectingPoint num="12" id="1397" /> +<TGConnectingPoint num="13" id="1398" /> +<TGConnectingPoint num="14" id="1399" /> +<TGConnectingPoint num="15" id="1400" /> +<TGConnectingPoint num="16" id="1401" /> +<TGConnectingPoint num="17" id="1402" /> +<TGConnectingPoint num="18" id="1403" /> +<TGConnectingPoint num="19" id="1404" /> +<TGConnectingPoint num="20" id="1405" /> +<TGConnectingPoint num="21" id="1406" /> +<TGConnectingPoint num="22" id="1407" /> +<TGConnectingPoint num="23" id="1408" /> +<TGConnectingPoint num="24" id="1409" /> +<TGConnectingPoint num="25" id="1410" /> +<TGConnectingPoint num="26" id="1411" /> +<TGConnectingPoint num="27" id="1412" /> +<TGConnectingPoint num="28" id="1413" /> +<TGConnectingPoint num="29" id="1414" /> +<TGConnectingPoint num="30" id="1415" /> +<TGConnectingPoint num="31" id="1416" /> +<TGConnectingPoint num="32" id="1417" /> +<TGConnectingPoint num="33" id="1418" /> +<TGConnectingPoint num="34" id="1419" /> +<TGConnectingPoint num="35" id="1420" /> +<TGConnectingPoint num="36" id="1421" /> +<TGConnectingPoint num="37" id="1422" /> +<TGConnectingPoint num="38" id="1423" /> +<TGConnectingPoint num="39" id="1424" /> +<TGConnectingPoint num="40" id="1425" /> +<TGConnectingPoint num="41" id="1426" /> +<TGConnectingPoint num="42" id="1427" /> +<TGConnectingPoint num="43" id="1428" /> +<TGConnectingPoint num="44" id="1429" /> +<TGConnectingPoint num="45" id="1430" /> +<TGConnectingPoint num="46" id="1431" /> +<TGConnectingPoint num="47" id="1432" /> +<TGConnectingPoint num="48" id="1433" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="1375" > +<father id="1434" num="0" /> +<cdparam x="359" y="127" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="460" /> +<infoparam name="time interval" value="[100, 100]" /> +<TGConnectingPoint num="0" id="1367" /> +<TGConnectingPoint num="1" id="1368" /> +<TGConnectingPoint num="2" id="1369" /> +<TGConnectingPoint num="3" id="1370" /> +<TGConnectingPoint num="4" id="1371" /> +<TGConnectingPoint num="5" id="1372" /> +<TGConnectingPoint num="6" id="1373" /> +<TGConnectingPoint num="7" id="1374" /> +<extraparam> +<Interval minDelay="100" maxDelay="100" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="1384" > +<father id="1434" num="1" /> +<cdparam x="359" y="203" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="panic" /> +<TGConnectingPoint num="0" id="1376" /> +<TGConnectingPoint num="1" id="1377" /> +<TGConnectingPoint num="2" id="1378" /> +<TGConnectingPoint num="3" id="1379" /> +<TGConnectingPoint num="4" id="1380" /> +<TGConnectingPoint num="5" id="1381" /> +<TGConnectingPoint num="6" id="1382" /> +<TGConnectingPoint num="7" id="1383" /> +</SUBCOMPONENT> + + +</SequenceDiagramPanel> + +</Modeling> + + + + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1000" minY="10" maxY="900" attributes="true" gates="true" synchro="true" > +<COMPONENT type="201" id="1469" > +<cdparam x="201" y="10" /> +<sizeparam width="156" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Wallet" /> +<TGConnectingPoint num="0" id="1461" /> +<TGConnectingPoint num="1" id="1462" /> +<TGConnectingPoint num="2" id="1463" /> +<TGConnectingPoint num="3" id="1464" /> +<TGConnectingPoint num="4" id="1465" /> +<TGConnectingPoint num="5" id="1466" /> +<TGConnectingPoint num="6" id="1467" /> +<TGConnectingPoint num="7" id="1468" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1441" > +<father id="1469" num="0" /> +<cdparam x="201" y="40" /> +<sizeparam width="156" height="78" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="156" minDesiredHeight="78" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="- coin = 2 : Natural; +- x : Natural; +- userDelay = 4 : Natural; +- userLatency = 1 : Natural; +" /> +<TGConnectingPoint num="0" id="1435" /> +<TGConnectingPoint num="1" id="1436" /> +<TGConnectingPoint num="2" id="1437" /> +<TGConnectingPoint num="3" id="1438" /> +<TGConnectingPoint num="4" id="1439" /> +<TGConnectingPoint num="5" id="1440" /> +<extraparam> +<Attribute access="0" id="coin" value="2" type="0" typeOther="" /> +<Attribute access="0" id="x" value="" type="0" typeOther="" /> +<Attribute access="0" id="userDelay" value="4" type="0" typeOther="" /> +<Attribute access="0" id="userLatency" value="1" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1444" > +<father id="1469" num="1" /> +<cdparam x="201" y="118" /> +<sizeparam width="156" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="108" maxY="108" /> +<infoparam name="Tclass gates" value="+ putCoin : OutGate; ++ coinBack : InGate; +" /> +<TGConnectingPoint num="0" id="1442" /> +<TGConnectingPoint num="1" id="1443" /> +<extraparam> +<Attribute access="2" id="putCoin" value="" type="2" typeOther="" /> +<Attribute access="2" id="coinBack" value="" type="3" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1451" > +<father id="1469" num="2" /> +<cdparam x="201" y="164" /> +<sizeparam width="156" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="154" maxY="154" /> +<infoparam name="Tclass operations" value="+ Wallet(Natural coin)" /> +<TGConnectingPoint num="0" id="1445" /> +<TGConnectingPoint num="1" id="1446" /> +<TGConnectingPoint num="2" id="1447" /> +<TGConnectingPoint num="3" id="1448" /> +<TGConnectingPoint num="4" id="1449" /> +<TGConnectingPoint num="5" id="1450" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1460" > +<father id="1469" num="3" /> +<cdparam x="201" y="194" /> +<sizeparam width="156" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="184" maxY="184" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1452" /> +<TGConnectingPoint num="1" id="1453" /> +<TGConnectingPoint num="2" id="1454" /> +<TGConnectingPoint num="3" id="1455" /> +<TGConnectingPoint num="4" id="1456" /> +<TGConnectingPoint num="5" id="1457" /> +<TGConnectingPoint num="6" id="1458" /> +<TGConnectingPoint num="7" id="1459" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="1504" > +<cdparam x="676" y="225" /> +<sizeparam width="157" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Machine" /> +<TGConnectingPoint num="0" id="1496" /> +<TGConnectingPoint num="1" id="1497" /> +<TGConnectingPoint num="2" id="1498" /> +<TGConnectingPoint num="3" id="1499" /> +<TGConnectingPoint num="4" id="1500" /> +<TGConnectingPoint num="5" id="1501" /> +<TGConnectingPoint num="6" id="1502" /> +<TGConnectingPoint num="7" id="1503" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1476" > +<father id="1504" num="0" /> +<cdparam x="676" y="255" /> +<sizeparam width="157" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="157" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ buttonDelay = 5 : Natural; ++ coinDelay = 5 : Natural; +" /> +<TGConnectingPoint num="0" id="1470" /> +<TGConnectingPoint num="1" id="1471" /> +<TGConnectingPoint num="2" id="1472" /> +<TGConnectingPoint num="3" id="1473" /> +<TGConnectingPoint num="4" id="1474" /> +<TGConnectingPoint num="5" id="1475" /> +<extraparam> +<Attribute access="2" id="buttonDelay" value="5" type="0" typeOther="" /> +<Attribute access="2" id="coinDelay" value="5" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1479" > +<father id="1504" num="1" /> +<cdparam x="676" y="301" /> +<sizeparam width="157" height="110" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="110" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tclass gates" value="+ coin_in : InGate; ++ eject_coin : OutGate; ++ startCoffee : InGate; ++ deliverCoffee : OutGate; ++ startTea : InGate; ++ deliverTea : OutGate; +" /> +<TGConnectingPoint num="0" id="1477" /> +<TGConnectingPoint num="1" id="1478" /> +<extraparam> +<Attribute access="2" id="coin_in" value="" type="3" typeOther="" /> +<Attribute access="2" id="eject_coin" value="" type="2" typeOther="" /> +<Attribute access="2" id="startCoffee" value="" type="3" typeOther="" /> +<Attribute access="2" id="deliverCoffee" value="" type="2" typeOther="" /> +<Attribute access="2" id="startTea" value="" type="3" typeOther="" /> +<Attribute access="2" id="deliverTea" value="" type="2" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1486" > +<father id="1504" num="2" /> +<cdparam x="676" y="411" /> +<sizeparam width="157" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="186" maxY="186" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1480" /> +<TGConnectingPoint num="1" id="1481" /> +<TGConnectingPoint num="2" id="1482" /> +<TGConnectingPoint num="3" id="1483" /> +<TGConnectingPoint num="4" id="1484" /> +<TGConnectingPoint num="5" id="1485" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1495" > +<father id="1504" num="3" /> +<cdparam x="676" y="441" /> +<sizeparam width="157" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="216" maxY="216" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1487" /> +<TGConnectingPoint num="1" id="1488" /> +<TGConnectingPoint num="2" id="1489" /> +<TGConnectingPoint num="3" id="1490" /> +<TGConnectingPoint num="4" id="1491" /> +<TGConnectingPoint num="5" id="1492" /> +<TGConnectingPoint num="6" id="1493" /> +<TGConnectingPoint num="7" id="1494" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="1518" > +<cdparam x="482" y="62" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Wallet and Machine" value="Synchro" /> +<TGConnectingPoint num="0" id="1506" /> +<TGConnectingPoint num="1" id="1507" /> +<TGConnectingPoint num="2" id="1508" /> +<TGConnectingPoint num="3" id="1509" /> +<TGConnectingPoint num="4" id="1510" /> +<TGConnectingPoint num="5" id="1511" /> +<TGConnectingPoint num="6" id="1512" /> +<TGConnectingPoint num="7" id="1513" /> +<TGConnectingPoint num="8" id="1514" /> +<TGConnectingPoint num="9" id="1515" /> +<TGConnectingPoint num="10" id="1516" /> +<TGConnectingPoint num="11" id="1517" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1505" > +<father id="1518" num="0" /> +<cdparam x="500" y="102" /> +<sizeparam width="212" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="1469" g1="putCoin" t2="1504" g2="coin_in" /> +<Synchro t1="1469" g1="coinBack" t2="1504" g2="eject_coin" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="1532" > +<cdparam x="463" y="222" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between CoffeeButton_Button and Machine" value="Synchro" /> +<TGConnectingPoint num="0" id="1520" /> +<TGConnectingPoint num="1" id="1521" /> +<TGConnectingPoint num="2" id="1522" /> +<TGConnectingPoint num="3" id="1523" /> +<TGConnectingPoint num="4" id="1524" /> +<TGConnectingPoint num="5" id="1525" /> +<TGConnectingPoint num="6" id="1526" /> +<TGConnectingPoint num="7" id="1527" /> +<TGConnectingPoint num="8" id="1528" /> +<TGConnectingPoint num="9" id="1529" /> +<TGConnectingPoint num="10" id="1530" /> +<TGConnectingPoint num="11" id="1531" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1519" > +<father id="1532" num="0" /> +<cdparam x="388" y="309" /> +<sizeparam width="280" height="18" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="1625" g1="push" t2="1504" g2="startCoffee" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="1546" > +<cdparam x="463" y="377" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between TeaButton_Button and Machine" value="Synchro" /> +<TGConnectingPoint num="0" id="1534" /> +<TGConnectingPoint num="1" id="1535" /> +<TGConnectingPoint num="2" id="1536" /> +<TGConnectingPoint num="3" id="1537" /> +<TGConnectingPoint num="4" id="1538" /> +<TGConnectingPoint num="5" id="1539" /> +<TGConnectingPoint num="6" id="1540" /> +<TGConnectingPoint num="7" id="1541" /> +<TGConnectingPoint num="8" id="1542" /> +<TGConnectingPoint num="9" id="1543" /> +<TGConnectingPoint num="10" id="1544" /> +<TGConnectingPoint num="11" id="1545" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1533" > +<father id="1546" num="0" /> +<cdparam x="398" y="460" /> +<sizeparam width="250" height="18" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="1660" g1="push" t2="1504" g2="startTea" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1555" > +<cdparam x="434" y="496" /> +<sizeparam width="535" height="228" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Hints for a demo of formal verification capabilities: +***> Logical behaviours: +If you modify the inital value of the coin attribute, you may observe +different behaviours of the system on simulation traces or on reachability graphs +coin = 1 -> impossible to get a tea / coffee +coin = 2 -> possibility to get only one tea or one coffee +coin = 3 -> one tea or one coffee, and then, nothing +except putting an additional coin in the machine, and waiting for its ejection +coin = 4 -> 2 beverages (tea and tea, coffee and tea, etc.) +***> Temporal behaviours: +if coin >1 and userDelay > coinDelay, one may observe that it is not possible to get a beverage. +if coin >1 and coinDelay > userDelay and userDelay + userLatency >coinDelay, +in some case, then, sometimes the beverage can be otbained, or inserted coins are ejected. +" /> +<TGConnectingPoint num="0" id="1547" /> +<TGConnectingPoint num="1" id="1548" /> +<TGConnectingPoint num="2" id="1549" /> +<TGConnectingPoint num="3" id="1550" /> +<TGConnectingPoint num="4" id="1551" /> +<TGConnectingPoint num="5" id="1552" /> +<TGConnectingPoint num="6" id="1553" /> +<TGConnectingPoint num="7" id="1554" /> +<extraparam> +<Line value="Hints for a demo of formal verification capabilities:" /> +<Line value="***> Logical behaviours:" /> +<Line value="If you modify the inital value of the coin attribute, you may observe " /> +<Line value="different behaviours of the system on simulation traces or on reachability graphs" /> +<Line value="coin = 1 -> impossible to get a tea / coffee" /> +<Line value="coin = 2 -> possibility to get only one tea or one coffee" /> +<Line value="coin = 3 -> one tea or one coffee, and then, nothing " /> +<Line value="except putting an additional coin in the machine, and waiting for its ejection" /> +<Line value="coin = 4 -> 2 beverages (tea and tea, coffee and tea, etc.)" /> +<Line value="***> Temporal behaviours:" /> +<Line value="if coin >1 and userDelay > coinDelay, one may observe that it is not possible to get a beverage." /> +<Line value="if coin >1 and coinDelay > userDelay and userDelay + userLatency >coinDelay, " /> +<Line value="in some case, then, sometimes the beverage can be otbained, or inserted coins are ejected." /> +</extraparam> +</COMPONENT> + +<COMPONENT type="201" id="1590" > +<cdparam x="11" y="335" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Button" /> +<TGConnectingPoint num="0" id="1582" /> +<TGConnectingPoint num="1" id="1583" /> +<TGConnectingPoint num="2" id="1584" /> +<TGConnectingPoint num="3" id="1585" /> +<TGConnectingPoint num="4" id="1586" /> +<TGConnectingPoint num="5" id="1587" /> +<TGConnectingPoint num="6" id="1588" /> +<TGConnectingPoint num="7" id="1589" /> +<extraparam> +<Start isStart="false" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1562" > +<father id="1590" num="0" /> +<cdparam x="11" y="365" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="167" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ mechanicalDelay : Natural; +" /> +<TGConnectingPoint num="0" id="1556" /> +<TGConnectingPoint num="1" id="1557" /> +<TGConnectingPoint num="2" id="1558" /> +<TGConnectingPoint num="3" id="1559" /> +<TGConnectingPoint num="4" id="1560" /> +<TGConnectingPoint num="5" id="1561" /> +<extraparam> +<Attribute access="2" id="mechanicalDelay" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1565" > +<father id="1590" num="1" /> +<cdparam x="11" y="395" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="60" maxY="60" /> +<infoparam name="Tclass gates" value="+ push : Gate; +" /> +<TGConnectingPoint num="0" id="1563" /> +<TGConnectingPoint num="1" id="1564" /> +<extraparam> +<Attribute access="2" id="push" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1572" > +<father id="1590" num="2" /> +<cdparam x="11" y="425" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="90" maxY="90" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1566" /> +<TGConnectingPoint num="1" id="1567" /> +<TGConnectingPoint num="2" id="1568" /> +<TGConnectingPoint num="3" id="1569" /> +<TGConnectingPoint num="4" id="1570" /> +<TGConnectingPoint num="5" id="1571" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1581" > +<father id="1590" num="3" /> +<cdparam x="11" y="455" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="120" maxY="120" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1573" /> +<TGConnectingPoint num="1" id="1574" /> +<TGConnectingPoint num="2" id="1575" /> +<TGConnectingPoint num="3" id="1576" /> +<TGConnectingPoint num="4" id="1577" /> +<TGConnectingPoint num="5" id="1578" /> +<TGConnectingPoint num="6" id="1579" /> +<TGConnectingPoint num="7" id="1580" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="1625" > +<cdparam x="201" y="232" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tobject" value="CoffeeButton_Button" /> +<TGConnectingPoint num="0" id="1617" /> +<TGConnectingPoint num="1" id="1618" /> +<TGConnectingPoint num="2" id="1619" /> +<TGConnectingPoint num="3" id="1620" /> +<TGConnectingPoint num="4" id="1621" /> +<TGConnectingPoint num="5" id="1622" /> +<TGConnectingPoint num="6" id="1623" /> +<TGConnectingPoint num="7" id="1624" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="Button" /> +<FirstName name="CoffeeButton" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1597" > +<father id="1625" num="0" /> +<cdparam x="201" y="262" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ mechanicalDelay = 3 : Natural; +" /> +<TGConnectingPoint num="0" id="1591" /> +<TGConnectingPoint num="1" id="1592" /> +<TGConnectingPoint num="2" id="1593" /> +<TGConnectingPoint num="3" id="1594" /> +<TGConnectingPoint num="4" id="1595" /> +<TGConnectingPoint num="5" id="1596" /> +<extraparam> +<Attribute access="2" id="mechanicalDelay" value="3" type="0" typeOther="" set="true" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1600" > +<father id="1625" num="1" /> +<cdparam x="201" y="292" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="60" maxY="60" /> +<infoparam name="Tobject gates" value="+ push : Gate; +" /> +<TGConnectingPoint num="0" id="1598" /> +<TGConnectingPoint num="1" id="1599" /> +<extraparam> +<Attribute access="2" id="push" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1607" > +<father id="1625" num="2" /> +<cdparam x="201" y="322" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="90" maxY="90" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1601" /> +<TGConnectingPoint num="1" id="1602" /> +<TGConnectingPoint num="2" id="1603" /> +<TGConnectingPoint num="3" id="1604" /> +<TGConnectingPoint num="4" id="1605" /> +<TGConnectingPoint num="5" id="1606" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1616" > +<father id="1625" num="3" /> +<cdparam x="201" y="352" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="120" maxY="120" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1608" /> +<TGConnectingPoint num="1" id="1609" /> +<TGConnectingPoint num="2" id="1610" /> +<TGConnectingPoint num="3" id="1611" /> +<TGConnectingPoint num="4" id="1612" /> +<TGConnectingPoint num="5" id="1613" /> +<TGConnectingPoint num="6" id="1614" /> +<TGConnectingPoint num="7" id="1615" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="1660" > +<cdparam x="201" y="391" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tobject" value="TeaButton_Button" /> +<TGConnectingPoint num="0" id="1652" /> +<TGConnectingPoint num="1" id="1653" /> +<TGConnectingPoint num="2" id="1654" /> +<TGConnectingPoint num="3" id="1655" /> +<TGConnectingPoint num="4" id="1656" /> +<TGConnectingPoint num="5" id="1657" /> +<TGConnectingPoint num="6" id="1658" /> +<TGConnectingPoint num="7" id="1659" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="Button" /> +<FirstName name="TeaButton" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1632" > +<father id="1660" num="0" /> +<cdparam x="201" y="421" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ mechanicalDelay = 5 : Natural; +" /> +<TGConnectingPoint num="0" id="1626" /> +<TGConnectingPoint num="1" id="1627" /> +<TGConnectingPoint num="2" id="1628" /> +<TGConnectingPoint num="3" id="1629" /> +<TGConnectingPoint num="4" id="1630" /> +<TGConnectingPoint num="5" id="1631" /> +<extraparam> +<Attribute access="2" id="mechanicalDelay" value="5" type="0" typeOther="" set="true" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1635" > +<father id="1660" num="1" /> +<cdparam x="201" y="451" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="60" maxY="60" /> +<infoparam name="Tobject gates" value="+ push : Gate; +" /> +<TGConnectingPoint num="0" id="1633" /> +<TGConnectingPoint num="1" id="1634" /> +<extraparam> +<Attribute access="2" id="push" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1642" > +<father id="1660" num="2" /> +<cdparam x="201" y="481" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="90" maxY="90" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1636" /> +<TGConnectingPoint num="1" id="1637" /> +<TGConnectingPoint num="2" id="1638" /> +<TGConnectingPoint num="3" id="1639" /> +<TGConnectingPoint num="4" id="1640" /> +<TGConnectingPoint num="5" id="1641" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1651" > +<father id="1660" num="3" /> +<cdparam x="201" y="511" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="120" maxY="120" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1643" /> +<TGConnectingPoint num="1" id="1644" /> +<TGConnectingPoint num="2" id="1645" /> +<TGConnectingPoint num="3" id="1646" /> +<TGConnectingPoint num="4" id="1647" /> +<TGConnectingPoint num="5" id="1648" /> +<TGConnectingPoint num="6" id="1649" /> +<TGConnectingPoint num="7" id="1650" /> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="1662" > +<cdparam x="381" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TObject attribute setting to Tclass attributes" value="null" /> +<TGConnectingPoint num="0" id="1661" /> +<P1 x="351" y="277" id="1592" /> +<P2 x="676" y="278" id="1470" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="1663" > +<cdparam x="519" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TObject attribute setting to synchro composition operator" value="null" /> +<P1 x="513" y="277" id="1661" /> +<P2 x="513" y="247" id="1522" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="1665" > +<cdparam x="380" y="415" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tobject to Tclass operations" value="null" /> +<TGConnectingPoint num="0" id="1664" /> +<P1 x="351" y="436" id="1627" /> +<P2 x="676" y="426" id="1480" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="1666" > +<cdparam x="528" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TObject attribute setting to synchro composition operator" value="null" /> +<P1 x="513" y="431" id="1664" /> +<P2 x="513" y="402" id="1536" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="1670" > +<cdparam x="362" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass" value="null" /> +<TGConnectingPoint num="0" id="1668" /> +<TGConnectingPoint num="1" id="1669" /> +<P1 x="357" y="141" id="1443" /> +<P2 x="715" y="225" id="1498" /> +<Point x="689" y="137" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1667" > +<father id="1670" num="0" /> +<cdparam x="689" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="103" id="1671" > +<cdparam x="525" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="523" y="139" id="1668" /> +<P2 x="532" y="87" id="1508" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="Wallet" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="1673" > +<cdparam x="353" y="102" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1672" /> +</COMPONENT> + +<COMPONENT type="19" id="1689" > +<cdparam x="347" y="198" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1677" /> +<TGConnectingPoint num="1" id="1678" /> +<TGConnectingPoint num="2" id="1679" /> +<TGConnectingPoint num="3" id="1680" /> +<TGConnectingPoint num="4" id="1681" /> +<TGConnectingPoint num="5" id="1682" /> +<TGConnectingPoint num="6" id="1683" /> +<TGConnectingPoint num="7" id="1684" /> +<TGConnectingPoint num="8" id="1685" /> +<TGConnectingPoint num="9" id="1686" /> +<TGConnectingPoint num="10" id="1687" /> +<TGConnectingPoint num="11" id="1688" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1674" > +<father id="1689" num="0" /> +<cdparam x="299" y="208" /> +<sizeparam width="49" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ coin>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1675" > +<father id="1689" num="1" /> +<cdparam x="382" y="208" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1676" > +<father id="1689" num="2" /> +<cdparam x="367" y="243" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="1712" > +<cdparam x="346" y="139" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1690" /> +<TGConnectingPoint num="1" id="1691" /> +<TGConnectingPoint num="2" id="1692" /> +<TGConnectingPoint num="3" id="1693" /> +<TGConnectingPoint num="4" id="1694" /> +<TGConnectingPoint num="5" id="1695" /> +<TGConnectingPoint num="6" id="1696" /> +<TGConnectingPoint num="7" id="1697" /> +<TGConnectingPoint num="8" id="1698" /> +<TGConnectingPoint num="9" id="1699" /> +<TGConnectingPoint num="10" id="1700" /> +<TGConnectingPoint num="11" id="1701" /> +<TGConnectingPoint num="12" id="1702" /> +<TGConnectingPoint num="13" id="1703" /> +<TGConnectingPoint num="14" id="1704" /> +<TGConnectingPoint num="15" id="1705" /> +<TGConnectingPoint num="16" id="1706" /> +<TGConnectingPoint num="17" id="1707" /> +<TGConnectingPoint num="18" id="1708" /> +<TGConnectingPoint num="19" id="1709" /> +<TGConnectingPoint num="20" id="1710" /> +<TGConnectingPoint num="21" id="1711" /> +</COMPONENT> + +<COMPONENT type="15" id="1723" > +<cdparam x="397" y="382" /> +<sizeparam width="87" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coin = coin + x" /> +<TGConnectingPoint num="0" id="1713" /> +<TGConnectingPoint num="1" id="1714" /> +<TGConnectingPoint num="2" id="1715" /> +<TGConnectingPoint num="3" id="1716" /> +<TGConnectingPoint num="4" id="1717" /> +<TGConnectingPoint num="5" id="1718" /> +<TGConnectingPoint num="6" id="1719" /> +<TGConnectingPoint num="7" id="1720" /> +<TGConnectingPoint num="8" id="1721" /> +<TGConnectingPoint num="9" id="1722" /> +</COMPONENT> + +<COMPONENT type="15" id="1734" > +<cdparam x="296" y="331" /> +<sizeparam width="53" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="putCoin" /> +<TGConnectingPoint num="0" id="1724" /> +<TGConnectingPoint num="1" id="1725" /> +<TGConnectingPoint num="2" id="1726" /> +<TGConnectingPoint num="3" id="1727" /> +<TGConnectingPoint num="4" id="1728" /> +<TGConnectingPoint num="5" id="1729" /> +<TGConnectingPoint num="6" id="1730" /> +<TGConnectingPoint num="7" id="1731" /> +<TGConnectingPoint num="8" id="1732" /> +<TGConnectingPoint num="9" id="1733" /> +</COMPONENT> + +<COMPONENT type="15" id="1745" > +<cdparam x="277" y="381" /> +<sizeparam width="86" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coin = coin - 1" /> +<TGConnectingPoint num="0" id="1735" /> +<TGConnectingPoint num="1" id="1736" /> +<TGConnectingPoint num="2" id="1737" /> +<TGConnectingPoint num="3" id="1738" /> +<TGConnectingPoint num="4" id="1739" /> +<TGConnectingPoint num="5" id="1740" /> +<TGConnectingPoint num="6" id="1741" /> +<TGConnectingPoint num="7" id="1742" /> +<TGConnectingPoint num="8" id="1743" /> +<TGConnectingPoint num="9" id="1744" /> +</COMPONENT> + +<COMPONENT type="11" id="1757" > +<cdparam x="316" y="435" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1747" /> +<TGConnectingPoint num="1" id="1748" /> +<TGConnectingPoint num="2" id="1749" /> +<TGConnectingPoint num="3" id="1750" /> +<TGConnectingPoint num="4" id="1751" /> +<TGConnectingPoint num="5" id="1752" /> +<TGConnectingPoint num="6" id="1753" /> +<TGConnectingPoint num="7" id="1754" /> +<TGConnectingPoint num="8" id="1755" /> +<TGConnectingPoint num="9" id="1756" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1746" > +<father id="1757" num="0" /> +<cdparam x="331" y="455" /> +<sizeparam width="56" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="userDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="18" id="1769" > +<cdparam x="320" y="492" /> +<sizeparam width="8" height="32" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="non deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1759" /> +<TGConnectingPoint num="1" id="1760" /> +<TGConnectingPoint num="2" id="1761" /> +<TGConnectingPoint num="3" id="1762" /> +<TGConnectingPoint num="4" id="1763" /> +<TGConnectingPoint num="5" id="1764" /> +<TGConnectingPoint num="6" id="1765" /> +<TGConnectingPoint num="7" id="1766" /> +<TGConnectingPoint num="8" id="1767" /> +<TGConnectingPoint num="9" id="1768" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1758" > +<father id="1769" num="0" /> +<cdparam x="333" y="513" /> +<sizeparam width="67" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="8" maxX="18" minY="11" maxY="31" /> +<infoparam name="value of the latency" value="userLatency" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1780" > +<cdparam x="405" y="333" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coinBack?x" /> +<TGConnectingPoint num="0" id="1770" /> +<TGConnectingPoint num="1" id="1771" /> +<TGConnectingPoint num="2" id="1772" /> +<TGConnectingPoint num="3" id="1773" /> +<TGConnectingPoint num="4" id="1774" /> +<TGConnectingPoint num="5" id="1775" /> +<TGConnectingPoint num="6" id="1776" /> +<TGConnectingPoint num="7" id="1777" /> +<TGConnectingPoint num="8" id="1778" /> +<TGConnectingPoint num="9" id="1779" /> +</COMPONENT> + +<CONNECTOR type="101" id="1781" > +<cdparam x="360" y="122" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="360" y="122" id="1672" /> +<P2 x="361" y="139" id="1690" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1782" > +<cdparam x="361" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="361" y="169" id="1693" /> +<P2 x="362" y="188" id="1677" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1783" > +<cdparam x="441" y="358" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="441" y="358" id="1771" /> +<P2 x="440" y="377" id="1713" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1787" > +<cdparam x="445" y="412" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="440" y="407" id="1714" /> +<P2 x="376" y="154" id="1692" /> +<Point x="440" y="425" /> +<Point x="501" y="425" /> +<Point x="501" y="154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1784" > +<father id="1787" num="0" /> +<cdparam x="440" y="425" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1785" > +<father id="1787" num="1" /> +<cdparam x="501" y="425" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1786" > +<father id="1787" num="2" /> +<cdparam x="501" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="1788" > +<cdparam x="322" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="322" y="356" id="1725" /> +<P2 x="320" y="376" id="1735" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1792" > +<cdparam x="321" y="412" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="320" y="529" id="1760" /> +<P2 x="346" y="154" id="1691" /> +<Point x="320" y="546" /> +<Point x="254" y="546" /> +<Point x="254" y="154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1789" > +<father id="1792" num="0" /> +<cdparam x="320" y="546" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1790" > +<father id="1792" num="1" /> +<cdparam x="254" y="546" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1791" > +<father id="1792" num="2" /> +<cdparam x="254" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="1793" > +<cdparam x="321" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="320" y="406" id="1736" /> +<P2 x="321" y="430" id="1747" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1794" > +<cdparam x="321" y="470" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to non deterministic delay" value="null" /> +<P1 x="321" y="470" id="1748" /> +<P2 x="320" y="487" id="1759" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1795" > +<cdparam x="322" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="322" y="213" id="1678" /> +<P2 x="322" y="326" id="1724" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1796" > +<cdparam x="402" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="402" y="213" id="1679" /> +<P2 x="441" y="328" id="1770" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Machine" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="1798" > +<cdparam x="353" y="29" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1797" /> +</COMPONENT> + +<COMPONENT type="15" id="1809" > +<cdparam x="335" y="123" /> +<sizeparam width="50" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coin_in" /> +<TGConnectingPoint num="0" id="1799" /> +<TGConnectingPoint num="1" id="1800" /> +<TGConnectingPoint num="2" id="1801" /> +<TGConnectingPoint num="3" id="1802" /> +<TGConnectingPoint num="4" id="1803" /> +<TGConnectingPoint num="5" id="1804" /> +<TGConnectingPoint num="6" id="1805" /> +<TGConnectingPoint num="7" id="1806" /> +<TGConnectingPoint num="8" id="1807" /> +<TGConnectingPoint num="9" id="1808" /> +</COMPONENT> + +<COMPONENT type="16" id="1822" > +<cdparam x="331" y="197" /> +<sizeparam width="58" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="coin_in" /> +<TGConnectingPoint num="0" id="1811" /> +<TGConnectingPoint num="1" id="1812" /> +<TGConnectingPoint num="2" id="1813" /> +<TGConnectingPoint num="3" id="1814" /> +<TGConnectingPoint num="4" id="1815" /> +<TGConnectingPoint num="5" id="1816" /> +<TGConnectingPoint num="6" id="1817" /> +<TGConnectingPoint num="7" id="1818" /> +<TGConnectingPoint num="8" id="1819" /> +<TGConnectingPoint num="9" id="1820" /> +<TGConnectingPoint num="10" id="1821" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1810" > +<father id="1822" num="0" /> +<cdparam x="414" y="212" /> +<sizeparam width="54" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="80" maxX="88" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="coinDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="1845" > +<cdparam x="345" y="73" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1823" /> +<TGConnectingPoint num="1" id="1824" /> +<TGConnectingPoint num="2" id="1825" /> +<TGConnectingPoint num="3" id="1826" /> +<TGConnectingPoint num="4" id="1827" /> +<TGConnectingPoint num="5" id="1828" /> +<TGConnectingPoint num="6" id="1829" /> +<TGConnectingPoint num="7" id="1830" /> +<TGConnectingPoint num="8" id="1831" /> +<TGConnectingPoint num="9" id="1832" /> +<TGConnectingPoint num="10" id="1833" /> +<TGConnectingPoint num="11" id="1834" /> +<TGConnectingPoint num="12" id="1835" /> +<TGConnectingPoint num="13" id="1836" /> +<TGConnectingPoint num="14" id="1837" /> +<TGConnectingPoint num="15" id="1838" /> +<TGConnectingPoint num="16" id="1839" /> +<TGConnectingPoint num="17" id="1840" /> +<TGConnectingPoint num="18" id="1841" /> +<TGConnectingPoint num="19" id="1842" /> +<TGConnectingPoint num="20" id="1843" /> +<TGConnectingPoint num="21" id="1844" /> +</COMPONENT> + +<COMPONENT type="19" id="1861" > +<cdparam x="281" y="271" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1849" /> +<TGConnectingPoint num="1" id="1850" /> +<TGConnectingPoint num="2" id="1851" /> +<TGConnectingPoint num="3" id="1852" /> +<TGConnectingPoint num="4" id="1853" /> +<TGConnectingPoint num="5" id="1854" /> +<TGConnectingPoint num="6" id="1855" /> +<TGConnectingPoint num="7" id="1856" /> +<TGConnectingPoint num="8" id="1857" /> +<TGConnectingPoint num="9" id="1858" /> +<TGConnectingPoint num="10" id="1859" /> +<TGConnectingPoint num="11" id="1860" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1846" > +<father id="1861" num="0" /> +<cdparam x="256" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1847" > +<father id="1861" num="1" /> +<cdparam x="316" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1848" > +<father id="1861" num="2" /> +<cdparam x="301" y="316" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1872" > +<cdparam x="404" y="270" /> +<sizeparam width="82" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="eject_coin ! 1" /> +<TGConnectingPoint num="0" id="1862" /> +<TGConnectingPoint num="1" id="1863" /> +<TGConnectingPoint num="2" id="1864" /> +<TGConnectingPoint num="3" id="1865" /> +<TGConnectingPoint num="4" id="1866" /> +<TGConnectingPoint num="5" id="1867" /> +<TGConnectingPoint num="6" id="1868" /> +<TGConnectingPoint num="7" id="1869" /> +<TGConnectingPoint num="8" id="1870" /> +<TGConnectingPoint num="9" id="1871" /> +</COMPONENT> + +<COMPONENT type="15" id="1883" > +<cdparam x="166" y="348" /> +<sizeparam width="70" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="startCoffee" /> +<TGConnectingPoint num="0" id="1873" /> +<TGConnectingPoint num="1" id="1874" /> +<TGConnectingPoint num="2" id="1875" /> +<TGConnectingPoint num="3" id="1876" /> +<TGConnectingPoint num="4" id="1877" /> +<TGConnectingPoint num="5" id="1878" /> +<TGConnectingPoint num="6" id="1879" /> +<TGConnectingPoint num="7" id="1880" /> +<TGConnectingPoint num="8" id="1881" /> +<TGConnectingPoint num="9" id="1882" /> +</COMPONENT> + +<COMPONENT type="15" id="1894" > +<cdparam x="269" y="347" /> +<sizeparam width="55" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="startTea" /> +<TGConnectingPoint num="0" id="1884" /> +<TGConnectingPoint num="1" id="1885" /> +<TGConnectingPoint num="2" id="1886" /> +<TGConnectingPoint num="3" id="1887" /> +<TGConnectingPoint num="4" id="1888" /> +<TGConnectingPoint num="5" id="1889" /> +<TGConnectingPoint num="6" id="1890" /> +<TGConnectingPoint num="7" id="1891" /> +<TGConnectingPoint num="8" id="1892" /> +<TGConnectingPoint num="9" id="1893" /> +</COMPONENT> + +<COMPONENT type="11" id="1906" > +<cdparam x="196" y="394" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1896" /> +<TGConnectingPoint num="1" id="1897" /> +<TGConnectingPoint num="2" id="1898" /> +<TGConnectingPoint num="3" id="1899" /> +<TGConnectingPoint num="4" id="1900" /> +<TGConnectingPoint num="5" id="1901" /> +<TGConnectingPoint num="6" id="1902" /> +<TGConnectingPoint num="7" id="1903" /> +<TGConnectingPoint num="8" id="1904" /> +<TGConnectingPoint num="9" id="1905" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1895" > +<father id="1906" num="0" /> +<cdparam x="211" y="414" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="5" /> +</SUBCOMPONENT> + +<COMPONENT type="18" id="1918" > +<cdparam x="201" y="450" /> +<sizeparam width="8" height="32" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="non deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1908" /> +<TGConnectingPoint num="1" id="1909" /> +<TGConnectingPoint num="2" id="1910" /> +<TGConnectingPoint num="3" id="1911" /> +<TGConnectingPoint num="4" id="1912" /> +<TGConnectingPoint num="5" id="1913" /> +<TGConnectingPoint num="6" id="1914" /> +<TGConnectingPoint num="7" id="1915" /> +<TGConnectingPoint num="8" id="1916" /> +<TGConnectingPoint num="9" id="1917" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1907" > +<father id="1918" num="0" /> +<cdparam x="214" y="470" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="8" maxX="18" minY="11" maxY="31" /> +<infoparam name="value of the latency" value="3" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="1941" > +<cdparam x="281" y="583" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1919" /> +<TGConnectingPoint num="1" id="1920" /> +<TGConnectingPoint num="2" id="1921" /> +<TGConnectingPoint num="3" id="1922" /> +<TGConnectingPoint num="4" id="1923" /> +<TGConnectingPoint num="5" id="1924" /> +<TGConnectingPoint num="6" id="1925" /> +<TGConnectingPoint num="7" id="1926" /> +<TGConnectingPoint num="8" id="1927" /> +<TGConnectingPoint num="9" id="1928" /> +<TGConnectingPoint num="10" id="1929" /> +<TGConnectingPoint num="11" id="1930" /> +<TGConnectingPoint num="12" id="1931" /> +<TGConnectingPoint num="13" id="1932" /> +<TGConnectingPoint num="14" id="1933" /> +<TGConnectingPoint num="15" id="1934" /> +<TGConnectingPoint num="16" id="1935" /> +<TGConnectingPoint num="17" id="1936" /> +<TGConnectingPoint num="18" id="1937" /> +<TGConnectingPoint num="19" id="1938" /> +<TGConnectingPoint num="20" id="1939" /> +<TGConnectingPoint num="21" id="1940" /> +</COMPONENT> + +<COMPONENT type="11" id="1953" > +<cdparam x="430" y="351" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1943" /> +<TGConnectingPoint num="1" id="1944" /> +<TGConnectingPoint num="2" id="1945" /> +<TGConnectingPoint num="3" id="1946" /> +<TGConnectingPoint num="4" id="1947" /> +<TGConnectingPoint num="5" id="1948" /> +<TGConnectingPoint num="6" id="1949" /> +<TGConnectingPoint num="7" id="1950" /> +<TGConnectingPoint num="8" id="1951" /> +<TGConnectingPoint num="9" id="1952" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1942" > +<father id="1953" num="0" /> +<cdparam x="445" y="371" /> +<sizeparam width="65" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="buttonDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1964" > +<cdparam x="394" y="411" /> +<sizeparam width="82" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="eject_coin ! 2" /> +<TGConnectingPoint num="0" id="1954" /> +<TGConnectingPoint num="1" id="1955" /> +<TGConnectingPoint num="2" id="1956" /> +<TGConnectingPoint num="3" id="1957" /> +<TGConnectingPoint num="4" id="1958" /> +<TGConnectingPoint num="5" id="1959" /> +<TGConnectingPoint num="6" id="1960" /> +<TGConnectingPoint num="7" id="1961" /> +<TGConnectingPoint num="8" id="1962" /> +<TGConnectingPoint num="9" id="1963" /> +</COMPONENT> + +<COMPONENT type="20" id="1976" > +<cdparam x="291" y="425" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time interval" value="null" /> +<TGConnectingPoint num="0" id="1966" /> +<TGConnectingPoint num="1" id="1967" /> +<TGConnectingPoint num="2" id="1968" /> +<TGConnectingPoint num="3" id="1969" /> +<TGConnectingPoint num="4" id="1970" /> +<TGConnectingPoint num="5" id="1971" /> +<TGConnectingPoint num="6" id="1972" /> +<TGConnectingPoint num="7" id="1973" /> +<TGConnectingPoint num="8" id="1974" /> +<TGConnectingPoint num="9" id="1975" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1965" > +<father id="1976" num="0" /> +<cdparam x="306" y="445" /> +<sizeparam width="34" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the time interval" value="[6, 10]" /> +<extraparam> +<Interval minDelay="6" maxDelay="10" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1987" > +<cdparam x="160" y="508" /> +<sizeparam width="82" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="deliverCoffee" /> +<TGConnectingPoint num="0" id="1977" /> +<TGConnectingPoint num="1" id="1978" /> +<TGConnectingPoint num="2" id="1979" /> +<TGConnectingPoint num="3" id="1980" /> +<TGConnectingPoint num="4" id="1981" /> +<TGConnectingPoint num="5" id="1982" /> +<TGConnectingPoint num="6" id="1983" /> +<TGConnectingPoint num="7" id="1984" /> +<TGConnectingPoint num="8" id="1985" /> +<TGConnectingPoint num="9" id="1986" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="15" id="1998" > +<cdparam x="263" y="508" /> +<sizeparam width="67" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="deliverTea" /> +<TGConnectingPoint num="0" id="1988" /> +<TGConnectingPoint num="1" id="1989" /> +<TGConnectingPoint num="2" id="1990" /> +<TGConnectingPoint num="3" id="1991" /> +<TGConnectingPoint num="4" id="1992" /> +<TGConnectingPoint num="5" id="1993" /> +<TGConnectingPoint num="6" id="1994" /> +<TGConnectingPoint num="7" id="1995" /> +<TGConnectingPoint num="8" id="1996" /> +<TGConnectingPoint num="9" id="1997" /> +<accessibility /> +</COMPONENT> + +<CONNECTOR type="101" id="1999" > +<cdparam x="367" y="56" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="360" y="49" id="1797" /> +<P2 x="360" y="73" id="1823" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2000" > +<cdparam x="364" y="103" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="360" y="103" id="1826" /> +<P2 x="360" y="118" id="1799" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2001" > +<cdparam x="361" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time-limited offer" value="null" /> +<P1 x="360" y="148" id="1800" /> +<P2 x="360" y="172" id="1811" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2002" > +<cdparam x="361" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to choice" value="null" /> +<P1 x="360" y="242" id="1812" /> +<P2 x="296" y="261" id="1849" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2003" > +<cdparam x="376" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to action state" value="null" /> +<P1 x="375" y="242" id="1813" /> +<P2 x="445" y="265" id="1862" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2008" > +<cdparam x="445" y="295" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="445" y="295" id="1863" /> +<P2 x="375" y="88" id="1825" /> +<Point x="445" y="315" /> +<Point x="503" y="315" /> +<Point x="503" y="68" /> +<Point x="375" y="68" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2004" > +<father id="2008" num="0" /> +<cdparam x="445" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2005" > +<father id="2008" num="1" /> +<cdparam x="503" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2006" > +<father id="2008" num="2" /> +<cdparam x="503" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2007" > +<father id="2008" num="3" /> +<cdparam x="375" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="2009" > +<cdparam x="256" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="256" y="286" id="1850" /> +<P2 x="201" y="343" id="1873" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2010" > +<cdparam x="332" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="296" y="326" id="1852" /> +<P2 x="296" y="342" id="1884" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2011" > +<cdparam x="242" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="201" y="373" id="1874" /> +<P2 x="201" y="389" id="1896" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2012" > +<cdparam x="248" y="431" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to non deterministic delay" value="null" /> +<P1 x="201" y="429" id="1897" /> +<P2 x="201" y="445" id="1908" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2017" > +<cdparam x="300" y="529" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="296" y="613" id="1922" /> +<P2 x="345" y="88" id="1824" /> +<Point x="296" y="633" /> +<Point x="112" y="633" /> +<Point x="112" y="68" /> +<Point x="345" y="68" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2013" > +<father id="2017" num="0" /> +<cdparam x="296" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2014" > +<father id="2017" num="1" /> +<cdparam x="112" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2015" > +<father id="2017" num="2" /> +<cdparam x="112" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2016" > +<father id="2017" num="3" /> +<cdparam x="345" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="2018" > +<cdparam x="336" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to deterministic delay" value="null" /> +<P1 x="336" y="286" id="1851" /> +<P2 x="435" y="346" id="1943" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2019" > +<cdparam x="435" y="386" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="435" y="386" id="1944" /> +<P2 x="435" y="406" id="1954" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2021" > +<cdparam x="436" y="436" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="435" y="436" id="1955" /> +<P2 x="311" y="598" id="1921" /> +<Point x="435" y="525" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2020" > +<father id="2021" num="0" /> +<cdparam x="435" y="525" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="2022" > +<cdparam x="332" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time interval" value="null" /> +<P1 x="296" y="372" id="1885" /> +<P2 x="296" y="420" id="1966" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2023" > +<cdparam x="201" y="477" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from non deterministic delay to action state" value="null" /> +<P1 x="201" y="487" id="1909" /> +<P2 x="201" y="503" id="1977" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2024" > +<cdparam x="290" y="455" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time interval to action state" value="null" /> +<P1 x="296" y="460" id="1967" /> +<P2 x="296" y="503" id="1988" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2025" > +<cdparam x="200" y="533" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="201" y="533" id="1978" /> +<P2 x="281" y="598" id="1920" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2026" > +<cdparam x="290" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="296" y="533" id="1989" /> +<P2 x="296" y="583" id="1919" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Button" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="2028" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2027" /> +</COMPONENT> + +<COMPONENT type="15" id="2039" > +<cdparam x="388" y="165" /> +<sizeparam width="38" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="push" /> +<TGConnectingPoint num="0" id="2029" /> +<TGConnectingPoint num="1" id="2030" /> +<TGConnectingPoint num="2" id="2031" /> +<TGConnectingPoint num="3" id="2032" /> +<TGConnectingPoint num="4" id="2033" /> +<TGConnectingPoint num="5" id="2034" /> +<TGConnectingPoint num="6" id="2035" /> +<TGConnectingPoint num="7" id="2036" /> +<TGConnectingPoint num="8" id="2037" /> +<TGConnectingPoint num="9" id="2038" /> +</COMPONENT> + +<COMPONENT type="11" id="2051" > +<cdparam x="402" y="226" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="2041" /> +<TGConnectingPoint num="1" id="2042" /> +<TGConnectingPoint num="2" id="2043" /> +<TGConnectingPoint num="3" id="2044" /> +<TGConnectingPoint num="4" id="2045" /> +<TGConnectingPoint num="5" id="2046" /> +<TGConnectingPoint num="6" id="2047" /> +<TGConnectingPoint num="7" id="2048" /> +<TGConnectingPoint num="8" id="2049" /> +<TGConnectingPoint num="9" id="2050" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2040" > +<father id="2051" num="0" /> +<cdparam x="416" y="246" /> +<sizeparam width="95" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="mechanicalDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="2074" > +<cdparam x="392" y="104" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="2052" /> +<TGConnectingPoint num="1" id="2053" /> +<TGConnectingPoint num="2" id="2054" /> +<TGConnectingPoint num="3" id="2055" /> +<TGConnectingPoint num="4" id="2056" /> +<TGConnectingPoint num="5" id="2057" /> +<TGConnectingPoint num="6" id="2058" /> +<TGConnectingPoint num="7" id="2059" /> +<TGConnectingPoint num="8" id="2060" /> +<TGConnectingPoint num="9" id="2061" /> +<TGConnectingPoint num="10" id="2062" /> +<TGConnectingPoint num="11" id="2063" /> +<TGConnectingPoint num="12" id="2064" /> +<TGConnectingPoint num="13" id="2065" /> +<TGConnectingPoint num="14" id="2066" /> +<TGConnectingPoint num="15" id="2067" /> +<TGConnectingPoint num="16" id="2068" /> +<TGConnectingPoint num="17" id="2069" /> +<TGConnectingPoint num="18" id="2070" /> +<TGConnectingPoint num="19" id="2071" /> +<TGConnectingPoint num="20" id="2072" /> +<TGConnectingPoint num="21" id="2073" /> +</COMPONENT> + +<CONNECTOR type="101" id="2075" > +<cdparam x="407" y="194" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="407" y="190" id="2030" /> +<P2 x="407" y="221" id="2041" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2076" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="407" y="70" id="2027" /> +<P2 x="407" y="104" id="2052" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2077" > +<cdparam x="407" y="134" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="407" y="134" id="2055" /> +<P2 x="407" y="160" id="2029" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2082" > +<cdparam x="406" y="261" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to junction" value="null" /> +<P1 x="407" y="261" id="2042" /> +<P2 x="392" y="119" id="2053" /> +<Point x="407" y="281" /> +<Point x="288" y="281" /> +<Point x="288" y="99" /> +<Point x="392" y="99" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2078" > +<father id="2082" num="0" /> +<cdparam x="407" y="281" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2079" > +<father id="2082" num="1" /> +<cdparam x="288" y="281" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2080" > +<father id="2082" num="2" /> +<cdparam x="288" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2081" > +<father id="2082" num="3" /> +<cdparam x="392" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml b/preinstallTTool/linux/TTool/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml new file mode 100644 index 0000000000000000000000000000000000000000..f8e675041da7f90d57a96a0541e27f84c204e3b1 --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml @@ -0,0 +1,9475 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta2"> + +<Modeling type="Avatar Methodology" nameTab="Methodology" > +<AvatarMethodologyDiagramPanel name="AVATAR_Methodology" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<COMPONENT type="5605" id="6" > +<cdparam x="200" y="400" /> +<sizeparam width="180" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Properties" /> +<TGConnectingPoint num="0" id="2" /> +<TGConnectingPoint num="1" id="3" /> +<TGConnectingPoint num="2" id="4" /> +<TGConnectingPoint num="3" id="5" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="1" > +<father id="6" num="0" /> +<cdparam x="205" y="440" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="205" maxX="205" minY="440" maxY="440" /> +<infoparam name="value " value="Safety_props" /> +</SUBCOMPONENT> + +<COMPONENT type="5606" id="12" > +<cdparam x="550" y="500" /> +<sizeparam width="300" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Prototyping" /> +<TGConnectingPoint num="0" id="8" /> +<TGConnectingPoint num="1" id="9" /> +<TGConnectingPoint num="2" id="10" /> +<TGConnectingPoint num="3" id="11" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="7" > +<father id="12" num="0" /> +<cdparam x="555" y="540" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="555" maxX="555" minY="540" maxY="540" /> +<infoparam name="value " value="Design" /> +</SUBCOMPONENT> + +<COMPONENT type="5604" id="19" > +<cdparam x="450" y="400" /> +<sizeparam width="300" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Design" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<TGConnectingPoint num="4" id="18" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="13" > +<father id="19" num="0" /> +<cdparam x="455" y="440" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="455" maxX="455" minY="440" maxY="440" /> +<infoparam name="value " value="Design" /> +</SUBCOMPONENT> + +<COMPONENT type="5603" id="27" > +<cdparam x="350" y="297" /> +<sizeparam width="200" height="77" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Analysis" /> +<TGConnectingPoint num="0" id="22" /> +<TGConnectingPoint num="1" id="23" /> +<TGConnectingPoint num="2" id="24" /> +<TGConnectingPoint num="3" id="25" /> +<TGConnectingPoint num="4" id="26" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="20" > +<father id="27" num="0" /> +<cdparam x="355" y="367" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="355" maxX="355" minY="370" maxY="370" /> +<infoparam name="value " value="Attack Trees" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5607" id="21" > +<father id="27" num="1" /> +<cdparam x="355" y="352" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="355" maxX="355" minY="355" maxY="355" /> +<infoparam name="value " value="Analysis_UseCase" /> +</SUBCOMPONENT> + +<COMPONENT type="5602" id="35" > +<cdparam x="250" y="200" /> +<sizeparam width="200" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Requirements" /> +<TGConnectingPoint num="0" id="29" /> +<TGConnectingPoint num="1" id="30" /> +<TGConnectingPoint num="2" id="31" /> +<TGConnectingPoint num="3" id="32" /> +<TGConnectingPoint num="4" id="33" /> +<TGConnectingPoint num="5" id="34" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="28" > +<father id="35" num="0" /> +<cdparam x="255" y="240" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="255" maxX="255" minY="240" maxY="240" /> +<infoparam name="value " value="Reqs" /> +</SUBCOMPONENT> + +<COMPONENT type="5601" id="40" > +<cdparam x="150" y="97" /> +<sizeparam width="200" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Assumptions" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> + +<CONNECTOR type="5608" id="42" > +<cdparam x="270" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="41" /> +<P1 x="270" y="270" id="31" /> +<P2 x="236" y="400" id="2" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5608" id="46" > +<cdparam x="510" y="470" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="44" /> +<TGConnectingPoint num="1" id="45" /> +<P1 x="510" y="470" id="15" /> +<P2 x="550" y="535" id="8" /> +<Point x="510" y="535" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="43" > +<father id="46" num="0" /> +<cdparam x="510" y="535" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5608" id="50" > +<cdparam x="410" y="370" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="48" /> +<TGConnectingPoint num="1" id="49" /> +<P1 x="410" y="374" id="23" /> +<P2 x="450" y="435" id="14" /> +<Point x="410" y="435" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="47" > +<father id="50" num="0" /> +<cdparam x="410" y="435" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5608" id="54" > +<cdparam x="310" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="52" /> +<TGConnectingPoint num="1" id="53" /> +<P1 x="310" y="270" id="30" /> +<P2 x="350" y="335" id="22" /> +<Point x="310" y="335" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="51" > +<father id="54" num="0" /> +<cdparam x="310" y="335" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5608" id="58" > +<cdparam x="210" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="56" /> +<TGConnectingPoint num="1" id="57" /> +<P1 x="210" y="167" id="36" /> +<P2 x="250" y="235" id="29" /> +<Point x="210" y="235" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="55" > +<father id="58" num="0" /> +<cdparam x="210" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</AvatarMethodologyDiagramPanel> + +</Modeling> + + + + +<Modeling type="Avatar Requirement" nameTab="Reqs" > +<AvatarRDPanel name="AVATAR RD" minX="10" maxX="1400" minY="10" maxY="1400" zoom="1.0" > +<COMPONENT type="5201" id="74" > +<cdparam x="499" y="823" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="AuthenticityPragma" /> +<TGConnectingPoint num="0" id="59" /> +<TGConnectingPoint num="1" id="60" /> +<TGConnectingPoint num="2" id="61" /> +<TGConnectingPoint num="3" id="62" /> +<TGConnectingPoint num="4" id="63" /> +<TGConnectingPoint num="5" id="64" /> +<TGConnectingPoint num="6" id="65" /> +<TGConnectingPoint num="7" id="66" /> +<TGConnectingPoint num="8" id="67" /> +<TGConnectingPoint num="9" id="68" /> +<TGConnectingPoint num="10" id="69" /> +<TGConnectingPoint num="11" id="70" /> +<TGConnectingPoint num="12" id="71" /> +<TGConnectingPoint num="13" id="72" /> +<TGConnectingPoint num="14" id="73" /> +</COMPONENT> + +<COMPONENT type="5201" id="90" > +<cdparam x="210" y="819" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="148" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="ConfidentialityPragma" /> +<TGConnectingPoint num="0" id="75" /> +<TGConnectingPoint num="1" id="76" /> +<TGConnectingPoint num="2" id="77" /> +<TGConnectingPoint num="3" id="78" /> +<TGConnectingPoint num="4" id="79" /> +<TGConnectingPoint num="5" id="80" /> +<TGConnectingPoint num="6" id="81" /> +<TGConnectingPoint num="7" id="82" /> +<TGConnectingPoint num="8" id="83" /> +<TGConnectingPoint num="9" id="84" /> +<TGConnectingPoint num="10" id="85" /> +<TGConnectingPoint num="11" id="86" /> +<TGConnectingPoint num="12" id="87" /> +<TGConnectingPoint num="13" id="88" /> +<TGConnectingPoint num="14" id="89" /> +</COMPONENT> + +<COMPONENT type="5200" id="122" > +<cdparam x="263" y="561" /> +<sizeparam width="277" height="85" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="111" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="RemoteSecurity" /> +<TGConnectingPoint num="0" id="91" /> +<TGConnectingPoint num="1" id="92" /> +<TGConnectingPoint num="2" id="93" /> +<TGConnectingPoint num="3" id="94" /> +<TGConnectingPoint num="4" id="95" /> +<TGConnectingPoint num="5" id="96" /> +<TGConnectingPoint num="6" id="97" /> +<TGConnectingPoint num="7" id="98" /> +<TGConnectingPoint num="8" id="99" /> +<TGConnectingPoint num="9" id="100" /> +<TGConnectingPoint num="10" id="101" /> +<TGConnectingPoint num="11" id="102" /> +<TGConnectingPoint num="12" id="103" /> +<TGConnectingPoint num="13" id="104" /> +<TGConnectingPoint num="14" id="105" /> +<TGConnectingPoint num="15" id="106" /> +<TGConnectingPoint num="16" id="107" /> +<TGConnectingPoint num="17" id="108" /> +<TGConnectingPoint num="18" id="109" /> +<TGConnectingPoint num="19" id="110" /> +<TGConnectingPoint num="20" id="111" /> +<TGConnectingPoint num="21" id="112" /> +<TGConnectingPoint num="22" id="113" /> +<TGConnectingPoint num="23" id="114" /> +<TGConnectingPoint num="24" id="115" /> +<TGConnectingPoint num="25" id="116" /> +<TGConnectingPoint num="26" id="117" /> +<TGConnectingPoint num="27" id="118" /> +<TGConnectingPoint num="28" id="119" /> +<TGConnectingPoint num="29" id="120" /> +<TGConnectingPoint num="30" id="121" /> +<extraparam> +<textline data="The remote control of the microwave" /> +<textline data="shall be secure" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="2" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="131" > +<cdparam x="724" y="580" /> +<sizeparam width="352" height="170" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="Modeling assumptions +------------------- +The controller never fails. +None of the devices connected to the controller ever fails. +The oven is correctly initialized. +The oven is permanently connected to 220V AC. +There is no pet in the oven during operation. + +A sensor attached to the door enables detection of +"open door". +" /> +<TGConnectingPoint num="0" id="123" /> +<TGConnectingPoint num="1" id="124" /> +<TGConnectingPoint num="2" id="125" /> +<TGConnectingPoint num="3" id="126" /> +<TGConnectingPoint num="4" id="127" /> +<TGConnectingPoint num="5" id="128" /> +<TGConnectingPoint num="6" id="129" /> +<TGConnectingPoint num="7" id="130" /> +<extraparam> +<Line value="Modeling assumptions" /> +<Line value="-------------------" /> +<Line value="The controller never fails." /> +<Line value="None of the devices connected to the controller ever fails." /> +<Line value="The oven is correctly initialized." /> +<Line value="The oven is permanently connected to 220V AC." /> +<Line value="There is no pet in the oven during operation." /> +<Line value="" /> +<Line value="A sensor attached to the door enables detection of " /> +<Line value=""open door"." /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="163" > +<cdparam x="667" y="34" /> +<sizeparam width="313" height="139" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="165" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="StartButtonPressedCheck" /> +<TGConnectingPoint num="0" id="132" /> +<TGConnectingPoint num="1" id="133" /> +<TGConnectingPoint num="2" id="134" /> +<TGConnectingPoint num="3" id="135" /> +<TGConnectingPoint num="4" id="136" /> +<TGConnectingPoint num="5" id="137" /> +<TGConnectingPoint num="6" id="138" /> +<TGConnectingPoint num="7" id="139" /> +<TGConnectingPoint num="8" id="140" /> +<TGConnectingPoint num="9" id="141" /> +<TGConnectingPoint num="10" id="142" /> +<TGConnectingPoint num="11" id="143" /> +<TGConnectingPoint num="12" id="144" /> +<TGConnectingPoint num="13" id="145" /> +<TGConnectingPoint num="14" id="146" /> +<TGConnectingPoint num="15" id="147" /> +<TGConnectingPoint num="16" id="148" /> +<TGConnectingPoint num="17" id="149" /> +<TGConnectingPoint num="18" id="150" /> +<TGConnectingPoint num="19" id="151" /> +<TGConnectingPoint num="20" id="152" /> +<TGConnectingPoint num="21" id="153" /> +<TGConnectingPoint num="22" id="154" /> +<TGConnectingPoint num="23" id="155" /> +<TGConnectingPoint num="24" id="156" /> +<TGConnectingPoint num="25" id="157" /> +<TGConnectingPoint num="26" id="158" /> +<TGConnectingPoint num="27" id="159" /> +<TGConnectingPoint num="28" id="160" /> +<TGConnectingPoint num="29" id="161" /> +<TGConnectingPoint num="30" id="162" /> +<extraparam> +<textline data="The controller must not start the magnetron" /> +<textline data="as long as the user does not push the " /> +<textline data="Start button." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="195" > +<cdparam x="346" y="38" /> +<sizeparam width="256" height="109" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="57" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Inputs" /> +<TGConnectingPoint num="0" id="164" /> +<TGConnectingPoint num="1" id="165" /> +<TGConnectingPoint num="2" id="166" /> +<TGConnectingPoint num="3" id="167" /> +<TGConnectingPoint num="4" id="168" /> +<TGConnectingPoint num="5" id="169" /> +<TGConnectingPoint num="6" id="170" /> +<TGConnectingPoint num="7" id="171" /> +<TGConnectingPoint num="8" id="172" /> +<TGConnectingPoint num="9" id="173" /> +<TGConnectingPoint num="10" id="174" /> +<TGConnectingPoint num="11" id="175" /> +<TGConnectingPoint num="12" id="176" /> +<TGConnectingPoint num="13" id="177" /> +<TGConnectingPoint num="14" id="178" /> +<TGConnectingPoint num="15" id="179" /> +<TGConnectingPoint num="16" id="180" /> +<TGConnectingPoint num="17" id="181" /> +<TGConnectingPoint num="18" id="182" /> +<TGConnectingPoint num="19" id="183" /> +<TGConnectingPoint num="20" id="184" /> +<TGConnectingPoint num="21" id="185" /> +<TGConnectingPoint num="22" id="186" /> +<TGConnectingPoint num="23" id="187" /> +<TGConnectingPoint num="24" id="188" /> +<TGConnectingPoint num="25" id="189" /> +<TGConnectingPoint num="26" id="190" /> +<TGConnectingPoint num="27" id="191" /> +<TGConnectingPoint num="28" id="192" /> +<TGConnectingPoint num="29" id="193" /> +<TGConnectingPoint num="30" id="194" /> +<extraparam> +<textline data="The user uses a Start button to start " /> +<textline data="the heating process." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="227" > +<cdparam x="337" y="439" /> +<sizeparam width="313" height="103" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="43" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Bell" /> +<TGConnectingPoint num="0" id="196" /> +<TGConnectingPoint num="1" id="197" /> +<TGConnectingPoint num="2" id="198" /> +<TGConnectingPoint num="3" id="199" /> +<TGConnectingPoint num="4" id="200" /> +<TGConnectingPoint num="5" id="201" /> +<TGConnectingPoint num="6" id="202" /> +<TGConnectingPoint num="7" id="203" /> +<TGConnectingPoint num="8" id="204" /> +<TGConnectingPoint num="9" id="205" /> +<TGConnectingPoint num="10" id="206" /> +<TGConnectingPoint num="11" id="207" /> +<TGConnectingPoint num="12" id="208" /> +<TGConnectingPoint num="13" id="209" /> +<TGConnectingPoint num="14" id="210" /> +<TGConnectingPoint num="15" id="211" /> +<TGConnectingPoint num="16" id="212" /> +<TGConnectingPoint num="17" id="213" /> +<TGConnectingPoint num="18" id="214" /> +<TGConnectingPoint num="19" id="215" /> +<TGConnectingPoint num="20" id="216" /> +<TGConnectingPoint num="21" id="217" /> +<TGConnectingPoint num="22" id="218" /> +<TGConnectingPoint num="23" id="219" /> +<TGConnectingPoint num="24" id="220" /> +<TGConnectingPoint num="25" id="221" /> +<TGConnectingPoint num="26" id="222" /> +<TGConnectingPoint num="27" id="223" /> +<TGConnectingPoint num="28" id="224" /> +<TGConnectingPoint num="29" id="225" /> +<TGConnectingPoint num="30" id="226" /> +<extraparam> +<textline data="The bell rings only if the cooking time has" /> +<textline data="expired." /> +<kind data="Non-functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="259" > +<cdparam x="17" y="369" /> +<sizeparam width="284" height="112" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="75" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Overload" /> +<TGConnectingPoint num="0" id="228" /> +<TGConnectingPoint num="1" id="229" /> +<TGConnectingPoint num="2" id="230" /> +<TGConnectingPoint num="3" id="231" /> +<TGConnectingPoint num="4" id="232" /> +<TGConnectingPoint num="5" id="233" /> +<TGConnectingPoint num="6" id="234" /> +<TGConnectingPoint num="7" id="235" /> +<TGConnectingPoint num="8" id="236" /> +<TGConnectingPoint num="9" id="237" /> +<TGConnectingPoint num="10" id="238" /> +<TGConnectingPoint num="11" id="239" /> +<TGConnectingPoint num="12" id="240" /> +<TGConnectingPoint num="13" id="241" /> +<TGConnectingPoint num="14" id="242" /> +<TGConnectingPoint num="15" id="243" /> +<TGConnectingPoint num="16" id="244" /> +<TGConnectingPoint num="17" id="245" /> +<TGConnectingPoint num="18" id="246" /> +<TGConnectingPoint num="19" id="247" /> +<TGConnectingPoint num="20" id="248" /> +<TGConnectingPoint num="21" id="249" /> +<TGConnectingPoint num="22" id="250" /> +<TGConnectingPoint num="23" id="251" /> +<TGConnectingPoint num="24" id="252" /> +<TGConnectingPoint num="25" id="253" /> +<TGConnectingPoint num="26" id="254" /> +<TGConnectingPoint num="27" id="255" /> +<TGConnectingPoint num="28" id="256" /> +<TGConnectingPoint num="29" id="257" /> +<TGConnectingPoint num="30" id="258" /> +<extraparam> +<textline data="To avoid an overload of the magnetron," /> +<textline data="it should not be operated more than" /> +<textline data="10 time units at full power." /> +<kind data="Functional" /> +<criticality data="Medium" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="291" > +<cdparam x="10" y="177" /> +<sizeparam width="310" height="102" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="63" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Control" /> +<TGConnectingPoint num="0" id="260" /> +<TGConnectingPoint num="1" id="261" /> +<TGConnectingPoint num="2" id="262" /> +<TGConnectingPoint num="3" id="263" /> +<TGConnectingPoint num="4" id="264" /> +<TGConnectingPoint num="5" id="265" /> +<TGConnectingPoint num="6" id="266" /> +<TGConnectingPoint num="7" id="267" /> +<TGConnectingPoint num="8" id="268" /> +<TGConnectingPoint num="9" id="269" /> +<TGConnectingPoint num="10" id="270" /> +<TGConnectingPoint num="11" id="271" /> +<TGConnectingPoint num="12" id="272" /> +<TGConnectingPoint num="13" id="273" /> +<TGConnectingPoint num="14" id="274" /> +<TGConnectingPoint num="15" id="275" /> +<TGConnectingPoint num="16" id="276" /> +<TGConnectingPoint num="17" id="277" /> +<TGConnectingPoint num="18" id="278" /> +<TGConnectingPoint num="19" id="279" /> +<TGConnectingPoint num="20" id="280" /> +<TGConnectingPoint num="21" id="281" /> +<TGConnectingPoint num="22" id="282" /> +<TGConnectingPoint num="23" id="283" /> +<TGConnectingPoint num="24" id="284" /> +<TGConnectingPoint num="25" id="285" /> +<TGConnectingPoint num="26" id="286" /> +<TGConnectingPoint num="27" id="287" /> +<TGConnectingPoint num="28" id="288" /> +<TGConnectingPoint num="29" id="289" /> +<TGConnectingPoint num="30" id="290" /> +<extraparam> +<textline data="The controller pilots the magnetron." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="323" > +<cdparam x="24" y="11" /> +<sizeparam width="280" height="129" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Requirement_0" /> +<TGConnectingPoint num="0" id="292" /> +<TGConnectingPoint num="1" id="293" /> +<TGConnectingPoint num="2" id="294" /> +<TGConnectingPoint num="3" id="295" /> +<TGConnectingPoint num="4" id="296" /> +<TGConnectingPoint num="5" id="297" /> +<TGConnectingPoint num="6" id="298" /> +<TGConnectingPoint num="7" id="299" /> +<TGConnectingPoint num="8" id="300" /> +<TGConnectingPoint num="9" id="301" /> +<TGConnectingPoint num="10" id="302" /> +<TGConnectingPoint num="11" id="303" /> +<TGConnectingPoint num="12" id="304" /> +<TGConnectingPoint num="13" id="305" /> +<TGConnectingPoint num="14" id="306" /> +<TGConnectingPoint num="15" id="307" /> +<TGConnectingPoint num="16" id="308" /> +<TGConnectingPoint num="17" id="309" /> +<TGConnectingPoint num="18" id="310" /> +<TGConnectingPoint num="19" id="311" /> +<TGConnectingPoint num="20" id="312" /> +<TGConnectingPoint num="21" id="313" /> +<TGConnectingPoint num="22" id="314" /> +<TGConnectingPoint num="23" id="315" /> +<TGConnectingPoint num="24" id="316" /> +<TGConnectingPoint num="25" id="317" /> +<TGConnectingPoint num="26" id="318" /> +<TGConnectingPoint num="27" id="319" /> +<TGConnectingPoint num="28" id="320" /> +<TGConnectingPoint num="29" id="321" /> +<TGConnectingPoint num="30" id="322" /> +<extraparam> +<textline data="The micro-wave oven heats a plate" /> +<textline data="so as to keep food hot." /> +<kind data="Availability" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="1" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="355" > +<cdparam x="912" y="202" /> +<sizeparam width="311" height="97" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="139" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="DoorOpenOperation" /> +<TGConnectingPoint num="0" id="324" /> +<TGConnectingPoint num="1" id="325" /> +<TGConnectingPoint num="2" id="326" /> +<TGConnectingPoint num="3" id="327" /> +<TGConnectingPoint num="4" id="328" /> +<TGConnectingPoint num="5" id="329" /> +<TGConnectingPoint num="6" id="330" /> +<TGConnectingPoint num="7" id="331" /> +<TGConnectingPoint num="8" id="332" /> +<TGConnectingPoint num="9" id="333" /> +<TGConnectingPoint num="10" id="334" /> +<TGConnectingPoint num="11" id="335" /> +<TGConnectingPoint num="12" id="336" /> +<TGConnectingPoint num="13" id="337" /> +<TGConnectingPoint num="14" id="338" /> +<TGConnectingPoint num="15" id="339" /> +<TGConnectingPoint num="16" id="340" /> +<TGConnectingPoint num="17" id="341" /> +<TGConnectingPoint num="18" id="342" /> +<TGConnectingPoint num="19" id="343" /> +<TGConnectingPoint num="20" id="344" /> +<TGConnectingPoint num="21" id="345" /> +<TGConnectingPoint num="22" id="346" /> +<TGConnectingPoint num="23" id="347" /> +<TGConnectingPoint num="24" id="348" /> +<TGConnectingPoint num="25" id="349" /> +<TGConnectingPoint num="26" id="350" /> +<TGConnectingPoint num="27" id="351" /> +<TGConnectingPoint num="28" id="352" /> +<TGConnectingPoint num="29" id="353" /> +<TGConnectingPoint num="30" id="354" /> +<extraparam> +<textline data="When the door is opened during operation, " /> +<textline data="the magnetron is switched off for the time " /> +<textline data="the door remains open." /> +<kind data="Controlled access (authorization)" /> +<criticality data="High" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="387" > +<cdparam x="416" y="200" /> +<sizeparam width="387" height="97" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="99" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="DoorNotOpen" /> +<TGConnectingPoint num="0" id="356" /> +<TGConnectingPoint num="1" id="357" /> +<TGConnectingPoint num="2" id="358" /> +<TGConnectingPoint num="3" id="359" /> +<TGConnectingPoint num="4" id="360" /> +<TGConnectingPoint num="5" id="361" /> +<TGConnectingPoint num="6" id="362" /> +<TGConnectingPoint num="7" id="363" /> +<TGConnectingPoint num="8" id="364" /> +<TGConnectingPoint num="9" id="365" /> +<TGConnectingPoint num="10" id="366" /> +<TGConnectingPoint num="11" id="367" /> +<TGConnectingPoint num="12" id="368" /> +<TGConnectingPoint num="13" id="369" /> +<TGConnectingPoint num="14" id="370" /> +<TGConnectingPoint num="15" id="371" /> +<TGConnectingPoint num="16" id="372" /> +<TGConnectingPoint num="17" id="373" /> +<TGConnectingPoint num="18" id="374" /> +<TGConnectingPoint num="19" id="375" /> +<TGConnectingPoint num="20" id="376" /> +<TGConnectingPoint num="21" id="377" /> +<TGConnectingPoint num="22" id="378" /> +<TGConnectingPoint num="23" id="379" /> +<TGConnectingPoint num="24" id="380" /> +<TGConnectingPoint num="25" id="381" /> +<TGConnectingPoint num="26" id="382" /> +<TGConnectingPoint num="27" id="383" /> +<TGConnectingPoint num="28" id="384" /> +<TGConnectingPoint num="29" id="385" /> +<TGConnectingPoint num="30" id="386" /> +<extraparam> +<textline data="The heating unit is not started when the door is open." /> +<kind data="Controlled access (authorization)" /> +<criticality data="High" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5201" id="403" > +<cdparam x="1010" y="79" /> +<sizeparam width="206" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="54" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Req3" /> +<TGConnectingPoint num="0" id="388" /> +<TGConnectingPoint num="1" id="389" /> +<TGConnectingPoint num="2" id="390" /> +<TGConnectingPoint num="3" id="391" /> +<TGConnectingPoint num="4" id="392" /> +<TGConnectingPoint num="5" id="393" /> +<TGConnectingPoint num="6" id="394" /> +<TGConnectingPoint num="7" id="395" /> +<TGConnectingPoint num="8" id="396" /> +<TGConnectingPoint num="9" id="397" /> +<TGConnectingPoint num="10" id="398" /> +<TGConnectingPoint num="11" id="399" /> +<TGConnectingPoint num="12" id="400" /> +<TGConnectingPoint num="13" id="401" /> +<TGConnectingPoint num="14" id="402" /> +</COMPONENT> + +<COMPONENT type="5201" id="419" > +<cdparam x="704" y="345" /> +<sizeparam width="206" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="56" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Prop1" /> +<TGConnectingPoint num="0" id="404" /> +<TGConnectingPoint num="1" id="405" /> +<TGConnectingPoint num="2" id="406" /> +<TGConnectingPoint num="3" id="407" /> +<TGConnectingPoint num="4" id="408" /> +<TGConnectingPoint num="5" id="409" /> +<TGConnectingPoint num="6" id="410" /> +<TGConnectingPoint num="7" id="411" /> +<TGConnectingPoint num="8" id="412" /> +<TGConnectingPoint num="9" id="413" /> +<TGConnectingPoint num="10" id="414" /> +<TGConnectingPoint num="11" id="415" /> +<TGConnectingPoint num="12" id="416" /> +<TGConnectingPoint num="13" id="417" /> +<TGConnectingPoint num="14" id="418" /> +</COMPONENT> + +<COMPONENT type="5201" id="435" > +<cdparam x="61" y="524" /> +<sizeparam width="161" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="56" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Prop4" /> +<TGConnectingPoint num="0" id="420" /> +<TGConnectingPoint num="1" id="421" /> +<TGConnectingPoint num="2" id="422" /> +<TGConnectingPoint num="3" id="423" /> +<TGConnectingPoint num="4" id="424" /> +<TGConnectingPoint num="5" id="425" /> +<TGConnectingPoint num="6" id="426" /> +<TGConnectingPoint num="7" id="427" /> +<TGConnectingPoint num="8" id="428" /> +<TGConnectingPoint num="9" id="429" /> +<TGConnectingPoint num="10" id="430" /> +<TGConnectingPoint num="11" id="431" /> +<TGConnectingPoint num="12" id="432" /> +<TGConnectingPoint num="13" id="433" /> +<TGConnectingPoint num="14" id="434" /> +</COMPONENT> + +<COMPONENT type="5201" id="451" > +<cdparam x="506" y="319" /> +<sizeparam width="161" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="56" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Prop2" /> +<TGConnectingPoint num="0" id="436" /> +<TGConnectingPoint num="1" id="437" /> +<TGConnectingPoint num="2" id="438" /> +<TGConnectingPoint num="3" id="439" /> +<TGConnectingPoint num="4" id="440" /> +<TGConnectingPoint num="5" id="441" /> +<TGConnectingPoint num="6" id="442" /> +<TGConnectingPoint num="7" id="443" /> +<TGConnectingPoint num="8" id="444" /> +<TGConnectingPoint num="9" id="445" /> +<TGConnectingPoint num="10" id="446" /> +<TGConnectingPoint num="11" id="447" /> +<TGConnectingPoint num="12" id="448" /> +<TGConnectingPoint num="13" id="449" /> +<TGConnectingPoint num="14" id="450" /> +</COMPONENT> + +<COMPONENT type="5200" id="483" > +<cdparam x="439" y="675" /> +<sizeparam width="271" height="109" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="205" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="AuthenticityOfRemoteCommand" /> +<TGConnectingPoint num="0" id="452" /> +<TGConnectingPoint num="1" id="453" /> +<TGConnectingPoint num="2" id="454" /> +<TGConnectingPoint num="3" id="455" /> +<TGConnectingPoint num="4" id="456" /> +<TGConnectingPoint num="5" id="457" /> +<TGConnectingPoint num="6" id="458" /> +<TGConnectingPoint num="7" id="459" /> +<TGConnectingPoint num="8" id="460" /> +<TGConnectingPoint num="9" id="461" /> +<TGConnectingPoint num="10" id="462" /> +<TGConnectingPoint num="11" id="463" /> +<TGConnectingPoint num="12" id="464" /> +<TGConnectingPoint num="13" id="465" /> +<TGConnectingPoint num="14" id="466" /> +<TGConnectingPoint num="15" id="467" /> +<TGConnectingPoint num="16" id="468" /> +<TGConnectingPoint num="17" id="469" /> +<TGConnectingPoint num="18" id="470" /> +<TGConnectingPoint num="19" id="471" /> +<TGConnectingPoint num="20" id="472" /> +<TGConnectingPoint num="21" id="473" /> +<TGConnectingPoint num="22" id="474" /> +<TGConnectingPoint num="23" id="475" /> +<TGConnectingPoint num="24" id="476" /> +<TGConnectingPoint num="25" id="477" /> +<TGConnectingPoint num="26" id="478" /> +<TGConnectingPoint num="27" id="479" /> +<TGConnectingPoint num="28" id="480" /> +<TGConnectingPoint num="29" id="481" /> +<TGConnectingPoint num="30" id="482" /> +<extraparam> +<textline data="Data received wirelessly by the oven" /> +<textline data="must have been sent by the corresponding " /> +<textline data="remote control" /> +<kind data="Data origin authenticity" /> +<criticality data="High" /> +<reqType data="2" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="515" > +<cdparam x="161" y="674" /> +<sizeparam width="248" height="103" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="220" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="ConfidentialityOfRemoteCommand" /> +<TGConnectingPoint num="0" id="484" /> +<TGConnectingPoint num="1" id="485" /> +<TGConnectingPoint num="2" id="486" /> +<TGConnectingPoint num="3" id="487" /> +<TGConnectingPoint num="4" id="488" /> +<TGConnectingPoint num="5" id="489" /> +<TGConnectingPoint num="6" id="490" /> +<TGConnectingPoint num="7" id="491" /> +<TGConnectingPoint num="8" id="492" /> +<TGConnectingPoint num="9" id="493" /> +<TGConnectingPoint num="10" id="494" /> +<TGConnectingPoint num="11" id="495" /> +<TGConnectingPoint num="12" id="496" /> +<TGConnectingPoint num="13" id="497" /> +<TGConnectingPoint num="14" id="498" /> +<TGConnectingPoint num="15" id="499" /> +<TGConnectingPoint num="16" id="500" /> +<TGConnectingPoint num="17" id="501" /> +<TGConnectingPoint num="18" id="502" /> +<TGConnectingPoint num="19" id="503" /> +<TGConnectingPoint num="20" id="504" /> +<TGConnectingPoint num="21" id="505" /> +<TGConnectingPoint num="22" id="506" /> +<TGConnectingPoint num="23" id="507" /> +<TGConnectingPoint num="24" id="508" /> +<TGConnectingPoint num="25" id="509" /> +<TGConnectingPoint num="26" id="510" /> +<TGConnectingPoint num="27" id="511" /> +<TGConnectingPoint num="28" id="512" /> +<TGConnectingPoint num="29" id="513" /> +<TGConnectingPoint num="30" id="514" /> +<extraparam> +<textline data="Data sent by the remote control" /> +<textline data="of the microwave shall remain confidential" /> +<kind data="Confidentiality" /> +<criticality data="Medium" /> +<reqType data="2" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="5203" id="517" > +<cdparam x="575" y="876" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="516" /> +<P1 x="574" y="823" id="66" /> +<P2 x="574" y="784" id="474" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="519" > +<cdparam x="126" y="876" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="518" /> +<P1 x="285" y="819" id="82" /> +<P2 x="285" y="777" id="506" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="521" > +<cdparam x="619" y="728" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="520" /> +<P1 x="506" y="675" id="458" /> +<P2 x="470" y="646" id="102" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="523" > +<cdparam x="197" y="765" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="522" /> +<P1 x="285" y="674" id="491" /> +<P2 x="332" y="646" id="100" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="525" > +<cdparam x="330" y="611" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="524" /> +<P1 x="141" y="524" id="427" /> +<P2 x="159" y="481" id="250" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="527" > +<cdparam x="1113" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="526" /> +<P1 x="1113" y="79" id="395" /> +<P2 x="1067" y="299" id="346" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="529" > +<cdparam x="952" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="528" /> +<P1 x="912" y="250" id="325" /> +<P2 x="803" y="248" id="360" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="531" > +<cdparam x="856" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="530" /> +<P1 x="807" y="345" id="411" /> +<P2 x="706" y="297" id="379" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="533" > +<cdparam x="690" y="244" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="532" /> +<P1 x="609" y="200" id="363" /> +<P2 x="474" y="147" id="174" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="535" > +<cdparam x="636" y="108" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="534" /> +<P1 x="667" y="103" id="133" /> +<P2 x="602" y="92" id="168" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="537" > +<cdparam x="512" y="166" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="536" /> +<P1 x="346" y="92" id="165" /> +<P2 x="304" y="107" id="297" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="539" > +<cdparam x="268" y="309" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="538" /> +<P1 x="320" y="228" id="264" /> +<P2 x="415" y="439" id="202" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="543" > +<cdparam x="655" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="541" /> +<TGConnectingPoint num="1" id="542" /> +<P1 x="586" y="349" id="446" /> +<P2 x="493" y="439" id="215" /> +<Point x="535" y="394" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="540" > +<father id="543" num="0" /> +<cdparam x="535" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5202" id="545" > +<cdparam x="165" y="390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="544" /> +<P1 x="165" y="279" id="270" /> +<P2 x="159" y="369" id="235" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="547" > +<cdparam x="165" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="546" /> +<P1 x="164" y="140" id="302" /> +<P2 x="165" y="177" id="267" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</AvatarRDPanel> + +</Modeling> + + + + +<Modeling type="Avatar Requirement" nameTab="Safety_props" > +<AvatarPDPanel name="Prop1" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="549" > +<cdparam x="221" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="548" /> +<P1 x="221" y="237" id="562" /> +<P2 x="224" y="263" id="556" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="551" > +<cdparam x="130" y="239" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="550" /> +<P1 x="120" y="239" id="584" /> +<P2 x="191" y="187" id="566" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="553" > +<cdparam x="128" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="552" /> +<P1 x="118" y="191" id="597" /> +<P2 x="191" y="167" id="564" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="555" > +<cdparam x="125" y="82" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="554" /> +<P1 x="117" y="81" id="635" /> +<P2 x="197" y="137" id="569" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="560" > +<cdparam x="174" y="263" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Req1" /> +<TGConnectingPoint num="0" id="556" /> +<TGConnectingPoint num="1" id="557" /> +<TGConnectingPoint num="2" id="558" /> +<TGConnectingPoint num="3" id="559" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5301" id="581" > +<cdparam x="191" y="137" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="<<LC>>" /> +<TGConnectingPoint num="0" id="561" /> +<TGConnectingPoint num="1" id="562" /> +<TGConnectingPoint num="2" id="563" /> +<TGConnectingPoint num="3" id="564" /> +<TGConnectingPoint num="4" id="565" /> +<TGConnectingPoint num="5" id="566" /> +<TGConnectingPoint num="6" id="567" /> +<TGConnectingPoint num="7" id="568" /> +<TGConnectingPoint num="8" id="569" /> +<TGConnectingPoint num="9" id="570" /> +<TGConnectingPoint num="10" id="571" /> +<TGConnectingPoint num="11" id="572" /> +<TGConnectingPoint num="12" id="573" /> +<TGConnectingPoint num="13" id="574" /> +<TGConnectingPoint num="14" id="575" /> +<TGConnectingPoint num="15" id="576" /> +<TGConnectingPoint num="16" id="577" /> +<TGConnectingPoint num="17" id="578" /> +<TGConnectingPoint num="18" id="579" /> +<TGConnectingPoint num="19" id="580" /> +</COMPONENT> + +<COMPONENT type="5300" id="632" > +<cdparam x="10" y="128" /> +<sizeparam width="124" height="141" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Door" /> +<TGConnectingPoint num="0" id="608" /> +<TGConnectingPoint num="1" id="609" /> +<TGConnectingPoint num="2" id="610" /> +<TGConnectingPoint num="3" id="611" /> +<TGConnectingPoint num="4" id="612" /> +<TGConnectingPoint num="5" id="613" /> +<TGConnectingPoint num="6" id="614" /> +<TGConnectingPoint num="7" id="615" /> +<TGConnectingPoint num="8" id="616" /> +<TGConnectingPoint num="9" id="617" /> +<TGConnectingPoint num="10" id="618" /> +<TGConnectingPoint num="11" id="619" /> +<TGConnectingPoint num="12" id="620" /> +<TGConnectingPoint num="13" id="621" /> +<TGConnectingPoint num="14" id="622" /> +<TGConnectingPoint num="15" id="623" /> +<TGConnectingPoint num="16" id="624" /> +<TGConnectingPoint num="17" id="625" /> +<TGConnectingPoint num="18" id="626" /> +<TGConnectingPoint num="19" id="627" /> +<TGConnectingPoint num="20" id="628" /> +<TGConnectingPoint num="21" id="629" /> +<TGConnectingPoint num="22" id="630" /> +<TGConnectingPoint num="23" id="631" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="594" > +<father id="632" num="0" /> +<cdparam x="20" y="219" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="closed" /> +<TGConnectingPoint num="0" id="582" /> +<TGConnectingPoint num="1" id="583" /> +<TGConnectingPoint num="2" id="584" /> +<TGConnectingPoint num="3" id="585" /> +<TGConnectingPoint num="4" id="586" /> +<TGConnectingPoint num="5" id="587" /> +<TGConnectingPoint num="6" id="588" /> +<TGConnectingPoint num="7" id="589" /> +<TGConnectingPoint num="8" id="590" /> +<TGConnectingPoint num="9" id="591" /> +<TGConnectingPoint num="10" id="592" /> +<TGConnectingPoint num="11" id="593" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="607" > +<father id="632" num="1" /> +<cdparam x="18" y="171" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="open" /> +<TGConnectingPoint num="0" id="595" /> +<TGConnectingPoint num="1" id="596" /> +<TGConnectingPoint num="2" id="597" /> +<TGConnectingPoint num="3" id="598" /> +<TGConnectingPoint num="4" id="599" /> +<TGConnectingPoint num="5" id="600" /> +<TGConnectingPoint num="6" id="601" /> +<TGConnectingPoint num="7" id="602" /> +<TGConnectingPoint num="8" id="603" /> +<TGConnectingPoint num="9" id="604" /> +<TGConnectingPoint num="10" id="605" /> +<TGConnectingPoint num="11" id="606" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="670" > +<cdparam x="10" y="20" /> +<sizeparam width="124" height="95" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="646" /> +<TGConnectingPoint num="1" id="647" /> +<TGConnectingPoint num="2" id="648" /> +<TGConnectingPoint num="3" id="649" /> +<TGConnectingPoint num="4" id="650" /> +<TGConnectingPoint num="5" id="651" /> +<TGConnectingPoint num="6" id="652" /> +<TGConnectingPoint num="7" id="653" /> +<TGConnectingPoint num="8" id="654" /> +<TGConnectingPoint num="9" id="655" /> +<TGConnectingPoint num="10" id="656" /> +<TGConnectingPoint num="11" id="657" /> +<TGConnectingPoint num="12" id="658" /> +<TGConnectingPoint num="13" id="659" /> +<TGConnectingPoint num="14" id="660" /> +<TGConnectingPoint num="15" id="661" /> +<TGConnectingPoint num="16" id="662" /> +<TGConnectingPoint num="17" id="663" /> +<TGConnectingPoint num="18" id="664" /> +<TGConnectingPoint num="19" id="665" /> +<TGConnectingPoint num="20" id="666" /> +<TGConnectingPoint num="21" id="667" /> +<TGConnectingPoint num="22" id="668" /> +<TGConnectingPoint num="23" id="669" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="645" > +<father id="670" num="0" /> +<cdparam x="17" y="61" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="55" /> +<infoparam name="TGComponent" value="startMagnetron" /> +<TGConnectingPoint num="0" id="633" /> +<TGConnectingPoint num="1" id="634" /> +<TGConnectingPoint num="2" id="635" /> +<TGConnectingPoint num="3" id="636" /> +<TGConnectingPoint num="4" id="637" /> +<TGConnectingPoint num="5" id="638" /> +<TGConnectingPoint num="6" id="639" /> +<TGConnectingPoint num="7" id="640" /> +<TGConnectingPoint num="8" id="641" /> +<TGConnectingPoint num="9" id="642" /> +<TGConnectingPoint num="10" id="643" /> +<TGConnectingPoint num="11" id="644" /> +</SUBCOMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="Prop2" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="672" > +<cdparam x="214" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="671" /> +<P1 x="205" y="221" id="697" /> +<P2 x="205" y="247" id="679" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="674" > +<cdparam x="130" y="76" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="673" /> +<P1 x="141" y="80" id="716" /> +<P2 x="179" y="60" id="686" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="676" > +<cdparam x="179" y="10" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="675" /> +<P1 x="141" y="146" id="724" /> +<P2 x="175" y="146" id="698" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="678" > +<cdparam x="331" y="141" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="677" /> +<P1 x="220" y="85" id="684" /> +<P2 x="220" y="121" id="696" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="683" > +<cdparam x="155" y="247" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Req2" /> +<TGConnectingPoint num="0" id="679" /> +<TGConnectingPoint num="1" id="680" /> +<TGConnectingPoint num="2" id="681" /> +<TGConnectingPoint num="3" id="682" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5306" id="695" > +<cdparam x="179" y="35" /> +<sizeparam width="118" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="remainingTime==0" /> +<TGConnectingPoint num="0" id="684" /> +<TGConnectingPoint num="1" id="685" /> +<TGConnectingPoint num="2" id="686" /> +<TGConnectingPoint num="3" id="687" /> +<TGConnectingPoint num="4" id="688" /> +<TGConnectingPoint num="5" id="689" /> +<TGConnectingPoint num="6" id="690" /> +<TGConnectingPoint num="7" id="691" /> +<TGConnectingPoint num="8" id="692" /> +<TGConnectingPoint num="9" id="693" /> +<TGConnectingPoint num="10" id="694" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="708" > +<cdparam x="175" y="121" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="=0" /> +<TGConnectingPoint num="0" id="696" /> +<TGConnectingPoint num="1" id="697" /> +<TGConnectingPoint num="2" id="698" /> +<TGConnectingPoint num="3" id="699" /> +<TGConnectingPoint num="4" id="700" /> +<TGConnectingPoint num="5" id="701" /> +<TGConnectingPoint num="6" id="702" /> +<TGConnectingPoint num="7" id="703" /> +<TGConnectingPoint num="8" id="704" /> +<TGConnectingPoint num="9" id="705" /> +<TGConnectingPoint num="10" id="706" /> +<TGConnectingPoint num="11" id="707" /> +</COMPONENT> + +<COMPONENT type="5300" id="759" > +<cdparam x="37" y="24" /> +<sizeparam width="114" height="166" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="735" /> +<TGConnectingPoint num="1" id="736" /> +<TGConnectingPoint num="2" id="737" /> +<TGConnectingPoint num="3" id="738" /> +<TGConnectingPoint num="4" id="739" /> +<TGConnectingPoint num="5" id="740" /> +<TGConnectingPoint num="6" id="741" /> +<TGConnectingPoint num="7" id="742" /> +<TGConnectingPoint num="8" id="743" /> +<TGConnectingPoint num="9" id="744" /> +<TGConnectingPoint num="10" id="745" /> +<TGConnectingPoint num="11" id="746" /> +<TGConnectingPoint num="12" id="747" /> +<TGConnectingPoint num="13" id="748" /> +<TGConnectingPoint num="14" id="749" /> +<TGConnectingPoint num="15" id="750" /> +<TGConnectingPoint num="16" id="751" /> +<TGConnectingPoint num="17" id="752" /> +<TGConnectingPoint num="18" id="753" /> +<TGConnectingPoint num="19" id="754" /> +<TGConnectingPoint num="20" id="755" /> +<TGConnectingPoint num="21" id="756" /> +<TGConnectingPoint num="22" id="757" /> +<TGConnectingPoint num="23" id="758" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="721" > +<father id="759" num="0" /> +<cdparam x="41" y="68" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="14" minY="0" maxY="116" /> +<infoparam name="TGComponent" value="remainingTime" /> +<TGConnectingPoint num="0" id="709" /> +<TGConnectingPoint num="1" id="710" /> +<TGConnectingPoint num="2" id="711" /> +<TGConnectingPoint num="3" id="712" /> +<TGConnectingPoint num="4" id="713" /> +<TGConnectingPoint num="5" id="714" /> +<TGConnectingPoint num="6" id="715" /> +<TGConnectingPoint num="7" id="716" /> +<TGConnectingPoint num="8" id="717" /> +<TGConnectingPoint num="9" id="718" /> +<TGConnectingPoint num="10" id="719" /> +<TGConnectingPoint num="11" id="720" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="734" > +<father id="759" num="1" /> +<cdparam x="41" y="126" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="14" minY="0" maxY="126" /> +<infoparam name="TGComponent" value="ringBell" /> +<TGConnectingPoint num="0" id="722" /> +<TGConnectingPoint num="1" id="723" /> +<TGConnectingPoint num="2" id="724" /> +<TGConnectingPoint num="3" id="725" /> +<TGConnectingPoint num="4" id="726" /> +<TGConnectingPoint num="5" id="727" /> +<TGConnectingPoint num="6" id="728" /> +<TGConnectingPoint num="7" id="729" /> +<TGConnectingPoint num="8" id="730" /> +<TGConnectingPoint num="9" id="731" /> +<TGConnectingPoint num="10" id="732" /> +<TGConnectingPoint num="11" id="733" /> +</SUBCOMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="Prop3" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="761" > +<cdparam x="205" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="760" /> +<P1 x="205" y="420" id="853" /> +<P2 x="206" y="452" id="776" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="763" > +<cdparam x="127" y="89" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="762" /> +<P1 x="124" y="92" id="783" /> +<P2 x="186" y="145" id="821" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="765" > +<cdparam x="145" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="764" /> +<P1 x="119" y="400" id="939" /> +<P2 x="175" y="370" id="857" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="767" > +<cdparam x="144" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="766" /> +<P1 x="121" y="353" id="926" /> +<P2 x="175" y="350" id="855" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="769" > +<cdparam x="146" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="768" /> +<P1 x="120" y="248" id="875" /> +<P2 x="189" y="226" id="834" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="771" > +<cdparam x="144" y="204" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="770" /> +<P1 x="122" y="198" id="888" /> +<P2 x="189" y="216" id="833" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="773" > +<cdparam x="337" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="772" /> +<P1 x="231" y="170" id="819" /> +<P2 x="234" y="196" id="831" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="775" > +<cdparam x="273" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="774" /> +<P1 x="219" y="296" id="832" /> +<P2 x="220" y="320" id="852" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="780" > +<cdparam x="156" y="452" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Req3" /> +<TGConnectingPoint num="0" id="776" /> +<TGConnectingPoint num="1" id="777" /> +<TGConnectingPoint num="2" id="778" /> +<TGConnectingPoint num="3" id="779" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5300" id="818" > +<cdparam x="11" y="22" /> +<sizeparam width="122" height="103" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Magnetron" /> +<TGConnectingPoint num="0" id="794" /> +<TGConnectingPoint num="1" id="795" /> +<TGConnectingPoint num="2" id="796" /> +<TGConnectingPoint num="3" id="797" /> +<TGConnectingPoint num="4" id="798" /> +<TGConnectingPoint num="5" id="799" /> +<TGConnectingPoint num="6" id="800" /> +<TGConnectingPoint num="7" id="801" /> +<TGConnectingPoint num="8" id="802" /> +<TGConnectingPoint num="9" id="803" /> +<TGConnectingPoint num="10" id="804" /> +<TGConnectingPoint num="11" id="805" /> +<TGConnectingPoint num="12" id="806" /> +<TGConnectingPoint num="13" id="807" /> +<TGConnectingPoint num="14" id="808" /> +<TGConnectingPoint num="15" id="809" /> +<TGConnectingPoint num="16" id="810" /> +<TGConnectingPoint num="17" id="811" /> +<TGConnectingPoint num="18" id="812" /> +<TGConnectingPoint num="19" id="813" /> +<TGConnectingPoint num="20" id="814" /> +<TGConnectingPoint num="21" id="815" /> +<TGConnectingPoint num="22" id="816" /> +<TGConnectingPoint num="23" id="817" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="793" > +<father id="818" num="0" /> +<cdparam x="24" y="67" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="22" minY="0" maxY="53" /> +<infoparam name="TGComponent" value="magnetronState" /> +<TGConnectingPoint num="0" id="781" /> +<TGConnectingPoint num="1" id="782" /> +<TGConnectingPoint num="2" id="783" /> +<TGConnectingPoint num="3" id="784" /> +<TGConnectingPoint num="4" id="785" /> +<TGConnectingPoint num="5" id="786" /> +<TGConnectingPoint num="6" id="787" /> +<TGConnectingPoint num="7" id="788" /> +<TGConnectingPoint num="8" id="789" /> +<TGConnectingPoint num="9" id="790" /> +<TGConnectingPoint num="10" id="791" /> +<TGConnectingPoint num="11" id="792" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="830" > +<cdparam x="186" y="120" /> +<sizeparam width="129" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="magnetronState==off" /> +<TGConnectingPoint num="0" id="819" /> +<TGConnectingPoint num="1" id="820" /> +<TGConnectingPoint num="2" id="821" /> +<TGConnectingPoint num="3" id="822" /> +<TGConnectingPoint num="4" id="823" /> +<TGConnectingPoint num="5" id="824" /> +<TGConnectingPoint num="6" id="825" /> +<TGConnectingPoint num="7" id="826" /> +<TGConnectingPoint num="8" id="827" /> +<TGConnectingPoint num="9" id="828" /> +<TGConnectingPoint num="10" id="829" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5301" id="851" > +<cdparam x="189" y="196" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="<<LS>>" /> +<TGConnectingPoint num="0" id="831" /> +<TGConnectingPoint num="1" id="832" /> +<TGConnectingPoint num="2" id="833" /> +<TGConnectingPoint num="3" id="834" /> +<TGConnectingPoint num="4" id="835" /> +<TGConnectingPoint num="5" id="836" /> +<TGConnectingPoint num="6" id="837" /> +<TGConnectingPoint num="7" id="838" /> +<TGConnectingPoint num="8" id="839" /> +<TGConnectingPoint num="9" id="840" /> +<TGConnectingPoint num="10" id="841" /> +<TGConnectingPoint num="11" id="842" /> +<TGConnectingPoint num="12" id="843" /> +<TGConnectingPoint num="13" id="844" /> +<TGConnectingPoint num="14" id="845" /> +<TGConnectingPoint num="15" id="846" /> +<TGConnectingPoint num="16" id="847" /> +<TGConnectingPoint num="17" id="848" /> +<TGConnectingPoint num="18" id="849" /> +<TGConnectingPoint num="19" id="850" /> +</COMPONENT> + +<COMPONENT type="5301" id="872" > +<cdparam x="175" y="320" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="<<LS>>" /> +<TGConnectingPoint num="0" id="852" /> +<TGConnectingPoint num="1" id="853" /> +<TGConnectingPoint num="2" id="854" /> +<TGConnectingPoint num="3" id="855" /> +<TGConnectingPoint num="4" id="856" /> +<TGConnectingPoint num="5" id="857" /> +<TGConnectingPoint num="6" id="858" /> +<TGConnectingPoint num="7" id="859" /> +<TGConnectingPoint num="8" id="860" /> +<TGConnectingPoint num="9" id="861" /> +<TGConnectingPoint num="10" id="862" /> +<TGConnectingPoint num="11" id="863" /> +<TGConnectingPoint num="12" id="864" /> +<TGConnectingPoint num="13" id="865" /> +<TGConnectingPoint num="14" id="866" /> +<TGConnectingPoint num="15" id="867" /> +<TGConnectingPoint num="16" id="868" /> +<TGConnectingPoint num="17" id="869" /> +<TGConnectingPoint num="18" id="870" /> +<TGConnectingPoint num="19" id="871" /> +</COMPONENT> + +<COMPONENT type="5300" id="923" > +<cdparam x="10" y="137" /> +<sizeparam width="124" height="141" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Door" /> +<TGConnectingPoint num="0" id="899" /> +<TGConnectingPoint num="1" id="900" /> +<TGConnectingPoint num="2" id="901" /> +<TGConnectingPoint num="3" id="902" /> +<TGConnectingPoint num="4" id="903" /> +<TGConnectingPoint num="5" id="904" /> +<TGConnectingPoint num="6" id="905" /> +<TGConnectingPoint num="7" id="906" /> +<TGConnectingPoint num="8" id="907" /> +<TGConnectingPoint num="9" id="908" /> +<TGConnectingPoint num="10" id="909" /> +<TGConnectingPoint num="11" id="910" /> +<TGConnectingPoint num="12" id="911" /> +<TGConnectingPoint num="13" id="912" /> +<TGConnectingPoint num="14" id="913" /> +<TGConnectingPoint num="15" id="914" /> +<TGConnectingPoint num="16" id="915" /> +<TGConnectingPoint num="17" id="916" /> +<TGConnectingPoint num="18" id="917" /> +<TGConnectingPoint num="19" id="918" /> +<TGConnectingPoint num="20" id="919" /> +<TGConnectingPoint num="21" id="920" /> +<TGConnectingPoint num="22" id="921" /> +<TGConnectingPoint num="23" id="922" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="885" > +<father id="923" num="0" /> +<cdparam x="20" y="228" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="closed" /> +<TGConnectingPoint num="0" id="873" /> +<TGConnectingPoint num="1" id="874" /> +<TGConnectingPoint num="2" id="875" /> +<TGConnectingPoint num="3" id="876" /> +<TGConnectingPoint num="4" id="877" /> +<TGConnectingPoint num="5" id="878" /> +<TGConnectingPoint num="6" id="879" /> +<TGConnectingPoint num="7" id="880" /> +<TGConnectingPoint num="8" id="881" /> +<TGConnectingPoint num="9" id="882" /> +<TGConnectingPoint num="10" id="883" /> +<TGConnectingPoint num="11" id="884" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="898" > +<father id="923" num="1" /> +<cdparam x="22" y="178" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="open" /> +<TGConnectingPoint num="0" id="886" /> +<TGConnectingPoint num="1" id="887" /> +<TGConnectingPoint num="2" id="888" /> +<TGConnectingPoint num="3" id="889" /> +<TGConnectingPoint num="4" id="890" /> +<TGConnectingPoint num="5" id="891" /> +<TGConnectingPoint num="6" id="892" /> +<TGConnectingPoint num="7" id="893" /> +<TGConnectingPoint num="8" id="894" /> +<TGConnectingPoint num="9" id="895" /> +<TGConnectingPoint num="10" id="896" /> +<TGConnectingPoint num="11" id="897" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="974" > +<cdparam x="10" y="288" /> +<sizeparam width="124" height="139" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="950" /> +<TGConnectingPoint num="1" id="951" /> +<TGConnectingPoint num="2" id="952" /> +<TGConnectingPoint num="3" id="953" /> +<TGConnectingPoint num="4" id="954" /> +<TGConnectingPoint num="5" id="955" /> +<TGConnectingPoint num="6" id="956" /> +<TGConnectingPoint num="7" id="957" /> +<TGConnectingPoint num="8" id="958" /> +<TGConnectingPoint num="9" id="959" /> +<TGConnectingPoint num="10" id="960" /> +<TGConnectingPoint num="11" id="961" /> +<TGConnectingPoint num="12" id="962" /> +<TGConnectingPoint num="13" id="963" /> +<TGConnectingPoint num="14" id="964" /> +<TGConnectingPoint num="15" id="965" /> +<TGConnectingPoint num="16" id="966" /> +<TGConnectingPoint num="17" id="967" /> +<TGConnectingPoint num="18" id="968" /> +<TGConnectingPoint num="19" id="969" /> +<TGConnectingPoint num="20" id="970" /> +<TGConnectingPoint num="21" id="971" /> +<TGConnectingPoint num="22" id="972" /> +<TGConnectingPoint num="23" id="973" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="936" > +<father id="974" num="0" /> +<cdparam x="21" y="333" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="99" /> +<infoparam name="TGComponent" value="startCooking" /> +<TGConnectingPoint num="0" id="924" /> +<TGConnectingPoint num="1" id="925" /> +<TGConnectingPoint num="2" id="926" /> +<TGConnectingPoint num="3" id="927" /> +<TGConnectingPoint num="4" id="928" /> +<TGConnectingPoint num="5" id="929" /> +<TGConnectingPoint num="6" id="930" /> +<TGConnectingPoint num="7" id="931" /> +<TGConnectingPoint num="8" id="932" /> +<TGConnectingPoint num="9" id="933" /> +<TGConnectingPoint num="10" id="934" /> +<TGConnectingPoint num="11" id="935" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="949" > +<father id="974" num="1" /> +<cdparam x="19" y="380" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="99" /> +<infoparam name="TGComponent" value="stopCooking" /> +<TGConnectingPoint num="0" id="937" /> +<TGConnectingPoint num="1" id="938" /> +<TGConnectingPoint num="2" id="939" /> +<TGConnectingPoint num="3" id="940" /> +<TGConnectingPoint num="4" id="941" /> +<TGConnectingPoint num="5" id="942" /> +<TGConnectingPoint num="6" id="943" /> +<TGConnectingPoint num="7" id="944" /> +<TGConnectingPoint num="8" id="945" /> +<TGConnectingPoint num="9" id="946" /> +<TGConnectingPoint num="10" id="947" /> +<TGConnectingPoint num="11" id="948" /> +</SUBCOMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="Prop4" minX="10" maxX="900" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="976" > +<cdparam x="328" y="172" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="975" /> +<P1 x="323" y="163" id="1053" /> +<P2 x="324" y="190" id="985" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="978" > +<cdparam x="125" y="108" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="977" /> +<P1 x="121" y="96" id="992" /> +<P2 x="149" y="106" id="1034" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="980" > +<cdparam x="125" y="95" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="979" /> +<P1 x="121" y="83" id="997" /> +<P2 x="151" y="47" id="1046" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="982" > +<cdparam x="186" y="256" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="981" /> +<P1 x="234" y="144" id="1037" /> +<P2 x="293" y="138" id="1055" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="984" > +<cdparam x="213" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="983" /> +<P1 x="236" y="85" id="1049" /> +<P2 x="293" y="88" id="1054" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="989" > +<cdparam x="274" y="190" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Prop" /> +<TGConnectingPoint num="0" id="985" /> +<TGConnectingPoint num="1" id="986" /> +<TGConnectingPoint num="2" id="987" /> +<TGConnectingPoint num="3" id="988" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5300" id="1027" > +<cdparam x="10" y="32" /> +<sizeparam width="124" height="110" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="Block0" value="Magnetron" /> +<TGConnectingPoint num="0" id="1003" /> +<TGConnectingPoint num="1" id="1004" /> +<TGConnectingPoint num="2" id="1005" /> +<TGConnectingPoint num="3" id="1006" /> +<TGConnectingPoint num="4" id="1007" /> +<TGConnectingPoint num="5" id="1008" /> +<TGConnectingPoint num="6" id="1009" /> +<TGConnectingPoint num="7" id="1010" /> +<TGConnectingPoint num="8" id="1011" /> +<TGConnectingPoint num="9" id="1012" /> +<TGConnectingPoint num="10" id="1013" /> +<TGConnectingPoint num="11" id="1014" /> +<TGConnectingPoint num="12" id="1015" /> +<TGConnectingPoint num="13" id="1016" /> +<TGConnectingPoint num="14" id="1017" /> +<TGConnectingPoint num="15" id="1018" /> +<TGConnectingPoint num="16" id="1019" /> +<TGConnectingPoint num="17" id="1020" /> +<TGConnectingPoint num="18" id="1021" /> +<TGConnectingPoint num="19" id="1022" /> +<TGConnectingPoint num="20" id="1023" /> +<TGConnectingPoint num="21" id="1024" /> +<TGConnectingPoint num="22" id="1025" /> +<TGConnectingPoint num="23" id="1026" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="1002" > +<father id="1027" num="0" /> +<cdparam x="21" y="71" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="60" /> +<infoparam name="TGComponent" value="power" /> +<TGConnectingPoint num="0" id="990" /> +<TGConnectingPoint num="1" id="991" /> +<TGConnectingPoint num="2" id="992" /> +<TGConnectingPoint num="3" id="993" /> +<TGConnectingPoint num="4" id="994" /> +<TGConnectingPoint num="5" id="995" /> +<TGConnectingPoint num="6" id="996" /> +<TGConnectingPoint num="7" id="997" /> +<TGConnectingPoint num="8" id="998" /> +<TGConnectingPoint num="9" id="999" /> +<TGConnectingPoint num="10" id="1000" /> +<TGConnectingPoint num="11" id="1001" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="1039" > +<cdparam x="149" y="94" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="power<100" /> +<TGConnectingPoint num="0" id="1028" /> +<TGConnectingPoint num="1" id="1029" /> +<TGConnectingPoint num="2" id="1030" /> +<TGConnectingPoint num="3" id="1031" /> +<TGConnectingPoint num="4" id="1032" /> +<TGConnectingPoint num="5" id="1033" /> +<TGConnectingPoint num="6" id="1034" /> +<TGConnectingPoint num="7" id="1035" /> +<TGConnectingPoint num="8" id="1036" /> +<TGConnectingPoint num="9" id="1037" /> +<TGConnectingPoint num="10" id="1038" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5306" id="1051" > +<cdparam x="151" y="35" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="power=100" /> +<TGConnectingPoint num="0" id="1040" /> +<TGConnectingPoint num="1" id="1041" /> +<TGConnectingPoint num="2" id="1042" /> +<TGConnectingPoint num="3" id="1043" /> +<TGConnectingPoint num="4" id="1044" /> +<TGConnectingPoint num="5" id="1045" /> +<TGConnectingPoint num="6" id="1046" /> +<TGConnectingPoint num="7" id="1047" /> +<TGConnectingPoint num="8" id="1048" /> +<TGConnectingPoint num="9" id="1049" /> +<TGConnectingPoint num="10" id="1050" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="1064" > +<cdparam x="293" y="63" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="< 10" /> +<TGConnectingPoint num="0" id="1052" /> +<TGConnectingPoint num="1" id="1053" /> +<TGConnectingPoint num="2" id="1054" /> +<TGConnectingPoint num="3" id="1055" /> +<TGConnectingPoint num="4" id="1056" /> +<TGConnectingPoint num="5" id="1057" /> +<TGConnectingPoint num="6" id="1058" /> +<TGConnectingPoint num="7" id="1059" /> +<TGConnectingPoint num="8" id="1060" /> +<TGConnectingPoint num="9" id="1061" /> +<TGConnectingPoint num="10" id="1062" /> +<TGConnectingPoint num="11" id="1063" /> +</COMPONENT> + + +</AvatarPDPanel> + +</Modeling> + + + + +<Modeling type="Avatar Analysis" nameTab="Analysis_UseCase" > +<UseCaseDiagramPanel name="Use case" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="703" id="1097" > +<cdparam x="144" y="84" /> +<sizeparam width="116" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Magnetron actuator" /> +<TGConnectingPoint num="0" id="1065" /> +<TGConnectingPoint num="1" id="1066" /> +<TGConnectingPoint num="2" id="1067" /> +<TGConnectingPoint num="3" id="1068" /> +<TGConnectingPoint num="4" id="1069" /> +<TGConnectingPoint num="5" id="1070" /> +<TGConnectingPoint num="6" id="1071" /> +<TGConnectingPoint num="7" id="1072" /> +<TGConnectingPoint num="8" id="1073" /> +<TGConnectingPoint num="9" id="1074" /> +<TGConnectingPoint num="10" id="1075" /> +<TGConnectingPoint num="11" id="1076" /> +<TGConnectingPoint num="12" id="1077" /> +<TGConnectingPoint num="13" id="1078" /> +<TGConnectingPoint num="14" id="1079" /> +<TGConnectingPoint num="15" id="1080" /> +<TGConnectingPoint num="16" id="1081" /> +<TGConnectingPoint num="17" id="1082" /> +<TGConnectingPoint num="18" id="1083" /> +<TGConnectingPoint num="19" id="1084" /> +<TGConnectingPoint num="20" id="1085" /> +<TGConnectingPoint num="21" id="1086" /> +<TGConnectingPoint num="22" id="1087" /> +<TGConnectingPoint num="23" id="1088" /> +<TGConnectingPoint num="24" id="1089" /> +<TGConnectingPoint num="25" id="1090" /> +<TGConnectingPoint num="26" id="1091" /> +<TGConnectingPoint num="27" id="1092" /> +<TGConnectingPoint num="28" id="1093" /> +<TGConnectingPoint num="29" id="1094" /> +<TGConnectingPoint num="30" id="1095" /> +<TGConnectingPoint num="31" id="1096" /> +</COMPONENT> + +<COMPONENT type="703" id="1130" > +<cdparam x="161" y="171" /> +<sizeparam width="75" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Bell actuator" /> +<TGConnectingPoint num="0" id="1098" /> +<TGConnectingPoint num="1" id="1099" /> +<TGConnectingPoint num="2" id="1100" /> +<TGConnectingPoint num="3" id="1101" /> +<TGConnectingPoint num="4" id="1102" /> +<TGConnectingPoint num="5" id="1103" /> +<TGConnectingPoint num="6" id="1104" /> +<TGConnectingPoint num="7" id="1105" /> +<TGConnectingPoint num="8" id="1106" /> +<TGConnectingPoint num="9" id="1107" /> +<TGConnectingPoint num="10" id="1108" /> +<TGConnectingPoint num="11" id="1109" /> +<TGConnectingPoint num="12" id="1110" /> +<TGConnectingPoint num="13" id="1111" /> +<TGConnectingPoint num="14" id="1112" /> +<TGConnectingPoint num="15" id="1113" /> +<TGConnectingPoint num="16" id="1114" /> +<TGConnectingPoint num="17" id="1115" /> +<TGConnectingPoint num="18" id="1116" /> +<TGConnectingPoint num="19" id="1117" /> +<TGConnectingPoint num="20" id="1118" /> +<TGConnectingPoint num="21" id="1119" /> +<TGConnectingPoint num="22" id="1120" /> +<TGConnectingPoint num="23" id="1121" /> +<TGConnectingPoint num="24" id="1122" /> +<TGConnectingPoint num="25" id="1123" /> +<TGConnectingPoint num="26" id="1124" /> +<TGConnectingPoint num="27" id="1125" /> +<TGConnectingPoint num="28" id="1126" /> +<TGConnectingPoint num="29" id="1127" /> +<TGConnectingPoint num="30" id="1128" /> +<TGConnectingPoint num="31" id="1129" /> +</COMPONENT> + +<COMPONENT type="701" id="1155" > +<cdparam x="284" y="176" /> +<sizeparam width="77" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Ringing bell" /> +<TGConnectingPoint num="0" id="1131" /> +<TGConnectingPoint num="1" id="1132" /> +<TGConnectingPoint num="2" id="1133" /> +<TGConnectingPoint num="3" id="1134" /> +<TGConnectingPoint num="4" id="1135" /> +<TGConnectingPoint num="5" id="1136" /> +<TGConnectingPoint num="6" id="1137" /> +<TGConnectingPoint num="7" id="1138" /> +<TGConnectingPoint num="8" id="1139" /> +<TGConnectingPoint num="9" id="1140" /> +<TGConnectingPoint num="10" id="1141" /> +<TGConnectingPoint num="11" id="1142" /> +<TGConnectingPoint num="12" id="1143" /> +<TGConnectingPoint num="13" id="1144" /> +<TGConnectingPoint num="14" id="1145" /> +<TGConnectingPoint num="15" id="1146" /> +<TGConnectingPoint num="16" id="1147" /> +<TGConnectingPoint num="17" id="1148" /> +<TGConnectingPoint num="18" id="1149" /> +<TGConnectingPoint num="19" id="1150" /> +<TGConnectingPoint num="20" id="1151" /> +<TGConnectingPoint num="21" id="1152" /> +<TGConnectingPoint num="22" id="1153" /> +<TGConnectingPoint num="23" id="1154" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="703" id="1188" > +<cdparam x="677" y="311" /> +<sizeparam width="230" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Wireless interface of the remote control" /> +<TGConnectingPoint num="0" id="1156" /> +<TGConnectingPoint num="1" id="1157" /> +<TGConnectingPoint num="2" id="1158" /> +<TGConnectingPoint num="3" id="1159" /> +<TGConnectingPoint num="4" id="1160" /> +<TGConnectingPoint num="5" id="1161" /> +<TGConnectingPoint num="6" id="1162" /> +<TGConnectingPoint num="7" id="1163" /> +<TGConnectingPoint num="8" id="1164" /> +<TGConnectingPoint num="9" id="1165" /> +<TGConnectingPoint num="10" id="1166" /> +<TGConnectingPoint num="11" id="1167" /> +<TGConnectingPoint num="12" id="1168" /> +<TGConnectingPoint num="13" id="1169" /> +<TGConnectingPoint num="14" id="1170" /> +<TGConnectingPoint num="15" id="1171" /> +<TGConnectingPoint num="16" id="1172" /> +<TGConnectingPoint num="17" id="1173" /> +<TGConnectingPoint num="18" id="1174" /> +<TGConnectingPoint num="19" id="1175" /> +<TGConnectingPoint num="20" id="1176" /> +<TGConnectingPoint num="21" id="1177" /> +<TGConnectingPoint num="22" id="1178" /> +<TGConnectingPoint num="23" id="1179" /> +<TGConnectingPoint num="24" id="1180" /> +<TGConnectingPoint num="25" id="1181" /> +<TGConnectingPoint num="26" id="1182" /> +<TGConnectingPoint num="27" id="1183" /> +<TGConnectingPoint num="28" id="1184" /> +<TGConnectingPoint num="29" id="1185" /> +<TGConnectingPoint num="30" id="1186" /> +<TGConnectingPoint num="31" id="1187" /> +</COMPONENT> + +<COMPONENT type="703" id="1221" > +<cdparam x="326" y="351" /> +<sizeparam width="81" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Control panel" /> +<TGConnectingPoint num="0" id="1189" /> +<TGConnectingPoint num="1" id="1190" /> +<TGConnectingPoint num="2" id="1191" /> +<TGConnectingPoint num="3" id="1192" /> +<TGConnectingPoint num="4" id="1193" /> +<TGConnectingPoint num="5" id="1194" /> +<TGConnectingPoint num="6" id="1195" /> +<TGConnectingPoint num="7" id="1196" /> +<TGConnectingPoint num="8" id="1197" /> +<TGConnectingPoint num="9" id="1198" /> +<TGConnectingPoint num="10" id="1199" /> +<TGConnectingPoint num="11" id="1200" /> +<TGConnectingPoint num="12" id="1201" /> +<TGConnectingPoint num="13" id="1202" /> +<TGConnectingPoint num="14" id="1203" /> +<TGConnectingPoint num="15" id="1204" /> +<TGConnectingPoint num="16" id="1205" /> +<TGConnectingPoint num="17" id="1206" /> +<TGConnectingPoint num="18" id="1207" /> +<TGConnectingPoint num="19" id="1208" /> +<TGConnectingPoint num="20" id="1209" /> +<TGConnectingPoint num="21" id="1210" /> +<TGConnectingPoint num="22" id="1211" /> +<TGConnectingPoint num="23" id="1212" /> +<TGConnectingPoint num="24" id="1213" /> +<TGConnectingPoint num="25" id="1214" /> +<TGConnectingPoint num="26" id="1215" /> +<TGConnectingPoint num="27" id="1216" /> +<TGConnectingPoint num="28" id="1217" /> +<TGConnectingPoint num="29" id="1218" /> +<TGConnectingPoint num="30" id="1219" /> +<TGConnectingPoint num="31" id="1220" /> +</COMPONENT> + +<COMPONENT type="703" id="1254" > +<cdparam x="676" y="133" /> +<sizeparam width="74" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Door sensor" /> +<TGConnectingPoint num="0" id="1222" /> +<TGConnectingPoint num="1" id="1223" /> +<TGConnectingPoint num="2" id="1224" /> +<TGConnectingPoint num="3" id="1225" /> +<TGConnectingPoint num="4" id="1226" /> +<TGConnectingPoint num="5" id="1227" /> +<TGConnectingPoint num="6" id="1228" /> +<TGConnectingPoint num="7" id="1229" /> +<TGConnectingPoint num="8" id="1230" /> +<TGConnectingPoint num="9" id="1231" /> +<TGConnectingPoint num="10" id="1232" /> +<TGConnectingPoint num="11" id="1233" /> +<TGConnectingPoint num="12" id="1234" /> +<TGConnectingPoint num="13" id="1235" /> +<TGConnectingPoint num="14" id="1236" /> +<TGConnectingPoint num="15" id="1237" /> +<TGConnectingPoint num="16" id="1238" /> +<TGConnectingPoint num="17" id="1239" /> +<TGConnectingPoint num="18" id="1240" /> +<TGConnectingPoint num="19" id="1241" /> +<TGConnectingPoint num="20" id="1242" /> +<TGConnectingPoint num="21" id="1243" /> +<TGConnectingPoint num="22" id="1244" /> +<TGConnectingPoint num="23" id="1245" /> +<TGConnectingPoint num="24" id="1246" /> +<TGConnectingPoint num="25" id="1247" /> +<TGConnectingPoint num="26" id="1248" /> +<TGConnectingPoint num="27" id="1249" /> +<TGConnectingPoint num="28" id="1250" /> +<TGConnectingPoint num="29" id="1251" /> +<TGConnectingPoint num="30" id="1252" /> +<TGConnectingPoint num="31" id="1253" /> +</COMPONENT> + +<COMPONENT type="701" id="1279" > +<cdparam x="505" y="126" /> +<sizeparam width="117" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Door management" /> +<TGConnectingPoint num="0" id="1255" /> +<TGConnectingPoint num="1" id="1256" /> +<TGConnectingPoint num="2" id="1257" /> +<TGConnectingPoint num="3" id="1258" /> +<TGConnectingPoint num="4" id="1259" /> +<TGConnectingPoint num="5" id="1260" /> +<TGConnectingPoint num="6" id="1261" /> +<TGConnectingPoint num="7" id="1262" /> +<TGConnectingPoint num="8" id="1263" /> +<TGConnectingPoint num="9" id="1264" /> +<TGConnectingPoint num="10" id="1265" /> +<TGConnectingPoint num="11" id="1266" /> +<TGConnectingPoint num="12" id="1267" /> +<TGConnectingPoint num="13" id="1268" /> +<TGConnectingPoint num="14" id="1269" /> +<TGConnectingPoint num="15" id="1270" /> +<TGConnectingPoint num="16" id="1271" /> +<TGConnectingPoint num="17" id="1272" /> +<TGConnectingPoint num="18" id="1273" /> +<TGConnectingPoint num="19" id="1274" /> +<TGConnectingPoint num="20" id="1275" /> +<TGConnectingPoint num="21" id="1276" /> +<TGConnectingPoint num="22" id="1277" /> +<TGConnectingPoint num="23" id="1278" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1304" > +<cdparam x="446" y="277" /> +<sizeparam width="168" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Starting with remote control" /> +<TGConnectingPoint num="0" id="1280" /> +<TGConnectingPoint num="1" id="1281" /> +<TGConnectingPoint num="2" id="1282" /> +<TGConnectingPoint num="3" id="1283" /> +<TGConnectingPoint num="4" id="1284" /> +<TGConnectingPoint num="5" id="1285" /> +<TGConnectingPoint num="6" id="1286" /> +<TGConnectingPoint num="7" id="1287" /> +<TGConnectingPoint num="8" id="1288" /> +<TGConnectingPoint num="9" id="1289" /> +<TGConnectingPoint num="10" id="1290" /> +<TGConnectingPoint num="11" id="1291" /> +<TGConnectingPoint num="12" id="1292" /> +<TGConnectingPoint num="13" id="1293" /> +<TGConnectingPoint num="14" id="1294" /> +<TGConnectingPoint num="15" id="1295" /> +<TGConnectingPoint num="16" id="1296" /> +<TGConnectingPoint num="17" id="1297" /> +<TGConnectingPoint num="18" id="1298" /> +<TGConnectingPoint num="19" id="1299" /> +<TGConnectingPoint num="20" id="1300" /> +<TGConnectingPoint num="21" id="1301" /> +<TGConnectingPoint num="22" id="1302" /> +<TGConnectingPoint num="23" id="1303" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1329" > +<cdparam x="306" y="278" /> +<sizeparam width="121" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Starting with button" /> +<TGConnectingPoint num="0" id="1305" /> +<TGConnectingPoint num="1" id="1306" /> +<TGConnectingPoint num="2" id="1307" /> +<TGConnectingPoint num="3" id="1308" /> +<TGConnectingPoint num="4" id="1309" /> +<TGConnectingPoint num="5" id="1310" /> +<TGConnectingPoint num="6" id="1311" /> +<TGConnectingPoint num="7" id="1312" /> +<TGConnectingPoint num="8" id="1313" /> +<TGConnectingPoint num="9" id="1314" /> +<TGConnectingPoint num="10" id="1315" /> +<TGConnectingPoint num="11" id="1316" /> +<TGConnectingPoint num="12" id="1317" /> +<TGConnectingPoint num="13" id="1318" /> +<TGConnectingPoint num="14" id="1319" /> +<TGConnectingPoint num="15" id="1320" /> +<TGConnectingPoint num="16" id="1321" /> +<TGConnectingPoint num="17" id="1322" /> +<TGConnectingPoint num="18" id="1323" /> +<TGConnectingPoint num="19" id="1324" /> +<TGConnectingPoint num="20" id="1325" /> +<TGConnectingPoint num="21" id="1326" /> +<TGConnectingPoint num="22" id="1327" /> +<TGConnectingPoint num="23" id="1328" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1354" > +<cdparam x="384" y="182" /> +<sizeparam width="113" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Starting heating" /> +<TGConnectingPoint num="0" id="1330" /> +<TGConnectingPoint num="1" id="1331" /> +<TGConnectingPoint num="2" id="1332" /> +<TGConnectingPoint num="3" id="1333" /> +<TGConnectingPoint num="4" id="1334" /> +<TGConnectingPoint num="5" id="1335" /> +<TGConnectingPoint num="6" id="1336" /> +<TGConnectingPoint num="7" id="1337" /> +<TGConnectingPoint num="8" id="1338" /> +<TGConnectingPoint num="9" id="1339" /> +<TGConnectingPoint num="10" id="1340" /> +<TGConnectingPoint num="11" id="1341" /> +<TGConnectingPoint num="12" id="1342" /> +<TGConnectingPoint num="13" id="1343" /> +<TGConnectingPoint num="14" id="1344" /> +<TGConnectingPoint num="15" id="1345" /> +<TGConnectingPoint num="16" id="1346" /> +<TGConnectingPoint num="17" id="1347" /> +<TGConnectingPoint num="18" id="1348" /> +<TGConnectingPoint num="19" id="1349" /> +<TGConnectingPoint num="20" id="1350" /> +<TGConnectingPoint num="21" id="1351" /> +<TGConnectingPoint num="22" id="1352" /> +<TGConnectingPoint num="23" id="1353" /> +<extraparam> +<info extension="Duration selection" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1379" > +<cdparam x="413" y="89" /> +<sizeparam width="54" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Heating" /> +<TGConnectingPoint num="0" id="1355" /> +<TGConnectingPoint num="1" id="1356" /> +<TGConnectingPoint num="2" id="1357" /> +<TGConnectingPoint num="3" id="1358" /> +<TGConnectingPoint num="4" id="1359" /> +<TGConnectingPoint num="5" id="1360" /> +<TGConnectingPoint num="6" id="1361" /> +<TGConnectingPoint num="7" id="1362" /> +<TGConnectingPoint num="8" id="1363" /> +<TGConnectingPoint num="9" id="1364" /> +<TGConnectingPoint num="10" id="1365" /> +<TGConnectingPoint num="11" id="1366" /> +<TGConnectingPoint num="12" id="1367" /> +<TGConnectingPoint num="13" id="1368" /> +<TGConnectingPoint num="14" id="1369" /> +<TGConnectingPoint num="15" id="1370" /> +<TGConnectingPoint num="16" id="1371" /> +<TGConnectingPoint num="17" id="1372" /> +<TGConnectingPoint num="18" id="1373" /> +<TGConnectingPoint num="19" id="1374" /> +<TGConnectingPoint num="20" id="1375" /> +<TGConnectingPoint num="21" id="1376" /> +<TGConnectingPoint num="22" id="1377" /> +<TGConnectingPoint num="23" id="1378" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="703" id="1412" > +<cdparam x="677" y="236" /> +<sizeparam width="207" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Wireless interface of the microwave" /> +<TGConnectingPoint num="0" id="1380" /> +<TGConnectingPoint num="1" id="1381" /> +<TGConnectingPoint num="2" id="1382" /> +<TGConnectingPoint num="3" id="1383" /> +<TGConnectingPoint num="4" id="1384" /> +<TGConnectingPoint num="5" id="1385" /> +<TGConnectingPoint num="6" id="1386" /> +<TGConnectingPoint num="7" id="1387" /> +<TGConnectingPoint num="8" id="1388" /> +<TGConnectingPoint num="9" id="1389" /> +<TGConnectingPoint num="10" id="1390" /> +<TGConnectingPoint num="11" id="1391" /> +<TGConnectingPoint num="12" id="1392" /> +<TGConnectingPoint num="13" id="1393" /> +<TGConnectingPoint num="14" id="1394" /> +<TGConnectingPoint num="15" id="1395" /> +<TGConnectingPoint num="16" id="1396" /> +<TGConnectingPoint num="17" id="1397" /> +<TGConnectingPoint num="18" id="1398" /> +<TGConnectingPoint num="19" id="1399" /> +<TGConnectingPoint num="20" id="1400" /> +<TGConnectingPoint num="21" id="1401" /> +<TGConnectingPoint num="22" id="1402" /> +<TGConnectingPoint num="23" id="1403" /> +<TGConnectingPoint num="24" id="1404" /> +<TGConnectingPoint num="25" id="1405" /> +<TGConnectingPoint num="26" id="1406" /> +<TGConnectingPoint num="27" id="1407" /> +<TGConnectingPoint num="28" id="1408" /> +<TGConnectingPoint num="29" id="1409" /> +<TGConnectingPoint num="30" id="1410" /> +<TGConnectingPoint num="31" id="1411" /> +</COMPONENT> + +<COMPONENT type="702" id="1421" > +<cdparam x="277" y="61" /> +<sizeparam width="363" height="268" minWidth="100" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Software of the MicroWave Oven and of its remote control" /> +<TGConnectingPoint num="0" id="1413" /> +<TGConnectingPoint num="1" id="1414" /> +<TGConnectingPoint num="2" id="1415" /> +<TGConnectingPoint num="3" id="1416" /> +<TGConnectingPoint num="4" id="1417" /> +<TGConnectingPoint num="5" id="1418" /> +<TGConnectingPoint num="6" id="1419" /> +<TGConnectingPoint num="7" id="1420" /> +</COMPONENT> + +<CONNECTOR type="111" id="1422" > +<cdparam x="481" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="467" y="109" id="1361" /> +<P2 x="563" y="126" id="1255" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1423" > +<cdparam x="511" y="202" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="497" y="202" id="1332" /> +<P2 x="563" y="166" id="1258" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1424" > +<cdparam x="481" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="413" y="109" id="1360" /> +<P2 x="260" y="109" id="1074" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1425" > +<cdparam x="249" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="236" y="196" id="1107" /> +<P2 x="284" y="196" id="1132" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1426" > +<cdparam x="427" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="413" y="109" id="1356" /> +<P2 x="322" y="176" id="1131" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1427" > +<cdparam x="701" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="677" y="336" id="1158" /> +<P2 x="614" y="297" id="1286" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1428" > +<cdparam x="384" y="318" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="366" y="318" id="1308" /> +<P2 x="366" y="351" id="1194" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1429" > +<cdparam x="689" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="677" y="261" id="1382" /> +<P2 x="614" y="297" id="1282" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1430" > +<cdparam x="694" y="149" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="676" y="158" id="1224" /> +<P2 x="622" y="146" id="1257" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1431" > +<cdparam x="560" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="530" y="277" id="1280" /> +<P2 x="440" y="222" id="1337" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1432" > +<cdparam x="384" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="366" y="278" id="1305" /> +<P2 x="440" y="222" id="1333" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1433" > +<cdparam x="443" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="440" y="129" id="1358" /> +<P2 x="440" y="182" id="1330" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +</Modeling> + + + + +<Modeling type="Avatar Analysis" nameTab="Analysis_MainActivity" > +<AvatarADPanel name="MainActivity" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5500" id="1438" > +<cdparam x="199" y="756" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="199" y="756" id="1470" /> +<P2 x="371" y="136" id="1758" /> +<Point x="199" y="776" /> +<Point x="42" y="776" /> +<Point x="42" y="116" /> +<Point x="371" y="116" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1434" > +<father id="1438" num="0" /> +<cdparam x="199" y="776" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1435" > +<father id="1438" num="1" /> +<cdparam x="42" y="776" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1436" > +<father id="1438" num="2" /> +<cdparam x="42" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1437" > +<father id="1438" num="3" /> +<cdparam x="371" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1439" > +<cdparam x="199" y="683" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="199" y="683" id="1511" /> +<P2 x="199" y="706" id="1465" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1442" > +<cdparam x="159" y="643" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="159" y="643" id="1509" /> +<P2 x="279" y="355" id="1645" /> +<Point x="76" y="643" /> +<Point x="76" y="355" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1440" > +<father id="1442" num="0" /> +<cdparam x="76" y="643" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1441" > +<father id="1442" num="1" /> +<cdparam x="76" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1443" > +<cdparam x="199" y="587" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="199" y="587" id="1519" /> +<P2 x="199" y="618" id="1508" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1444" > +<cdparam x="254" y="478" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="254" y="478" id="1599" /> +<P2 x="199" y="537" id="1514" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1448" > +<cdparam x="467" y="586" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="467" y="586" id="1560" /> +<P2 x="309" y="355" id="1650" /> +<Point x="467" y="606" /> +<Point x="587" y="606" /> +<Point x="587" y="355" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1445" > +<father id="1448" num="0" /> +<cdparam x="467" y="606" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1446" > +<father id="1448" num="1" /> +<cdparam x="587" y="606" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1447" > +<father id="1448" num="2" /> +<cdparam x="587" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1449" > +<cdparam x="334" y="478" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="334" y="478" id="1600" /> +<P2 x="467" y="536" id="1555" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1450" > +<cdparam x="294" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="294" y="432" id="1609" /> +<P2 x="294" y="453" id="1598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1451" > +<cdparam x="294" y="370" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="294" y="370" id="1647" /> +<P2 x="294" y="382" id="1604" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1452" > +<cdparam x="386" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="296" id="1714" /> +<P2 x="309" y="355" id="1646" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1453" > +<cdparam x="212" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="212" y="294" id="1786" /> +<P2 x="294" y="340" id="1644" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1458" > +<cdparam x="618" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="618" y="294" id="1673" /> +<P2 x="401" y="136" id="1759" /> +<Point x="618" y="314" /> +<Point x="748" y="314" /> +<Point x="748" y="116" /> +<Point x="401" y="116" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1454" > +<father id="1458" num="0" /> +<cdparam x="618" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1455" > +<father id="1458" num="1" /> +<cdparam x="748" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1456" > +<father id="1458" num="2" /> +<cdparam x="748" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1457" > +<father id="1458" num="3" /> +<cdparam x="401" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1459" > +<cdparam x="426" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="426" y="188" id="1754" /> +<P2 x="618" y="244" id="1668" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1460" > +<cdparam x="386" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="228" id="1755" /> +<P2 x="386" y="246" id="1709" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1461" > +<cdparam x="346" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="346" y="188" id="1753" /> +<P2 x="212" y="244" id="1781" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1462" > +<cdparam x="386" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="151" id="1760" /> +<P2 x="386" y="163" id="1752" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1463" > +<cdparam x="390" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="95" id="1821" /> +<P2 x="386" y="121" id="1757" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5507" id="1504" > +<cdparam x="149" y="706" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="RingBell" /> +<TGConnectingPoint num="0" id="1464" /> +<TGConnectingPoint num="1" id="1465" /> +<TGConnectingPoint num="2" id="1466" /> +<TGConnectingPoint num="3" id="1467" /> +<TGConnectingPoint num="4" id="1468" /> +<TGConnectingPoint num="5" id="1469" /> +<TGConnectingPoint num="6" id="1470" /> +<TGConnectingPoint num="7" id="1471" /> +<TGConnectingPoint num="8" id="1472" /> +<TGConnectingPoint num="9" id="1473" /> +<TGConnectingPoint num="10" id="1474" /> +<TGConnectingPoint num="11" id="1475" /> +<TGConnectingPoint num="12" id="1476" /> +<TGConnectingPoint num="13" id="1477" /> +<TGConnectingPoint num="14" id="1478" /> +<TGConnectingPoint num="15" id="1479" /> +<TGConnectingPoint num="16" id="1480" /> +<TGConnectingPoint num="17" id="1481" /> +<TGConnectingPoint num="18" id="1482" /> +<TGConnectingPoint num="19" id="1483" /> +<TGConnectingPoint num="20" id="1484" /> +<TGConnectingPoint num="21" id="1485" /> +<TGConnectingPoint num="22" id="1486" /> +<TGConnectingPoint num="23" id="1487" /> +<TGConnectingPoint num="24" id="1488" /> +<TGConnectingPoint num="25" id="1489" /> +<TGConnectingPoint num="26" id="1490" /> +<TGConnectingPoint num="27" id="1491" /> +<TGConnectingPoint num="28" id="1492" /> +<TGConnectingPoint num="29" id="1493" /> +<TGConnectingPoint num="30" id="1494" /> +<TGConnectingPoint num="31" id="1495" /> +<TGConnectingPoint num="32" id="1496" /> +<TGConnectingPoint num="33" id="1497" /> +<TGConnectingPoint num="34" id="1498" /> +<TGConnectingPoint num="35" id="1499" /> +<TGConnectingPoint num="36" id="1500" /> +<TGConnectingPoint num="37" id="1501" /> +<TGConnectingPoint num="38" id="1502" /> +<TGConnectingPoint num="39" id="1503" /> +</COMPONENT> + +<COMPONENT type="5503" id="1512" > +<cdparam x="184" y="628" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1508" /> +<TGConnectingPoint num="1" id="1509" /> +<TGConnectingPoint num="2" id="1510" /> +<TGConnectingPoint num="3" id="1511" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1505" > +<father id="1512" num="0" /> +<cdparam x="127" y="638" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1506" > +<father id="1512" num="1" /> +<cdparam x="219" y="638" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1507" > +<father id="1512" num="2" /> +<cdparam x="222" y="673" /> +<sizeparam width="135" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ cookingTimeElapsed ]" /> +</SUBCOMPONENT> + +<COMPONENT type="5507" id="1553" > +<cdparam x="100" y="537" /> +<sizeparam width="198" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="UpdatingCookingTime" /> +<TGConnectingPoint num="0" id="1513" /> +<TGConnectingPoint num="1" id="1514" /> +<TGConnectingPoint num="2" id="1515" /> +<TGConnectingPoint num="3" id="1516" /> +<TGConnectingPoint num="4" id="1517" /> +<TGConnectingPoint num="5" id="1518" /> +<TGConnectingPoint num="6" id="1519" /> +<TGConnectingPoint num="7" id="1520" /> +<TGConnectingPoint num="8" id="1521" /> +<TGConnectingPoint num="9" id="1522" /> +<TGConnectingPoint num="10" id="1523" /> +<TGConnectingPoint num="11" id="1524" /> +<TGConnectingPoint num="12" id="1525" /> +<TGConnectingPoint num="13" id="1526" /> +<TGConnectingPoint num="14" id="1527" /> +<TGConnectingPoint num="15" id="1528" /> +<TGConnectingPoint num="16" id="1529" /> +<TGConnectingPoint num="17" id="1530" /> +<TGConnectingPoint num="18" id="1531" /> +<TGConnectingPoint num="19" id="1532" /> +<TGConnectingPoint num="20" id="1533" /> +<TGConnectingPoint num="21" id="1534" /> +<TGConnectingPoint num="22" id="1535" /> +<TGConnectingPoint num="23" id="1536" /> +<TGConnectingPoint num="24" id="1537" /> +<TGConnectingPoint num="25" id="1538" /> +<TGConnectingPoint num="26" id="1539" /> +<TGConnectingPoint num="27" id="1540" /> +<TGConnectingPoint num="28" id="1541" /> +<TGConnectingPoint num="29" id="1542" /> +<TGConnectingPoint num="30" id="1543" /> +<TGConnectingPoint num="31" id="1544" /> +<TGConnectingPoint num="32" id="1545" /> +<TGConnectingPoint num="33" id="1546" /> +<TGConnectingPoint num="34" id="1547" /> +<TGConnectingPoint num="35" id="1548" /> +<TGConnectingPoint num="36" id="1549" /> +<TGConnectingPoint num="37" id="1550" /> +<TGConnectingPoint num="38" id="1551" /> +<TGConnectingPoint num="39" id="1552" /> +</COMPONENT> + +<COMPONENT type="5507" id="1594" > +<cdparam x="366" y="536" /> +<sizeparam width="203" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="DoorOpenedWhileIdle" /> +<TGConnectingPoint num="0" id="1554" /> +<TGConnectingPoint num="1" id="1555" /> +<TGConnectingPoint num="2" id="1556" /> +<TGConnectingPoint num="3" id="1557" /> +<TGConnectingPoint num="4" id="1558" /> +<TGConnectingPoint num="5" id="1559" /> +<TGConnectingPoint num="6" id="1560" /> +<TGConnectingPoint num="7" id="1561" /> +<TGConnectingPoint num="8" id="1562" /> +<TGConnectingPoint num="9" id="1563" /> +<TGConnectingPoint num="10" id="1564" /> +<TGConnectingPoint num="11" id="1565" /> +<TGConnectingPoint num="12" id="1566" /> +<TGConnectingPoint num="13" id="1567" /> +<TGConnectingPoint num="14" id="1568" /> +<TGConnectingPoint num="15" id="1569" /> +<TGConnectingPoint num="16" id="1570" /> +<TGConnectingPoint num="17" id="1571" /> +<TGConnectingPoint num="18" id="1572" /> +<TGConnectingPoint num="19" id="1573" /> +<TGConnectingPoint num="20" id="1574" /> +<TGConnectingPoint num="21" id="1575" /> +<TGConnectingPoint num="22" id="1576" /> +<TGConnectingPoint num="23" id="1577" /> +<TGConnectingPoint num="24" id="1578" /> +<TGConnectingPoint num="25" id="1579" /> +<TGConnectingPoint num="26" id="1580" /> +<TGConnectingPoint num="27" id="1581" /> +<TGConnectingPoint num="28" id="1582" /> +<TGConnectingPoint num="29" id="1583" /> +<TGConnectingPoint num="30" id="1584" /> +<TGConnectingPoint num="31" id="1585" /> +<TGConnectingPoint num="32" id="1586" /> +<TGConnectingPoint num="33" id="1587" /> +<TGConnectingPoint num="34" id="1588" /> +<TGConnectingPoint num="35" id="1589" /> +<TGConnectingPoint num="36" id="1590" /> +<TGConnectingPoint num="37" id="1591" /> +<TGConnectingPoint num="38" id="1592" /> +<TGConnectingPoint num="39" id="1593" /> +</COMPONENT> + +<COMPONENT type="5503" id="1602" > +<cdparam x="279" y="463" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1598" /> +<TGConnectingPoint num="1" id="1599" /> +<TGConnectingPoint num="2" id="1600" /> +<TGConnectingPoint num="3" id="1601" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1595" > +<father id="1602" num="0" /> +<cdparam x="254" y="473" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1596" > +<father id="1602" num="1" /> +<cdparam x="314" y="473" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1597" > +<father id="1602" num="2" /> +<cdparam x="299" y="508" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="5507" id="1643" > +<cdparam x="244" y="382" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="Cooking" /> +<TGConnectingPoint num="0" id="1603" /> +<TGConnectingPoint num="1" id="1604" /> +<TGConnectingPoint num="2" id="1605" /> +<TGConnectingPoint num="3" id="1606" /> +<TGConnectingPoint num="4" id="1607" /> +<TGConnectingPoint num="5" id="1608" /> +<TGConnectingPoint num="6" id="1609" /> +<TGConnectingPoint num="7" id="1610" /> +<TGConnectingPoint num="8" id="1611" /> +<TGConnectingPoint num="9" id="1612" /> +<TGConnectingPoint num="10" id="1613" /> +<TGConnectingPoint num="11" id="1614" /> +<TGConnectingPoint num="12" id="1615" /> +<TGConnectingPoint num="13" id="1616" /> +<TGConnectingPoint num="14" id="1617" /> +<TGConnectingPoint num="15" id="1618" /> +<TGConnectingPoint num="16" id="1619" /> +<TGConnectingPoint num="17" id="1620" /> +<TGConnectingPoint num="18" id="1621" /> +<TGConnectingPoint num="19" id="1622" /> +<TGConnectingPoint num="20" id="1623" /> +<TGConnectingPoint num="21" id="1624" /> +<TGConnectingPoint num="22" id="1625" /> +<TGConnectingPoint num="23" id="1626" /> +<TGConnectingPoint num="24" id="1627" /> +<TGConnectingPoint num="25" id="1628" /> +<TGConnectingPoint num="26" id="1629" /> +<TGConnectingPoint num="27" id="1630" /> +<TGConnectingPoint num="28" id="1631" /> +<TGConnectingPoint num="29" id="1632" /> +<TGConnectingPoint num="30" id="1633" /> +<TGConnectingPoint num="31" id="1634" /> +<TGConnectingPoint num="32" id="1635" /> +<TGConnectingPoint num="33" id="1636" /> +<TGConnectingPoint num="34" id="1637" /> +<TGConnectingPoint num="35" id="1638" /> +<TGConnectingPoint num="36" id="1639" /> +<TGConnectingPoint num="37" id="1640" /> +<TGConnectingPoint num="38" id="1641" /> +<TGConnectingPoint num="39" id="1642" /> +</COMPONENT> + +<COMPONENT type="5504" id="1666" > +<cdparam x="279" y="340" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1644" /> +<TGConnectingPoint num="1" id="1645" /> +<TGConnectingPoint num="2" id="1646" /> +<TGConnectingPoint num="3" id="1647" /> +<TGConnectingPoint num="4" id="1648" /> +<TGConnectingPoint num="5" id="1649" /> +<TGConnectingPoint num="6" id="1650" /> +<TGConnectingPoint num="7" id="1651" /> +<TGConnectingPoint num="8" id="1652" /> +<TGConnectingPoint num="9" id="1653" /> +<TGConnectingPoint num="10" id="1654" /> +<TGConnectingPoint num="11" id="1655" /> +<TGConnectingPoint num="12" id="1656" /> +<TGConnectingPoint num="13" id="1657" /> +<TGConnectingPoint num="14" id="1658" /> +<TGConnectingPoint num="15" id="1659" /> +<TGConnectingPoint num="16" id="1660" /> +<TGConnectingPoint num="17" id="1661" /> +<TGConnectingPoint num="18" id="1662" /> +<TGConnectingPoint num="19" id="1663" /> +<TGConnectingPoint num="20" id="1664" /> +<TGConnectingPoint num="21" id="1665" /> +</COMPONENT> + +<COMPONENT type="5507" id="1707" > +<cdparam x="516" y="244" /> +<sizeparam width="205" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="DoorOpenedWhileIdle" /> +<TGConnectingPoint num="0" id="1667" /> +<TGConnectingPoint num="1" id="1668" /> +<TGConnectingPoint num="2" id="1669" /> +<TGConnectingPoint num="3" id="1670" /> +<TGConnectingPoint num="4" id="1671" /> +<TGConnectingPoint num="5" id="1672" /> +<TGConnectingPoint num="6" id="1673" /> +<TGConnectingPoint num="7" id="1674" /> +<TGConnectingPoint num="8" id="1675" /> +<TGConnectingPoint num="9" id="1676" /> +<TGConnectingPoint num="10" id="1677" /> +<TGConnectingPoint num="11" id="1678" /> +<TGConnectingPoint num="12" id="1679" /> +<TGConnectingPoint num="13" id="1680" /> +<TGConnectingPoint num="14" id="1681" /> +<TGConnectingPoint num="15" id="1682" /> +<TGConnectingPoint num="16" id="1683" /> +<TGConnectingPoint num="17" id="1684" /> +<TGConnectingPoint num="18" id="1685" /> +<TGConnectingPoint num="19" id="1686" /> +<TGConnectingPoint num="20" id="1687" /> +<TGConnectingPoint num="21" id="1688" /> +<TGConnectingPoint num="22" id="1689" /> +<TGConnectingPoint num="23" id="1690" /> +<TGConnectingPoint num="24" id="1691" /> +<TGConnectingPoint num="25" id="1692" /> +<TGConnectingPoint num="26" id="1693" /> +<TGConnectingPoint num="27" id="1694" /> +<TGConnectingPoint num="28" id="1695" /> +<TGConnectingPoint num="29" id="1696" /> +<TGConnectingPoint num="30" id="1697" /> +<TGConnectingPoint num="31" id="1698" /> +<TGConnectingPoint num="32" id="1699" /> +<TGConnectingPoint num="33" id="1700" /> +<TGConnectingPoint num="34" id="1701" /> +<TGConnectingPoint num="35" id="1702" /> +<TGConnectingPoint num="36" id="1703" /> +<TGConnectingPoint num="37" id="1704" /> +<TGConnectingPoint num="38" id="1705" /> +<TGConnectingPoint num="39" id="1706" /> +</COMPONENT> + +<COMPONENT type="5507" id="1748" > +<cdparam x="330" y="246" /> +<sizeparam width="112" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="LocalStart" /> +<TGConnectingPoint num="0" id="1708" /> +<TGConnectingPoint num="1" id="1709" /> +<TGConnectingPoint num="2" id="1710" /> +<TGConnectingPoint num="3" id="1711" /> +<TGConnectingPoint num="4" id="1712" /> +<TGConnectingPoint num="5" id="1713" /> +<TGConnectingPoint num="6" id="1714" /> +<TGConnectingPoint num="7" id="1715" /> +<TGConnectingPoint num="8" id="1716" /> +<TGConnectingPoint num="9" id="1717" /> +<TGConnectingPoint num="10" id="1718" /> +<TGConnectingPoint num="11" id="1719" /> +<TGConnectingPoint num="12" id="1720" /> +<TGConnectingPoint num="13" id="1721" /> +<TGConnectingPoint num="14" id="1722" /> +<TGConnectingPoint num="15" id="1723" /> +<TGConnectingPoint num="16" id="1724" /> +<TGConnectingPoint num="17" id="1725" /> +<TGConnectingPoint num="18" id="1726" /> +<TGConnectingPoint num="19" id="1727" /> +<TGConnectingPoint num="20" id="1728" /> +<TGConnectingPoint num="21" id="1729" /> +<TGConnectingPoint num="22" id="1730" /> +<TGConnectingPoint num="23" id="1731" /> +<TGConnectingPoint num="24" id="1732" /> +<TGConnectingPoint num="25" id="1733" /> +<TGConnectingPoint num="26" id="1734" /> +<TGConnectingPoint num="27" id="1735" /> +<TGConnectingPoint num="28" id="1736" /> +<TGConnectingPoint num="29" id="1737" /> +<TGConnectingPoint num="30" id="1738" /> +<TGConnectingPoint num="31" id="1739" /> +<TGConnectingPoint num="32" id="1740" /> +<TGConnectingPoint num="33" id="1741" /> +<TGConnectingPoint num="34" id="1742" /> +<TGConnectingPoint num="35" id="1743" /> +<TGConnectingPoint num="36" id="1744" /> +<TGConnectingPoint num="37" id="1745" /> +<TGConnectingPoint num="38" id="1746" /> +<TGConnectingPoint num="39" id="1747" /> +</COMPONENT> + +<COMPONENT type="5503" id="1756" > +<cdparam x="371" y="173" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1752" /> +<TGConnectingPoint num="1" id="1753" /> +<TGConnectingPoint num="2" id="1754" /> +<TGConnectingPoint num="3" id="1755" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1749" > +<father id="1756" num="0" /> +<cdparam x="346" y="183" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1750" > +<father id="1756" num="1" /> +<cdparam x="406" y="183" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1751" > +<father id="1756" num="2" /> +<cdparam x="391" y="218" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="5504" id="1779" > +<cdparam x="371" y="121" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1757" /> +<TGConnectingPoint num="1" id="1758" /> +<TGConnectingPoint num="2" id="1759" /> +<TGConnectingPoint num="3" id="1760" /> +<TGConnectingPoint num="4" id="1761" /> +<TGConnectingPoint num="5" id="1762" /> +<TGConnectingPoint num="6" id="1763" /> +<TGConnectingPoint num="7" id="1764" /> +<TGConnectingPoint num="8" id="1765" /> +<TGConnectingPoint num="9" id="1766" /> +<TGConnectingPoint num="10" id="1767" /> +<TGConnectingPoint num="11" id="1768" /> +<TGConnectingPoint num="12" id="1769" /> +<TGConnectingPoint num="13" id="1770" /> +<TGConnectingPoint num="14" id="1771" /> +<TGConnectingPoint num="15" id="1772" /> +<TGConnectingPoint num="16" id="1773" /> +<TGConnectingPoint num="17" id="1774" /> +<TGConnectingPoint num="18" id="1775" /> +<TGConnectingPoint num="19" id="1776" /> +<TGConnectingPoint num="20" id="1777" /> +<TGConnectingPoint num="21" id="1778" /> +</COMPONENT> + +<COMPONENT type="5507" id="1820" > +<cdparam x="151" y="244" /> +<sizeparam width="123" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="RemoteStart" /> +<TGConnectingPoint num="0" id="1780" /> +<TGConnectingPoint num="1" id="1781" /> +<TGConnectingPoint num="2" id="1782" /> +<TGConnectingPoint num="3" id="1783" /> +<TGConnectingPoint num="4" id="1784" /> +<TGConnectingPoint num="5" id="1785" /> +<TGConnectingPoint num="6" id="1786" /> +<TGConnectingPoint num="7" id="1787" /> +<TGConnectingPoint num="8" id="1788" /> +<TGConnectingPoint num="9" id="1789" /> +<TGConnectingPoint num="10" id="1790" /> +<TGConnectingPoint num="11" id="1791" /> +<TGConnectingPoint num="12" id="1792" /> +<TGConnectingPoint num="13" id="1793" /> +<TGConnectingPoint num="14" id="1794" /> +<TGConnectingPoint num="15" id="1795" /> +<TGConnectingPoint num="16" id="1796" /> +<TGConnectingPoint num="17" id="1797" /> +<TGConnectingPoint num="18" id="1798" /> +<TGConnectingPoint num="19" id="1799" /> +<TGConnectingPoint num="20" id="1800" /> +<TGConnectingPoint num="21" id="1801" /> +<TGConnectingPoint num="22" id="1802" /> +<TGConnectingPoint num="23" id="1803" /> +<TGConnectingPoint num="24" id="1804" /> +<TGConnectingPoint num="25" id="1805" /> +<TGConnectingPoint num="26" id="1806" /> +<TGConnectingPoint num="27" id="1807" /> +<TGConnectingPoint num="28" id="1808" /> +<TGConnectingPoint num="29" id="1809" /> +<TGConnectingPoint num="30" id="1810" /> +<TGConnectingPoint num="31" id="1811" /> +<TGConnectingPoint num="32" id="1812" /> +<TGConnectingPoint num="33" id="1813" /> +<TGConnectingPoint num="34" id="1814" /> +<TGConnectingPoint num="35" id="1815" /> +<TGConnectingPoint num="36" id="1816" /> +<TGConnectingPoint num="37" id="1817" /> +<TGConnectingPoint num="38" id="1818" /> +<TGConnectingPoint num="39" id="1819" /> +</COMPONENT> + +<COMPONENT type="5501" id="1822" > +<cdparam x="379" y="75" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1821" /> +</COMPONENT> + + +</AvatarADPanel> + +<SequenceDiagramPanel name="OpenDoorDuringHeating" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1850" > +<cdparam x="751" y="119" /> +<sizeparam width="10" height="287" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="MagnetronActuator" value="MagnetronActuator" /> +<TGConnectingPoint num="0" id="1823" /> +<TGConnectingPoint num="1" id="1824" /> +<TGConnectingPoint num="2" id="1825" /> +<TGConnectingPoint num="3" id="1826" /> +<TGConnectingPoint num="4" id="1827" /> +<TGConnectingPoint num="5" id="1828" /> +<TGConnectingPoint num="6" id="1829" /> +<TGConnectingPoint num="7" id="1830" /> +<TGConnectingPoint num="8" id="1831" /> +<TGConnectingPoint num="9" id="1832" /> +<TGConnectingPoint num="10" id="1833" /> +<TGConnectingPoint num="11" id="1834" /> +<TGConnectingPoint num="12" id="1835" /> +<TGConnectingPoint num="13" id="1836" /> +<TGConnectingPoint num="14" id="1837" /> +<TGConnectingPoint num="15" id="1838" /> +<TGConnectingPoint num="16" id="1839" /> +<TGConnectingPoint num="17" id="1840" /> +<TGConnectingPoint num="18" id="1841" /> +<TGConnectingPoint num="19" id="1842" /> +<TGConnectingPoint num="20" id="1843" /> +<TGConnectingPoint num="21" id="1844" /> +<TGConnectingPoint num="22" id="1845" /> +<TGConnectingPoint num="23" id="1846" /> +<TGConnectingPoint num="24" id="1847" /> +<TGConnectingPoint num="25" id="1848" /> +<TGConnectingPoint num="26" id="1849" /> +<extraparam> +<Actor data="true" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="606" id="1896" > +<cdparam x="613" y="119" /> +<sizeparam width="10" height="285" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="MagnetronDriver" value="MagnetronDriver" /> +<TGConnectingPoint num="0" id="1869" /> +<TGConnectingPoint num="1" id="1870" /> +<TGConnectingPoint num="2" id="1871" /> +<TGConnectingPoint num="3" id="1872" /> +<TGConnectingPoint num="4" id="1873" /> +<TGConnectingPoint num="5" id="1874" /> +<TGConnectingPoint num="6" id="1875" /> +<TGConnectingPoint num="7" id="1876" /> +<TGConnectingPoint num="8" id="1877" /> +<TGConnectingPoint num="9" id="1878" /> +<TGConnectingPoint num="10" id="1879" /> +<TGConnectingPoint num="11" id="1880" /> +<TGConnectingPoint num="12" id="1881" /> +<TGConnectingPoint num="13" id="1882" /> +<TGConnectingPoint num="14" id="1883" /> +<TGConnectingPoint num="15" id="1884" /> +<TGConnectingPoint num="16" id="1885" /> +<TGConnectingPoint num="17" id="1886" /> +<TGConnectingPoint num="18" id="1887" /> +<TGConnectingPoint num="19" id="1888" /> +<TGConnectingPoint num="20" id="1889" /> +<TGConnectingPoint num="21" id="1890" /> +<TGConnectingPoint num="22" id="1891" /> +<TGConnectingPoint num="23" id="1892" /> +<TGConnectingPoint num="24" id="1893" /> +<TGConnectingPoint num="25" id="1894" /> +<TGConnectingPoint num="26" id="1895" /> +<extraparam> +<Actor data="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="609" id="1859" > +<father id="1896" num="0" /> +<cdparam x="618" y="299" /> +<sizeparam width="32" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="255" /> +<infoparam name="action state" value="end" /> +<TGConnectingPoint num="0" id="1851" /> +<TGConnectingPoint num="1" id="1852" /> +<TGConnectingPoint num="2" id="1853" /> +<TGConnectingPoint num="3" id="1854" /> +<TGConnectingPoint num="4" id="1855" /> +<TGConnectingPoint num="5" id="1856" /> +<TGConnectingPoint num="6" id="1857" /> +<TGConnectingPoint num="7" id="1858" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="609" id="1868" > +<father id="1896" num="1" /> +<cdparam x="618" y="235" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="255" /> +<infoparam name="action state" value="magnetronIsOn" /> +<TGConnectingPoint num="0" id="1860" /> +<TGConnectingPoint num="1" id="1861" /> +<TGConnectingPoint num="2" id="1862" /> +<TGConnectingPoint num="3" id="1863" /> +<TGConnectingPoint num="4" id="1864" /> +<TGConnectingPoint num="5" id="1865" /> +<TGConnectingPoint num="6" id="1866" /> +<TGConnectingPoint num="7" id="1867" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1924" > +<cdparam x="347" y="119" /> +<sizeparam width="10" height="285" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="DoorDriver" value="DoorDriver" /> +<TGConnectingPoint num="0" id="1897" /> +<TGConnectingPoint num="1" id="1898" /> +<TGConnectingPoint num="2" id="1899" /> +<TGConnectingPoint num="3" id="1900" /> +<TGConnectingPoint num="4" id="1901" /> +<TGConnectingPoint num="5" id="1902" /> +<TGConnectingPoint num="6" id="1903" /> +<TGConnectingPoint num="7" id="1904" /> +<TGConnectingPoint num="8" id="1905" /> +<TGConnectingPoint num="9" id="1906" /> +<TGConnectingPoint num="10" id="1907" /> +<TGConnectingPoint num="11" id="1908" /> +<TGConnectingPoint num="12" id="1909" /> +<TGConnectingPoint num="13" id="1910" /> +<TGConnectingPoint num="14" id="1911" /> +<TGConnectingPoint num="15" id="1912" /> +<TGConnectingPoint num="16" id="1913" /> +<TGConnectingPoint num="17" id="1914" /> +<TGConnectingPoint num="18" id="1915" /> +<TGConnectingPoint num="19" id="1916" /> +<TGConnectingPoint num="20" id="1917" /> +<TGConnectingPoint num="21" id="1918" /> +<TGConnectingPoint num="22" id="1919" /> +<TGConnectingPoint num="23" id="1920" /> +<TGConnectingPoint num="24" id="1921" /> +<TGConnectingPoint num="25" id="1922" /> +<TGConnectingPoint num="26" id="1923" /> +<extraparam> +<Actor data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="606" id="1961" > +<cdparam x="482" y="119" /> +<sizeparam width="10" height="284" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="MainController" value="Controller" /> +<TGConnectingPoint num="0" id="1934" /> +<TGConnectingPoint num="1" id="1935" /> +<TGConnectingPoint num="2" id="1936" /> +<TGConnectingPoint num="3" id="1937" /> +<TGConnectingPoint num="4" id="1938" /> +<TGConnectingPoint num="5" id="1939" /> +<TGConnectingPoint num="6" id="1940" /> +<TGConnectingPoint num="7" id="1941" /> +<TGConnectingPoint num="8" id="1942" /> +<TGConnectingPoint num="9" id="1943" /> +<TGConnectingPoint num="10" id="1944" /> +<TGConnectingPoint num="11" id="1945" /> +<TGConnectingPoint num="12" id="1946" /> +<TGConnectingPoint num="13" id="1947" /> +<TGConnectingPoint num="14" id="1948" /> +<TGConnectingPoint num="15" id="1949" /> +<TGConnectingPoint num="16" id="1950" /> +<TGConnectingPoint num="17" id="1951" /> +<TGConnectingPoint num="18" id="1952" /> +<TGConnectingPoint num="19" id="1953" /> +<TGConnectingPoint num="20" id="1954" /> +<TGConnectingPoint num="21" id="1955" /> +<TGConnectingPoint num="22" id="1956" /> +<TGConnectingPoint num="23" id="1957" /> +<TGConnectingPoint num="24" id="1958" /> +<TGConnectingPoint num="25" id="1959" /> +<TGConnectingPoint num="26" id="1960" /> +<extraparam> +<Actor data="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="602" id="1933" > +<father id="1961" num="0" /> +<cdparam x="487" y="277" /> +<sizeparam width="169" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="254" /> +<infoparam name="action state" value="saveRemainingHeatingTime" /> +<TGConnectingPoint num="0" id="1925" /> +<TGConnectingPoint num="1" id="1926" /> +<TGConnectingPoint num="2" id="1927" /> +<TGConnectingPoint num="3" id="1928" /> +<TGConnectingPoint num="4" id="1929" /> +<TGConnectingPoint num="5" id="1930" /> +<TGConnectingPoint num="6" id="1931" /> +<TGConnectingPoint num="7" id="1932" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1990" > +<cdparam x="221" y="119" /> +<sizeparam width="10" height="292" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="DoorSensor" value="DoorSensor" /> +<TGConnectingPoint num="0" id="1962" /> +<TGConnectingPoint num="1" id="1963" /> +<TGConnectingPoint num="2" id="1964" /> +<TGConnectingPoint num="3" id="1965" /> +<TGConnectingPoint num="4" id="1966" /> +<TGConnectingPoint num="5" id="1967" /> +<TGConnectingPoint num="6" id="1968" /> +<TGConnectingPoint num="7" id="1969" /> +<TGConnectingPoint num="8" id="1970" /> +<TGConnectingPoint num="9" id="1971" /> +<TGConnectingPoint num="10" id="1972" /> +<TGConnectingPoint num="11" id="1973" /> +<TGConnectingPoint num="12" id="1974" /> +<TGConnectingPoint num="13" id="1975" /> +<TGConnectingPoint num="14" id="1976" /> +<TGConnectingPoint num="15" id="1977" /> +<TGConnectingPoint num="16" id="1978" /> +<TGConnectingPoint num="17" id="1979" /> +<TGConnectingPoint num="18" id="1980" /> +<TGConnectingPoint num="19" id="1981" /> +<TGConnectingPoint num="20" id="1982" /> +<TGConnectingPoint num="21" id="1983" /> +<TGConnectingPoint num="22" id="1984" /> +<TGConnectingPoint num="23" id="1985" /> +<TGConnectingPoint num="24" id="1986" /> +<TGConnectingPoint num="25" id="1987" /> +<TGConnectingPoint num="26" id="1988" /> +<TGConnectingPoint num="27" id="1989" /> +<extraparam> +<Actor data="true" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="106" id="1991" > +<cdparam x="352" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="doorClose()" /> +<P1 x="352" y="359" id="1920" /> +<P2 x="487" y="359" id="1957" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1992" > +<cdparam x="226" y="329" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="close()" /> +<P1 x="226" y="329" id="1982" /> +<P2 x="352" y="329" id="1917" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1993" > +<cdparam x="702" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="turnOff()" /> +<P1 x="618" y="279" id="1884" /> +<P2 x="756" y="279" id="1838" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1994" > +<cdparam x="527" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="stopMagnetron()" /> +<P1 x="487" y="209" id="1942" /> +<P2 x="618" y="209" id="1877" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1995" > +<cdparam x="352" y="179" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="doorOpened()" /> +<P1 x="352" y="179" id="1902" /> +<P2 x="487" y="179" id="1939" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1996" > +<cdparam x="202" y="149" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="open()" /> +<P1 x="226" y="149" id="1964" /> +<P2 x="352" y="149" id="1899" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +</Modeling> + + + + +<Modeling type="AttackTree" nameTab="Attack Trees" > +<AttackTreeDiagramPanel name="Microwave Flashing" minX="10" maxX="1400" minY="10" maxY="1400" zoom="1.0" > +<CONNECTOR type="133" id="2002" > +<cdparam x="182" y="647" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="1999" /> +<TGConnectingPoint num="1" id="2000" /> +<TGConnectingPoint num="2" id="2001" /> +<P1 x="405" y="290" id="2439" /> +<P2 x="621" y="229" id="2135" /> +<Point x="575" y="290" /> +<Point x="575" y="228" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1997" > +<father id="2002" num="0" /> +<cdparam x="575" y="290" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1998" > +<father id="2002" num="1" /> +<cdparam x="575" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2008" > +<cdparam x="767" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2005" /> +<TGConnectingPoint num="1" id="2006" /> +<TGConnectingPoint num="2" id="2007" /> +<P1 x="746" y="209" id="2134" /> +<P2 x="864" y="242" id="2348" /> +<Point x="832" y="209" /> +<Point x="832" y="241" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2003" > +<father id="2008" num="0" /> +<cdparam x="832" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2004" > +<father id="2008" num="1" /> +<cdparam x="832" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2014" > +<cdparam x="870" y="301" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2011" /> +<TGConnectingPoint num="1" id="2012" /> +<TGConnectingPoint num="2" id="2013" /> +<P1 x="836" y="301" id="2335" /> +<P2 x="746" y="229" id="2136" /> +<Point x="802" y="301" /> +<Point x="802" y="229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2009" > +<father id="2014" num="0" /> +<cdparam x="802" y="301" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2010" > +<father id="2014" num="1" /> +<cdparam x="802" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2022" > +<cdparam x="524" y="599" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2018" /> +<TGConnectingPoint num="1" id="2019" /> +<TGConnectingPoint num="2" id="2020" /> +<TGConnectingPoint num="3" id="2021" /> +<P1 x="559" y="549" id="2233" /> +<P2 x="652" y="239" id="2137" /> +<Point x="609" y="549" /> +<Point x="609" y="283" /> +<Point x="652" y="283" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2015" > +<father id="2022" num="0" /> +<cdparam x="609" y="549" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2016" > +<father id="2022" num="1" /> +<cdparam x="609" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2017" > +<father id="2022" num="2" /> +<cdparam x="652" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2024" > +<cdparam x="701" y="358" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2023" /> +<P1 x="713" y="322" id="2101" /> +<P2 x="714" y="239" id="2138" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2026" > +<cdparam x="319" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="2" /> +<TGConnectingPoint num="0" id="2025" /> +<P1 x="405" y="342" id="2426" /> +<P2 x="651" y="342" id="2102" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2030" > +<cdparam x="498" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2028" /> +<TGConnectingPoint num="1" id="2029" /> +<P1 x="492" y="225" id="2088" /> +<P2 x="287" y="189" id="2452" /> +<Point x="492" y="189" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2027" > +<father id="2030" num="0" /> +<cdparam x="492" y="189" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2032" > +<cdparam x="257" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="1" /> +<TGConnectingPoint num="0" id="2031" /> +<P1 x="295" y="245" id="2413" /> +<P2 x="430" y="245" id="2089" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2034" > +<cdparam x="476" y="520" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="2" /> +<TGConnectingPoint num="0" id="2033" /> +<P1 x="493" y="474" id="2244" /> +<P2 x="492" y="265" id="2091" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2040" > +<cdparam x="259" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2037" /> +<TGConnectingPoint num="1" id="2038" /> +<TGConnectingPoint num="2" id="2039" /> +<P1 x="287" y="145" id="2472" /> +<P2 x="621" y="209" id="2133" /> +<Point x="505" y="145" /> +<Point x="505" y="209" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2035" > +<father id="2040" num="0" /> +<cdparam x="505" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2036" > +<father id="2040" num="1" /> +<cdparam x="505" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2042" > +<cdparam x="569" y="124" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2041" /> +<P1 x="569" y="124" id="2120" /> +<P2 x="287" y="125" id="2470" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2044" > +<cdparam x="867" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="2" /> +<TGConnectingPoint num="0" id="2043" /> +<P1 x="784" y="123" id="2374" /> +<P2 x="694" y="124" id="2121" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2050" > +<cdparam x="868" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="1" /> +<TGConnectingPoint num="0" id="2047" /> +<TGConnectingPoint num="1" id="2048" /> +<TGConnectingPoint num="2" id="2049" /> +<P1 x="834" y="183" id="2361" /> +<P2 x="694" y="144" id="2123" /> +<Point x="753" y="183" /> +<Point x="753" y="144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2045" > +<father id="2050" num="0" /> +<cdparam x="753" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2046" > +<father id="2050" num="1" /> +<cdparam x="753" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2054" > +<cdparam x="553" y="575" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="1" /> +<TGConnectingPoint num="0" id="2052" /> +<TGConnectingPoint num="1" id="2053" /> +<P1 x="532" y="598" id="2207" /> +<P2 x="713" y="362" id="2104" /> +<Point x="712" y="598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2051" > +<father id="2054" num="0" /> +<cdparam x="712" y="598" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2058" > +<cdparam x="179" y="657" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2056" /> +<TGConnectingPoint num="1" id="2057" /> +<P1 x="228" y="310" id="2440" /> +<P2 x="270" y="598" id="2206" /> +<Point x="228" y="598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2055" > +<father id="2058" num="0" /> +<cdparam x="228" y="598" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2062" > +<cdparam x="356" y="697" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2060" /> +<TGConnectingPoint num="1" id="2061" /> +<P1 x="515" y="703" id="2194" /> +<P2 x="906" y="500" id="2298" /> +<Point x="906" y="703" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2059" > +<father id="2062" num="0" /> +<cdparam x="906" y="703" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2066" > +<cdparam x="1217" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2064" /> +<TGConnectingPoint num="1" id="2065" /> +<P1 x="1253" y="400" id="2140" /> +<P2 x="1157" y="368" id="2323" /> +<Point x="1253" y="367" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2063" > +<father id="2066" num="0" /> +<cdparam x="1253" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2068" > +<cdparam x="996" y="395" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2067" /> +<P1 x="1056" y="420" id="2310" /> +<P2 x="1191" y="420" id="2141" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2072" > +<cdparam x="1023" y="726" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2070" /> +<TGConnectingPoint num="1" id="2071" /> +<P1 x="1140" y="480" id="2284" /> +<P2 x="1253" y="440" id="2143" /> +<Point x="1253" y="480" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2069" > +<father id="2072" num="0" /> +<cdparam x="1253" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2074" > +<cdparam x="413" y="928" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2073" /> +<P1 x="496" y="810" id="2166" /> +<P2 x="427" y="787" id="2164" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2076" > +<cdparam x="219" y="930" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2075" /> +<P1 x="346" y="807" id="2179" /> +<P2 x="365" y="787" id="2163" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2078" > +<cdparam x="285" y="843" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2077" /> +<P1 x="396" y="747" id="2153" /> +<P2 x="404" y="723" id="2195" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="301" id="2087" > +<cdparam x="425" y="10" /> +<sizeparam width="341" height="65" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="Attacks on the flashing process of the microwave +We assume the flashing can be done remotely (Internet) +or by a maintenance station +" /> +<TGConnectingPoint num="0" id="2079" /> +<TGConnectingPoint num="1" id="2080" /> +<TGConnectingPoint num="2" id="2081" /> +<TGConnectingPoint num="3" id="2082" /> +<TGConnectingPoint num="4" id="2083" /> +<TGConnectingPoint num="5" id="2084" /> +<TGConnectingPoint num="6" id="2085" /> +<TGConnectingPoint num="7" id="2086" /> +<extraparam> +<Line value="Attacks on the flashing process of the microwave" /> +<Line value="We assume the flashing can be done remotely (Internet)" /> +<Line value="or by a maintenance station" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2100" > +<cdparam x="430" y="225" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<SEQUENCE>>" /> +<TGConnectingPoint num="0" id="2088" /> +<TGConnectingPoint num="1" id="2089" /> +<TGConnectingPoint num="2" id="2090" /> +<TGConnectingPoint num="3" id="2091" /> +<TGConnectingPoint num="4" id="2092" /> +<TGConnectingPoint num="5" id="2093" /> +<TGConnectingPoint num="6" id="2094" /> +<TGConnectingPoint num="7" id="2095" /> +<TGConnectingPoint num="8" id="2096" /> +<TGConnectingPoint num="9" id="2097" /> +<TGConnectingPoint num="10" id="2098" /> +<TGConnectingPoint num="11" id="2099" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2113" > +<cdparam x="651" y="322" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<SEQUENCE>>" /> +<TGConnectingPoint num="0" id="2101" /> +<TGConnectingPoint num="1" id="2102" /> +<TGConnectingPoint num="2" id="2103" /> +<TGConnectingPoint num="3" id="2104" /> +<TGConnectingPoint num="4" id="2105" /> +<TGConnectingPoint num="5" id="2106" /> +<TGConnectingPoint num="6" id="2107" /> +<TGConnectingPoint num="7" id="2108" /> +<TGConnectingPoint num="8" id="2109" /> +<TGConnectingPoint num="9" id="2110" /> +<TGConnectingPoint num="10" id="2111" /> +<TGConnectingPoint num="11" id="2112" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2126" > +<cdparam x="569" y="114" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<SEQUENCE>>" /> +<TGConnectingPoint num="0" id="2114" /> +<TGConnectingPoint num="1" id="2115" /> +<TGConnectingPoint num="2" id="2116" /> +<TGConnectingPoint num="3" id="2117" /> +<TGConnectingPoint num="4" id="2118" /> +<TGConnectingPoint num="5" id="2119" /> +<TGConnectingPoint num="6" id="2120" /> +<TGConnectingPoint num="7" id="2121" /> +<TGConnectingPoint num="8" id="2122" /> +<TGConnectingPoint num="9" id="2123" /> +<TGConnectingPoint num="10" id="2124" /> +<TGConnectingPoint num="11" id="2125" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2139" > +<cdparam x="621" y="199" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<OR>>" /> +<TGConnectingPoint num="0" id="2127" /> +<TGConnectingPoint num="1" id="2128" /> +<TGConnectingPoint num="2" id="2129" /> +<TGConnectingPoint num="3" id="2130" /> +<TGConnectingPoint num="4" id="2131" /> +<TGConnectingPoint num="5" id="2132" /> +<TGConnectingPoint num="6" id="2133" /> +<TGConnectingPoint num="7" id="2134" /> +<TGConnectingPoint num="8" id="2135" /> +<TGConnectingPoint num="9" id="2136" /> +<TGConnectingPoint num="10" id="2137" /> +<TGConnectingPoint num="11" id="2138" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2152" > +<cdparam x="1191" y="400" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<OR>>" /> +<TGConnectingPoint num="0" id="2140" /> +<TGConnectingPoint num="1" id="2141" /> +<TGConnectingPoint num="2" id="2142" /> +<TGConnectingPoint num="3" id="2143" /> +<TGConnectingPoint num="4" id="2144" /> +<TGConnectingPoint num="5" id="2145" /> +<TGConnectingPoint num="6" id="2146" /> +<TGConnectingPoint num="7" id="2147" /> +<TGConnectingPoint num="8" id="2148" /> +<TGConnectingPoint num="9" id="2149" /> +<TGConnectingPoint num="10" id="2150" /> +<TGConnectingPoint num="11" id="2151" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2165" > +<cdparam x="334" y="747" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<OR>>" /> +<TGConnectingPoint num="0" id="2153" /> +<TGConnectingPoint num="1" id="2154" /> +<TGConnectingPoint num="2" id="2155" /> +<TGConnectingPoint num="3" id="2156" /> +<TGConnectingPoint num="4" id="2157" /> +<TGConnectingPoint num="5" id="2158" /> +<TGConnectingPoint num="6" id="2159" /> +<TGConnectingPoint num="7" id="2160" /> +<TGConnectingPoint num="8" id="2161" /> +<TGConnectingPoint num="9" id="2162" /> +<TGConnectingPoint num="10" id="2163" /> +<TGConnectingPoint num="11" id="2164" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1400" id="2281" > +<cdparam x="245" y="436" /> +<sizeparam width="328" height="429" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block2" value="InOvenCommunication" /> +<TGConnectingPoint num="0" id="2257" /> +<TGConnectingPoint num="1" id="2258" /> +<TGConnectingPoint num="2" id="2259" /> +<TGConnectingPoint num="3" id="2260" /> +<TGConnectingPoint num="4" id="2261" /> +<TGConnectingPoint num="5" id="2262" /> +<TGConnectingPoint num="6" id="2263" /> +<TGConnectingPoint num="7" id="2264" /> +<TGConnectingPoint num="8" id="2265" /> +<TGConnectingPoint num="9" id="2266" /> +<TGConnectingPoint num="10" id="2267" /> +<TGConnectingPoint num="11" id="2268" /> +<TGConnectingPoint num="12" id="2269" /> +<TGConnectingPoint num="13" id="2270" /> +<TGConnectingPoint num="14" id="2271" /> +<TGConnectingPoint num="15" id="2272" /> +<TGConnectingPoint num="16" id="2273" /> +<TGConnectingPoint num="17" id="2274" /> +<TGConnectingPoint num="18" id="2275" /> +<TGConnectingPoint num="19" id="2276" /> +<TGConnectingPoint num="20" id="2277" /> +<TGConnectingPoint num="21" id="2278" /> +<TGConnectingPoint num="22" id="2279" /> +<TGConnectingPoint num="23" id="2280" /> +</COMPONENT> +<SUBCOMPONENT type="1401" id="2178" > +<father id="2281" num="0" /> +<cdparam x="446" y="810" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="228" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="BusProbing" /> +<TGConnectingPoint num="0" id="2166" /> +<TGConnectingPoint num="1" id="2167" /> +<TGConnectingPoint num="2" id="2168" /> +<TGConnectingPoint num="3" id="2169" /> +<TGConnectingPoint num="4" id="2170" /> +<TGConnectingPoint num="5" id="2171" /> +<TGConnectingPoint num="6" id="2172" /> +<TGConnectingPoint num="7" id="2173" /> +<TGConnectingPoint num="8" id="2174" /> +<TGConnectingPoint num="9" id="2175" /> +<TGConnectingPoint num="10" id="2176" /> +<TGConnectingPoint num="11" id="2177" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2191" > +<father id="2281" num="1" /> +<cdparam x="256" y="807" /> +<sizeparam width="181" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="147" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="HijackingTheRemoteSession" /> +<TGConnectingPoint num="0" id="2179" /> +<TGConnectingPoint num="1" id="2180" /> +<TGConnectingPoint num="2" id="2181" /> +<TGConnectingPoint num="3" id="2182" /> +<TGConnectingPoint num="4" id="2183" /> +<TGConnectingPoint num="5" id="2184" /> +<TGConnectingPoint num="6" id="2185" /> +<TGConnectingPoint num="7" id="2186" /> +<TGConnectingPoint num="8" id="2187" /> +<TGConnectingPoint num="9" id="2188" /> +<TGConnectingPoint num="10" id="2189" /> +<TGConnectingPoint num="11" id="2190" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2204" > +<father id="2281" num="2" /> +<cdparam x="293" y="683" /> +<sizeparam width="222" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="106" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="RemoteControlProtocolVulnerability" /> +<TGConnectingPoint num="0" id="2192" /> +<TGConnectingPoint num="1" id="2193" /> +<TGConnectingPoint num="2" id="2194" /> +<TGConnectingPoint num="3" id="2195" /> +<TGConnectingPoint num="4" id="2196" /> +<TGConnectingPoint num="5" id="2197" /> +<TGConnectingPoint num="6" id="2198" /> +<TGConnectingPoint num="7" id="2199" /> +<TGConnectingPoint num="8" id="2200" /> +<TGConnectingPoint num="9" id="2201" /> +<TGConnectingPoint num="10" id="2202" /> +<TGConnectingPoint num="11" id="2203" /> +<extraparam> +<info description="Exploit vulnerability or implementation error" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2217" > +<father id="2281" num="3" /> +<cdparam x="270" y="578" /> +<sizeparam width="262" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="66" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="ExploitVulnerabilityOrImplementationError" /> +<TGConnectingPoint num="0" id="2205" /> +<TGConnectingPoint num="1" id="2206" /> +<TGConnectingPoint num="2" id="2207" /> +<TGConnectingPoint num="3" id="2208" /> +<TGConnectingPoint num="4" id="2209" /> +<TGConnectingPoint num="5" id="2210" /> +<TGConnectingPoint num="6" id="2211" /> +<TGConnectingPoint num="7" id="2212" /> +<TGConnectingPoint num="8" id="2213" /> +<TGConnectingPoint num="9" id="2214" /> +<TGConnectingPoint num="10" id="2215" /> +<TGConnectingPoint num="11" id="2216" /> +<extraparam> +<info description="HU-CCU" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2230" > +<father id="2281" num="4" /> +<cdparam x="310" y="633" /> +<sizeparam width="151" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="177" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="ManInTheMiddleAttack" /> +<TGConnectingPoint num="0" id="2218" /> +<TGConnectingPoint num="1" id="2219" /> +<TGConnectingPoint num="2" id="2220" /> +<TGConnectingPoint num="3" id="2221" /> +<TGConnectingPoint num="4" id="2222" /> +<TGConnectingPoint num="5" id="2223" /> +<TGConnectingPoint num="6" id="2224" /> +<TGConnectingPoint num="7" id="2225" /> +<TGConnectingPoint num="8" id="2226" /> +<TGConnectingPoint num="9" id="2227" /> +<TGConnectingPoint num="10" id="2228" /> +<TGConnectingPoint num="11" id="2229" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2243" > +<father id="2281" num="5" /> +<cdparam x="269" y="529" /> +<sizeparam width="290" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="38" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="AttackerInjectWrongFirmwareOnTheDomainBus" /> +<TGConnectingPoint num="0" id="2231" /> +<TGConnectingPoint num="1" id="2232" /> +<TGConnectingPoint num="2" id="2233" /> +<TGConnectingPoint num="3" id="2234" /> +<TGConnectingPoint num="4" id="2235" /> +<TGConnectingPoint num="5" id="2236" /> +<TGConnectingPoint num="6" id="2237" /> +<TGConnectingPoint num="7" id="2238" /> +<TGConnectingPoint num="8" id="2239" /> +<TGConnectingPoint num="9" id="2240" /> +<TGConnectingPoint num="10" id="2241" /> +<TGConnectingPoint num="11" id="2242" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2256" > +<father id="2281" num="6" /> +<cdparam x="416" y="474" /> +<sizeparam width="155" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="173" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="CorruptOrFakeMessage" /> +<TGConnectingPoint num="0" id="2244" /> +<TGConnectingPoint num="1" id="2245" /> +<TGConnectingPoint num="2" id="2246" /> +<TGConnectingPoint num="3" id="2247" /> +<TGConnectingPoint num="4" id="2248" /> +<TGConnectingPoint num="5" id="2249" /> +<TGConnectingPoint num="6" id="2250" /> +<TGConnectingPoint num="7" id="2251" /> +<TGConnectingPoint num="8" id="2252" /> +<TGConnectingPoint num="9" id="2253" /> +<TGConnectingPoint num="10" id="2254" /> +<TGConnectingPoint num="11" id="2255" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1400" id="2410" > +<cdparam x="784" y="56" /> +<sizeparam width="376" height="465" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block1" value="Microcontroller" /> +<TGConnectingPoint num="0" id="2386" /> +<TGConnectingPoint num="1" id="2387" /> +<TGConnectingPoint num="2" id="2388" /> +<TGConnectingPoint num="3" id="2389" /> +<TGConnectingPoint num="4" id="2390" /> +<TGConnectingPoint num="5" id="2391" /> +<TGConnectingPoint num="6" id="2392" /> +<TGConnectingPoint num="7" id="2393" /> +<TGConnectingPoint num="8" id="2394" /> +<TGConnectingPoint num="9" id="2395" /> +<TGConnectingPoint num="10" id="2396" /> +<TGConnectingPoint num="11" id="2397" /> +<TGConnectingPoint num="12" id="2398" /> +<TGConnectingPoint num="13" id="2399" /> +<TGConnectingPoint num="14" id="2400" /> +<TGConnectingPoint num="15" id="2401" /> +<TGConnectingPoint num="16" id="2402" /> +<TGConnectingPoint num="17" id="2403" /> +<TGConnectingPoint num="18" id="2404" /> +<TGConnectingPoint num="19" id="2405" /> +<TGConnectingPoint num="20" id="2406" /> +<TGConnectingPoint num="21" id="2407" /> +<TGConnectingPoint num="22" id="2408" /> +<TGConnectingPoint num="23" id="2409" /> +</COMPONENT> +<SUBCOMPONENT type="1401" id="2294" > +<father id="2410" num="0" /> +<cdparam x="989" y="460" /> +<sizeparam width="151" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="225" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="InjectBogusKeysInOven" /> +<TGConnectingPoint num="0" id="2282" /> +<TGConnectingPoint num="1" id="2283" /> +<TGConnectingPoint num="2" id="2284" /> +<TGConnectingPoint num="3" id="2285" /> +<TGConnectingPoint num="4" id="2286" /> +<TGConnectingPoint num="5" id="2287" /> +<TGConnectingPoint num="6" id="2288" /> +<TGConnectingPoint num="7" id="2289" /> +<TGConnectingPoint num="8" id="2290" /> +<TGConnectingPoint num="9" id="2291" /> +<TGConnectingPoint num="10" id="2292" /> +<TGConnectingPoint num="11" id="2293" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2307" > +<father id="2410" num="1" /> +<cdparam x="830" y="460" /> +<sizeparam width="153" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="223" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="FlashYourOwnFirmware" /> +<TGConnectingPoint num="0" id="2295" /> +<TGConnectingPoint num="1" id="2296" /> +<TGConnectingPoint num="2" id="2297" /> +<TGConnectingPoint num="3" id="2298" /> +<TGConnectingPoint num="4" id="2299" /> +<TGConnectingPoint num="5" id="2300" /> +<TGConnectingPoint num="6" id="2301" /> +<TGConnectingPoint num="7" id="2302" /> +<TGConnectingPoint num="8" id="2303" /> +<TGConnectingPoint num="9" id="2304" /> +<TGConnectingPoint num="10" id="2305" /> +<TGConnectingPoint num="11" id="2306" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2320" > +<father id="2410" num="2" /> +<cdparam x="836" y="400" /> +<sizeparam width="220" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="156" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="FaultyORNoFirmwareAuthentication" /> +<TGConnectingPoint num="0" id="2308" /> +<TGConnectingPoint num="1" id="2309" /> +<TGConnectingPoint num="2" id="2310" /> +<TGConnectingPoint num="3" id="2311" /> +<TGConnectingPoint num="4" id="2312" /> +<TGConnectingPoint num="5" id="2313" /> +<TGConnectingPoint num="6" id="2314" /> +<TGConnectingPoint num="7" id="2315" /> +<TGConnectingPoint num="8" id="2316" /> +<TGConnectingPoint num="9" id="2317" /> +<TGConnectingPoint num="10" id="2318" /> +<TGConnectingPoint num="11" id="2319" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2333" > +<father id="2410" num="3" /> +<cdparam x="802" y="348" /> +<sizeparam width="355" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="21" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="MaintenanceInstalledModifiedFirmwareToWirelessInterface" /> +<TGConnectingPoint num="0" id="2321" /> +<TGConnectingPoint num="1" id="2322" /> +<TGConnectingPoint num="2" id="2323" /> +<TGConnectingPoint num="3" id="2324" /> +<TGConnectingPoint num="4" id="2325" /> +<TGConnectingPoint num="5" id="2326" /> +<TGConnectingPoint num="6" id="2327" /> +<TGConnectingPoint num="7" id="2328" /> +<TGConnectingPoint num="8" id="2329" /> +<TGConnectingPoint num="9" id="2330" /> +<TGConnectingPoint num="10" id="2331" /> +<TGConnectingPoint num="11" id="2332" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2346" > +<father id="2410" num="4" /> +<cdparam x="836" y="281" /> +<sizeparam width="251" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="125" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="InfectedWirelessInterfaceNotResponding" /> +<TGConnectingPoint num="0" id="2334" /> +<TGConnectingPoint num="1" id="2335" /> +<TGConnectingPoint num="2" id="2336" /> +<TGConnectingPoint num="3" id="2337" /> +<TGConnectingPoint num="4" id="2338" /> +<TGConnectingPoint num="5" id="2339" /> +<TGConnectingPoint num="6" id="2340" /> +<TGConnectingPoint num="7" id="2341" /> +<TGConnectingPoint num="8" id="2342" /> +<TGConnectingPoint num="9" id="2343" /> +<TGConnectingPoint num="10" id="2344" /> +<TGConnectingPoint num="11" id="2345" /> +<extraparam> +<info description="Denial of service" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2359" > +<father id="2410" num="5" /> +<cdparam x="864" y="222" /> +<sizeparam width="155" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="221" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="AbortFlashingOperation" /> +<TGConnectingPoint num="0" id="2347" /> +<TGConnectingPoint num="1" id="2348" /> +<TGConnectingPoint num="2" id="2349" /> +<TGConnectingPoint num="3" id="2350" /> +<TGConnectingPoint num="4" id="2351" /> +<TGConnectingPoint num="5" id="2352" /> +<TGConnectingPoint num="6" id="2353" /> +<TGConnectingPoint num="7" id="2354" /> +<TGConnectingPoint num="8" id="2355" /> +<TGConnectingPoint num="9" id="2356" /> +<TGConnectingPoint num="10" id="2357" /> +<TGConnectingPoint num="11" id="2358" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2372" > +<father id="2410" num="6" /> +<cdparam x="834" y="163" /> +<sizeparam width="269" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="107" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="ExploitVulnerabilitesOrImplementationError" /> +<TGConnectingPoint num="0" id="2360" /> +<TGConnectingPoint num="1" id="2361" /> +<TGConnectingPoint num="2" id="2362" /> +<TGConnectingPoint num="3" id="2363" /> +<TGConnectingPoint num="4" id="2364" /> +<TGConnectingPoint num="5" id="2365" /> +<TGConnectingPoint num="6" id="2366" /> +<TGConnectingPoint num="7" id="2367" /> +<TGConnectingPoint num="8" id="2368" /> +<TGConnectingPoint num="9" id="2369" /> +<TGConnectingPoint num="10" id="2370" /> +<TGConnectingPoint num="11" id="2371" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2385" > +<father id="2410" num="7" /> +<cdparam x="784" y="103" /> +<sizeparam width="376" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="0" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="InfectedControllerSendsTooManyMessagesToWirelessInterface" /> +<TGConnectingPoint num="0" id="2373" /> +<TGConnectingPoint num="1" id="2374" /> +<TGConnectingPoint num="2" id="2375" /> +<TGConnectingPoint num="3" id="2376" /> +<TGConnectingPoint num="4" id="2377" /> +<TGConnectingPoint num="5" id="2378" /> +<TGConnectingPoint num="6" id="2379" /> +<TGConnectingPoint num="7" id="2380" /> +<TGConnectingPoint num="8" id="2381" /> +<TGConnectingPoint num="9" id="2382" /> +<TGConnectingPoint num="10" id="2383" /> +<TGConnectingPoint num="11" id="2384" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1400" id="2500" > +<cdparam x="51" y="60" /> +<sizeparam width="354" height="313" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="OvenWirelessCommunicationUnit" /> +<TGConnectingPoint num="0" id="2476" /> +<TGConnectingPoint num="1" id="2477" /> +<TGConnectingPoint num="2" id="2478" /> +<TGConnectingPoint num="3" id="2479" /> +<TGConnectingPoint num="4" id="2480" /> +<TGConnectingPoint num="5" id="2481" /> +<TGConnectingPoint num="6" id="2482" /> +<TGConnectingPoint num="7" id="2483" /> +<TGConnectingPoint num="8" id="2484" /> +<TGConnectingPoint num="9" id="2485" /> +<TGConnectingPoint num="10" id="2486" /> +<TGConnectingPoint num="11" id="2487" /> +<TGConnectingPoint num="12" id="2488" /> +<TGConnectingPoint num="13" id="2489" /> +<TGConnectingPoint num="14" id="2490" /> +<TGConnectingPoint num="15" id="2491" /> +<TGConnectingPoint num="16" id="2492" /> +<TGConnectingPoint num="17" id="2493" /> +<TGConnectingPoint num="18" id="2494" /> +<TGConnectingPoint num="19" id="2495" /> +<TGConnectingPoint num="20" id="2496" /> +<TGConnectingPoint num="21" id="2497" /> +<TGConnectingPoint num="22" id="2498" /> +<TGConnectingPoint num="23" id="2499" /> +</COMPONENT> +<SUBCOMPONENT type="1401" id="2423" > +<father id="2500" num="0" /> +<cdparam x="99" y="225" /> +<sizeparam width="196" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="158" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="ExploitVulnerabilitiesInFlashing" /> +<TGConnectingPoint num="0" id="2411" /> +<TGConnectingPoint num="1" id="2412" /> +<TGConnectingPoint num="2" id="2413" /> +<TGConnectingPoint num="3" id="2414" /> +<TGConnectingPoint num="4" id="2415" /> +<TGConnectingPoint num="5" id="2416" /> +<TGConnectingPoint num="6" id="2417" /> +<TGConnectingPoint num="7" id="2418" /> +<TGConnectingPoint num="8" id="2419" /> +<TGConnectingPoint num="9" id="2420" /> +<TGConnectingPoint num="10" id="2421" /> +<TGConnectingPoint num="11" id="2422" /> +<extraparam> +<info description="blah blah blah" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2436" > +<father id="2500" num="1" /> +<cdparam x="77" y="322" /> +<sizeparam width="328" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="26" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="InfectedWirelessInterfaceShuttingDownCommunication" /> +<TGConnectingPoint num="0" id="2424" /> +<TGConnectingPoint num="1" id="2425" /> +<TGConnectingPoint num="2" id="2426" /> +<TGConnectingPoint num="3" id="2427" /> +<TGConnectingPoint num="4" id="2428" /> +<TGConnectingPoint num="5" id="2429" /> +<TGConnectingPoint num="6" id="2430" /> +<TGConnectingPoint num="7" id="2431" /> +<TGConnectingPoint num="8" id="2432" /> +<TGConnectingPoint num="9" id="2433" /> +<TGConnectingPoint num="10" id="2434" /> +<TGConnectingPoint num="11" id="2435" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2449" > +<father id="2500" num="2" /> +<cdparam x="52" y="270" /> +<sizeparam width="353" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="1" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="InfectedWirelessInterfaceReportsBogusMoreRecentVersion" /> +<TGConnectingPoint num="0" id="2437" /> +<TGConnectingPoint num="1" id="2438" /> +<TGConnectingPoint num="2" id="2439" /> +<TGConnectingPoint num="3" id="2440" /> +<TGConnectingPoint num="4" id="2441" /> +<TGConnectingPoint num="5" id="2442" /> +<TGConnectingPoint num="6" id="2443" /> +<TGConnectingPoint num="7" id="2444" /> +<TGConnectingPoint num="8" id="2445" /> +<TGConnectingPoint num="9" id="2446" /> +<TGConnectingPoint num="10" id="2447" /> +<TGConnectingPoint num="11" id="2448" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2462" > +<father id="2500" num="3" /> +<cdparam x="90" y="169" /> +<sizeparam width="197" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="157" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="GainAccessToWirelessInterface" /> +<TGConnectingPoint num="0" id="2450" /> +<TGConnectingPoint num="1" id="2451" /> +<TGConnectingPoint num="2" id="2452" /> +<TGConnectingPoint num="3" id="2453" /> +<TGConnectingPoint num="4" id="2454" /> +<TGConnectingPoint num="5" id="2455" /> +<TGConnectingPoint num="6" id="2456" /> +<TGConnectingPoint num="7" id="2457" /> +<TGConnectingPoint num="8" id="2458" /> +<TGConnectingPoint num="9" id="2459" /> +<TGConnectingPoint num="10" id="2460" /> +<TGConnectingPoint num="11" id="2461" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2475" > +<father id="2500" num="4" /> +<cdparam x="88" y="115" /> +<sizeparam width="199" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="155" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="OvenTakesTooLongToRespond" /> +<TGConnectingPoint num="0" id="2463" /> +<TGConnectingPoint num="1" id="2464" /> +<TGConnectingPoint num="2" id="2465" /> +<TGConnectingPoint num="3" id="2466" /> +<TGConnectingPoint num="4" id="2467" /> +<TGConnectingPoint num="5" id="2468" /> +<TGConnectingPoint num="6" id="2469" /> +<TGConnectingPoint num="7" id="2470" /> +<TGConnectingPoint num="8" id="2471" /> +<TGConnectingPoint num="9" id="2472" /> +<TGConnectingPoint num="10" id="2473" /> +<TGConnectingPoint num="11" id="2474" /> +<extraparam> +<info description="Denial of Service Attack" root="false" /> +</extraparam> +</SUBCOMPONENT> + + +</AttackTreeDiagramPanel> + +</Modeling> + + + + +<Modeling type="AVATAR Design" nameTab="Design" > +<AVATARBlockDiagramPanel name="AVATAR Block Diagram" minX="10" maxX="1400" minY="10" maxY="1400" > +<MainCode value="#include <sys/types.h>"/> +<MainCode value="#include <sys/socket.h>"/> +<MainCode value="#include <netinet/in.h>"/> +<MainCode value="#include <netdb.h>"/> +<MainCode value="#include <stdio.h>"/> +<MainCode value="#include <strings.h>"/> +<MainCode value="#include <errno.h>"/> +<MainCode value=""/> +<MainCode value="const char* hostname="localhost";"/> +<MainCode value="const char* portname="8374";"/> +<MainCode value="int fd;"/> +<MainCode value="struct addrinfo* res;"/> +<MainCode value=""/> +<MainCode value="void sendDatagram(char * data, int size) {"/> +<MainCode value=" if (sendto(fd,data,size, 0, res->ai_addr,res->ai_addrlen)==-1) {"/> +<MainCode value=" printf("Error when sending datagram");"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value="}"/> +<MainCode value=""/> +<MainCode value="void __user_init() { "/> +<MainCode value=" const char* content = "salut";"/> +<MainCode value=" struct addrinfo hints;"/> +<MainCode value=""/> +<MainCode value=" memset(&hints,0,sizeof(hints));"/> +<MainCode value=" hints.ai_family=AF_UNSPEC;"/> +<MainCode value=" hints.ai_socktype=SOCK_DGRAM;"/> +<MainCode value=" hints.ai_protocol=0;"/> +<MainCode value=" hints.ai_flags=AI_ADDRCONFIG;"/> +<MainCode value=" "/> +<MainCode value=" int err=getaddrinfo(hostname,portname,&hints,&res);"/> +<MainCode value=" if (err!=0) {"/> +<MainCode value=" printf("failed to resolve remote socket address (err=%d)",err);"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value=" fd=socket(res->ai_family,res->ai_socktype,res->ai_protocol);"/> +<MainCode value=" if (fd==-1) {"/> +<MainCode value=" printf("%s",strerror(errno));"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value=" if (sendto(fd,content,sizeof(content),0,"/> +<MainCode value=" res->ai_addr,res->ai_addrlen)==-1) {"/> +<MainCode value=" printf("%s",strerror(errno));"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value=""/> +<MainCode value="}"/> +<Optimized value="true" /> +<Validated value="ObserverProp1;RemotelyControlledMicrowave;RemoteControl;MicroWaveOven;Bell;ControlPanel;Controller;Magnetron;Door;WirelessInterface;" /> +<Ignored value="" /> + +<CONNECTOR type="5002" id="2502" > +<cdparam x="712" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2501" /> +<P1 x="664" y="795" id="2661" /> +<P2 x="669" y="837" id="2520" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in obs_open()" /> +<isd value="in obs_closed()" /> +<isd value="in obs_magnetronStart()" /> +<oso value="out obs_open()" /> +<oso value="out obs_closed()" /> +<oso value="out obs_magnetronStart()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2504" > +<cdparam x="286" y="415" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2503" /> +<P1 x="412" y="497" id="2731" /> +<P2 x="115" y="498" id="2756" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in remoteStart(int value)" /> +<oso value="out remoteStart(int value)" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2510" > +<cdparam x="742" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2507" /> +<TGConnectingPoint num="1" id="2508" /> +<TGConnectingPoint num="2" id="2509" /> +<P1 x="331" y="184" id="2779" /> +<P2 x="815" y="184" id="2780" /> +<Point x="332" y="151" /> +<Point x="815" y="151" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in wirelessChannelRead(Message msg)" /> +<osd value="out wirelessChannelWrite(Message msg)" /> +<FIFOType asynchronous="false" size="5" blocking="false" private="false" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR><SUBCOMPONENT type="-1" id="2505" > +<father id="2510" num="0" /> +<cdparam x="332" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2506" > +<father id="2510" num="1" /> +<cdparam x="815" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5002" id="2512" > +<cdparam x="661" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2511" /> +<P1 x="418" y="753" id="2658" /> +<P2 x="319" y="752" id="2600" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in ring()" /> +<oso value="out ringBell()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2514" > +<cdparam x="364" y="344" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2513" /> +<P1 x="792" y="767" id="2708" /> +<P2 x="746" y="753" id="2659" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in open()" /> +<isd value="in closed()" /> +<oso value="out open()" /> +<oso value="out closed()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2516" > +<cdparam x="656" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2515" /> +<P1 x="746" y="628" id="2648" /> +<P2 x="777" y="539" id="2674" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in startM()" /> +<isd value="in stopM()" /> +<oso value="out startMagnetron()" /> +<oso value="out stopMagnetron()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2518" > +<cdparam x="336" y="271" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2517" /> +<P1 x="385" y="598" id="2625" /> +<P2 x="418" y="711" id="2649" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in LEDOn()" /> +<iso value="in LEDoff()" /> +<osd value="out startCooking()" /> +<osd value="out stopCooking()" /> +<isd value="in start(int duration)" /> +<oso value="out startButton(int duration)" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<COMPONENT type="5000" id="2543" > +<cdparam x="557" y="837" /> +<sizeparam width="225" height="131" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="ObserverProp1" /> +<TGConnectingPoint num="0" id="2519" /> +<TGConnectingPoint num="1" id="2520" /> +<TGConnectingPoint num="2" id="2521" /> +<TGConnectingPoint num="3" id="2522" /> +<TGConnectingPoint num="4" id="2523" /> +<TGConnectingPoint num="5" id="2524" /> +<TGConnectingPoint num="6" id="2525" /> +<TGConnectingPoint num="7" id="2526" /> +<TGConnectingPoint num="8" id="2527" /> +<TGConnectingPoint num="9" id="2528" /> +<TGConnectingPoint num="10" id="2529" /> +<TGConnectingPoint num="11" id="2530" /> +<TGConnectingPoint num="12" id="2531" /> +<TGConnectingPoint num="13" id="2532" /> +<TGConnectingPoint num="14" id="2533" /> +<TGConnectingPoint num="15" id="2534" /> +<TGConnectingPoint num="16" id="2535" /> +<TGConnectingPoint num="17" id="2536" /> +<TGConnectingPoint num="18" id="2537" /> +<TGConnectingPoint num="19" id="2538" /> +<TGConnectingPoint num="20" id="2539" /> +<TGConnectingPoint num="21" id="2540" /> +<TGConnectingPoint num="22" id="2541" /> +<TGConnectingPoint num="23" id="2542" /> +<extraparam> +<CryptoBlock value="false" /> +<Signal value="in obs_open()" /> +<Signal value="in obs_closed()" /> +<Signal value="in obs_magnetronStart()" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5003" id="2552" > +<cdparam x="326" y="839" /> +<sizeparam width="203" height="93" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="DataType0" value="Message" /> +<TGConnectingPoint num="0" id="2544" /> +<TGConnectingPoint num="1" id="2545" /> +<TGConnectingPoint num="2" id="2546" /> +<TGConnectingPoint num="3" id="2547" /> +<TGConnectingPoint num="4" id="2548" /> +<TGConnectingPoint num="5" id="2549" /> +<TGConnectingPoint num="6" id="2550" /> +<TGConnectingPoint num="7" id="2551" /> +<extraparam> +<Attribute access="0" id="data" value="" type="8" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5003" id="2561" > +<cdparam x="92" y="837" /> +<sizeparam width="203" height="90" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="DataType0" value="Key" /> +<TGConnectingPoint num="0" id="2553" /> +<TGConnectingPoint num="1" id="2554" /> +<TGConnectingPoint num="2" id="2555" /> +<TGConnectingPoint num="3" id="2556" /> +<TGConnectingPoint num="4" id="2557" /> +<TGConnectingPoint num="5" id="2558" /> +<TGConnectingPoint num="6" id="2559" /> +<TGConnectingPoint num="7" id="2560" /> +<extraparam> +<Attribute access="0" id="data" value="" type="8" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="2570" > +<cdparam x="63" y="22" /> +<sizeparam width="591" height="95" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="#Confidentiality RemoteControl.duration +#Authenticity RemoteControl.SendingRemoteOrder.msg WirelessInterface.gotDecryptedOrder.msg2 + + +#InitialSystemKnowledge RemoteControl.PSK WirelessInterface.PSK +" /> +<TGConnectingPoint num="0" id="2562" /> +<TGConnectingPoint num="1" id="2563" /> +<TGConnectingPoint num="2" id="2564" /> +<TGConnectingPoint num="3" id="2565" /> +<TGConnectingPoint num="4" id="2566" /> +<TGConnectingPoint num="5" id="2567" /> +<TGConnectingPoint num="6" id="2568" /> +<TGConnectingPoint num="7" id="2569" /> +<extraparam> +<Line value="#Confidentiality RemoteControl.duration" /> +<Line value="#Authenticity RemoteControl.SendingRemoteOrder.msg WirelessInterface.gotDecryptedOrder.msg2" /> +<Line value="" /> +<Line value="" /> +<Line value="#InitialSystemKnowledge RemoteControl.PSK WirelessInterface.PSK" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="2795" > +<cdparam x="90" y="184" /> +<sizeparam width="967" height="631" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="RemotelyControlledMicrowave" /> +<TGConnectingPoint num="0" id="2771" /> +<TGConnectingPoint num="1" id="2772" /> +<TGConnectingPoint num="2" id="2773" /> +<TGConnectingPoint num="3" id="2774" /> +<TGConnectingPoint num="4" id="2775" /> +<TGConnectingPoint num="5" id="2776" /> +<TGConnectingPoint num="6" id="2777" /> +<TGConnectingPoint num="7" id="2778" /> +<TGConnectingPoint num="8" id="2779" /> +<TGConnectingPoint num="9" id="2780" /> +<TGConnectingPoint num="10" id="2781" /> +<TGConnectingPoint num="11" id="2782" /> +<TGConnectingPoint num="12" id="2783" /> +<TGConnectingPoint num="13" id="2784" /> +<TGConnectingPoint num="14" id="2785" /> +<TGConnectingPoint num="15" id="2786" /> +<TGConnectingPoint num="16" id="2787" /> +<TGConnectingPoint num="17" id="2788" /> +<TGConnectingPoint num="18" id="2789" /> +<TGConnectingPoint num="19" id="2790" /> +<TGConnectingPoint num="20" id="2791" /> +<TGConnectingPoint num="21" id="2792" /> +<TGConnectingPoint num="22" id="2793" /> +<TGConnectingPoint num="23" id="2794" /> +<extraparam> +<CryptoBlock value="false" /> +<Signal value="in wirelessChannelRead(Message msg)" /> +<Signal value="out wirelessChannelWrite(Message msg)" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5000" id="2595" > +<father id="2795" num="0" /> +<cdparam x="433" y="231" /> +<sizeparam width="414" height="148" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="553" minY="0" maxY="483" /> +<infoparam name="Block0" value="RemoteControl" /> +<TGConnectingPoint num="0" id="2571" /> +<TGConnectingPoint num="1" id="2572" /> +<TGConnectingPoint num="2" id="2573" /> +<TGConnectingPoint num="3" id="2574" /> +<TGConnectingPoint num="4" id="2575" /> +<TGConnectingPoint num="5" id="2576" /> +<TGConnectingPoint num="6" id="2577" /> +<TGConnectingPoint num="7" id="2578" /> +<TGConnectingPoint num="8" id="2579" /> +<TGConnectingPoint num="9" id="2580" /> +<TGConnectingPoint num="10" id="2581" /> +<TGConnectingPoint num="11" id="2582" /> +<TGConnectingPoint num="12" id="2583" /> +<TGConnectingPoint num="13" id="2584" /> +<TGConnectingPoint num="14" id="2585" /> +<TGConnectingPoint num="15" id="2586" /> +<TGConnectingPoint num="16" id="2587" /> +<TGConnectingPoint num="17" id="2588" /> +<TGConnectingPoint num="18" id="2589" /> +<TGConnectingPoint num="19" id="2590" /> +<TGConnectingPoint num="20" id="2591" /> +<TGConnectingPoint num="21" id="2592" /> +<TGConnectingPoint num="22" id="2593" /> +<TGConnectingPoint num="23" id="2594" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="duration" value="12" type="8" typeOther="" /> +<Attribute access="0" id="msg1" value="" type="5" typeOther="Message" /> +<Attribute access="0" id="PSK" value="" type="5" typeOther="Key" /> +<Attribute access="0" id="msg" value="" type="5" typeOther="Message" /> +<Method value="Message encrypt(Message msg, Key k)" /> +<Method value="Message decrypt(Message msg, Key k)" /> +<Method value="Message sencrypt(Message msg, Key k)" /> +<Method value="Message sdecrypt(Message msg, Key k)" /> +<Method value="Message MAC(Message msg, Key k)" /> +<Method value="bool verifyMAC(Message msg, Key k, Message macmsg)" /> +<Method value="Message concat2(Message msg1, Message msg2)" /> +<Method value="Message concat3(Message msg1, Message msg2, Message msg3)" /> +<Method value="Message concat4(Message msg1, Message msg2, Message msg3, Message msg4)" /> +<Method value="get2(Message msg, Message msg1, Message msg2)" /> +<Method value="get3(Message msg, Message msg1, Message msg2, Message msg3)" /> +<Method value="get4(Message msg, Message msg1, Message msg2, Message msg3, Message msg4)" /> +<globalCode value="" /> +<globalCode value="/* This is my global code !!!! */" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2770" > +<father id="2795" num="1" /> +<cdparam x="115" y="395" /> +<sizeparam width="921" height="412" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="46" minY="0" maxY="219" /> +<infoparam name="Block0" value="MicroWaveOven" /> +<TGConnectingPoint num="0" id="2746" /> +<TGConnectingPoint num="1" id="2747" /> +<TGConnectingPoint num="2" id="2748" /> +<TGConnectingPoint num="3" id="2749" /> +<TGConnectingPoint num="4" id="2750" /> +<TGConnectingPoint num="5" id="2751" /> +<TGConnectingPoint num="6" id="2752" /> +<TGConnectingPoint num="7" id="2753" /> +<TGConnectingPoint num="8" id="2754" /> +<TGConnectingPoint num="9" id="2755" /> +<TGConnectingPoint num="10" id="2756" /> +<TGConnectingPoint num="11" id="2757" /> +<TGConnectingPoint num="12" id="2758" /> +<TGConnectingPoint num="13" id="2759" /> +<TGConnectingPoint num="14" id="2760" /> +<TGConnectingPoint num="15" id="2761" /> +<TGConnectingPoint num="16" id="2762" /> +<TGConnectingPoint num="17" id="2763" /> +<TGConnectingPoint num="18" id="2764" /> +<TGConnectingPoint num="19" id="2765" /> +<TGConnectingPoint num="20" id="2766" /> +<TGConnectingPoint num="21" id="2767" /> +<TGConnectingPoint num="22" id="2768" /> +<TGConnectingPoint num="23" id="2769" /> +<extraparam> +<CryptoBlock value="false" /> +<Signal value="in remoteStart(int value)" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2620" > +<father id="2770" num="0" /> +<cdparam x="138" y="705" /> +<sizeparam width="181" height="95" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="740" minY="0" maxY="317" /> +<infoparam name="Block0" value="Bell" /> +<TGConnectingPoint num="0" id="2596" /> +<TGConnectingPoint num="1" id="2597" /> +<TGConnectingPoint num="2" id="2598" /> +<TGConnectingPoint num="3" id="2599" /> +<TGConnectingPoint num="4" id="2600" /> +<TGConnectingPoint num="5" id="2601" /> +<TGConnectingPoint num="6" id="2602" /> +<TGConnectingPoint num="7" id="2603" /> +<TGConnectingPoint num="8" id="2604" /> +<TGConnectingPoint num="9" id="2605" /> +<TGConnectingPoint num="10" id="2606" /> +<TGConnectingPoint num="11" id="2607" /> +<TGConnectingPoint num="12" id="2608" /> +<TGConnectingPoint num="13" id="2609" /> +<TGConnectingPoint num="14" id="2610" /> +<TGConnectingPoint num="15" id="2611" /> +<TGConnectingPoint num="16" id="2612" /> +<TGConnectingPoint num="17" id="2613" /> +<TGConnectingPoint num="18" id="2614" /> +<TGConnectingPoint num="19" id="2615" /> +<TGConnectingPoint num="20" id="2616" /> +<TGConnectingPoint num="21" id="2617" /> +<TGConnectingPoint num="22" id="2618" /> +<TGConnectingPoint num="23" id="2619" /> +<extraparam> +<CryptoBlock value="false" /> +<Method value="$runBell()" /> +<Signal value="in ring()" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="const char* dring = "Dring dring dring";" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Bell__runBell() {" /> +<globalCode value=" sendDatagram(dring, 18);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2645" > +<father id="2770" num="1" /> +<cdparam x="129" y="517" /> +<sizeparam width="256" height="162" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="665" minY="0" maxY="250" /> +<infoparam name="Block0" value="ControlPanel" /> +<TGConnectingPoint num="0" id="2621" /> +<TGConnectingPoint num="1" id="2622" /> +<TGConnectingPoint num="2" id="2623" /> +<TGConnectingPoint num="3" id="2624" /> +<TGConnectingPoint num="4" id="2625" /> +<TGConnectingPoint num="5" id="2626" /> +<TGConnectingPoint num="6" id="2627" /> +<TGConnectingPoint num="7" id="2628" /> +<TGConnectingPoint num="8" id="2629" /> +<TGConnectingPoint num="9" id="2630" /> +<TGConnectingPoint num="10" id="2631" /> +<TGConnectingPoint num="11" id="2632" /> +<TGConnectingPoint num="12" id="2633" /> +<TGConnectingPoint num="13" id="2634" /> +<TGConnectingPoint num="14" id="2635" /> +<TGConnectingPoint num="15" id="2636" /> +<TGConnectingPoint num="16" id="2637" /> +<TGConnectingPoint num="17" id="2638" /> +<TGConnectingPoint num="18" id="2639" /> +<TGConnectingPoint num="19" id="2640" /> +<TGConnectingPoint num="20" id="2641" /> +<TGConnectingPoint num="21" id="2642" /> +<TGConnectingPoint num="22" id="2643" /> +<TGConnectingPoint num="23" id="2644" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="duration" value="9" type="8" typeOther="" /> +<Signal value="in LEDOn()" /> +<Signal value="in LEDoff()" /> +<Signal value="out startButton(int duration)" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2670" > +<father id="2770" num="2" /> +<cdparam x="418" y="628" /> +<sizeparam width="328" height="167" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="593" minY="0" maxY="245" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="2646" /> +<TGConnectingPoint num="1" id="2647" /> +<TGConnectingPoint num="2" id="2648" /> +<TGConnectingPoint num="3" id="2649" /> +<TGConnectingPoint num="4" id="2650" /> +<TGConnectingPoint num="5" id="2651" /> +<TGConnectingPoint num="6" id="2652" /> +<TGConnectingPoint num="7" id="2653" /> +<TGConnectingPoint num="8" id="2654" /> +<TGConnectingPoint num="9" id="2655" /> +<TGConnectingPoint num="10" id="2656" /> +<TGConnectingPoint num="11" id="2657" /> +<TGConnectingPoint num="12" id="2658" /> +<TGConnectingPoint num="13" id="2659" /> +<TGConnectingPoint num="14" id="2660" /> +<TGConnectingPoint num="15" id="2661" /> +<TGConnectingPoint num="16" id="2662" /> +<TGConnectingPoint num="17" id="2663" /> +<TGConnectingPoint num="18" id="2664" /> +<TGConnectingPoint num="19" id="2665" /> +<TGConnectingPoint num="20" id="2666" /> +<TGConnectingPoint num="21" id="2667" /> +<TGConnectingPoint num="22" id="2668" /> +<TGConnectingPoint num="23" id="2669" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="duration" value="5" type="8" typeOther="" /> +<Attribute access="0" id="remainingTime" value="0" type="8" typeOther="" /> +<Method value="$startCooking(int duration)" /> +<Method value="$durationModified(int duration)" /> +<Signal value="in start(int duration)" /> +<Signal value="in closed()" /> +<Signal value="in open()" /> +<Signal value="out ringBell()" /> +<Signal value="out startMagnetron()" /> +<Signal value="out stopMagnetron()" /> +<Signal value="out startCooking()" /> +<Signal value="out stopCooking()" /> +<Signal value="out obs_open()" /> +<Signal value="out obs_closed()" /> +<Signal value="out obs_magnetronStart()" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="const char* dur = "Duration";" /> +<globalCode value="const char* sta = "Start ";" /> +<globalCode value="char *mybuf;" /> +<globalCode value="" /> +<globalCode value="void initBuffer() {" /> +<globalCode value=" int i=0;" /> +<globalCode value=" if (mybuf == NULL) {" /> +<globalCode value=" mybuf = (char *)(malloc(sizeof(char)*15));" /> +<globalCode value=" }" /> +<globalCode value=" for(i=0; i<15; i++) {" /> +<globalCode value=" mybuf[i] = ' ';" /> +<globalCode value=" }" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Controller__startCooking(int val) {" /> +<globalCode value="initBuffer();" /> +<globalCode value=" sprintf(mybuf, "%s %d", sta, val);" /> +<globalCode value=" sendDatagram(mybuf, 15);" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Controller__durationModified(int val) {" /> +<globalCode value="initBuffer();" /> +<globalCode value="" /> +<globalCode value="sprintf(mybuf, "%s %d", dur, val);" /> +<globalCode value=" sendDatagram(mybuf, 15);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2695" > +<father id="2770" num="3" /> +<cdparam x="777" y="459" /> +<sizeparam width="253" height="160" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="668" minY="0" maxY="252" /> +<infoparam name="Block0" value="Magnetron" /> +<TGConnectingPoint num="0" id="2671" /> +<TGConnectingPoint num="1" id="2672" /> +<TGConnectingPoint num="2" id="2673" /> +<TGConnectingPoint num="3" id="2674" /> +<TGConnectingPoint num="4" id="2675" /> +<TGConnectingPoint num="5" id="2676" /> +<TGConnectingPoint num="6" id="2677" /> +<TGConnectingPoint num="7" id="2678" /> +<TGConnectingPoint num="8" id="2679" /> +<TGConnectingPoint num="9" id="2680" /> +<TGConnectingPoint num="10" id="2681" /> +<TGConnectingPoint num="11" id="2682" /> +<TGConnectingPoint num="12" id="2683" /> +<TGConnectingPoint num="13" id="2684" /> +<TGConnectingPoint num="14" id="2685" /> +<TGConnectingPoint num="15" id="2686" /> +<TGConnectingPoint num="16" id="2687" /> +<TGConnectingPoint num="17" id="2688" /> +<TGConnectingPoint num="18" id="2689" /> +<TGConnectingPoint num="19" id="2690" /> +<TGConnectingPoint num="20" id="2691" /> +<TGConnectingPoint num="21" id="2692" /> +<TGConnectingPoint num="22" id="2693" /> +<TGConnectingPoint num="23" id="2694" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="power" value="0" type="8" typeOther="" /> +<Method value="$ON()" /> +<Method value="$OFF()" /> +<Signal value="in startM()" /> +<Signal value="in stopM()" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Magnetron__ON() {" /> +<globalCode value=" sendDatagram("Magnetron_ON", 13);" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Magnetron__OFF() {" /> +<globalCode value=" sendDatagram("Magnetron_OFF", 14);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2720" > +<father id="2770" num="4" /> +<cdparam x="792" y="673" /> +<sizeparam width="215" height="126" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="706" minY="0" maxY="286" /> +<infoparam name="Block0" value="Door" /> +<TGConnectingPoint num="0" id="2696" /> +<TGConnectingPoint num="1" id="2697" /> +<TGConnectingPoint num="2" id="2698" /> +<TGConnectingPoint num="3" id="2699" /> +<TGConnectingPoint num="4" id="2700" /> +<TGConnectingPoint num="5" id="2701" /> +<TGConnectingPoint num="6" id="2702" /> +<TGConnectingPoint num="7" id="2703" /> +<TGConnectingPoint num="8" id="2704" /> +<TGConnectingPoint num="9" id="2705" /> +<TGConnectingPoint num="10" id="2706" /> +<TGConnectingPoint num="11" id="2707" /> +<TGConnectingPoint num="12" id="2708" /> +<TGConnectingPoint num="13" id="2709" /> +<TGConnectingPoint num="14" id="2710" /> +<TGConnectingPoint num="15" id="2711" /> +<TGConnectingPoint num="16" id="2712" /> +<TGConnectingPoint num="17" id="2713" /> +<TGConnectingPoint num="18" id="2714" /> +<TGConnectingPoint num="19" id="2715" /> +<TGConnectingPoint num="20" id="2716" /> +<TGConnectingPoint num="21" id="2717" /> +<TGConnectingPoint num="22" id="2718" /> +<TGConnectingPoint num="23" id="2719" /> +<extraparam> +<CryptoBlock value="false" /> +<Method value="$openM()" /> +<Method value="$closeM()" /> +<Signal value="out closed()" /> +<Signal value="out open()" /> +<globalCode value="" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="const char* openD = "Open Door";" /> +<globalCode value="const char* closeD = "Close Door";" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Door__openM() {" /> +<globalCode value=" sendDatagram(openD, 10);" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Door__closeM() {" /> +<globalCode value=" sendDatagram(closeD, 10);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2745" > +<father id="2770" num="5" /> +<cdparam x="412" y="459" /> +<sizeparam width="334" height="154" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="587" minY="0" maxY="258" /> +<infoparam name="Block0" value="WirelessInterface" /> +<TGConnectingPoint num="0" id="2721" /> +<TGConnectingPoint num="1" id="2722" /> +<TGConnectingPoint num="2" id="2723" /> +<TGConnectingPoint num="3" id="2724" /> +<TGConnectingPoint num="4" id="2725" /> +<TGConnectingPoint num="5" id="2726" /> +<TGConnectingPoint num="6" id="2727" /> +<TGConnectingPoint num="7" id="2728" /> +<TGConnectingPoint num="8" id="2729" /> +<TGConnectingPoint num="9" id="2730" /> +<TGConnectingPoint num="10" id="2731" /> +<TGConnectingPoint num="11" id="2732" /> +<TGConnectingPoint num="12" id="2733" /> +<TGConnectingPoint num="13" id="2734" /> +<TGConnectingPoint num="14" id="2735" /> +<TGConnectingPoint num="15" id="2736" /> +<TGConnectingPoint num="16" id="2737" /> +<TGConnectingPoint num="17" id="2738" /> +<TGConnectingPoint num="18" id="2739" /> +<TGConnectingPoint num="19" id="2740" /> +<TGConnectingPoint num="20" id="2741" /> +<TGConnectingPoint num="21" id="2742" /> +<TGConnectingPoint num="22" id="2743" /> +<TGConnectingPoint num="23" id="2744" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="msg2" value="" type="5" typeOther="Message" /> +<Attribute access="0" id="PSK" value="" type="5" typeOther="Key" /> +<Attribute access="0" id="selectedDuration" value="" type="8" typeOther="" /> +<Attribute access="0" id="msg3" value="" type="5" typeOther="Message" /> +<Method value="Message encrypt(Message msg, Key k)" /> +<Method value="Message decrypt(Message msg, Key k)" /> +<Method value="Message sencrypt(Message msg, Key k)" /> +<Method value="Message sdecrypt(Message msg, Key k)" /> +<Method value="Message MAC(Message msg, Key k)" /> +<Method value="bool verifyMAC(Message msg, Key k, Message macmsg)" /> +<Method value="Message concat2(Message msg1, Message msg2)" /> +<Method value="Message concat3(Message msg1, Message msg2, Message msg3)" /> +<Method value="Message concat4(Message msg1, Message msg2, Message msg3, Message msg4)" /> +<Method value="get2(Message msg, Message msg1, Message msg2)" /> +<Method value="get3(Message msg, Message msg1, Message msg2, Message msg3)" /> +<Method value="get4(Message msg, Message msg1, Message msg2, Message msg3, Message msg4)" /> +<Signal value="out remoteStart(int value)" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARBlockDiagramPanel> + +<AVATARStateMachineDiagramPanel name="ObserverProp1" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="2802" > +<cdparam x="395" y="433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2801" /> +<P1 x="395" y="433" id="2915" /> +<P2 x="395" y="450" id="2874" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2800" > +<father id="2802" num="0" /> +<cdparam x="395" y="473" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2796" /> +<TGConnectingPoint num="1" id="2797" /> +<TGConnectingPoint num="2" id="2798" /> +<TGConnectingPoint num="3" id="2799" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2809" > +<cdparam x="303" y="356" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2808" /> +<P1 x="303" y="356" id="2962" /> +<P2 x="395" y="403" id="2914" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2807" > +<father id="2809" num="0" /> +<cdparam x="303" y="396" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2803" /> +<TGConnectingPoint num="1" id="2804" /> +<TGConnectingPoint num="2" id="2805" /> +<TGConnectingPoint num="3" id="2806" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2822" > +<cdparam x="436" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2818" /> +<TGConnectingPoint num="1" id="2819" /> +<TGConnectingPoint num="2" id="2820" /> +<TGConnectingPoint num="3" id="2821" /> +<P1 x="436" y="285" id="2926" /> +<P2 x="409" y="180" id="3010" /> +<Point x="436" y="302" /> +<Point x="554" y="302" /> +<Point x="554" y="180" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2810" > +<father id="2822" num="0" /> +<cdparam x="436" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2811" > +<father id="2822" num="1" /> +<cdparam x="554" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2812" > +<father id="2822" num="2" /> +<cdparam x="554" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2817" > +<father id="2822" num="3" /> +<cdparam x="436" y="325" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2813" /> +<TGConnectingPoint num="1" id="2814" /> +<TGConnectingPoint num="2" id="2815" /> +<TGConnectingPoint num="3" id="2816" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2829" > +<cdparam x="379" y="218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2828" /> +<P1 x="379" y="218" id="3014" /> +<P2 x="436" y="255" id="2925" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2827" > +<father id="2829" num="0" /> +<cdparam x="379" y="258" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2823" /> +<TGConnectingPoint num="1" id="2824" /> +<TGConnectingPoint num="2" id="2825" /> +<TGConnectingPoint num="3" id="2826" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2844" > +<cdparam x="228" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2839" /> +<TGConnectingPoint num="1" id="2840" /> +<TGConnectingPoint num="2" id="2841" /> +<TGConnectingPoint num="3" id="2842" /> +<TGConnectingPoint num="4" id="2843" /> +<P1 x="228" y="432" id="2937" /> +<P2 x="319" y="168" id="3007" /> +<Point x="228" y="452" /> +<Point x="165" y="452" /> +<Point x="165" y="136" /> +<Point x="320" y="136" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2830" > +<father id="2844" num="0" /> +<cdparam x="228" y="452" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2831" > +<father id="2844" num="1" /> +<cdparam x="165" y="452" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2832" > +<father id="2844" num="2" /> +<cdparam x="165" y="136" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2833" > +<father id="2844" num="3" /> +<cdparam x="320" y="136" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2838" > +<father id="2844" num="4" /> +<cdparam x="228" y="472" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2834" /> +<TGConnectingPoint num="1" id="2835" /> +<TGConnectingPoint num="2" id="2836" /> +<TGConnectingPoint num="3" id="2837" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2851" > +<cdparam x="252" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2850" /> +<P1 x="246" y="356" id="2961" /> +<P2 x="228" y="402" id="2936" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2849" > +<father id="2851" num="0" /> +<cdparam x="252" y="408" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2845" /> +<TGConnectingPoint num="1" id="2846" /> +<TGConnectingPoint num="2" id="2847" /> +<TGConnectingPoint num="3" id="2848" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2858" > +<cdparam x="275" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2857" /> +<P1 x="275" y="286" id="2989" /> +<P2 x="275" y="306" id="2948" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2856" > +<father id="2858" num="0" /> +<cdparam x="275" y="326" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2852" /> +<TGConnectingPoint num="1" id="2853" /> +<TGConnectingPoint num="2" id="2854" /> +<TGConnectingPoint num="3" id="2855" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2865" > +<cdparam x="319" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2864" /> +<P1 x="319" y="218" id="3013" /> +<P2 x="275" y="256" id="2988" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2863" > +<father id="2865" num="0" /> +<cdparam x="319" y="245" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2859" /> +<TGConnectingPoint num="1" id="2860" /> +<TGConnectingPoint num="2" id="2861" /> +<TGConnectingPoint num="3" id="2862" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2872" > +<cdparam x="349" y="143" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="2871" /> +<P1 x="349" y="143" id="3040" /> +<P2 x="349" y="168" id="3000" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2870" > +<father id="2872" num="0" /> +<cdparam x="349" y="183" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2866" /> +<TGConnectingPoint num="1" id="2867" /> +<TGConnectingPoint num="2" id="2868" /> +<TGConnectingPoint num="3" id="2869" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="2913" > +<cdparam x="345" y="450" /> +<sizeparam width="100" height="54" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Error" /> +<TGConnectingPoint num="0" id="2873" /> +<TGConnectingPoint num="1" id="2874" /> +<TGConnectingPoint num="2" id="2875" /> +<TGConnectingPoint num="3" id="2876" /> +<TGConnectingPoint num="4" id="2877" /> +<TGConnectingPoint num="5" id="2878" /> +<TGConnectingPoint num="6" id="2879" /> +<TGConnectingPoint num="7" id="2880" /> +<TGConnectingPoint num="8" id="2881" /> +<TGConnectingPoint num="9" id="2882" /> +<TGConnectingPoint num="10" id="2883" /> +<TGConnectingPoint num="11" id="2884" /> +<TGConnectingPoint num="12" id="2885" /> +<TGConnectingPoint num="13" id="2886" /> +<TGConnectingPoint num="14" id="2887" /> +<TGConnectingPoint num="15" id="2888" /> +<TGConnectingPoint num="16" id="2889" /> +<TGConnectingPoint num="17" id="2890" /> +<TGConnectingPoint num="18" id="2891" /> +<TGConnectingPoint num="19" id="2892" /> +<TGConnectingPoint num="20" id="2893" /> +<TGConnectingPoint num="21" id="2894" /> +<TGConnectingPoint num="22" id="2895" /> +<TGConnectingPoint num="23" id="2896" /> +<TGConnectingPoint num="24" id="2897" /> +<TGConnectingPoint num="25" id="2898" /> +<TGConnectingPoint num="26" id="2899" /> +<TGConnectingPoint num="27" id="2900" /> +<TGConnectingPoint num="28" id="2901" /> +<TGConnectingPoint num="29" id="2902" /> +<TGConnectingPoint num="30" id="2903" /> +<TGConnectingPoint num="31" id="2904" /> +<TGConnectingPoint num="32" id="2905" /> +<TGConnectingPoint num="33" id="2906" /> +<TGConnectingPoint num="34" id="2907" /> +<TGConnectingPoint num="35" id="2908" /> +<TGConnectingPoint num="36" id="2909" /> +<TGConnectingPoint num="37" id="2910" /> +<TGConnectingPoint num="38" id="2911" /> +<TGConnectingPoint num="39" id="2912" /> +<accessibility /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="2924" > +<cdparam x="325" y="408" /> +<sizeparam width="141" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="2914" /> +<TGConnectingPoint num="1" id="2915" /> +<TGConnectingPoint num="2" id="2916" /> +<TGConnectingPoint num="3" id="2917" /> +<TGConnectingPoint num="4" id="2918" /> +<TGConnectingPoint num="5" id="2919" /> +<TGConnectingPoint num="6" id="2920" /> +<TGConnectingPoint num="7" id="2921" /> +<TGConnectingPoint num="8" id="2922" /> +<TGConnectingPoint num="9" id="2923" /> +</COMPONENT> + +<COMPONENT type="5104" id="2935" > +<cdparam x="366" y="260" /> +<sizeparam width="141" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="2925" /> +<TGConnectingPoint num="1" id="2926" /> +<TGConnectingPoint num="2" id="2927" /> +<TGConnectingPoint num="3" id="2928" /> +<TGConnectingPoint num="4" id="2929" /> +<TGConnectingPoint num="5" id="2930" /> +<TGConnectingPoint num="6" id="2931" /> +<TGConnectingPoint num="7" id="2932" /> +<TGConnectingPoint num="8" id="2933" /> +<TGConnectingPoint num="9" id="2934" /> +</COMPONENT> + +<COMPONENT type="5104" id="2946" > +<cdparam x="183" y="407" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_closed()" /> +<TGConnectingPoint num="0" id="2936" /> +<TGConnectingPoint num="1" id="2937" /> +<TGConnectingPoint num="2" id="2938" /> +<TGConnectingPoint num="3" id="2939" /> +<TGConnectingPoint num="4" id="2940" /> +<TGConnectingPoint num="5" id="2941" /> +<TGConnectingPoint num="6" id="2942" /> +<TGConnectingPoint num="7" id="2943" /> +<TGConnectingPoint num="8" id="2944" /> +<TGConnectingPoint num="9" id="2945" /> +</COMPONENT> + +<COMPONENT type="5106" id="2987" > +<cdparam x="218" y="306" /> +<sizeparam width="114" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitingForClosed" /> +<TGConnectingPoint num="0" id="2947" /> +<TGConnectingPoint num="1" id="2948" /> +<TGConnectingPoint num="2" id="2949" /> +<TGConnectingPoint num="3" id="2950" /> +<TGConnectingPoint num="4" id="2951" /> +<TGConnectingPoint num="5" id="2952" /> +<TGConnectingPoint num="6" id="2953" /> +<TGConnectingPoint num="7" id="2954" /> +<TGConnectingPoint num="8" id="2955" /> +<TGConnectingPoint num="9" id="2956" /> +<TGConnectingPoint num="10" id="2957" /> +<TGConnectingPoint num="11" id="2958" /> +<TGConnectingPoint num="12" id="2959" /> +<TGConnectingPoint num="13" id="2960" /> +<TGConnectingPoint num="14" id="2961" /> +<TGConnectingPoint num="15" id="2962" /> +<TGConnectingPoint num="16" id="2963" /> +<TGConnectingPoint num="17" id="2964" /> +<TGConnectingPoint num="18" id="2965" /> +<TGConnectingPoint num="19" id="2966" /> +<TGConnectingPoint num="20" id="2967" /> +<TGConnectingPoint num="21" id="2968" /> +<TGConnectingPoint num="22" id="2969" /> +<TGConnectingPoint num="23" id="2970" /> +<TGConnectingPoint num="24" id="2971" /> +<TGConnectingPoint num="25" id="2972" /> +<TGConnectingPoint num="26" id="2973" /> +<TGConnectingPoint num="27" id="2974" /> +<TGConnectingPoint num="28" id="2975" /> +<TGConnectingPoint num="29" id="2976" /> +<TGConnectingPoint num="30" id="2977" /> +<TGConnectingPoint num="31" id="2978" /> +<TGConnectingPoint num="32" id="2979" /> +<TGConnectingPoint num="33" id="2980" /> +<TGConnectingPoint num="34" id="2981" /> +<TGConnectingPoint num="35" id="2982" /> +<TGConnectingPoint num="36" id="2983" /> +<TGConnectingPoint num="37" id="2984" /> +<TGConnectingPoint num="38" id="2985" /> +<TGConnectingPoint num="39" id="2986" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="2998" > +<cdparam x="234" y="261" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_open()" /> +<TGConnectingPoint num="0" id="2988" /> +<TGConnectingPoint num="1" id="2989" /> +<TGConnectingPoint num="2" id="2990" /> +<TGConnectingPoint num="3" id="2991" /> +<TGConnectingPoint num="4" id="2992" /> +<TGConnectingPoint num="5" id="2993" /> +<TGConnectingPoint num="6" id="2994" /> +<TGConnectingPoint num="7" id="2995" /> +<TGConnectingPoint num="8" id="2996" /> +<TGConnectingPoint num="9" id="2997" /> +</COMPONENT> + +<COMPONENT type="5106" id="3039" > +<cdparam x="289" y="168" /> +<sizeparam width="120" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitingForOpen" /> +<TGConnectingPoint num="0" id="2999" /> +<TGConnectingPoint num="1" id="3000" /> +<TGConnectingPoint num="2" id="3001" /> +<TGConnectingPoint num="3" id="3002" /> +<TGConnectingPoint num="4" id="3003" /> +<TGConnectingPoint num="5" id="3004" /> +<TGConnectingPoint num="6" id="3005" /> +<TGConnectingPoint num="7" id="3006" /> +<TGConnectingPoint num="8" id="3007" /> +<TGConnectingPoint num="9" id="3008" /> +<TGConnectingPoint num="10" id="3009" /> +<TGConnectingPoint num="11" id="3010" /> +<TGConnectingPoint num="12" id="3011" /> +<TGConnectingPoint num="13" id="3012" /> +<TGConnectingPoint num="14" id="3013" /> +<TGConnectingPoint num="15" id="3014" /> +<TGConnectingPoint num="16" id="3015" /> +<TGConnectingPoint num="17" id="3016" /> +<TGConnectingPoint num="18" id="3017" /> +<TGConnectingPoint num="19" id="3018" /> +<TGConnectingPoint num="20" id="3019" /> +<TGConnectingPoint num="21" id="3020" /> +<TGConnectingPoint num="22" id="3021" /> +<TGConnectingPoint num="23" id="3022" /> +<TGConnectingPoint num="24" id="3023" /> +<TGConnectingPoint num="25" id="3024" /> +<TGConnectingPoint num="26" id="3025" /> +<TGConnectingPoint num="27" id="3026" /> +<TGConnectingPoint num="28" id="3027" /> +<TGConnectingPoint num="29" id="3028" /> +<TGConnectingPoint num="30" id="3029" /> +<TGConnectingPoint num="31" id="3030" /> +<TGConnectingPoint num="32" id="3031" /> +<TGConnectingPoint num="33" id="3032" /> +<TGConnectingPoint num="34" id="3033" /> +<TGConnectingPoint num="35" id="3034" /> +<TGConnectingPoint num="36" id="3035" /> +<TGConnectingPoint num="37" id="3036" /> +<TGConnectingPoint num="38" id="3037" /> +<TGConnectingPoint num="39" id="3038" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="3041" > +<cdparam x="342" y="123" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3040" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="RemotelyControlledMicrowave" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3048" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to stop state" value="null" /> +<TGConnectingPoint num="0" id="3047" /> +<P1 x="407" y="70" id="3051" /> +<P2 x="408" y="85" id="3049" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3046" > +<father id="3048" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3042" /> +<TGConnectingPoint num="1" id="3043" /> +<TGConnectingPoint num="2" id="3044" /> +<TGConnectingPoint num="3" id="3045" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5101" id="3050" > +<cdparam x="398" y="90" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="3049" /> +</COMPONENT> + +<COMPONENT type="5100" id="3052" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3051" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="MicroWaveOven" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3059" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="3058" /> +<P1 x="407" y="70" id="3101" /> +<P2 x="451" y="106" id="3061" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3057" > +<father id="3059" num="0" /> +<cdparam x="444" y="75" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3053" /> +<TGConnectingPoint num="1" id="3054" /> +<TGConnectingPoint num="2" id="3055" /> +<TGConnectingPoint num="3" id="3056" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="3100" > +<cdparam x="396" y="106" /> +<sizeparam width="111" height="42" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Running" /> +<TGConnectingPoint num="0" id="3060" /> +<TGConnectingPoint num="1" id="3061" /> +<TGConnectingPoint num="2" id="3062" /> +<TGConnectingPoint num="3" id="3063" /> +<TGConnectingPoint num="4" id="3064" /> +<TGConnectingPoint num="5" id="3065" /> +<TGConnectingPoint num="6" id="3066" /> +<TGConnectingPoint num="7" id="3067" /> +<TGConnectingPoint num="8" id="3068" /> +<TGConnectingPoint num="9" id="3069" /> +<TGConnectingPoint num="10" id="3070" /> +<TGConnectingPoint num="11" id="3071" /> +<TGConnectingPoint num="12" id="3072" /> +<TGConnectingPoint num="13" id="3073" /> +<TGConnectingPoint num="14" id="3074" /> +<TGConnectingPoint num="15" id="3075" /> +<TGConnectingPoint num="16" id="3076" /> +<TGConnectingPoint num="17" id="3077" /> +<TGConnectingPoint num="18" id="3078" /> +<TGConnectingPoint num="19" id="3079" /> +<TGConnectingPoint num="20" id="3080" /> +<TGConnectingPoint num="21" id="3081" /> +<TGConnectingPoint num="22" id="3082" /> +<TGConnectingPoint num="23" id="3083" /> +<TGConnectingPoint num="24" id="3084" /> +<TGConnectingPoint num="25" id="3085" /> +<TGConnectingPoint num="26" id="3086" /> +<TGConnectingPoint num="27" id="3087" /> +<TGConnectingPoint num="28" id="3088" /> +<TGConnectingPoint num="29" id="3089" /> +<TGConnectingPoint num="30" id="3090" /> +<TGConnectingPoint num="31" id="3091" /> +<TGConnectingPoint num="32" id="3092" /> +<TGConnectingPoint num="33" id="3093" /> +<TGConnectingPoint num="34" id="3094" /> +<TGConnectingPoint num="35" id="3095" /> +<TGConnectingPoint num="36" id="3096" /> +<TGConnectingPoint num="37" id="3097" /> +<TGConnectingPoint num="38" id="3098" /> +<TGConnectingPoint num="39" id="3099" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="3102" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3101" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="WirelessInterface" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3109" > +<cdparam x="447" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="3108" /> +<P1 x="447" y="399" id="3144" /> +<P2 x="474" y="432" id="3179" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3107" > +<father id="3109" num="0" /> +<cdparam x="447" y="439" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3103" /> +<TGConnectingPoint num="1" id="3104" /> +<TGConnectingPoint num="2" id="3105" /> +<TGConnectingPoint num="3" id="3106" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3116" > +<cdparam x="491" y="459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="3115" /> +<P1 x="474" y="462" id="3180" /> +<P2 x="485" y="495" id="3231" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3114" > +<father id="3116" num="0" /> +<cdparam x="491" y="499" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3110" /> +<TGConnectingPoint num="1" id="3111" /> +<TGConnectingPoint num="2" id="3112" /> +<TGConnectingPoint num="3" id="3113" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3123" > +<cdparam x="455" y="352" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to stop state" value="null" /> +<TGConnectingPoint num="0" id="3122" /> +<P1 x="414" y="275" id="3196" /> +<P2 x="447" y="349" id="3139" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3121" > +<father id="3123" num="0" /> +<cdparam x="459" y="317" /> +<sizeparam width="177" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3117" /> +<TGConnectingPoint num="1" id="3118" /> +<TGConnectingPoint num="2" id="3119" /> +<TGConnectingPoint num="3" id="3120" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="msg3 = sdecrypt(msg2, PSK)" /> +<actions value="selectedDuration = msg3.data" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3130" > +<cdparam x="386" y="101" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="3129" /> +<P1 x="386" y="101" id="3244" /> +<P2 x="401" y="161" id="3233" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3128" > +<father id="3130" num="0" /> +<cdparam x="386" y="141" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3124" /> +<TGConnectingPoint num="1" id="3125" /> +<TGConnectingPoint num="2" id="3126" /> +<TGConnectingPoint num="3" id="3127" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3137" > +<cdparam x="401" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="3136" /> +<P1 x="401" y="191" id="3234" /> +<P2 x="414" y="225" id="3191" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3135" > +<father id="3137" num="0" /> +<cdparam x="453" y="214" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3131" /> +<TGConnectingPoint num="1" id="3132" /> +<TGConnectingPoint num="2" id="3133" /> +<TGConnectingPoint num="3" id="3134" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="3178" > +<cdparam x="306" y="349" /> +<sizeparam width="282" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="gotDecryptedOrder" /> +<TGConnectingPoint num="0" id="3138" /> +<TGConnectingPoint num="1" id="3139" /> +<TGConnectingPoint num="2" id="3140" /> +<TGConnectingPoint num="3" id="3141" /> +<TGConnectingPoint num="4" id="3142" /> +<TGConnectingPoint num="5" id="3143" /> +<TGConnectingPoint num="6" id="3144" /> +<TGConnectingPoint num="7" id="3145" /> +<TGConnectingPoint num="8" id="3146" /> +<TGConnectingPoint num="9" id="3147" /> +<TGConnectingPoint num="10" id="3148" /> +<TGConnectingPoint num="11" id="3149" /> +<TGConnectingPoint num="12" id="3150" /> +<TGConnectingPoint num="13" id="3151" /> +<TGConnectingPoint num="14" id="3152" /> +<TGConnectingPoint num="15" id="3153" /> +<TGConnectingPoint num="16" id="3154" /> +<TGConnectingPoint num="17" id="3155" /> +<TGConnectingPoint num="18" id="3156" /> +<TGConnectingPoint num="19" id="3157" /> +<TGConnectingPoint num="20" id="3158" /> +<TGConnectingPoint num="21" id="3159" /> +<TGConnectingPoint num="22" id="3160" /> +<TGConnectingPoint num="23" id="3161" /> +<TGConnectingPoint num="24" id="3162" /> +<TGConnectingPoint num="25" id="3163" /> +<TGConnectingPoint num="26" id="3164" /> +<TGConnectingPoint num="27" id="3165" /> +<TGConnectingPoint num="28" id="3166" /> +<TGConnectingPoint num="29" id="3167" /> +<TGConnectingPoint num="30" id="3168" /> +<TGConnectingPoint num="31" id="3169" /> +<TGConnectingPoint num="32" id="3170" /> +<TGConnectingPoint num="33" id="3171" /> +<TGConnectingPoint num="34" id="3172" /> +<TGConnectingPoint num="35" id="3173" /> +<TGConnectingPoint num="36" id="3174" /> +<TGConnectingPoint num="37" id="3175" /> +<TGConnectingPoint num="38" id="3176" /> +<TGConnectingPoint num="39" id="3177" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="3189" > +<cdparam x="383" y="437" /> +<sizeparam width="182" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="remoteStart(selectedDuration)" /> +<TGConnectingPoint num="0" id="3179" /> +<TGConnectingPoint num="1" id="3180" /> +<TGConnectingPoint num="2" id="3181" /> +<TGConnectingPoint num="3" id="3182" /> +<TGConnectingPoint num="4" id="3183" /> +<TGConnectingPoint num="5" id="3184" /> +<TGConnectingPoint num="6" id="3185" /> +<TGConnectingPoint num="7" id="3186" /> +<TGConnectingPoint num="8" id="3187" /> +<TGConnectingPoint num="9" id="3188" /> +</COMPONENT> + +<COMPONENT type="5106" id="3230" > +<cdparam x="348" y="225" /> +<sizeparam width="133" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="gotWirelessOrder" /> +<TGConnectingPoint num="0" id="3190" /> +<TGConnectingPoint num="1" id="3191" /> +<TGConnectingPoint num="2" id="3192" /> +<TGConnectingPoint num="3" id="3193" /> +<TGConnectingPoint num="4" id="3194" /> +<TGConnectingPoint num="5" id="3195" /> +<TGConnectingPoint num="6" id="3196" /> +<TGConnectingPoint num="7" id="3197" /> +<TGConnectingPoint num="8" id="3198" /> +<TGConnectingPoint num="9" id="3199" /> +<TGConnectingPoint num="10" id="3200" /> +<TGConnectingPoint num="11" id="3201" /> +<TGConnectingPoint num="12" id="3202" /> +<TGConnectingPoint num="13" id="3203" /> +<TGConnectingPoint num="14" id="3204" /> +<TGConnectingPoint num="15" id="3205" /> +<TGConnectingPoint num="16" id="3206" /> +<TGConnectingPoint num="17" id="3207" /> +<TGConnectingPoint num="18" id="3208" /> +<TGConnectingPoint num="19" id="3209" /> +<TGConnectingPoint num="20" id="3210" /> +<TGConnectingPoint num="21" id="3211" /> +<TGConnectingPoint num="22" id="3212" /> +<TGConnectingPoint num="23" id="3213" /> +<TGConnectingPoint num="24" id="3214" /> +<TGConnectingPoint num="25" id="3215" /> +<TGConnectingPoint num="26" id="3216" /> +<TGConnectingPoint num="27" id="3217" /> +<TGConnectingPoint num="28" id="3218" /> +<TGConnectingPoint num="29" id="3219" /> +<TGConnectingPoint num="30" id="3220" /> +<TGConnectingPoint num="31" id="3221" /> +<TGConnectingPoint num="32" id="3222" /> +<TGConnectingPoint num="33" id="3223" /> +<TGConnectingPoint num="34" id="3224" /> +<TGConnectingPoint num="35" id="3225" /> +<TGConnectingPoint num="36" id="3226" /> +<TGConnectingPoint num="37" id="3227" /> +<TGConnectingPoint num="38" id="3228" /> +<TGConnectingPoint num="39" id="3229" /> +<extraparam> +<entryCode value="printf("Got duration from remote control :%d\n", msg2__data);" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5101" id="3232" > +<cdparam x="475" y="500" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="3231" /> +</COMPONENT> + +<COMPONENT type="5104" id="3243" > +<cdparam x="311" y="166" /> +<sizeparam width="180" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="wirelessChannelRead(msg2)" /> +<TGConnectingPoint num="0" id="3233" /> +<TGConnectingPoint num="1" id="3234" /> +<TGConnectingPoint num="2" id="3235" /> +<TGConnectingPoint num="3" id="3236" /> +<TGConnectingPoint num="4" id="3237" /> +<TGConnectingPoint num="5" id="3238" /> +<TGConnectingPoint num="6" id="3239" /> +<TGConnectingPoint num="7" id="3240" /> +<TGConnectingPoint num="8" id="3241" /> +<TGConnectingPoint num="9" id="3242" /> +</COMPONENT> + +<COMPONENT type="5100" id="3245" > +<cdparam x="379" y="81" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3244" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Door" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3252" > +<cdparam x="407" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="3251" /> +<P1 x="407" y="209" id="3340" /> +<P2 x="407" y="290" id="3288" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3250" > +<father id="3252" num="0" /> +<cdparam x="407" y="249" /> +<sizeparam width="47" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3246" /> +<TGConnectingPoint num="1" id="3247" /> +<TGConnectingPoint num="2" id="3248" /> +<TGConnectingPoint num="3" id="3249" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="openM()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3259" > +<cdparam x="407" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3258" /> +<P1 x="407" y="340" id="3293" /> +<P2 x="407" y="374" id="3328" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3257" > +<father id="3259" num="0" /> +<cdparam x="414" y="365" /> +<sizeparam width="59" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3253" /> +<TGConnectingPoint num="1" id="3254" /> +<TGConnectingPoint num="2" id="3255" /> +<TGConnectingPoint num="3" id="3256" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="2" /> +<afterMax value="3" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3272" > +<cdparam x="407" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3268" /> +<TGConnectingPoint num="1" id="3269" /> +<TGConnectingPoint num="2" id="3270" /> +<TGConnectingPoint num="3" id="3271" /> +<P1 x="407" y="404" id="3329" /> +<P2 x="357" y="125" id="3353" /> +<Point x="300" y="404" /> +<Point x="300" y="278" /> +<Point x="300" y="125" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3260" > +<father id="3272" num="0" /> +<cdparam x="300" y="404" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3261" > +<father id="3272" num="1" /> +<cdparam x="300" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3262" > +<father id="3272" num="2" /> +<cdparam x="300" y="125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3267" > +<father id="3272" num="3" /> +<cdparam x="246" y="301" /> +<sizeparam width="47" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3263" /> +<TGConnectingPoint num="1" id="3264" /> +<TGConnectingPoint num="2" id="3265" /> +<TGConnectingPoint num="3" id="3266" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="closeM()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3279" > +<cdparam x="407" y="150" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3278" /> +<P1 x="407" y="150" id="3356" /> +<P2 x="407" y="179" id="3339" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3277" > +<father id="3279" num="0" /> +<cdparam x="412" y="172" /> +<sizeparam width="59" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3273" /> +<TGConnectingPoint num="1" id="3274" /> +<TGConnectingPoint num="2" id="3275" /> +<TGConnectingPoint num="3" id="3276" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="2" /> +<afterMax value="3" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3286" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="3285" /> +<P1 x="407" y="70" id="3391" /> +<P2 x="407" y="100" id="3351" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3284" > +<father id="3286" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3280" /> +<TGConnectingPoint num="1" id="3281" /> +<TGConnectingPoint num="2" id="3282" /> +<TGConnectingPoint num="3" id="3283" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="3327" > +<cdparam x="357" y="290" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Opened" /> +<TGConnectingPoint num="0" id="3287" /> +<TGConnectingPoint num="1" id="3288" /> +<TGConnectingPoint num="2" id="3289" /> +<TGConnectingPoint num="3" id="3290" /> +<TGConnectingPoint num="4" id="3291" /> +<TGConnectingPoint num="5" id="3292" /> +<TGConnectingPoint num="6" id="3293" /> +<TGConnectingPoint num="7" id="3294" /> +<TGConnectingPoint num="8" id="3295" /> +<TGConnectingPoint num="9" id="3296" /> +<TGConnectingPoint num="10" id="3297" /> +<TGConnectingPoint num="11" id="3298" /> +<TGConnectingPoint num="12" id="3299" /> +<TGConnectingPoint num="13" id="3300" /> +<TGConnectingPoint num="14" id="3301" /> +<TGConnectingPoint num="15" id="3302" /> +<TGConnectingPoint num="16" id="3303" /> +<TGConnectingPoint num="17" id="3304" /> +<TGConnectingPoint num="18" id="3305" /> +<TGConnectingPoint num="19" id="3306" /> +<TGConnectingPoint num="20" id="3307" /> +<TGConnectingPoint num="21" id="3308" /> +<TGConnectingPoint num="22" id="3309" /> +<TGConnectingPoint num="23" id="3310" /> +<TGConnectingPoint num="24" id="3311" /> +<TGConnectingPoint num="25" id="3312" /> +<TGConnectingPoint num="26" id="3313" /> +<TGConnectingPoint num="27" id="3314" /> +<TGConnectingPoint num="28" id="3315" /> +<TGConnectingPoint num="29" id="3316" /> +<TGConnectingPoint num="30" id="3317" /> +<TGConnectingPoint num="31" id="3318" /> +<TGConnectingPoint num="32" id="3319" /> +<TGConnectingPoint num="33" id="3320" /> +<TGConnectingPoint num="34" id="3321" /> +<TGConnectingPoint num="35" id="3322" /> +<TGConnectingPoint num="36" id="3323" /> +<TGConnectingPoint num="37" id="3324" /> +<TGConnectingPoint num="38" id="3325" /> +<TGConnectingPoint num="39" id="3326" /> +<extraparam> +<entryCode value="printf("Door is opened!!!\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="3338" > +<cdparam x="380" y="379" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="closed()" /> +<TGConnectingPoint num="0" id="3328" /> +<TGConnectingPoint num="1" id="3329" /> +<TGConnectingPoint num="2" id="3330" /> +<TGConnectingPoint num="3" id="3331" /> +<TGConnectingPoint num="4" id="3332" /> +<TGConnectingPoint num="5" id="3333" /> +<TGConnectingPoint num="6" id="3334" /> +<TGConnectingPoint num="7" id="3335" /> +<TGConnectingPoint num="8" id="3336" /> +<TGConnectingPoint num="9" id="3337" /> +</COMPONENT> + +<COMPONENT type="5103" id="3349" > +<cdparam x="384" y="184" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="open()" /> +<TGConnectingPoint num="0" id="3339" /> +<TGConnectingPoint num="1" id="3340" /> +<TGConnectingPoint num="2" id="3341" /> +<TGConnectingPoint num="3" id="3342" /> +<TGConnectingPoint num="4" id="3343" /> +<TGConnectingPoint num="5" id="3344" /> +<TGConnectingPoint num="6" id="3345" /> +<TGConnectingPoint num="7" id="3346" /> +<TGConnectingPoint num="8" id="3347" /> +<TGConnectingPoint num="9" id="3348" /> +</COMPONENT> + +<COMPONENT type="5106" id="3390" > +<cdparam x="357" y="100" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="IDLE" /> +<TGConnectingPoint num="0" id="3350" /> +<TGConnectingPoint num="1" id="3351" /> +<TGConnectingPoint num="2" id="3352" /> +<TGConnectingPoint num="3" id="3353" /> +<TGConnectingPoint num="4" id="3354" /> +<TGConnectingPoint num="5" id="3355" /> +<TGConnectingPoint num="6" id="3356" /> +<TGConnectingPoint num="7" id="3357" /> +<TGConnectingPoint num="8" id="3358" /> +<TGConnectingPoint num="9" id="3359" /> +<TGConnectingPoint num="10" id="3360" /> +<TGConnectingPoint num="11" id="3361" /> +<TGConnectingPoint num="12" id="3362" /> +<TGConnectingPoint num="13" id="3363" /> +<TGConnectingPoint num="14" id="3364" /> +<TGConnectingPoint num="15" id="3365" /> +<TGConnectingPoint num="16" id="3366" /> +<TGConnectingPoint num="17" id="3367" /> +<TGConnectingPoint num="18" id="3368" /> +<TGConnectingPoint num="19" id="3369" /> +<TGConnectingPoint num="20" id="3370" /> +<TGConnectingPoint num="21" id="3371" /> +<TGConnectingPoint num="22" id="3372" /> +<TGConnectingPoint num="23" id="3373" /> +<TGConnectingPoint num="24" id="3374" /> +<TGConnectingPoint num="25" id="3375" /> +<TGConnectingPoint num="26" id="3376" /> +<TGConnectingPoint num="27" id="3377" /> +<TGConnectingPoint num="28" id="3378" /> +<TGConnectingPoint num="29" id="3379" /> +<TGConnectingPoint num="30" id="3380" /> +<TGConnectingPoint num="31" id="3381" /> +<TGConnectingPoint num="32" id="3382" /> +<TGConnectingPoint num="33" id="3383" /> +<TGConnectingPoint num="34" id="3384" /> +<TGConnectingPoint num="35" id="3385" /> +<TGConnectingPoint num="36" id="3386" /> +<TGConnectingPoint num="37" id="3387" /> +<TGConnectingPoint num="38" id="3388" /> +<TGConnectingPoint num="39" id="3389" /> +<extraparam> +<entryCode value="printf("Door is closed\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="3392" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3391" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Magnetron" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3405" > +<cdparam x="407" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3401" /> +<TGConnectingPoint num="1" id="3402" /> +<TGConnectingPoint num="2" id="3403" /> +<TGConnectingPoint num="3" id="3404" /> +<P1 x="407" y="310" id="3435" /> +<P2 x="365" y="113" id="3502" /> +<Point x="407" y="327" /> +<Point x="323" y="327" /> +<Point x="323" y="113" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3393" > +<father id="3405" num="0" /> +<cdparam x="407" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3394" > +<father id="3405" num="1" /> +<cdparam x="323" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3395" > +<father id="3405" num="2" /> +<cdparam x="323" y="113" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3400" > +<father id="3405" num="3" /> +<cdparam x="418" y="343" /> +<sizeparam width="29" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3396" /> +<TGConnectingPoint num="1" id="3397" /> +<TGConnectingPoint num="2" id="3398" /> +<TGConnectingPoint num="3" id="3399" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="OFF()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3412" > +<cdparam x="411" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3411" /> +<P1 x="408" y="242" id="3451" /> +<P2 x="407" y="280" id="3434" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3410" > +<father id="3412" num="0" /> +<cdparam x="411" y="283" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3406" /> +<TGConnectingPoint num="1" id="3407" /> +<TGConnectingPoint num="2" id="3408" /> +<TGConnectingPoint num="3" id="3409" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3419" > +<cdparam x="398" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state1" value="null" /> +<TGConnectingPoint num="0" id="3418" /> +<P1 x="407" y="183" id="3487" /> +<P2 x="408" y="202" id="3446" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3417" > +<father id="3419" num="0" /> +<cdparam x="417" y="195" /> +<sizeparam width="26" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3413" /> +<TGConnectingPoint num="1" id="3414" /> +<TGConnectingPoint num="2" id="3415" /> +<TGConnectingPoint num="3" id="3416" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="ON()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3426" > +<cdparam x="393" y="131" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3425" /> +<P1 x="407" y="131" id="3505" /> +<P2 x="407" y="153" id="3486" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3424" > +<father id="3426" num="0" /> +<cdparam x="393" y="171" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3420" /> +<TGConnectingPoint num="1" id="3421" /> +<TGConnectingPoint num="2" id="3422" /> +<TGConnectingPoint num="3" id="3423" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3433" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="3432" /> +<P1 x="407" y="70" id="3497" /> +<P2 x="407" y="96" id="3500" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3431" > +<father id="3433" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3427" /> +<TGConnectingPoint num="1" id="3428" /> +<TGConnectingPoint num="2" id="3429" /> +<TGConnectingPoint num="3" id="3430" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5104" id="3444" > +<cdparam x="377" y="285" /> +<sizeparam width="61" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="stopM()" /> +<TGConnectingPoint num="0" id="3434" /> +<TGConnectingPoint num="1" id="3435" /> +<TGConnectingPoint num="2" id="3436" /> +<TGConnectingPoint num="3" id="3437" /> +<TGConnectingPoint num="4" id="3438" /> +<TGConnectingPoint num="5" id="3439" /> +<TGConnectingPoint num="6" id="3440" /> +<TGConnectingPoint num="7" id="3441" /> +<TGConnectingPoint num="8" id="3442" /> +<TGConnectingPoint num="9" id="3443" /> +</COMPONENT> + +<COMPONENT type="5106" id="3485" > +<cdparam x="373" y="202" /> +<sizeparam width="71" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state1" value="Running" /> +<TGConnectingPoint num="0" id="3445" /> +<TGConnectingPoint num="1" id="3446" /> +<TGConnectingPoint num="2" id="3447" /> +<TGConnectingPoint num="3" id="3448" /> +<TGConnectingPoint num="4" id="3449" /> +<TGConnectingPoint num="5" id="3450" /> +<TGConnectingPoint num="6" id="3451" /> +<TGConnectingPoint num="7" id="3452" /> +<TGConnectingPoint num="8" id="3453" /> +<TGConnectingPoint num="9" id="3454" /> +<TGConnectingPoint num="10" id="3455" /> +<TGConnectingPoint num="11" id="3456" /> +<TGConnectingPoint num="12" id="3457" /> +<TGConnectingPoint num="13" id="3458" /> +<TGConnectingPoint num="14" id="3459" /> +<TGConnectingPoint num="15" id="3460" /> +<TGConnectingPoint num="16" id="3461" /> +<TGConnectingPoint num="17" id="3462" /> +<TGConnectingPoint num="18" id="3463" /> +<TGConnectingPoint num="19" id="3464" /> +<TGConnectingPoint num="20" id="3465" /> +<TGConnectingPoint num="21" id="3466" /> +<TGConnectingPoint num="22" id="3467" /> +<TGConnectingPoint num="23" id="3468" /> +<TGConnectingPoint num="24" id="3469" /> +<TGConnectingPoint num="25" id="3470" /> +<TGConnectingPoint num="26" id="3471" /> +<TGConnectingPoint num="27" id="3472" /> +<TGConnectingPoint num="28" id="3473" /> +<TGConnectingPoint num="29" id="3474" /> +<TGConnectingPoint num="30" id="3475" /> +<TGConnectingPoint num="31" id="3476" /> +<TGConnectingPoint num="32" id="3477" /> +<TGConnectingPoint num="33" id="3478" /> +<TGConnectingPoint num="34" id="3479" /> +<TGConnectingPoint num="35" id="3480" /> +<TGConnectingPoint num="36" id="3481" /> +<TGConnectingPoint num="37" id="3482" /> +<TGConnectingPoint num="38" id="3483" /> +<TGConnectingPoint num="39" id="3484" /> +<extraparam> +<entryCode value="printf("DANGER: Magnetron is ON\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="3496" > +<cdparam x="376" y="158" /> +<sizeparam width="62" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startM()" /> +<TGConnectingPoint num="0" id="3486" /> +<TGConnectingPoint num="1" id="3487" /> +<TGConnectingPoint num="2" id="3488" /> +<TGConnectingPoint num="3" id="3489" /> +<TGConnectingPoint num="4" id="3490" /> +<TGConnectingPoint num="5" id="3491" /> +<TGConnectingPoint num="6" id="3492" /> +<TGConnectingPoint num="7" id="3493" /> +<TGConnectingPoint num="8" id="3494" /> +<TGConnectingPoint num="9" id="3495" /> +</COMPONENT> + +<COMPONENT type="5100" id="3498" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3497" /> +</COMPONENT> + +<COMPONENT type="5106" id="3539" > +<cdparam x="365" y="96" /> +<sizeparam width="84" height="35" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitForStart" /> +<TGConnectingPoint num="0" id="3499" /> +<TGConnectingPoint num="1" id="3500" /> +<TGConnectingPoint num="2" id="3501" /> +<TGConnectingPoint num="3" id="3502" /> +<TGConnectingPoint num="4" id="3503" /> +<TGConnectingPoint num="5" id="3504" /> +<TGConnectingPoint num="6" id="3505" /> +<TGConnectingPoint num="7" id="3506" /> +<TGConnectingPoint num="8" id="3507" /> +<TGConnectingPoint num="9" id="3508" /> +<TGConnectingPoint num="10" id="3509" /> +<TGConnectingPoint num="11" id="3510" /> +<TGConnectingPoint num="12" id="3511" /> +<TGConnectingPoint num="13" id="3512" /> +<TGConnectingPoint num="14" id="3513" /> +<TGConnectingPoint num="15" id="3514" /> +<TGConnectingPoint num="16" id="3515" /> +<TGConnectingPoint num="17" id="3516" /> +<TGConnectingPoint num="18" id="3517" /> +<TGConnectingPoint num="19" id="3518" /> +<TGConnectingPoint num="20" id="3519" /> +<TGConnectingPoint num="21" id="3520" /> +<TGConnectingPoint num="22" id="3521" /> +<TGConnectingPoint num="23" id="3522" /> +<TGConnectingPoint num="24" id="3523" /> +<TGConnectingPoint num="25" id="3524" /> +<TGConnectingPoint num="26" id="3525" /> +<TGConnectingPoint num="27" id="3526" /> +<TGConnectingPoint num="28" id="3527" /> +<TGConnectingPoint num="29" id="3528" /> +<TGConnectingPoint num="30" id="3529" /> +<TGConnectingPoint num="31" id="3530" /> +<TGConnectingPoint num="32" id="3531" /> +<TGConnectingPoint num="33" id="3532" /> +<TGConnectingPoint num="34" id="3533" /> +<TGConnectingPoint num="35" id="3534" /> +<TGConnectingPoint num="36" id="3535" /> +<TGConnectingPoint num="37" id="3536" /> +<TGConnectingPoint num="38" id="3537" /> +<TGConnectingPoint num="39" id="3538" /> +<extraparam> +<entryCode value="printf("Magnetron is off\n");" /> +</extraparam> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Controller" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3546" > +<cdparam x="671" y="552" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="3545" /> +<P1 x="671" y="552" id="4007" /> +<P2 x="671" y="557" id="3749" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3544" > +<father id="3546" num="0" /> +<cdparam x="671" y="592" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3540" /> +<TGConnectingPoint num="1" id="3541" /> +<TGConnectingPoint num="2" id="3542" /> +<TGConnectingPoint num="3" id="3543" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3553" > +<cdparam x="671" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3552" /> +<P1 x="671" y="518" id="3761" /> +<P2 x="671" y="522" id="4006" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3551" > +<father id="3553" num="0" /> +<cdparam x="671" y="580" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3547" /> +<TGConnectingPoint num="1" id="3548" /> +<TGConnectingPoint num="2" id="3549" /> +<TGConnectingPoint num="3" id="3550" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3560" > +<cdparam x="671" y="332" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3559" /> +<P1 x="671" y="332" id="3772" /> +<P2 x="671" y="345" id="3984" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3558" > +<father id="3560" num="0" /> +<cdparam x="671" y="372" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3554" /> +<TGConnectingPoint num="1" id="3555" /> +<TGConnectingPoint num="2" id="3556" /> +<TGConnectingPoint num="3" id="3557" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3567" > +<cdparam x="428" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3566" /> +<P1 x="428" y="380" id="4133" /> +<P2 x="428" y="395" id="3868" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3565" > +<father id="3567" num="0" /> +<cdparam x="428" y="413" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3561" /> +<TGConnectingPoint num="1" id="3562" /> +<TGConnectingPoint num="2" id="3563" /> +<TGConnectingPoint num="3" id="3564" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3574" > +<cdparam x="661" y="175" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3573" /> +<P1 x="661" y="175" id="4040" /> +<P2 x="661" y="180" id="3782" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3572" > +<father id="3574" num="0" /> +<cdparam x="661" y="215" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3568" /> +<TGConnectingPoint num="1" id="3569" /> +<TGConnectingPoint num="2" id="3570" /> +<TGConnectingPoint num="3" id="3571" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3581" > +<cdparam x="661" y="95" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3580" /> +<P1 x="661" y="95" id="3794" /> +<P2 x="661" y="106" id="4051" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3579" > +<father id="3581" num="0" /> +<cdparam x="661" y="135" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3575" /> +<TGConnectingPoint num="1" id="3576" /> +<TGConnectingPoint num="2" id="3577" /> +<TGConnectingPoint num="3" id="3578" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3588" > +<cdparam x="450" y="255" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3587" /> +<P1 x="492" y="208" id="3972" /> +<P2 x="453" y="262" id="3813" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3586" > +<father id="3588" num="0" /> +<cdparam x="450" y="295" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3582" /> +<TGConnectingPoint num="1" id="3583" /> +<TGConnectingPoint num="2" id="3584" /> +<TGConnectingPoint num="3" id="3585" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3595" > +<cdparam x="304" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3594" /> +<P1 x="357" y="209" id="3846" /> +<P2 x="403" y="262" id="3812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3593" > +<father id="3595" num="0" /> +<cdparam x="304" y="297" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3589" /> +<TGConnectingPoint num="1" id="3590" /> +<TGConnectingPoint num="2" id="3591" /> +<TGConnectingPoint num="3" id="3592" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3602" > +<cdparam x="409" y="164" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="3601" /> +<P1 x="409" y="164" id="3944" /> +<P2 x="357" y="179" id="3845" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3600" > +<father id="3602" num="0" /> +<cdparam x="409" y="204" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3596" /> +<TGConnectingPoint num="1" id="3597" /> +<TGConnectingPoint num="2" id="3598" /> +<TGConnectingPoint num="3" id="3599" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3609" > +<cdparam x="646" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state1" value="null" /> +<TGConnectingPoint num="0" id="3608" /> +<P1 x="661" y="210" id="3783" /> +<P2 x="471" y="152" id="3943" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3607" > +<father id="3609" num="0" /> +<cdparam x="646" y="310" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3603" /> +<TGConnectingPoint num="1" id="3604" /> +<TGConnectingPoint num="2" id="3605" /> +<TGConnectingPoint num="3" id="3606" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3616" > +<cdparam x="660" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3615" /> +<P1 x="661" y="141" id="4056" /> +<P2 x="661" y="145" id="4039" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3614" > +<father id="3616" num="0" /> +<cdparam x="660" y="218" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3610" /> +<TGConnectingPoint num="1" id="3611" /> +<TGConnectingPoint num="2" id="3612" /> +<TGConnectingPoint num="3" id="3613" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3623" > +<cdparam x="659" y="110" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3622" /> +<P1 x="661" y="61" id="3920" /> +<P2 x="661" y="65" id="3793" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3621" > +<father id="3623" num="0" /> +<cdparam x="659" y="150" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3617" /> +<TGConnectingPoint num="1" id="3618" /> +<TGConnectingPoint num="2" id="3619" /> +<TGConnectingPoint num="3" id="3620" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3630" > +<cdparam x="739" y="573" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3629" /> +<P1 x="671" y="485" id="4029" /> +<P2 x="671" y="488" id="3760" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3628" > +<father id="3630" num="0" /> +<cdparam x="739" y="613" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3624" /> +<TGConnectingPoint num="1" id="3625" /> +<TGConnectingPoint num="2" id="3626" /> +<TGConnectingPoint num="3" id="3627" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3637" > +<cdparam x="769" y="593" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3636" /> +<P1 x="671" y="443" id="4097" /> +<P2 x="671" y="455" id="4028" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3635" > +<father id="3637" num="0" /> +<cdparam x="769" y="633" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3631" /> +<TGConnectingPoint num="1" id="3632" /> +<TGConnectingPoint num="2" id="3633" /> +<TGConnectingPoint num="3" id="3634" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3650" > +<cdparam x="656" y="608" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3646" /> +<TGConnectingPoint num="1" id="3647" /> +<TGConnectingPoint num="2" id="3648" /> +<TGConnectingPoint num="3" id="3649" /> +<P1 x="671" y="587" id="3750" /> +<P2 x="478" y="432" id="3880" /> +<Point x="671" y="595" /> +<Point x="548" y="595" /> +<Point x="548" y="432" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3638" > +<father id="3650" num="0" /> +<cdparam x="671" y="595" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3639" > +<father id="3650" num="1" /> +<cdparam x="548" y="595" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3640" > +<father id="3650" num="2" /> +<cdparam x="548" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3645" > +<father id="3650" num="3" /> +<cdparam x="656" y="648" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3641" /> +<TGConnectingPoint num="1" id="3642" /> +<TGConnectingPoint num="2" id="3643" /> +<TGConnectingPoint num="3" id="3644" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3657" > +<cdparam x="770" y="523" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3656" /> +<P1 x="671" y="375" id="3985" /> +<P2 x="671" y="393" id="4092" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3655" > +<father id="3657" num="0" /> +<cdparam x="770" y="563" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3651" /> +<TGConnectingPoint num="1" id="3652" /> +<TGConnectingPoint num="2" id="3653" /> +<TGConnectingPoint num="3" id="3654" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3664" > +<cdparam x="642" y="363" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3663" /> +<P1 x="670" y="287" id="3857" /> +<P2 x="671" y="302" id="3771" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3662" > +<father id="3664" num="0" /> +<cdparam x="654" y="379" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3658" /> +<TGConnectingPoint num="1" id="3659" /> +<TGConnectingPoint num="2" id="3660" /> +<TGConnectingPoint num="3" id="3661" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3677" > +<cdparam x="425" y="562" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to state0" value="null" /> +<TGConnectingPoint num="0" id="3673" /> +<TGConnectingPoint num="1" id="3674" /> +<TGConnectingPoint num="2" id="3675" /> +<TGConnectingPoint num="3" id="3676" /> +<P1 x="403" y="445" id="3881" /> +<P2 x="378" y="432" id="3879" /> +<Point x="403" y="480" /> +<Point x="319" y="480" /> +<Point x="319" y="432" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3665" > +<father id="3677" num="0" /> +<cdparam x="403" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3666" > +<father id="3677" num="1" /> +<cdparam x="319" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3667" > +<father id="3677" num="2" /> +<cdparam x="319" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3672" > +<father id="3677" num="3" /> +<cdparam x="158" y="477" /> +<sizeparam width="205" height="60" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3668" /> +<TGConnectingPoint num="1" id="3669" /> +<TGConnectingPoint num="2" id="3670" /> +<TGConnectingPoint num="3" id="3671" /> +<extraparam> +<guard value="[ remainingTime>0 ]" /> +<afterMin value="1" /> +<afterMax value="1" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="remainingTime= remainingTime -1" /> +<actions value="durationModified(remainingTime)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3684" > +<cdparam x="499" y="496" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="3683" /> +<P1 x="478" y="420" id="3871" /> +<P2 x="670" y="257" id="3856" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3682" > +<father id="3684" num="0" /> +<cdparam x="513" y="302" /> +<sizeparam width="201" height="60" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3678" /> +<TGConnectingPoint num="1" id="3679" /> +<TGConnectingPoint num="2" id="3680" /> +<TGConnectingPoint num="3" id="3681" /> +<extraparam> +<guard value="[remainingTime > 0 ]" /> +<afterMin value="1" /> +<afterMax value="1" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="remainingTime=remainingTime -1" /> +<actions value="durationModified(remainingTime)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3691" > +<cdparam x="450" y="562" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3690" /> +<P1 x="428" y="445" id="3873" /> +<P2 x="428" y="507" id="3995" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3689" > +<father id="3691" num="0" /> +<cdparam x="397" y="475" /> +<sizeparam width="139" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3685" /> +<TGConnectingPoint num="1" id="3686" /> +<TGConnectingPoint num="2" id="3687" /> +<TGConnectingPoint num="3" id="3688" /> +<extraparam> +<guard value="[ remainingTime==0 ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3698" > +<cdparam x="450" y="487" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3697" /> +<P1 x="428" y="334" id="4018" /> +<P2 x="428" y="350" id="4132" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3696" > +<father id="3698" num="0" /> +<cdparam x="252" y="341" /> +<sizeparam width="166" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3692" /> +<TGConnectingPoint num="1" id="3693" /> +<TGConnectingPoint num="2" id="3694" /> +<TGConnectingPoint num="3" id="3695" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="remainingTime=duration" /> +<actions value="startCooking(remainingTime)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3713" > +<cdparam x="419" y="547" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state1" value="null" /> +<TGConnectingPoint num="0" id="3708" /> +<TGConnectingPoint num="1" id="3709" /> +<TGConnectingPoint num="2" id="3710" /> +<TGConnectingPoint num="3" id="3711" /> +<TGConnectingPoint num="4" id="3712" /> +<P1 x="428" y="579" id="3909" /> +<P2 x="389" y="119" id="3930" /> +<Point x="428" y="603" /> +<Point x="220" y="603" /> +<Point x="220" y="83" /> +<Point x="389" y="83" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3699" > +<father id="3713" num="0" /> +<cdparam x="428" y="603" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3700" > +<father id="3713" num="1" /> +<cdparam x="220" y="603" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3701" > +<father id="3713" num="2" /> +<cdparam x="220" y="83" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3702" > +<father id="3713" num="3" /> +<cdparam x="389" y="83" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3707" > +<father id="3713" num="4" /> +<cdparam x="448" y="590" /> +<sizeparam width="59" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3703" /> +<TGConnectingPoint num="1" id="3704" /> +<TGConnectingPoint num="2" id="3705" /> +<TGConnectingPoint num="3" id="3706" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="5" /> +<afterMax value="9" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3720" > +<cdparam x="419" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3719" /> +<P1 x="428" y="537" id="3996" /> +<P2 x="428" y="549" id="3908" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3718" > +<father id="3720" num="0" /> +<cdparam x="419" y="673" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3714" /> +<TGConnectingPoint num="1" id="3715" /> +<TGConnectingPoint num="2" id="3716" /> +<TGConnectingPoint num="3" id="3717" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3727" > +<cdparam x="471" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3726" /> +<P1 x="471" y="141" id="3934" /> +<P2 x="661" y="31" id="3919" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3725" > +<father id="3727" num="0" /> +<cdparam x="471" y="223" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3721" /> +<TGConnectingPoint num="1" id="3722" /> +<TGConnectingPoint num="2" id="3723" /> +<TGConnectingPoint num="3" id="3724" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3734" > +<cdparam x="463" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3733" /> +<P1 x="450" y="164" id="3945" /> +<P2 x="492" y="178" id="3971" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3732" > +<father id="3734" num="0" /> +<cdparam x="400" y="221" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3728" /> +<TGConnectingPoint num="1" id="3729" /> +<TGConnectingPoint num="2" id="3730" /> +<TGConnectingPoint num="3" id="3731" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3741" > +<cdparam x="438" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state1" value="null" /> +<TGConnectingPoint num="0" id="3740" /> +<P1 x="430" y="100" id="3982" /> +<P2 x="430" y="119" id="3931" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3739" > +<father id="3741" num="0" /> +<cdparam x="442" y="129" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3735" /> +<TGConnectingPoint num="1" id="3736" /> +<TGConnectingPoint num="2" id="3737" /> +<TGConnectingPoint num="3" id="3738" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3748" > +<cdparam x="449" y="388" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3747" /> +<P1 x="428" y="298" id="3810" /> +<P2 x="428" y="304" id="4017" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3746" > +<father id="3748" num="0" /> +<cdparam x="449" y="428" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3742" /> +<TGConnectingPoint num="1" id="3743" /> +<TGConnectingPoint num="2" id="3744" /> +<TGConnectingPoint num="3" id="3745" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="3759" > +<cdparam x="605" y="562" /> +<sizeparam width="133" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="3749" /> +<TGConnectingPoint num="1" id="3750" /> +<TGConnectingPoint num="2" id="3751" /> +<TGConnectingPoint num="3" id="3752" /> +<TGConnectingPoint num="4" id="3753" /> +<TGConnectingPoint num="5" id="3754" /> +<TGConnectingPoint num="6" id="3755" /> +<TGConnectingPoint num="7" id="3756" /> +<TGConnectingPoint num="8" id="3757" /> +<TGConnectingPoint num="9" id="3758" /> +</COMPONENT> + +<COMPONENT type="5103" id="3770" > +<cdparam x="630" y="493" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_closed()" /> +<TGConnectingPoint num="0" id="3760" /> +<TGConnectingPoint num="1" id="3761" /> +<TGConnectingPoint num="2" id="3762" /> +<TGConnectingPoint num="3" id="3763" /> +<TGConnectingPoint num="4" id="3764" /> +<TGConnectingPoint num="5" id="3765" /> +<TGConnectingPoint num="6" id="3766" /> +<TGConnectingPoint num="7" id="3767" /> +<TGConnectingPoint num="8" id="3768" /> +<TGConnectingPoint num="9" id="3769" /> +</COMPONENT> + +<COMPONENT type="5103" id="3781" > +<cdparam x="634" y="307" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_open()" /> +<TGConnectingPoint num="0" id="3771" /> +<TGConnectingPoint num="1" id="3772" /> +<TGConnectingPoint num="2" id="3773" /> +<TGConnectingPoint num="3" id="3774" /> +<TGConnectingPoint num="4" id="3775" /> +<TGConnectingPoint num="5" id="3776" /> +<TGConnectingPoint num="6" id="3777" /> +<TGConnectingPoint num="7" id="3778" /> +<TGConnectingPoint num="8" id="3779" /> +<TGConnectingPoint num="9" id="3780" /> +</COMPONENT> + +<COMPONENT type="5103" id="3792" > +<cdparam x="620" y="185" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_closed()" /> +<TGConnectingPoint num="0" id="3782" /> +<TGConnectingPoint num="1" id="3783" /> +<TGConnectingPoint num="2" id="3784" /> +<TGConnectingPoint num="3" id="3785" /> +<TGConnectingPoint num="4" id="3786" /> +<TGConnectingPoint num="5" id="3787" /> +<TGConnectingPoint num="6" id="3788" /> +<TGConnectingPoint num="7" id="3789" /> +<TGConnectingPoint num="8" id="3790" /> +<TGConnectingPoint num="9" id="3791" /> +</COMPONENT> + +<COMPONENT type="5103" id="3803" > +<cdparam x="624" y="70" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_open()" /> +<TGConnectingPoint num="0" id="3793" /> +<TGConnectingPoint num="1" id="3794" /> +<TGConnectingPoint num="2" id="3795" /> +<TGConnectingPoint num="3" id="3796" /> +<TGConnectingPoint num="4" id="3797" /> +<TGConnectingPoint num="5" id="3798" /> +<TGConnectingPoint num="6" id="3799" /> +<TGConnectingPoint num="7" id="3800" /> +<TGConnectingPoint num="8" id="3801" /> +<TGConnectingPoint num="9" id="3802" /> +</COMPONENT> + +<COMPONENT type="5106" id="3844" > +<cdparam x="378" y="262" /> +<sizeparam width="100" height="36" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Starting" /> +<TGConnectingPoint num="0" id="3804" /> +<TGConnectingPoint num="1" id="3805" /> +<TGConnectingPoint num="2" id="3806" /> +<TGConnectingPoint num="3" id="3807" /> +<TGConnectingPoint num="4" id="3808" /> +<TGConnectingPoint num="5" id="3809" /> +<TGConnectingPoint num="6" id="3810" /> +<TGConnectingPoint num="7" id="3811" /> +<TGConnectingPoint num="8" id="3812" /> +<TGConnectingPoint num="9" id="3813" /> +<TGConnectingPoint num="10" id="3814" /> +<TGConnectingPoint num="11" id="3815" /> +<TGConnectingPoint num="12" id="3816" /> +<TGConnectingPoint num="13" id="3817" /> +<TGConnectingPoint num="14" id="3818" /> +<TGConnectingPoint num="15" id="3819" /> +<TGConnectingPoint num="16" id="3820" /> +<TGConnectingPoint num="17" id="3821" /> +<TGConnectingPoint num="18" id="3822" /> +<TGConnectingPoint num="19" id="3823" /> +<TGConnectingPoint num="20" id="3824" /> +<TGConnectingPoint num="21" id="3825" /> +<TGConnectingPoint num="22" id="3826" /> +<TGConnectingPoint num="23" id="3827" /> +<TGConnectingPoint num="24" id="3828" /> +<TGConnectingPoint num="25" id="3829" /> +<TGConnectingPoint num="26" id="3830" /> +<TGConnectingPoint num="27" id="3831" /> +<TGConnectingPoint num="28" id="3832" /> +<TGConnectingPoint num="29" id="3833" /> +<TGConnectingPoint num="30" id="3834" /> +<TGConnectingPoint num="31" id="3835" /> +<TGConnectingPoint num="32" id="3836" /> +<TGConnectingPoint num="33" id="3837" /> +<TGConnectingPoint num="34" id="3838" /> +<TGConnectingPoint num="35" id="3839" /> +<TGConnectingPoint num="36" id="3840" /> +<TGConnectingPoint num="37" id="3841" /> +<TGConnectingPoint num="38" id="3842" /> +<TGConnectingPoint num="39" id="3843" /> +<extraparam> +<entryCode value="printf("Starting microwave, lets go!\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="3855" > +<cdparam x="287" y="184" /> +<sizeparam width="141" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="remoteStart(duration)" /> +<TGConnectingPoint num="0" id="3845" /> +<TGConnectingPoint num="1" id="3846" /> +<TGConnectingPoint num="2" id="3847" /> +<TGConnectingPoint num="3" id="3848" /> +<TGConnectingPoint num="4" id="3849" /> +<TGConnectingPoint num="5" id="3850" /> +<TGConnectingPoint num="6" id="3851" /> +<TGConnectingPoint num="7" id="3852" /> +<TGConnectingPoint num="8" id="3853" /> +<TGConnectingPoint num="9" id="3854" /> +</COMPONENT> + +<COMPONENT type="5104" id="3866" > +<cdparam x="643" y="262" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="open()" /> +<TGConnectingPoint num="0" id="3856" /> +<TGConnectingPoint num="1" id="3857" /> +<TGConnectingPoint num="2" id="3858" /> +<TGConnectingPoint num="3" id="3859" /> +<TGConnectingPoint num="4" id="3860" /> +<TGConnectingPoint num="5" id="3861" /> +<TGConnectingPoint num="6" id="3862" /> +<TGConnectingPoint num="7" id="3863" /> +<TGConnectingPoint num="8" id="3864" /> +<TGConnectingPoint num="9" id="3865" /> +</COMPONENT> + +<COMPONENT type="5106" id="3907" > +<cdparam x="378" y="395" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="ReallyHeating" /> +<TGConnectingPoint num="0" id="3867" /> +<TGConnectingPoint num="1" id="3868" /> +<TGConnectingPoint num="2" id="3869" /> +<TGConnectingPoint num="3" id="3870" /> +<TGConnectingPoint num="4" id="3871" /> +<TGConnectingPoint num="5" id="3872" /> +<TGConnectingPoint num="6" id="3873" /> +<TGConnectingPoint num="7" id="3874" /> +<TGConnectingPoint num="8" id="3875" /> +<TGConnectingPoint num="9" id="3876" /> +<TGConnectingPoint num="10" id="3877" /> +<TGConnectingPoint num="11" id="3878" /> +<TGConnectingPoint num="12" id="3879" /> +<TGConnectingPoint num="13" id="3880" /> +<TGConnectingPoint num="14" id="3881" /> +<TGConnectingPoint num="15" id="3882" /> +<TGConnectingPoint num="16" id="3883" /> +<TGConnectingPoint num="17" id="3884" /> +<TGConnectingPoint num="18" id="3885" /> +<TGConnectingPoint num="19" id="3886" /> +<TGConnectingPoint num="20" id="3887" /> +<TGConnectingPoint num="21" id="3888" /> +<TGConnectingPoint num="22" id="3889" /> +<TGConnectingPoint num="23" id="3890" /> +<TGConnectingPoint num="24" id="3891" /> +<TGConnectingPoint num="25" id="3892" /> +<TGConnectingPoint num="26" id="3893" /> +<TGConnectingPoint num="27" id="3894" /> +<TGConnectingPoint num="28" id="3895" /> +<TGConnectingPoint num="29" id="3896" /> +<TGConnectingPoint num="30" id="3897" /> +<TGConnectingPoint num="31" id="3898" /> +<TGConnectingPoint num="32" id="3899" /> +<TGConnectingPoint num="33" id="3900" /> +<TGConnectingPoint num="34" id="3901" /> +<TGConnectingPoint num="35" id="3902" /> +<TGConnectingPoint num="36" id="3903" /> +<TGConnectingPoint num="37" id="3904" /> +<TGConnectingPoint num="38" id="3905" /> +<TGConnectingPoint num="39" id="3906" /> +<extraparam> +<entryCode value="printf("Heating ; remaining time :%d\n", remainingTime);" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="3918" > +<cdparam x="398" y="554" /> +<sizeparam width="60" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="ringBell()" /> +<TGConnectingPoint num="0" id="3908" /> +<TGConnectingPoint num="1" id="3909" /> +<TGConnectingPoint num="2" id="3910" /> +<TGConnectingPoint num="3" id="3911" /> +<TGConnectingPoint num="4" id="3912" /> +<TGConnectingPoint num="5" id="3913" /> +<TGConnectingPoint num="6" id="3914" /> +<TGConnectingPoint num="7" id="3915" /> +<TGConnectingPoint num="8" id="3916" /> +<TGConnectingPoint num="9" id="3917" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="5104" id="3929" > +<cdparam x="634" y="36" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="open()" /> +<TGConnectingPoint num="0" id="3919" /> +<TGConnectingPoint num="1" id="3920" /> +<TGConnectingPoint num="2" id="3921" /> +<TGConnectingPoint num="3" id="3922" /> +<TGConnectingPoint num="4" id="3923" /> +<TGConnectingPoint num="5" id="3924" /> +<TGConnectingPoint num="6" id="3925" /> +<TGConnectingPoint num="7" id="3926" /> +<TGConnectingPoint num="8" id="3927" /> +<TGConnectingPoint num="9" id="3928" /> +</COMPONENT> + +<COMPONENT type="5106" id="3970" > +<cdparam x="389" y="119" /> +<sizeparam width="82" height="45" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state1" value="Idle" /> +<TGConnectingPoint num="0" id="3930" /> +<TGConnectingPoint num="1" id="3931" /> +<TGConnectingPoint num="2" id="3932" /> +<TGConnectingPoint num="3" id="3933" /> +<TGConnectingPoint num="4" id="3934" /> +<TGConnectingPoint num="5" id="3935" /> +<TGConnectingPoint num="6" id="3936" /> +<TGConnectingPoint num="7" id="3937" /> +<TGConnectingPoint num="8" id="3938" /> +<TGConnectingPoint num="9" id="3939" /> +<TGConnectingPoint num="10" id="3940" /> +<TGConnectingPoint num="11" id="3941" /> +<TGConnectingPoint num="12" id="3942" /> +<TGConnectingPoint num="13" id="3943" /> +<TGConnectingPoint num="14" id="3944" /> +<TGConnectingPoint num="15" id="3945" /> +<TGConnectingPoint num="16" id="3946" /> +<TGConnectingPoint num="17" id="3947" /> +<TGConnectingPoint num="18" id="3948" /> +<TGConnectingPoint num="19" id="3949" /> +<TGConnectingPoint num="20" id="3950" /> +<TGConnectingPoint num="21" id="3951" /> +<TGConnectingPoint num="22" id="3952" /> +<TGConnectingPoint num="23" id="3953" /> +<TGConnectingPoint num="24" id="3954" /> +<TGConnectingPoint num="25" id="3955" /> +<TGConnectingPoint num="26" id="3956" /> +<TGConnectingPoint num="27" id="3957" /> +<TGConnectingPoint num="28" id="3958" /> +<TGConnectingPoint num="29" id="3959" /> +<TGConnectingPoint num="30" id="3960" /> +<TGConnectingPoint num="31" id="3961" /> +<TGConnectingPoint num="32" id="3962" /> +<TGConnectingPoint num="33" id="3963" /> +<TGConnectingPoint num="34" id="3964" /> +<TGConnectingPoint num="35" id="3965" /> +<TGConnectingPoint num="36" id="3966" /> +<TGConnectingPoint num="37" id="3967" /> +<TGConnectingPoint num="38" id="3968" /> +<TGConnectingPoint num="39" id="3969" /> +<breakpoint /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="3981" > +<cdparam x="442" y="183" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="start(duration)" /> +<TGConnectingPoint num="0" id="3971" /> +<TGConnectingPoint num="1" id="3972" /> +<TGConnectingPoint num="2" id="3973" /> +<TGConnectingPoint num="3" id="3974" /> +<TGConnectingPoint num="4" id="3975" /> +<TGConnectingPoint num="5" id="3976" /> +<TGConnectingPoint num="6" id="3977" /> +<TGConnectingPoint num="7" id="3978" /> +<TGConnectingPoint num="8" id="3979" /> +<TGConnectingPoint num="9" id="3980" /> +</COMPONENT> + +<COMPONENT type="5100" id="3983" > +<cdparam x="423" y="80" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3982" /> +</COMPONENT> + +<COMPONENT type="5103" id="3994" > +<cdparam x="619" y="350" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="stopMagnetron()" /> +<TGConnectingPoint num="0" id="3984" /> +<TGConnectingPoint num="1" id="3985" /> +<TGConnectingPoint num="2" id="3986" /> +<TGConnectingPoint num="3" id="3987" /> +<TGConnectingPoint num="4" id="3988" /> +<TGConnectingPoint num="5" id="3989" /> +<TGConnectingPoint num="6" id="3990" /> +<TGConnectingPoint num="7" id="3991" /> +<TGConnectingPoint num="8" id="3992" /> +<TGConnectingPoint num="9" id="3993" /> +</COMPONENT> + +<COMPONENT type="5103" id="4005" > +<cdparam x="376" y="512" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="stopMagnetron()" /> +<TGConnectingPoint num="0" id="3995" /> +<TGConnectingPoint num="1" id="3996" /> +<TGConnectingPoint num="2" id="3997" /> +<TGConnectingPoint num="3" id="3998" /> +<TGConnectingPoint num="4" id="3999" /> +<TGConnectingPoint num="5" id="4000" /> +<TGConnectingPoint num="6" id="4001" /> +<TGConnectingPoint num="7" id="4002" /> +<TGConnectingPoint num="8" id="4003" /> +<TGConnectingPoint num="9" id="4004" /> +</COMPONENT> + +<COMPONENT type="5103" id="4016" > +<cdparam x="619" y="527" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startMagnetron()" /> +<TGConnectingPoint num="0" id="4006" /> +<TGConnectingPoint num="1" id="4007" /> +<TGConnectingPoint num="2" id="4008" /> +<TGConnectingPoint num="3" id="4009" /> +<TGConnectingPoint num="4" id="4010" /> +<TGConnectingPoint num="5" id="4011" /> +<TGConnectingPoint num="6" id="4012" /> +<TGConnectingPoint num="7" id="4013" /> +<TGConnectingPoint num="8" id="4014" /> +<TGConnectingPoint num="9" id="4015" /> +</COMPONENT> + +<COMPONENT type="5103" id="4027" > +<cdparam x="376" y="309" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startMagnetron()" /> +<TGConnectingPoint num="0" id="4017" /> +<TGConnectingPoint num="1" id="4018" /> +<TGConnectingPoint num="2" id="4019" /> +<TGConnectingPoint num="3" id="4020" /> +<TGConnectingPoint num="4" id="4021" /> +<TGConnectingPoint num="5" id="4022" /> +<TGConnectingPoint num="6" id="4023" /> +<TGConnectingPoint num="7" id="4024" /> +<TGConnectingPoint num="8" id="4025" /> +<TGConnectingPoint num="9" id="4026" /> +</COMPONENT> + +<COMPONENT type="5104" id="4038" > +<cdparam x="640" y="460" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="closed()" /> +<TGConnectingPoint num="0" id="4028" /> +<TGConnectingPoint num="1" id="4029" /> +<TGConnectingPoint num="2" id="4030" /> +<TGConnectingPoint num="3" id="4031" /> +<TGConnectingPoint num="4" id="4032" /> +<TGConnectingPoint num="5" id="4033" /> +<TGConnectingPoint num="6" id="4034" /> +<TGConnectingPoint num="7" id="4035" /> +<TGConnectingPoint num="8" id="4036" /> +<TGConnectingPoint num="9" id="4037" /> +</COMPONENT> + +<COMPONENT type="5104" id="4049" > +<cdparam x="630" y="150" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="closed()" /> +<TGConnectingPoint num="0" id="4039" /> +<TGConnectingPoint num="1" id="4040" /> +<TGConnectingPoint num="2" id="4041" /> +<TGConnectingPoint num="3" id="4042" /> +<TGConnectingPoint num="4" id="4043" /> +<TGConnectingPoint num="5" id="4044" /> +<TGConnectingPoint num="6" id="4045" /> +<TGConnectingPoint num="7" id="4046" /> +<TGConnectingPoint num="8" id="4047" /> +<TGConnectingPoint num="9" id="4048" /> +</COMPONENT> + +<COMPONENT type="5106" id="4090" > +<cdparam x="603" y="106" /> +<sizeparam width="116" height="35" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="DoorOpened" /> +<TGConnectingPoint num="0" id="4050" /> +<TGConnectingPoint num="1" id="4051" /> +<TGConnectingPoint num="2" id="4052" /> +<TGConnectingPoint num="3" id="4053" /> +<TGConnectingPoint num="4" id="4054" /> +<TGConnectingPoint num="5" id="4055" /> +<TGConnectingPoint num="6" id="4056" /> +<TGConnectingPoint num="7" id="4057" /> +<TGConnectingPoint num="8" id="4058" /> +<TGConnectingPoint num="9" id="4059" /> +<TGConnectingPoint num="10" id="4060" /> +<TGConnectingPoint num="11" id="4061" /> +<TGConnectingPoint num="12" id="4062" /> +<TGConnectingPoint num="13" id="4063" /> +<TGConnectingPoint num="14" id="4064" /> +<TGConnectingPoint num="15" id="4065" /> +<TGConnectingPoint num="16" id="4066" /> +<TGConnectingPoint num="17" id="4067" /> +<TGConnectingPoint num="18" id="4068" /> +<TGConnectingPoint num="19" id="4069" /> +<TGConnectingPoint num="20" id="4070" /> +<TGConnectingPoint num="21" id="4071" /> +<TGConnectingPoint num="22" id="4072" /> +<TGConnectingPoint num="23" id="4073" /> +<TGConnectingPoint num="24" id="4074" /> +<TGConnectingPoint num="25" id="4075" /> +<TGConnectingPoint num="26" id="4076" /> +<TGConnectingPoint num="27" id="4077" /> +<TGConnectingPoint num="28" id="4078" /> +<TGConnectingPoint num="29" id="4079" /> +<TGConnectingPoint num="30" id="4080" /> +<TGConnectingPoint num="31" id="4081" /> +<TGConnectingPoint num="32" id="4082" /> +<TGConnectingPoint num="33" id="4083" /> +<TGConnectingPoint num="34" id="4084" /> +<TGConnectingPoint num="35" id="4085" /> +<TGConnectingPoint num="36" id="4086" /> +<TGConnectingPoint num="37" id="4087" /> +<TGConnectingPoint num="38" id="4088" /> +<TGConnectingPoint num="39" id="4089" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="4131" > +<cdparam x="571" y="393" /> +<sizeparam width="200" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="DoorOpenedWhileHeating" /> +<TGConnectingPoint num="0" id="4091" /> +<TGConnectingPoint num="1" id="4092" /> +<TGConnectingPoint num="2" id="4093" /> +<TGConnectingPoint num="3" id="4094" /> +<TGConnectingPoint num="4" id="4095" /> +<TGConnectingPoint num="5" id="4096" /> +<TGConnectingPoint num="6" id="4097" /> +<TGConnectingPoint num="7" id="4098" /> +<TGConnectingPoint num="8" id="4099" /> +<TGConnectingPoint num="9" id="4100" /> +<TGConnectingPoint num="10" id="4101" /> +<TGConnectingPoint num="11" id="4102" /> +<TGConnectingPoint num="12" id="4103" /> +<TGConnectingPoint num="13" id="4104" /> +<TGConnectingPoint num="14" id="4105" /> +<TGConnectingPoint num="15" id="4106" /> +<TGConnectingPoint num="16" id="4107" /> +<TGConnectingPoint num="17" id="4108" /> +<TGConnectingPoint num="18" id="4109" /> +<TGConnectingPoint num="19" id="4110" /> +<TGConnectingPoint num="20" id="4111" /> +<TGConnectingPoint num="21" id="4112" /> +<TGConnectingPoint num="22" id="4113" /> +<TGConnectingPoint num="23" id="4114" /> +<TGConnectingPoint num="24" id="4115" /> +<TGConnectingPoint num="25" id="4116" /> +<TGConnectingPoint num="26" id="4117" /> +<TGConnectingPoint num="27" id="4118" /> +<TGConnectingPoint num="28" id="4119" /> +<TGConnectingPoint num="29" id="4120" /> +<TGConnectingPoint num="30" id="4121" /> +<TGConnectingPoint num="31" id="4122" /> +<TGConnectingPoint num="32" id="4123" /> +<TGConnectingPoint num="33" id="4124" /> +<TGConnectingPoint num="34" id="4125" /> +<TGConnectingPoint num="35" id="4126" /> +<TGConnectingPoint num="36" id="4127" /> +<TGConnectingPoint num="37" id="4128" /> +<TGConnectingPoint num="38" id="4129" /> +<TGConnectingPoint num="39" id="4130" /> +<breakpoint /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="4142" > +<cdparam x="362" y="355" /> +<sizeparam width="133" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="4132" /> +<TGConnectingPoint num="1" id="4133" /> +<TGConnectingPoint num="2" id="4134" /> +<TGConnectingPoint num="3" id="4135" /> +<TGConnectingPoint num="4" id="4136" /> +<TGConnectingPoint num="5" id="4137" /> +<TGConnectingPoint num="6" id="4138" /> +<TGConnectingPoint num="7" id="4139" /> +<TGConnectingPoint num="8" id="4140" /> +<TGConnectingPoint num="9" id="4141" /> +</COMPONENT> + +<COMPONENT type="5106" id="4183" > +<cdparam x="251" y="240" /> +<sizeparam width="543" height="394" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Heating" /> +<TGConnectingPoint num="0" id="4143" /> +<TGConnectingPoint num="1" id="4144" /> +<TGConnectingPoint num="2" id="4145" /> +<TGConnectingPoint num="3" id="4146" /> +<TGConnectingPoint num="4" id="4147" /> +<TGConnectingPoint num="5" id="4148" /> +<TGConnectingPoint num="6" id="4149" /> +<TGConnectingPoint num="7" id="4150" /> +<TGConnectingPoint num="8" id="4151" /> +<TGConnectingPoint num="9" id="4152" /> +<TGConnectingPoint num="10" id="4153" /> +<TGConnectingPoint num="11" id="4154" /> +<TGConnectingPoint num="12" id="4155" /> +<TGConnectingPoint num="13" id="4156" /> +<TGConnectingPoint num="14" id="4157" /> +<TGConnectingPoint num="15" id="4158" /> +<TGConnectingPoint num="16" id="4159" /> +<TGConnectingPoint num="17" id="4160" /> +<TGConnectingPoint num="18" id="4161" /> +<TGConnectingPoint num="19" id="4162" /> +<TGConnectingPoint num="20" id="4163" /> +<TGConnectingPoint num="21" id="4164" /> +<TGConnectingPoint num="22" id="4165" /> +<TGConnectingPoint num="23" id="4166" /> +<TGConnectingPoint num="24" id="4167" /> +<TGConnectingPoint num="25" id="4168" /> +<TGConnectingPoint num="26" id="4169" /> +<TGConnectingPoint num="27" id="4170" /> +<TGConnectingPoint num="28" id="4171" /> +<TGConnectingPoint num="29" id="4172" /> +<TGConnectingPoint num="30" id="4173" /> +<TGConnectingPoint num="31" id="4174" /> +<TGConnectingPoint num="32" id="4175" /> +<TGConnectingPoint num="33" id="4176" /> +<TGConnectingPoint num="34" id="4177" /> +<TGConnectingPoint num="35" id="4178" /> +<TGConnectingPoint num="36" id="4179" /> +<TGConnectingPoint num="37" id="4180" /> +<TGConnectingPoint num="38" id="4181" /> +<TGConnectingPoint num="39" id="4182" /> +<extraparam> +</extraparam> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="ControlPanel" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="4196" > +<cdparam x="504" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="4192" /> +<TGConnectingPoint num="1" id="4193" /> +<TGConnectingPoint num="2" id="4194" /> +<TGConnectingPoint num="3" id="4195" /> +<P1 x="504" y="232" id="4255" /> +<P2 x="454" y="123" id="4216" /> +<Point x="503" y="254" /> +<Point x="425" y="254" /> +<Point x="426" y="123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4184" > +<father id="4196" num="0" /> +<cdparam x="503" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4185" > +<father id="4196" num="1" /> +<cdparam x="425" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4186" > +<father id="4196" num="2" /> +<cdparam x="426" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4191" > +<father id="4196" num="3" /> +<cdparam x="465" y="275" /> +<sizeparam width="100" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4187" /> +<TGConnectingPoint num="1" id="4188" /> +<TGConnectingPoint num="2" id="4189" /> +<TGConnectingPoint num="3" id="4190" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4205" > +<cdparam x="504" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="4203" /> +<TGConnectingPoint num="1" id="4204" /> +<P1 x="504" y="148" id="4219" /> +<P2 x="504" y="202" id="4254" /> +<Point x="504" y="175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4197" > +<father id="4205" num="0" /> +<cdparam x="504" y="175" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4202" > +<father id="4205" num="1" /> +<cdparam x="504" y="188" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4198" /> +<TGConnectingPoint num="1" id="4199" /> +<TGConnectingPoint num="2" id="4200" /> +<TGConnectingPoint num="3" id="4201" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4212" > +<cdparam x="385" y="75" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="4211" /> +<P1 x="481" y="74" id="4265" /> +<P2 x="504" y="98" id="4214" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4210" > +<father id="4212" num="0" /> +<cdparam x="385" y="115" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4206" /> +<TGConnectingPoint num="1" id="4207" /> +<TGConnectingPoint num="2" id="4208" /> +<TGConnectingPoint num="3" id="4209" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="4253" > +<cdparam x="454" y="98" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Active" /> +<TGConnectingPoint num="0" id="4213" /> +<TGConnectingPoint num="1" id="4214" /> +<TGConnectingPoint num="2" id="4215" /> +<TGConnectingPoint num="3" id="4216" /> +<TGConnectingPoint num="4" id="4217" /> +<TGConnectingPoint num="5" id="4218" /> +<TGConnectingPoint num="6" id="4219" /> +<TGConnectingPoint num="7" id="4220" /> +<TGConnectingPoint num="8" id="4221" /> +<TGConnectingPoint num="9" id="4222" /> +<TGConnectingPoint num="10" id="4223" /> +<TGConnectingPoint num="11" id="4224" /> +<TGConnectingPoint num="12" id="4225" /> +<TGConnectingPoint num="13" id="4226" /> +<TGConnectingPoint num="14" id="4227" /> +<TGConnectingPoint num="15" id="4228" /> +<TGConnectingPoint num="16" id="4229" /> +<TGConnectingPoint num="17" id="4230" /> +<TGConnectingPoint num="18" id="4231" /> +<TGConnectingPoint num="19" id="4232" /> +<TGConnectingPoint num="20" id="4233" /> +<TGConnectingPoint num="21" id="4234" /> +<TGConnectingPoint num="22" id="4235" /> +<TGConnectingPoint num="23" id="4236" /> +<TGConnectingPoint num="24" id="4237" /> +<TGConnectingPoint num="25" id="4238" /> +<TGConnectingPoint num="26" id="4239" /> +<TGConnectingPoint num="27" id="4240" /> +<TGConnectingPoint num="28" id="4241" /> +<TGConnectingPoint num="29" id="4242" /> +<TGConnectingPoint num="30" id="4243" /> +<TGConnectingPoint num="31" id="4244" /> +<TGConnectingPoint num="32" id="4245" /> +<TGConnectingPoint num="33" id="4246" /> +<TGConnectingPoint num="34" id="4247" /> +<TGConnectingPoint num="35" id="4248" /> +<TGConnectingPoint num="36" id="4249" /> +<TGConnectingPoint num="37" id="4250" /> +<TGConnectingPoint num="38" id="4251" /> +<TGConnectingPoint num="39" id="4252" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="4264" > +<cdparam x="440" y="207" /> +<sizeparam width="128" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startButton(duration)" /> +<TGConnectingPoint num="0" id="4254" /> +<TGConnectingPoint num="1" id="4255" /> +<TGConnectingPoint num="2" id="4256" /> +<TGConnectingPoint num="3" id="4257" /> +<TGConnectingPoint num="4" id="4258" /> +<TGConnectingPoint num="5" id="4259" /> +<TGConnectingPoint num="6" id="4260" /> +<TGConnectingPoint num="7" id="4261" /> +<TGConnectingPoint num="8" id="4262" /> +<TGConnectingPoint num="9" id="4263" /> +</COMPONENT> + +<COMPONENT type="5100" id="4266" > +<cdparam x="474" y="54" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4265" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Bell" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="4273" > +<cdparam x="419" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="4272" /> +<P1 x="419" y="209" id="4343" /> +<P2 x="419" y="313" id="4302" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4271" > +<father id="4273" num="0" /> +<cdparam x="429" y="249" /> +<sizeparam width="47" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4267" /> +<TGConnectingPoint num="1" id="4268" /> +<TGConnectingPoint num="2" id="4269" /> +<TGConnectingPoint num="3" id="4270" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="runBell()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4286" > +<cdparam x="419" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="4282" /> +<TGConnectingPoint num="1" id="4283" /> +<TGConnectingPoint num="2" id="4284" /> +<TGConnectingPoint num="3" id="4285" /> +<P1 x="419" y="363" id="4307" /> +<P2 x="369" y="123" id="4356" /> +<Point x="412" y="419" /> +<Point x="332" y="419" /> +<Point x="332" y="123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4274" > +<father id="4286" num="0" /> +<cdparam x="412" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4275" > +<father id="4286" num="1" /> +<cdparam x="332" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4276" > +<father id="4286" num="2" /> +<cdparam x="332" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4281" > +<father id="4286" num="3" /> +<cdparam x="430" y="402" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4277" /> +<TGConnectingPoint num="1" id="4278" /> +<TGConnectingPoint num="2" id="4279" /> +<TGConnectingPoint num="3" id="4280" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4293" > +<cdparam x="420" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="4292" /> +<P1 x="419" y="148" id="4359" /> +<P2 x="419" y="179" id="4342" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4291" > +<father id="4293" num="0" /> +<cdparam x="420" y="191" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4287" /> +<TGConnectingPoint num="1" id="4288" /> +<TGConnectingPoint num="2" id="4289" /> +<TGConnectingPoint num="3" id="4290" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4300" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="4299" /> +<P1 x="407" y="70" id="4394" /> +<P2 x="419" y="98" id="4354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4298" > +<father id="4300" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4294" /> +<TGConnectingPoint num="1" id="4295" /> +<TGConnectingPoint num="2" id="4296" /> +<TGConnectingPoint num="3" id="4297" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="4341" > +<cdparam x="369" y="313" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Ringing" /> +<TGConnectingPoint num="0" id="4301" /> +<TGConnectingPoint num="1" id="4302" /> +<TGConnectingPoint num="2" id="4303" /> +<TGConnectingPoint num="3" id="4304" /> +<TGConnectingPoint num="4" id="4305" /> +<TGConnectingPoint num="5" id="4306" /> +<TGConnectingPoint num="6" id="4307" /> +<TGConnectingPoint num="7" id="4308" /> +<TGConnectingPoint num="8" id="4309" /> +<TGConnectingPoint num="9" id="4310" /> +<TGConnectingPoint num="10" id="4311" /> +<TGConnectingPoint num="11" id="4312" /> +<TGConnectingPoint num="12" id="4313" /> +<TGConnectingPoint num="13" id="4314" /> +<TGConnectingPoint num="14" id="4315" /> +<TGConnectingPoint num="15" id="4316" /> +<TGConnectingPoint num="16" id="4317" /> +<TGConnectingPoint num="17" id="4318" /> +<TGConnectingPoint num="18" id="4319" /> +<TGConnectingPoint num="19" id="4320" /> +<TGConnectingPoint num="20" id="4321" /> +<TGConnectingPoint num="21" id="4322" /> +<TGConnectingPoint num="22" id="4323" /> +<TGConnectingPoint num="23" id="4324" /> +<TGConnectingPoint num="24" id="4325" /> +<TGConnectingPoint num="25" id="4326" /> +<TGConnectingPoint num="26" id="4327" /> +<TGConnectingPoint num="27" id="4328" /> +<TGConnectingPoint num="28" id="4329" /> +<TGConnectingPoint num="29" id="4330" /> +<TGConnectingPoint num="30" id="4331" /> +<TGConnectingPoint num="31" id="4332" /> +<TGConnectingPoint num="32" id="4333" /> +<TGConnectingPoint num="33" id="4334" /> +<TGConnectingPoint num="34" id="4335" /> +<TGConnectingPoint num="35" id="4336" /> +<TGConnectingPoint num="36" id="4337" /> +<TGConnectingPoint num="37" id="4338" /> +<TGConnectingPoint num="38" id="4339" /> +<TGConnectingPoint num="39" id="4340" /> +<extraparam> +<entryCode value="" /> +<entryCode value="printf("\nDRING DRING DRING !!!!\n\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="4352" > +<cdparam x="395" y="184" /> +<sizeparam width="48" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="ring()" /> +<TGConnectingPoint num="0" id="4342" /> +<TGConnectingPoint num="1" id="4343" /> +<TGConnectingPoint num="2" id="4344" /> +<TGConnectingPoint num="3" id="4345" /> +<TGConnectingPoint num="4" id="4346" /> +<TGConnectingPoint num="5" id="4347" /> +<TGConnectingPoint num="6" id="4348" /> +<TGConnectingPoint num="7" id="4349" /> +<TGConnectingPoint num="8" id="4350" /> +<TGConnectingPoint num="9" id="4351" /> +</COMPONENT> + +<COMPONENT type="5106" id="4393" > +<cdparam x="369" y="98" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Active" /> +<TGConnectingPoint num="0" id="4353" /> +<TGConnectingPoint num="1" id="4354" /> +<TGConnectingPoint num="2" id="4355" /> +<TGConnectingPoint num="3" id="4356" /> +<TGConnectingPoint num="4" id="4357" /> +<TGConnectingPoint num="5" id="4358" /> +<TGConnectingPoint num="6" id="4359" /> +<TGConnectingPoint num="7" id="4360" /> +<TGConnectingPoint num="8" id="4361" /> +<TGConnectingPoint num="9" id="4362" /> +<TGConnectingPoint num="10" id="4363" /> +<TGConnectingPoint num="11" id="4364" /> +<TGConnectingPoint num="12" id="4365" /> +<TGConnectingPoint num="13" id="4366" /> +<TGConnectingPoint num="14" id="4367" /> +<TGConnectingPoint num="15" id="4368" /> +<TGConnectingPoint num="16" id="4369" /> +<TGConnectingPoint num="17" id="4370" /> +<TGConnectingPoint num="18" id="4371" /> +<TGConnectingPoint num="19" id="4372" /> +<TGConnectingPoint num="20" id="4373" /> +<TGConnectingPoint num="21" id="4374" /> +<TGConnectingPoint num="22" id="4375" /> +<TGConnectingPoint num="23" id="4376" /> +<TGConnectingPoint num="24" id="4377" /> +<TGConnectingPoint num="25" id="4378" /> +<TGConnectingPoint num="26" id="4379" /> +<TGConnectingPoint num="27" id="4380" /> +<TGConnectingPoint num="28" id="4381" /> +<TGConnectingPoint num="29" id="4382" /> +<TGConnectingPoint num="30" id="4383" /> +<TGConnectingPoint num="31" id="4384" /> +<TGConnectingPoint num="32" id="4385" /> +<TGConnectingPoint num="33" id="4386" /> +<TGConnectingPoint num="34" id="4387" /> +<TGConnectingPoint num="35" id="4388" /> +<TGConnectingPoint num="36" id="4389" /> +<TGConnectingPoint num="37" id="4390" /> +<TGConnectingPoint num="38" id="4391" /> +<TGConnectingPoint num="39" id="4392" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="4395" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4394" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="RemoteControl" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="118" id="4396" > +<cdparam x="516" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from List of all parameters of an Avatar SMD transition to UML Note" value="null" /> +<P1 x="508" y="133" id="4399" /> +<P2 x="661" y="95" id="4469" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="5102" id="4403" > +<cdparam x="290" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="4402" /> +<P1 x="309" y="119" id="4529" /> +<P2 x="325" y="163" id="4476" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4401" > +<father id="4403" num="0" /> +<cdparam x="340" y="118" /> +<sizeparam width="168" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4397" /> +<TGConnectingPoint num="1" id="4398" /> +<TGConnectingPoint num="2" id="4399" /> +<TGConnectingPoint num="3" id="4400" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="msg1.data = duration" /> +<actions value="msg = sencrypt(msg1, PSK)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4410" > +<cdparam x="327" y="221" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Send signal" value="null" /> +<TGConnectingPoint num="0" id="4409" /> +<P1 x="325" y="213" id="4481" /> +<P2 x="347" y="291" id="4518" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4408" > +<father id="4410" num="0" /> +<cdparam x="364" y="248" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4404" /> +<TGConnectingPoint num="1" id="4405" /> +<TGConnectingPoint num="2" id="4406" /> +<TGConnectingPoint num="3" id="4407" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4417" > +<cdparam x="347" y="321" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="4416" /> +<P1 x="347" y="321" id="4519" /> +<P2 x="348" y="377" id="4433" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4415" > +<father id="4417" num="0" /> +<cdparam x="347" y="361" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4411" /> +<TGConnectingPoint num="1" id="4412" /> +<TGConnectingPoint num="2" id="4413" /> +<TGConnectingPoint num="3" id="4414" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4424" > +<cdparam x="373" y="427" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="4423" /> +<P1 x="373" y="427" id="4431" /> +<P2 x="375" y="442" id="4516" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4422" > +<father id="4424" num="0" /> +<cdparam x="373" y="467" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4418" /> +<TGConnectingPoint num="1" id="4419" /> +<TGConnectingPoint num="2" id="4420" /> +<TGConnectingPoint num="3" id="4421" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="4465" > +<cdparam x="323" y="377" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Msg1Sent" /> +<TGConnectingPoint num="0" id="4425" /> +<TGConnectingPoint num="1" id="4426" /> +<TGConnectingPoint num="2" id="4427" /> +<TGConnectingPoint num="3" id="4428" /> +<TGConnectingPoint num="4" id="4429" /> +<TGConnectingPoint num="5" id="4430" /> +<TGConnectingPoint num="6" id="4431" /> +<TGConnectingPoint num="7" id="4432" /> +<TGConnectingPoint num="8" id="4433" /> +<TGConnectingPoint num="9" id="4434" /> +<TGConnectingPoint num="10" id="4435" /> +<TGConnectingPoint num="11" id="4436" /> +<TGConnectingPoint num="12" id="4437" /> +<TGConnectingPoint num="13" id="4438" /> +<TGConnectingPoint num="14" id="4439" /> +<TGConnectingPoint num="15" id="4440" /> +<TGConnectingPoint num="16" id="4441" /> +<TGConnectingPoint num="17" id="4442" /> +<TGConnectingPoint num="18" id="4443" /> +<TGConnectingPoint num="19" id="4444" /> +<TGConnectingPoint num="20" id="4445" /> +<TGConnectingPoint num="21" id="4446" /> +<TGConnectingPoint num="22" id="4447" /> +<TGConnectingPoint num="23" id="4448" /> +<TGConnectingPoint num="24" id="4449" /> +<TGConnectingPoint num="25" id="4450" /> +<TGConnectingPoint num="26" id="4451" /> +<TGConnectingPoint num="27" id="4452" /> +<TGConnectingPoint num="28" id="4453" /> +<TGConnectingPoint num="29" id="4454" /> +<TGConnectingPoint num="30" id="4455" /> +<TGConnectingPoint num="31" id="4456" /> +<TGConnectingPoint num="32" id="4457" /> +<TGConnectingPoint num="33" id="4458" /> +<TGConnectingPoint num="34" id="4459" /> +<TGConnectingPoint num="35" id="4460" /> +<TGConnectingPoint num="36" id="4461" /> +<TGConnectingPoint num="37" id="4462" /> +<TGConnectingPoint num="38" id="4463" /> +<TGConnectingPoint num="39" id="4464" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="4474" > +<cdparam x="661" y="78" /> +<sizeparam width="251" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Encrypting data with the pre shared key +" /> +<TGConnectingPoint num="0" id="4466" /> +<TGConnectingPoint num="1" id="4467" /> +<TGConnectingPoint num="2" id="4468" /> +<TGConnectingPoint num="3" id="4469" /> +<TGConnectingPoint num="4" id="4470" /> +<TGConnectingPoint num="5" id="4471" /> +<TGConnectingPoint num="6" id="4472" /> +<TGConnectingPoint num="7" id="4473" /> +<extraparam> +<Line value="Encrypting data with the pre shared key" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="4515" > +<cdparam x="239" y="163" /> +<sizeparam width="172" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="SendingRemoteOrder" /> +<TGConnectingPoint num="0" id="4475" /> +<TGConnectingPoint num="1" id="4476" /> +<TGConnectingPoint num="2" id="4477" /> +<TGConnectingPoint num="3" id="4478" /> +<TGConnectingPoint num="4" id="4479" /> +<TGConnectingPoint num="5" id="4480" /> +<TGConnectingPoint num="6" id="4481" /> +<TGConnectingPoint num="7" id="4482" /> +<TGConnectingPoint num="8" id="4483" /> +<TGConnectingPoint num="9" id="4484" /> +<TGConnectingPoint num="10" id="4485" /> +<TGConnectingPoint num="11" id="4486" /> +<TGConnectingPoint num="12" id="4487" /> +<TGConnectingPoint num="13" id="4488" /> +<TGConnectingPoint num="14" id="4489" /> +<TGConnectingPoint num="15" id="4490" /> +<TGConnectingPoint num="16" id="4491" /> +<TGConnectingPoint num="17" id="4492" /> +<TGConnectingPoint num="18" id="4493" /> +<TGConnectingPoint num="19" id="4494" /> +<TGConnectingPoint num="20" id="4495" /> +<TGConnectingPoint num="21" id="4496" /> +<TGConnectingPoint num="22" id="4497" /> +<TGConnectingPoint num="23" id="4498" /> +<TGConnectingPoint num="24" id="4499" /> +<TGConnectingPoint num="25" id="4500" /> +<TGConnectingPoint num="26" id="4501" /> +<TGConnectingPoint num="27" id="4502" /> +<TGConnectingPoint num="28" id="4503" /> +<TGConnectingPoint num="29" id="4504" /> +<TGConnectingPoint num="30" id="4505" /> +<TGConnectingPoint num="31" id="4506" /> +<TGConnectingPoint num="32" id="4507" /> +<TGConnectingPoint num="33" id="4508" /> +<TGConnectingPoint num="34" id="4509" /> +<TGConnectingPoint num="35" id="4510" /> +<TGConnectingPoint num="36" id="4511" /> +<TGConnectingPoint num="37" id="4512" /> +<TGConnectingPoint num="38" id="4513" /> +<TGConnectingPoint num="39" id="4514" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5101" id="4517" > +<cdparam x="365" y="447" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="4516" /> +</COMPONENT> + +<COMPONENT type="5103" id="4528" > +<cdparam x="266" y="296" /> +<sizeparam width="163" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="wirelessChannelWrite(msg)" /> +<TGConnectingPoint num="0" id="4518" /> +<TGConnectingPoint num="1" id="4519" /> +<TGConnectingPoint num="2" id="4520" /> +<TGConnectingPoint num="3" id="4521" /> +<TGConnectingPoint num="4" id="4522" /> +<TGConnectingPoint num="5" id="4523" /> +<TGConnectingPoint num="6" id="4524" /> +<TGConnectingPoint num="7" id="4525" /> +<TGConnectingPoint num="8" id="4526" /> +<TGConnectingPoint num="9" id="4527" /> +</COMPONENT> + +<COMPONENT type="5100" id="4530" > +<cdparam x="302" y="99" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4529" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/Network_Avatar.xml b/preinstallTTool/linux/TTool/modeling/Network_Avatar.xml new file mode 100644 index 0000000000000000000000000000000000000000..e2948836c24fd87a110c2eedf11ceaafaee4a6ec --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/Network_Avatar.xml @@ -0,0 +1,1630 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta1"> + +<Modeling type="AVATAR Design" nameTab="NetworkSystem" > +<AVATARBlockDiagramPanel name="AVATAR Block Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<MainCode value="void __user_init() {"/> +<MainCode value="}"/> +<Optimized value="true" /> +<Validated value="Server;Client;Network;Port1In;Port0In;" /> +<Ignored value="" /> + +<CONNECTOR type="5002" id="2" > +<cdparam x="695" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="1" /> +<P1 x="742" y="196" id="118" /> +<P2 x="862" y="281" id="17" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in port1_in(PDU pdu)" /> +<osd value="out socket_out(PDU pdu)" /> +<isd value="in socket_in(PDU pdu)" /> +<oso value="out port1_out(PDU pdu)" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="4" > +<cdparam x="273" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="3" /> +<P1 x="212" y="234" id="43" /> +<P2 x="350" y="196" id="117" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in socket_in(PDU pdu)" /> +<osd value="out port0_out(PDU pdu)" /> +<isd value="in port0_in(PDU pdu)" /> +<oso value="out socket_out(PDU pdu)" /> +<FIFOType asynchronous="true" size="4" blocking="true" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<COMPONENT type="5003" id="13" > +<cdparam x="272" y="452" /> +<sizeparam width="149" height="93" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="DataType0" value="PDU" /> +<TGConnectingPoint num="0" id="5" /> +<TGConnectingPoint num="1" id="6" /> +<TGConnectingPoint num="2" id="7" /> +<TGConnectingPoint num="3" id="8" /> +<TGConnectingPoint num="4" id="9" /> +<TGConnectingPoint num="5" id="10" /> +<TGConnectingPoint num="6" id="11" /> +<TGConnectingPoint num="7" id="12" /> +<extraparam> +<Attribute access="0" id="x" value="5" type="8" typeOther="" /> +<Attribute access="0" id="y" value="10" type="8" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="38" > +<cdparam x="862" y="181" /> +<sizeparam width="183" height="200" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Server" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<TGConnectingPoint num="4" id="18" /> +<TGConnectingPoint num="5" id="19" /> +<TGConnectingPoint num="6" id="20" /> +<TGConnectingPoint num="7" id="21" /> +<TGConnectingPoint num="8" id="22" /> +<TGConnectingPoint num="9" id="23" /> +<TGConnectingPoint num="10" id="24" /> +<TGConnectingPoint num="11" id="25" /> +<TGConnectingPoint num="12" id="26" /> +<TGConnectingPoint num="13" id="27" /> +<TGConnectingPoint num="14" id="28" /> +<TGConnectingPoint num="15" id="29" /> +<TGConnectingPoint num="16" id="30" /> +<TGConnectingPoint num="17" id="31" /> +<TGConnectingPoint num="18" id="32" /> +<TGConnectingPoint num="19" id="33" /> +<TGConnectingPoint num="20" id="34" /> +<TGConnectingPoint num="21" id="35" /> +<TGConnectingPoint num="22" id="36" /> +<TGConnectingPoint num="23" id="37" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +<Method value="gotPDUFromClient(int x)" /> +<Signal value="in socket_in(PDU pdu)" /> +<Signal value="out socket_out(PDU pdu)" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="63" > +<cdparam x="21" y="134" /> +<sizeparam width="191" height="200" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Client" /> +<TGConnectingPoint num="0" id="39" /> +<TGConnectingPoint num="1" id="40" /> +<TGConnectingPoint num="2" id="41" /> +<TGConnectingPoint num="3" id="42" /> +<TGConnectingPoint num="4" id="43" /> +<TGConnectingPoint num="5" id="44" /> +<TGConnectingPoint num="6" id="45" /> +<TGConnectingPoint num="7" id="46" /> +<TGConnectingPoint num="8" id="47" /> +<TGConnectingPoint num="9" id="48" /> +<TGConnectingPoint num="10" id="49" /> +<TGConnectingPoint num="11" id="50" /> +<TGConnectingPoint num="12" id="51" /> +<TGConnectingPoint num="13" id="52" /> +<TGConnectingPoint num="14" id="53" /> +<TGConnectingPoint num="15" id="54" /> +<TGConnectingPoint num="16" id="55" /> +<TGConnectingPoint num="17" id="56" /> +<TGConnectingPoint num="18" id="57" /> +<TGConnectingPoint num="19" id="58" /> +<TGConnectingPoint num="20" id="59" /> +<TGConnectingPoint num="21" id="60" /> +<TGConnectingPoint num="22" id="61" /> +<TGConnectingPoint num="23" id="62" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="x" value="" type="8" typeOther="" /> +<Attribute access="0" id="d" value="14" type="8" typeOther="" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +<Attribute access="0" id="timer" value="" type="9" typeOther="" /> +<Attribute access="0" id="timerValue" value="" type="8" typeOther="" /> +<Method value="gotData(PDU pdu)" /> +<Method value="switchOff()" /> +<Signal value="out socket_out(PDU pdu)" /> +<Signal value="in socket_in(PDU pdu)" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="138" > +<cdparam x="350" y="22" /> +<sizeparam width="392" height="349" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Network" /> +<TGConnectingPoint num="0" id="114" /> +<TGConnectingPoint num="1" id="115" /> +<TGConnectingPoint num="2" id="116" /> +<TGConnectingPoint num="3" id="117" /> +<TGConnectingPoint num="4" id="118" /> +<TGConnectingPoint num="5" id="119" /> +<TGConnectingPoint num="6" id="120" /> +<TGConnectingPoint num="7" id="121" /> +<TGConnectingPoint num="8" id="122" /> +<TGConnectingPoint num="9" id="123" /> +<TGConnectingPoint num="10" id="124" /> +<TGConnectingPoint num="11" id="125" /> +<TGConnectingPoint num="12" id="126" /> +<TGConnectingPoint num="13" id="127" /> +<TGConnectingPoint num="14" id="128" /> +<TGConnectingPoint num="15" id="129" /> +<TGConnectingPoint num="16" id="130" /> +<TGConnectingPoint num="17" id="131" /> +<TGConnectingPoint num="18" id="132" /> +<TGConnectingPoint num="19" id="133" /> +<TGConnectingPoint num="20" id="134" /> +<TGConnectingPoint num="21" id="135" /> +<TGConnectingPoint num="22" id="136" /> +<TGConnectingPoint num="23" id="137" /> +<extraparam> +<CryptoBlock value="false" /> +<Method value="gotPacket(int x)" /> +<Signal value="in port0_in(PDU pdu)" /> +<Signal value="out port0_out(PDU pdu)" /> +<Signal value="out port1_out(PDU pdu)" /> +<Signal value="in port1_in(PDU pdu)" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5000" id="88" > +<father id="138" num="0" /> +<cdparam x="568" y="156" /> +<sizeparam width="153" height="201" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="239" minY="0" maxY="148" /> +<infoparam name="Block0" value="Port1In" /> +<TGConnectingPoint num="0" id="64" /> +<TGConnectingPoint num="1" id="65" /> +<TGConnectingPoint num="2" id="66" /> +<TGConnectingPoint num="3" id="67" /> +<TGConnectingPoint num="4" id="68" /> +<TGConnectingPoint num="5" id="69" /> +<TGConnectingPoint num="6" id="70" /> +<TGConnectingPoint num="7" id="71" /> +<TGConnectingPoint num="8" id="72" /> +<TGConnectingPoint num="9" id="73" /> +<TGConnectingPoint num="10" id="74" /> +<TGConnectingPoint num="11" id="75" /> +<TGConnectingPoint num="12" id="76" /> +<TGConnectingPoint num="13" id="77" /> +<TGConnectingPoint num="14" id="78" /> +<TGConnectingPoint num="15" id="79" /> +<TGConnectingPoint num="16" id="80" /> +<TGConnectingPoint num="17" id="81" /> +<TGConnectingPoint num="18" id="82" /> +<TGConnectingPoint num="19" id="83" /> +<TGConnectingPoint num="20" id="84" /> +<TGConnectingPoint num="21" id="85" /> +<TGConnectingPoint num="22" id="86" /> +<TGConnectingPoint num="23" id="87" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="d" value="5" type="8" typeOther="" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="113" > +<father id="138" num="1" /> +<cdparam x="375" y="151" /> +<sizeparam width="162" height="198" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="230" minY="0" maxY="151" /> +<infoparam name="Block0" value="Port0In" /> +<TGConnectingPoint num="0" id="89" /> +<TGConnectingPoint num="1" id="90" /> +<TGConnectingPoint num="2" id="91" /> +<TGConnectingPoint num="3" id="92" /> +<TGConnectingPoint num="4" id="93" /> +<TGConnectingPoint num="5" id="94" /> +<TGConnectingPoint num="6" id="95" /> +<TGConnectingPoint num="7" id="96" /> +<TGConnectingPoint num="8" id="97" /> +<TGConnectingPoint num="9" id="98" /> +<TGConnectingPoint num="10" id="99" /> +<TGConnectingPoint num="11" id="100" /> +<TGConnectingPoint num="12" id="101" /> +<TGConnectingPoint num="13" id="102" /> +<TGConnectingPoint num="14" id="103" /> +<TGConnectingPoint num="15" id="104" /> +<TGConnectingPoint num="16" id="105" /> +<TGConnectingPoint num="17" id="106" /> +<TGConnectingPoint num="18" id="107" /> +<TGConnectingPoint num="19" id="108" /> +<TGConnectingPoint num="20" id="109" /> +<TGConnectingPoint num="21" id="110" /> +<TGConnectingPoint num="22" id="111" /> +<TGConnectingPoint num="23" id="112" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="d" value="5" type="8" typeOther="" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARBlockDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Server" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="153" > +<cdparam x="429" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="148" /> +<TGConnectingPoint num="1" id="149" /> +<TGConnectingPoint num="2" id="150" /> +<TGConnectingPoint num="3" id="151" /> +<TGConnectingPoint num="4" id="152" /> +<P1 x="407" y="365" id="176" /> +<P2 x="370" y="120" id="194" /> +<Point x="407" y="385" /> +<Point x="299" y="385" /> +<Point x="299" y="100" /> +<Point x="370" y="100" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="139" > +<father id="153" num="0" /> +<cdparam x="407" y="385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="140" > +<father id="153" num="1" /> +<cdparam x="299" y="385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="141" > +<father id="153" num="2" /> +<cdparam x="299" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="142" > +<father id="153" num="3" /> +<cdparam x="370" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="147" > +<father id="153" num="4" /> +<cdparam x="429" y="405" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="143" /> +<TGConnectingPoint num="1" id="144" /> +<TGConnectingPoint num="2" id="145" /> +<TGConnectingPoint num="3" id="146" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="160" > +<cdparam x="429" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="159" /> +<P1 x="407" y="263" id="228" /> +<P2 x="407" y="335" id="175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="158" > +<father id="160" num="0" /> +<cdparam x="435" y="302" /> +<sizeparam width="145" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="154" /> +<TGConnectingPoint num="1" id="155" /> +<TGConnectingPoint num="2" id="156" /> +<TGConnectingPoint num="3" id="157" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotPDUFromClient(pdu.x)" /> +<actions value="pdu.x = pdu.x + 5" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="167" > +<cdparam x="424" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="166" /> +<P1 x="407" y="170" id="192" /> +<P2 x="407" y="233" id="227" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="165" > +<father id="167" num="0" /> +<cdparam x="424" y="249" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="161" /> +<TGConnectingPoint num="1" id="162" /> +<TGConnectingPoint num="2" id="163" /> +<TGConnectingPoint num="3" id="164" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="174" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="173" /> +<P1 x="407" y="70" id="238" /> +<P2 x="407" y="120" id="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="172" > +<father id="174" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="168" /> +<TGConnectingPoint num="1" id="169" /> +<TGConnectingPoint num="2" id="170" /> +<TGConnectingPoint num="3" id="171" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="185" > +<cdparam x="356" y="340" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="socket_out(pdu)" /> +<TGConnectingPoint num="0" id="175" /> +<TGConnectingPoint num="1" id="176" /> +<TGConnectingPoint num="2" id="177" /> +<TGConnectingPoint num="3" id="178" /> +<TGConnectingPoint num="4" id="179" /> +<TGConnectingPoint num="5" id="180" /> +<TGConnectingPoint num="6" id="181" /> +<TGConnectingPoint num="7" id="182" /> +<TGConnectingPoint num="8" id="183" /> +<TGConnectingPoint num="9" id="184" /> +</COMPONENT> + +<COMPONENT type="5106" id="226" > +<cdparam x="334" y="120" /> +<sizeparam width="146" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Wait4ClientPacket" /> +<TGConnectingPoint num="0" id="186" /> +<TGConnectingPoint num="1" id="187" /> +<TGConnectingPoint num="2" id="188" /> +<TGConnectingPoint num="3" id="189" /> +<TGConnectingPoint num="4" id="190" /> +<TGConnectingPoint num="5" id="191" /> +<TGConnectingPoint num="6" id="192" /> +<TGConnectingPoint num="7" id="193" /> +<TGConnectingPoint num="8" id="194" /> +<TGConnectingPoint num="9" id="195" /> +<TGConnectingPoint num="10" id="196" /> +<TGConnectingPoint num="11" id="197" /> +<TGConnectingPoint num="12" id="198" /> +<TGConnectingPoint num="13" id="199" /> +<TGConnectingPoint num="14" id="200" /> +<TGConnectingPoint num="15" id="201" /> +<TGConnectingPoint num="16" id="202" /> +<TGConnectingPoint num="17" id="203" /> +<TGConnectingPoint num="18" id="204" /> +<TGConnectingPoint num="19" id="205" /> +<TGConnectingPoint num="20" id="206" /> +<TGConnectingPoint num="21" id="207" /> +<TGConnectingPoint num="22" id="208" /> +<TGConnectingPoint num="23" id="209" /> +<TGConnectingPoint num="24" id="210" /> +<TGConnectingPoint num="25" id="211" /> +<TGConnectingPoint num="26" id="212" /> +<TGConnectingPoint num="27" id="213" /> +<TGConnectingPoint num="28" id="214" /> +<TGConnectingPoint num="29" id="215" /> +<TGConnectingPoint num="30" id="216" /> +<TGConnectingPoint num="31" id="217" /> +<TGConnectingPoint num="32" id="218" /> +<TGConnectingPoint num="33" id="219" /> +<TGConnectingPoint num="34" id="220" /> +<TGConnectingPoint num="35" id="221" /> +<TGConnectingPoint num="36" id="222" /> +<TGConnectingPoint num="37" id="223" /> +<TGConnectingPoint num="38" id="224" /> +<TGConnectingPoint num="39" id="225" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="237" > +<cdparam x="356" y="238" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="socket_in(pdu)" /> +<TGConnectingPoint num="0" id="227" /> +<TGConnectingPoint num="1" id="228" /> +<TGConnectingPoint num="2" id="229" /> +<TGConnectingPoint num="3" id="230" /> +<TGConnectingPoint num="4" id="231" /> +<TGConnectingPoint num="5" id="232" /> +<TGConnectingPoint num="6" id="233" /> +<TGConnectingPoint num="7" id="234" /> +<TGConnectingPoint num="8" id="235" /> +<TGConnectingPoint num="9" id="236" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="5100" id="239" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="238" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Client" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="700" > +<cdparam x="763" y="504" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="701" /> +<P1 x="735" y="468" id="691" /> +<P2 x="735" y="530" id="289" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="702" > +<father id="700" num="0" /> +<cdparam x="756" y="501" /> +<sizeparam width="60" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="703" /> +<TGConnectingPoint num="1" id="704" /> +<TGConnectingPoint num="2" id="705" /> +<TGConnectingPoint num="3" id="706" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="switchOff()" /> +<filesToIncludeLine value="" /> +<codeToIncludeLine value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5111" id="689" > +<cdparam x="688" y="443" /> +<sizeparam width="95" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reset timer" value="expire(timer)" /> +<TGConnectingPoint num="0" id="690" /> +<TGConnectingPoint num="1" id="691" /> +<TGConnectingPoint num="2" id="692" /> +<TGConnectingPoint num="3" id="693" /> +<TGConnectingPoint num="4" id="694" /> +<TGConnectingPoint num="5" id="695" /> +<TGConnectingPoint num="6" id="696" /> +<TGConnectingPoint num="7" id="697" /> +<TGConnectingPoint num="8" id="698" /> +<TGConnectingPoint num="9" id="699" /> +</COMPONENT> + +<CONNECTOR type="5102" id="682" > +<cdparam x="468" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="683" /> +<P1 x="423" y="159" id="663" /> +<P2 x="430" y="194" id="411" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="684" > +<father id="682" num="0" /> +<cdparam x="468" y="203" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="685" /> +<TGConnectingPoint num="1" id="686" /> +<TGConnectingPoint num="2" id="687" /> +<TGConnectingPoint num="3" id="688" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5108" id="679" > +<cdparam x="324" y="84" /> +<sizeparam width="199" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="null" /> +<TGConnectingPoint num="0" id="680" /> +<TGConnectingPoint num="1" id="681" /> +<extraparam> +<Data variable="timerValue" minValue="10" maxValue="20" functionId="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5109" id="661" > +<cdparam x="341" y="134" /> +<sizeparam width="165" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Set timer" value="setTimer(timer,timerValue)" /> +<TGConnectingPoint num="0" id="662" /> +<TGConnectingPoint num="1" id="663" /> +<TGConnectingPoint num="2" id="664" /> +<TGConnectingPoint num="3" id="665" /> +<TGConnectingPoint num="4" id="666" /> +<TGConnectingPoint num="5" id="667" /> +<TGConnectingPoint num="6" id="668" /> +<TGConnectingPoint num="7" id="669" /> +<TGConnectingPoint num="8" id="670" /> +<TGConnectingPoint num="9" id="671" /> +</COMPONENT> + +<CONNECTOR type="5102" id="246" > +<cdparam x="414" y="476" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="245" /> +<P1 x="413" y="504" id="400" /> +<P2 x="430" y="545" id="294" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="244" > +<father id="246" num="0" /> +<cdparam x="414" y="516" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="240" /> +<TGConnectingPoint num="1" id="241" /> +<TGConnectingPoint num="2" id="242" /> +<TGConnectingPoint num="3" id="243" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="253" > +<cdparam x="410" y="433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="252" /> +<P1 x="400" y="426" id="335" /> +<P2 x="413" y="474" id="399" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="251" > +<father id="253" num="0" /> +<cdparam x="415" y="446" /> +<sizeparam width="76" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="247" /> +<TGConnectingPoint num="1" id="248" /> +<TGConnectingPoint num="2" id="249" /> +<TGConnectingPoint num="3" id="250" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotData(pdu)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="260" > +<cdparam x="388" y="369" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="259" /> +<P1 x="381" y="368" id="364" /> +<P2 x="400" y="396" id="334" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="258" > +<father id="260" num="0" /> +<cdparam x="388" y="409" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="254" /> +<TGConnectingPoint num="1" id="255" /> +<TGConnectingPoint num="2" id="256" /> +<TGConnectingPoint num="3" id="257" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="267" > +<cdparam x="360" y="253" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Send signal" value="null" /> +<TGConnectingPoint num="0" id="266" /> +<P1 x="343" y="244" id="345" /> +<P2 x="360" y="266" id="347" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="265" > +<father id="267" num="0" /> +<cdparam x="360" y="293" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="261" /> +<TGConnectingPoint num="1" id="262" /> +<TGConnectingPoint num="2" id="263" /> +<TGConnectingPoint num="3" id="264" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="274" > +<cdparam x="586" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to stop state" value="null" /> +<TGConnectingPoint num="0" id="273" /> +<P1 x="622" y="407" id="414" /> +<P2 x="735" y="438" id="690" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="272" > +<father id="274" num="0" /> +<cdparam x="675" y="426" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="268" /> +<TGConnectingPoint num="1" id="269" /> +<TGConnectingPoint num="2" id="270" /> +<TGConnectingPoint num="3" id="271" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="281" > +<cdparam x="223" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="280" /> +<P1 x="393" y="34" id="291" /> +<P2 x="423" y="79" id="680" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="279" > +<father id="281" num="0" /> +<cdparam x="427" y="56" /> +<sizeparam width="33" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="275" /> +<TGConnectingPoint num="1" id="276" /> +<TGConnectingPoint num="2" id="277" /> +<TGConnectingPoint num="3" id="278" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="x = 5" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="288" > +<cdparam x="404" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="287" /> +<P1 x="360" y="296" id="348" /> +<P2 x="381" y="328" id="359" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="286" > +<father id="288" num="0" /> +<cdparam x="404" y="283" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="282" /> +<TGConnectingPoint num="1" id="283" /> +<TGConnectingPoint num="2" id="284" /> +<TGConnectingPoint num="3" id="285" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5101" id="290" > +<cdparam x="725" y="535" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="289" /> +</COMPONENT> + +<COMPONENT type="5100" id="292" > +<cdparam x="386" y="14" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="291" /> +</COMPONENT> + +<COMPONENT type="5106" id="450" > +<cdparam x="238" y="194" /> +<sizeparam width="384" height="427" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Transmit" /> +<TGConnectingPoint num="0" id="410" /> +<TGConnectingPoint num="1" id="411" /> +<TGConnectingPoint num="2" id="412" /> +<TGConnectingPoint num="3" id="413" /> +<TGConnectingPoint num="4" id="414" /> +<TGConnectingPoint num="5" id="415" /> +<TGConnectingPoint num="6" id="416" /> +<TGConnectingPoint num="7" id="417" /> +<TGConnectingPoint num="8" id="418" /> +<TGConnectingPoint num="9" id="419" /> +<TGConnectingPoint num="10" id="420" /> +<TGConnectingPoint num="11" id="421" /> +<TGConnectingPoint num="12" id="422" /> +<TGConnectingPoint num="13" id="423" /> +<TGConnectingPoint num="14" id="424" /> +<TGConnectingPoint num="15" id="425" /> +<TGConnectingPoint num="16" id="426" /> +<TGConnectingPoint num="17" id="427" /> +<TGConnectingPoint num="18" id="428" /> +<TGConnectingPoint num="19" id="429" /> +<TGConnectingPoint num="20" id="430" /> +<TGConnectingPoint num="21" id="431" /> +<TGConnectingPoint num="22" id="432" /> +<TGConnectingPoint num="23" id="433" /> +<TGConnectingPoint num="24" id="434" /> +<TGConnectingPoint num="25" id="435" /> +<TGConnectingPoint num="26" id="436" /> +<TGConnectingPoint num="27" id="437" /> +<TGConnectingPoint num="28" id="438" /> +<TGConnectingPoint num="29" id="439" /> +<TGConnectingPoint num="30" id="440" /> +<TGConnectingPoint num="31" id="441" /> +<TGConnectingPoint num="32" id="442" /> +<TGConnectingPoint num="33" id="443" /> +<TGConnectingPoint num="34" id="444" /> +<TGConnectingPoint num="35" id="445" /> +<TGConnectingPoint num="36" id="446" /> +<TGConnectingPoint num="37" id="447" /> +<TGConnectingPoint num="38" id="448" /> +<TGConnectingPoint num="39" id="449" /> +<accessibility /> +<extraparam> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5106" id="333" > +<father id="450" num="0" /> +<cdparam x="356" y="545" /> +<sizeparam width="149" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="235" minY="0" maxY="387" /> +<infoparam name="state0" value="WaitForServer" /> +<TGConnectingPoint num="0" id="293" /> +<TGConnectingPoint num="1" id="294" /> +<TGConnectingPoint num="2" id="295" /> +<TGConnectingPoint num="3" id="296" /> +<TGConnectingPoint num="4" id="297" /> +<TGConnectingPoint num="5" id="298" /> +<TGConnectingPoint num="6" id="299" /> +<TGConnectingPoint num="7" id="300" /> +<TGConnectingPoint num="8" id="301" /> +<TGConnectingPoint num="9" id="302" /> +<TGConnectingPoint num="10" id="303" /> +<TGConnectingPoint num="11" id="304" /> +<TGConnectingPoint num="12" id="305" /> +<TGConnectingPoint num="13" id="306" /> +<TGConnectingPoint num="14" id="307" /> +<TGConnectingPoint num="15" id="308" /> +<TGConnectingPoint num="16" id="309" /> +<TGConnectingPoint num="17" id="310" /> +<TGConnectingPoint num="18" id="311" /> +<TGConnectingPoint num="19" id="312" /> +<TGConnectingPoint num="20" id="313" /> +<TGConnectingPoint num="21" id="314" /> +<TGConnectingPoint num="22" id="315" /> +<TGConnectingPoint num="23" id="316" /> +<TGConnectingPoint num="24" id="317" /> +<TGConnectingPoint num="25" id="318" /> +<TGConnectingPoint num="26" id="319" /> +<TGConnectingPoint num="27" id="320" /> +<TGConnectingPoint num="28" id="321" /> +<TGConnectingPoint num="29" id="322" /> +<TGConnectingPoint num="30" id="323" /> +<TGConnectingPoint num="31" id="324" /> +<TGConnectingPoint num="32" id="325" /> +<TGConnectingPoint num="33" id="326" /> +<TGConnectingPoint num="34" id="327" /> +<TGConnectingPoint num="35" id="328" /> +<TGConnectingPoint num="36" id="329" /> +<TGConnectingPoint num="37" id="330" /> +<TGConnectingPoint num="38" id="331" /> +<TGConnectingPoint num="39" id="332" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5104" id="344" > +<father id="450" num="1" /> +<cdparam x="349" y="401" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="301" minY="0" maxY="407" /> +<infoparam name="Send signal" value="socket_in(pdu)" /> +<TGConnectingPoint num="0" id="334" /> +<TGConnectingPoint num="1" id="335" /> +<TGConnectingPoint num="2" id="336" /> +<TGConnectingPoint num="3" id="337" /> +<TGConnectingPoint num="4" id="338" /> +<TGConnectingPoint num="5" id="339" /> +<TGConnectingPoint num="6" id="340" /> +<TGConnectingPoint num="7" id="341" /> +<TGConnectingPoint num="8" id="342" /> +<TGConnectingPoint num="9" id="343" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5100" id="346" > +<father id="450" num="2" /> +<cdparam x="336" y="224" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="369" minY="0" maxY="412" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="345" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5103" id="357" > +<father id="450" num="3" /> +<cdparam x="309" y="271" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="301" minY="0" maxY="407" /> +<infoparam name="Send signal" value="socket_out(pdu)" /> +<TGConnectingPoint num="0" id="347" /> +<TGConnectingPoint num="1" id="348" /> +<TGConnectingPoint num="2" id="349" /> +<TGConnectingPoint num="3" id="350" /> +<TGConnectingPoint num="4" id="351" /> +<TGConnectingPoint num="5" id="352" /> +<TGConnectingPoint num="6" id="353" /> +<TGConnectingPoint num="7" id="354" /> +<TGConnectingPoint num="8" id="355" /> +<TGConnectingPoint num="9" id="356" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5106" id="398" > +<father id="450" num="4" /> +<cdparam x="305" y="328" /> +<sizeparam width="153" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="231" minY="0" maxY="387" /> +<infoparam name="state0" value="WaitForServer" /> +<TGConnectingPoint num="0" id="358" /> +<TGConnectingPoint num="1" id="359" /> +<TGConnectingPoint num="2" id="360" /> +<TGConnectingPoint num="3" id="361" /> +<TGConnectingPoint num="4" id="362" /> +<TGConnectingPoint num="5" id="363" /> +<TGConnectingPoint num="6" id="364" /> +<TGConnectingPoint num="7" id="365" /> +<TGConnectingPoint num="8" id="366" /> +<TGConnectingPoint num="9" id="367" /> +<TGConnectingPoint num="10" id="368" /> +<TGConnectingPoint num="11" id="369" /> +<TGConnectingPoint num="12" id="370" /> +<TGConnectingPoint num="13" id="371" /> +<TGConnectingPoint num="14" id="372" /> +<TGConnectingPoint num="15" id="373" /> +<TGConnectingPoint num="16" id="374" /> +<TGConnectingPoint num="17" id="375" /> +<TGConnectingPoint num="18" id="376" /> +<TGConnectingPoint num="19" id="377" /> +<TGConnectingPoint num="20" id="378" /> +<TGConnectingPoint num="21" id="379" /> +<TGConnectingPoint num="22" id="380" /> +<TGConnectingPoint num="23" id="381" /> +<TGConnectingPoint num="24" id="382" /> +<TGConnectingPoint num="25" id="383" /> +<TGConnectingPoint num="26" id="384" /> +<TGConnectingPoint num="27" id="385" /> +<TGConnectingPoint num="28" id="386" /> +<TGConnectingPoint num="29" id="387" /> +<TGConnectingPoint num="30" id="388" /> +<TGConnectingPoint num="31" id="389" /> +<TGConnectingPoint num="32" id="390" /> +<TGConnectingPoint num="33" id="391" /> +<TGConnectingPoint num="34" id="392" /> +<TGConnectingPoint num="35" id="393" /> +<TGConnectingPoint num="36" id="394" /> +<TGConnectingPoint num="37" id="395" /> +<TGConnectingPoint num="38" id="396" /> +<TGConnectingPoint num="39" id="397" /> +<accessibility /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5103" id="409" > +<father id="450" num="5" /> +<cdparam x="362" y="479" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="301" minY="0" maxY="407" /> +<infoparam name="Send signal" value="socket_out(pdu)" /> +<TGConnectingPoint num="0" id="399" /> +<TGConnectingPoint num="1" id="400" /> +<TGConnectingPoint num="2" id="401" /> +<TGConnectingPoint num="3" id="402" /> +<TGConnectingPoint num="4" id="403" /> +<TGConnectingPoint num="5" id="404" /> +<TGConnectingPoint num="6" id="405" /> +<TGConnectingPoint num="7" id="406" /> +<TGConnectingPoint num="8" id="407" /> +<TGConnectingPoint num="9" id="408" /> +<accessibility /> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="672" > +<cdparam x="494" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="673" /> +<P1 x="423" y="109" id="681" /> +<P2 x="423" y="129" id="662" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="674" > +<father id="672" num="0" /> +<cdparam x="494" y="185" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="675" /> +<TGConnectingPoint num="1" id="676" /> +<TGConnectingPoint num="2" id="677" /> +<TGConnectingPoint num="3" id="678" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Network" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="457" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to stop state" value="null" /> +<TGConnectingPoint num="0" id="456" /> +<P1 x="407" y="70" id="460" /> +<P2 x="412" y="88" id="458" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="455" > +<father id="457" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="451" /> +<TGConnectingPoint num="1" id="452" /> +<TGConnectingPoint num="2" id="453" /> +<TGConnectingPoint num="3" id="454" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5101" id="459" > +<cdparam x="402" y="93" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="458" /> +</COMPONENT> + +<COMPONENT type="5100" id="461" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="460" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Port0In" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="468" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="467" /> +<P1 x="407" y="70" id="559" /> +<P2 x="441" y="127" id="519" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="466" > +<father id="468" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="462" /> +<TGConnectingPoint num="1" id="463" /> +<TGConnectingPoint num="2" id="464" /> +<TGConnectingPoint num="3" id="465" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="481" > +<cdparam x="440" y="325" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="477" /> +<TGConnectingPoint num="1" id="478" /> +<TGConnectingPoint num="2" id="479" /> +<TGConnectingPoint num="3" id="480" /> +<P1 x="440" y="336" id="497" /> +<P2 x="387" y="163" id="521" /> +<Point x="435" y="372" /> +<Point x="315" y="368" /> +<Point x="309" y="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="469" > +<father id="481" num="0" /> +<cdparam x="435" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="470" > +<father id="481" num="1" /> +<cdparam x="315" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="471" > +<father id="481" num="2" /> +<cdparam x="309" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="476" > +<father id="481" num="3" /> +<cdparam x="440" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="472" /> +<TGConnectingPoint num="1" id="473" /> +<TGConnectingPoint num="2" id="474" /> +<TGConnectingPoint num="3" id="475" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="488" > +<cdparam x="441" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="487" /> +<P1 x="440" y="265" id="508" /> +<P2 x="440" y="306" id="496" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="486" > +<father id="488" num="0" /> +<cdparam x="472" y="280" /> +<sizeparam width="91" height="32" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="482" /> +<TGConnectingPoint num="1" id="483" /> +<TGConnectingPoint num="2" id="484" /> +<TGConnectingPoint num="3" id="485" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="d" /> +<afterMax value="d" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotPacket(pdu.x)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="495" > +<cdparam x="414" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="494" /> +<P1 x="441" y="200" id="524" /> +<P2 x="440" y="235" id="507" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="493" > +<father id="495" num="0" /> +<cdparam x="414" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="489" /> +<TGConnectingPoint num="1" id="490" /> +<TGConnectingPoint num="2" id="491" /> +<TGConnectingPoint num="3" id="492" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="506" > +<cdparam x="395" y="311" /> +<sizeparam width="91" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port1_out(pdu)" /> +<TGConnectingPoint num="0" id="496" /> +<TGConnectingPoint num="1" id="497" /> +<TGConnectingPoint num="2" id="498" /> +<TGConnectingPoint num="3" id="499" /> +<TGConnectingPoint num="4" id="500" /> +<TGConnectingPoint num="5" id="501" /> +<TGConnectingPoint num="6" id="502" /> +<TGConnectingPoint num="7" id="503" /> +<TGConnectingPoint num="8" id="504" /> +<TGConnectingPoint num="9" id="505" /> +</COMPONENT> + +<COMPONENT type="5104" id="517" > +<cdparam x="395" y="240" /> +<sizeparam width="91" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port0_in(pdu)" /> +<TGConnectingPoint num="0" id="507" /> +<TGConnectingPoint num="1" id="508" /> +<TGConnectingPoint num="2" id="509" /> +<TGConnectingPoint num="3" id="510" /> +<TGConnectingPoint num="4" id="511" /> +<TGConnectingPoint num="5" id="512" /> +<TGConnectingPoint num="6" id="513" /> +<TGConnectingPoint num="7" id="514" /> +<TGConnectingPoint num="8" id="515" /> +<TGConnectingPoint num="9" id="516" /> +</COMPONENT> + +<COMPONENT type="5106" id="558" > +<cdparam x="387" y="127" /> +<sizeparam width="109" height="73" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitForPacket" /> +<TGConnectingPoint num="0" id="518" /> +<TGConnectingPoint num="1" id="519" /> +<TGConnectingPoint num="2" id="520" /> +<TGConnectingPoint num="3" id="521" /> +<TGConnectingPoint num="4" id="522" /> +<TGConnectingPoint num="5" id="523" /> +<TGConnectingPoint num="6" id="524" /> +<TGConnectingPoint num="7" id="525" /> +<TGConnectingPoint num="8" id="526" /> +<TGConnectingPoint num="9" id="527" /> +<TGConnectingPoint num="10" id="528" /> +<TGConnectingPoint num="11" id="529" /> +<TGConnectingPoint num="12" id="530" /> +<TGConnectingPoint num="13" id="531" /> +<TGConnectingPoint num="14" id="532" /> +<TGConnectingPoint num="15" id="533" /> +<TGConnectingPoint num="16" id="534" /> +<TGConnectingPoint num="17" id="535" /> +<TGConnectingPoint num="18" id="536" /> +<TGConnectingPoint num="19" id="537" /> +<TGConnectingPoint num="20" id="538" /> +<TGConnectingPoint num="21" id="539" /> +<TGConnectingPoint num="22" id="540" /> +<TGConnectingPoint num="23" id="541" /> +<TGConnectingPoint num="24" id="542" /> +<TGConnectingPoint num="25" id="543" /> +<TGConnectingPoint num="26" id="544" /> +<TGConnectingPoint num="27" id="545" /> +<TGConnectingPoint num="28" id="546" /> +<TGConnectingPoint num="29" id="547" /> +<TGConnectingPoint num="30" id="548" /> +<TGConnectingPoint num="31" id="549" /> +<TGConnectingPoint num="32" id="550" /> +<TGConnectingPoint num="33" id="551" /> +<TGConnectingPoint num="34" id="552" /> +<TGConnectingPoint num="35" id="553" /> +<TGConnectingPoint num="36" id="554" /> +<TGConnectingPoint num="37" id="555" /> +<TGConnectingPoint num="38" id="556" /> +<TGConnectingPoint num="39" id="557" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="560" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="559" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Port1In" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="567" > +<cdparam x="478" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="566" /> +<P1 x="505" y="234" id="623" /> +<P2 x="505" y="275" id="606" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="565" > +<father id="567" num="0" /> +<cdparam x="478" y="274" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="561" /> +<TGConnectingPoint num="1" id="562" /> +<TGConnectingPoint num="2" id="563" /> +<TGConnectingPoint num="3" id="564" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="574" > +<cdparam x="505" y="305" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="573" /> +<P1 x="505" y="305" id="607" /> +<P2 x="505" y="351" id="595" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="572" > +<father id="574" num="0" /> +<cdparam x="515" y="330" /> +<sizeparam width="111" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="568" /> +<TGConnectingPoint num="1" id="569" /> +<TGConnectingPoint num="2" id="570" /> +<TGConnectingPoint num="3" id="571" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="d" /> +<afterMax value="d" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotPacket(pdu.x)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="587" > +<cdparam x="504" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="583" /> +<TGConnectingPoint num="1" id="584" /> +<TGConnectingPoint num="2" id="585" /> +<TGConnectingPoint num="3" id="586" /> +<P1 x="505" y="381" id="596" /> +<P2 x="451" y="197" id="620" /> +<Point x="356" y="397" /> +<Point x="356" y="163" /> +<Point x="434" y="163" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="575" > +<father id="587" num="0" /> +<cdparam x="356" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="576" > +<father id="587" num="1" /> +<cdparam x="356" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="577" > +<father id="587" num="2" /> +<cdparam x="434" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="582" > +<father id="587" num="3" /> +<cdparam x="504" y="399" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="578" /> +<TGConnectingPoint num="1" id="579" /> +<TGConnectingPoint num="2" id="580" /> +<TGConnectingPoint num="3" id="581" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="594" > +<cdparam x="471" y="104" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="593" /> +<P1 x="471" y="104" id="658" /> +<P2 x="505" y="161" id="618" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="592" > +<father id="594" num="0" /> +<cdparam x="471" y="144" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="588" /> +<TGConnectingPoint num="1" id="589" /> +<TGConnectingPoint num="2" id="590" /> +<TGConnectingPoint num="3" id="591" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="605" > +<cdparam x="457" y="356" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port0_out(pdu)" /> +<TGConnectingPoint num="0" id="595" /> +<TGConnectingPoint num="1" id="596" /> +<TGConnectingPoint num="2" id="597" /> +<TGConnectingPoint num="3" id="598" /> +<TGConnectingPoint num="4" id="599" /> +<TGConnectingPoint num="5" id="600" /> +<TGConnectingPoint num="6" id="601" /> +<TGConnectingPoint num="7" id="602" /> +<TGConnectingPoint num="8" id="603" /> +<TGConnectingPoint num="9" id="604" /> +</COMPONENT> + +<COMPONENT type="5104" id="616" > +<cdparam x="457" y="280" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port1_in(pdu)" /> +<TGConnectingPoint num="0" id="606" /> +<TGConnectingPoint num="1" id="607" /> +<TGConnectingPoint num="2" id="608" /> +<TGConnectingPoint num="3" id="609" /> +<TGConnectingPoint num="4" id="610" /> +<TGConnectingPoint num="5" id="611" /> +<TGConnectingPoint num="6" id="612" /> +<TGConnectingPoint num="7" id="613" /> +<TGConnectingPoint num="8" id="614" /> +<TGConnectingPoint num="9" id="615" /> +</COMPONENT> + +<COMPONENT type="5106" id="657" > +<cdparam x="451" y="161" /> +<sizeparam width="109" height="73" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitForPacket" /> +<TGConnectingPoint num="0" id="617" /> +<TGConnectingPoint num="1" id="618" /> +<TGConnectingPoint num="2" id="619" /> +<TGConnectingPoint num="3" id="620" /> +<TGConnectingPoint num="4" id="621" /> +<TGConnectingPoint num="5" id="622" /> +<TGConnectingPoint num="6" id="623" /> +<TGConnectingPoint num="7" id="624" /> +<TGConnectingPoint num="8" id="625" /> +<TGConnectingPoint num="9" id="626" /> +<TGConnectingPoint num="10" id="627" /> +<TGConnectingPoint num="11" id="628" /> +<TGConnectingPoint num="12" id="629" /> +<TGConnectingPoint num="13" id="630" /> +<TGConnectingPoint num="14" id="631" /> +<TGConnectingPoint num="15" id="632" /> +<TGConnectingPoint num="16" id="633" /> +<TGConnectingPoint num="17" id="634" /> +<TGConnectingPoint num="18" id="635" /> +<TGConnectingPoint num="19" id="636" /> +<TGConnectingPoint num="20" id="637" /> +<TGConnectingPoint num="21" id="638" /> +<TGConnectingPoint num="22" id="639" /> +<TGConnectingPoint num="23" id="640" /> +<TGConnectingPoint num="24" id="641" /> +<TGConnectingPoint num="25" id="642" /> +<TGConnectingPoint num="26" id="643" /> +<TGConnectingPoint num="27" id="644" /> +<TGConnectingPoint num="28" id="645" /> +<TGConnectingPoint num="29" id="646" /> +<TGConnectingPoint num="30" id="647" /> +<TGConnectingPoint num="31" id="648" /> +<TGConnectingPoint num="32" id="649" /> +<TGConnectingPoint num="33" id="650" /> +<TGConnectingPoint num="34" id="651" /> +<TGConnectingPoint num="35" id="652" /> +<TGConnectingPoint num="36" id="653" /> +<TGConnectingPoint num="37" id="654" /> +<TGConnectingPoint num="38" id="655" /> +<TGConnectingPoint num="39" id="656" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="659" > +<cdparam x="464" y="84" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="658" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/ProtocolPatterns.xml b/preinstallTTool/linux/TTool/modeling/ProtocolPatterns.xml new file mode 100755 index 0000000000000000000000000000000000000000..8300c26a88303be50f4fad46ae9a967019f250ca --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/ProtocolPatterns.xml @@ -0,0 +1,3251 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.85beta9r20"> + +<Modeling type="Analysis" nameTab="Non connected protocol" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="502" id="2" > +<cdparam x="315" y="51" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1" /> +</COMPONENT> + +<COMPONENT type="508" id="13" > +<cdparam x="118" y="202" /> +<sizeparam width="93" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="Data Exchange" /> +<TGConnectingPoint num="0" id="3" /> +<TGConnectingPoint num="1" id="4" /> +<TGConnectingPoint num="2" id="5" /> +<TGConnectingPoint num="3" id="6" /> +<TGConnectingPoint num="4" id="7" /> +<TGConnectingPoint num="5" id="8" /> +<TGConnectingPoint num="6" id="9" /> +<TGConnectingPoint num="7" id="10" /> +<TGConnectingPoint num="8" id="11" /> +<TGConnectingPoint num="9" id="12" /> +</COMPONENT> + +<COMPONENT type="508" id="24" > +<cdparam x="223" y="202" /> +<sizeparam width="199" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="Data exchange with desequencing" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<TGConnectingPoint num="4" id="18" /> +<TGConnectingPoint num="5" id="19" /> +<TGConnectingPoint num="6" id="20" /> +<TGConnectingPoint num="7" id="21" /> +<TGConnectingPoint num="8" id="22" /> +<TGConnectingPoint num="9" id="23" /> +</COMPONENT> + +<COMPONENT type="508" id="35" > +<cdparam x="430" y="202" /> +<sizeparam width="144" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="Data exchange with loss" /> +<TGConnectingPoint num="0" id="25" /> +<TGConnectingPoint num="1" id="26" /> +<TGConnectingPoint num="2" id="27" /> +<TGConnectingPoint num="3" id="28" /> +<TGConnectingPoint num="4" id="29" /> +<TGConnectingPoint num="5" id="30" /> +<TGConnectingPoint num="6" id="31" /> +<TGConnectingPoint num="7" id="32" /> +<TGConnectingPoint num="8" id="33" /> +<TGConnectingPoint num="9" id="34" /> +</COMPONENT> + +<COMPONENT type="504" id="40" > +<cdparam x="307" y="82" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> + +<COMPONENT type="501" id="56" > +<cdparam x="307" y="132" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="44" /> +<TGConnectingPoint num="1" id="45" /> +<TGConnectingPoint num="2" id="46" /> +<TGConnectingPoint num="3" id="47" /> +<TGConnectingPoint num="4" id="48" /> +<TGConnectingPoint num="5" id="49" /> +<TGConnectingPoint num="6" id="50" /> +<TGConnectingPoint num="7" id="51" /> +<TGConnectingPoint num="8" id="52" /> +<TGConnectingPoint num="9" id="53" /> +<TGConnectingPoint num="10" id="54" /> +<TGConnectingPoint num="11" id="55" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="41" > +<father id="56" num="0" /> +<cdparam x="282" y="142" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="42" > +<father id="56" num="1" /> +<cdparam x="353" y="142" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="43" > +<father id="56" num="2" /> +<cdparam x="327" y="177" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="504" id="61" > +<cdparam x="307" y="253" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="57" /> +<TGConnectingPoint num="1" id="58" /> +<TGConnectingPoint num="2" id="59" /> +<TGConnectingPoint num="3" id="60" /> +</COMPONENT> + +<CONNECTOR type="105" id="62" > +<cdparam x="322" y="71" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="322" y="71" id="1" /> +<P2 x="322" y="82" id="36" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="64" > +<cdparam x="322" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="322" y="112" id="39" /> +<P2 x="322" y="122" id="44" /> +<Point x="322" y="118" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="63" > +<father id="64" num="0" /> +<cdparam x="322" y="118" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="65" > +<cdparam x="282" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="282" y="147" id="45" /> +<P2 x="164" y="197" id="3" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="66" > +<cdparam x="322" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="322" y="187" id="47" /> +<P2 x="322" y="197" id="14" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="67" > +<cdparam x="362" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="362" y="147" id="46" /> +<P2 x="502" y="197" id="25" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="68" > +<cdparam x="322" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="322" y="242" id="15" /> +<P2 x="322" y="253" id="57" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="69" > +<cdparam x="158" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="164" y="242" id="4" /> +<P2 x="307" y="268" id="58" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="70" > +<cdparam x="508" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="502" y="242" id="26" /> +<P2 x="337" y="268" id="59" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="75" > +<cdparam x="322" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="322" y="283" id="60" /> +<P2 x="337" y="97" id="38" /> +<Point x="322" y="303" /> +<Point x="589" y="303" /> +<Point x="589" y="77" /> +<Point x="337" y="77" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="71" > +<father id="75" num="0" /> +<cdparam x="322" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="72" > +<father id="75" num="1" /> +<cdparam x="589" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="73" > +<father id="75" num="2" /> +<cdparam x="589" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="74" > +<father id="75" num="3" /> +<cdparam x="337" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="108" > +<cdparam x="134" y="162" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Sending application" /> +<TGConnectingPoint num="0" id="76" /> +<TGConnectingPoint num="1" id="77" /> +<TGConnectingPoint num="2" id="78" /> +<TGConnectingPoint num="3" id="79" /> +<TGConnectingPoint num="4" id="80" /> +<TGConnectingPoint num="5" id="81" /> +<TGConnectingPoint num="6" id="82" /> +<TGConnectingPoint num="7" id="83" /> +<TGConnectingPoint num="8" id="84" /> +<TGConnectingPoint num="9" id="85" /> +<TGConnectingPoint num="10" id="86" /> +<TGConnectingPoint num="11" id="87" /> +<TGConnectingPoint num="12" id="88" /> +<TGConnectingPoint num="13" id="89" /> +<TGConnectingPoint num="14" id="90" /> +<TGConnectingPoint num="15" id="91" /> +<TGConnectingPoint num="16" id="92" /> +<TGConnectingPoint num="17" id="93" /> +<TGConnectingPoint num="18" id="94" /> +<TGConnectingPoint num="19" id="95" /> +<TGConnectingPoint num="20" id="96" /> +<TGConnectingPoint num="21" id="97" /> +<TGConnectingPoint num="22" id="98" /> +<TGConnectingPoint num="23" id="99" /> +<TGConnectingPoint num="24" id="100" /> +<TGConnectingPoint num="25" id="101" /> +<TGConnectingPoint num="26" id="102" /> +<TGConnectingPoint num="27" id="103" /> +<TGConnectingPoint num="28" id="104" /> +<TGConnectingPoint num="29" id="105" /> +<TGConnectingPoint num="30" id="106" /> +<TGConnectingPoint num="31" id="107" /> +</COMPONENT> + +<COMPONENT type="700" id="141" > +<cdparam x="647" y="184" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Receiving application" /> +<TGConnectingPoint num="0" id="109" /> +<TGConnectingPoint num="1" id="110" /> +<TGConnectingPoint num="2" id="111" /> +<TGConnectingPoint num="3" id="112" /> +<TGConnectingPoint num="4" id="113" /> +<TGConnectingPoint num="5" id="114" /> +<TGConnectingPoint num="6" id="115" /> +<TGConnectingPoint num="7" id="116" /> +<TGConnectingPoint num="8" id="117" /> +<TGConnectingPoint num="9" id="118" /> +<TGConnectingPoint num="10" id="119" /> +<TGConnectingPoint num="11" id="120" /> +<TGConnectingPoint num="12" id="121" /> +<TGConnectingPoint num="13" id="122" /> +<TGConnectingPoint num="14" id="123" /> +<TGConnectingPoint num="15" id="124" /> +<TGConnectingPoint num="16" id="125" /> +<TGConnectingPoint num="17" id="126" /> +<TGConnectingPoint num="18" id="127" /> +<TGConnectingPoint num="19" id="128" /> +<TGConnectingPoint num="20" id="129" /> +<TGConnectingPoint num="21" id="130" /> +<TGConnectingPoint num="22" id="131" /> +<TGConnectingPoint num="23" id="132" /> +<TGConnectingPoint num="24" id="133" /> +<TGConnectingPoint num="25" id="134" /> +<TGConnectingPoint num="26" id="135" /> +<TGConnectingPoint num="27" id="136" /> +<TGConnectingPoint num="28" id="137" /> +<TGConnectingPoint num="29" id="138" /> +<TGConnectingPoint num="30" id="139" /> +<TGConnectingPoint num="31" id="140" /> +</COMPONENT> + +<COMPONENT type="701" id="166" > +<cdparam x="381" y="159" /> +<sizeparam width="92" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange" /> +<TGConnectingPoint num="0" id="142" /> +<TGConnectingPoint num="1" id="143" /> +<TGConnectingPoint num="2" id="144" /> +<TGConnectingPoint num="3" id="145" /> +<TGConnectingPoint num="4" id="146" /> +<TGConnectingPoint num="5" id="147" /> +<TGConnectingPoint num="6" id="148" /> +<TGConnectingPoint num="7" id="149" /> +<TGConnectingPoint num="8" id="150" /> +<TGConnectingPoint num="9" id="151" /> +<TGConnectingPoint num="10" id="152" /> +<TGConnectingPoint num="11" id="153" /> +<TGConnectingPoint num="12" id="154" /> +<TGConnectingPoint num="13" id="155" /> +<TGConnectingPoint num="14" id="156" /> +<TGConnectingPoint num="15" id="157" /> +<TGConnectingPoint num="16" id="158" /> +<TGConnectingPoint num="17" id="159" /> +<TGConnectingPoint num="18" id="160" /> +<TGConnectingPoint num="19" id="161" /> +<TGConnectingPoint num="20" id="162" /> +<TGConnectingPoint num="21" id="163" /> +<TGConnectingPoint num="22" id="164" /> +<TGConnectingPoint num="23" id="165" /> +<extraparam> +<info extension="Characteristic" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="191" > +<cdparam x="444" y="277" /> +<sizeparam width="144" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange with loss" /> +<TGConnectingPoint num="0" id="167" /> +<TGConnectingPoint num="1" id="168" /> +<TGConnectingPoint num="2" id="169" /> +<TGConnectingPoint num="3" id="170" /> +<TGConnectingPoint num="4" id="171" /> +<TGConnectingPoint num="5" id="172" /> +<TGConnectingPoint num="6" id="173" /> +<TGConnectingPoint num="7" id="174" /> +<TGConnectingPoint num="8" id="175" /> +<TGConnectingPoint num="9" id="176" /> +<TGConnectingPoint num="10" id="177" /> +<TGConnectingPoint num="11" id="178" /> +<TGConnectingPoint num="12" id="179" /> +<TGConnectingPoint num="13" id="180" /> +<TGConnectingPoint num="14" id="181" /> +<TGConnectingPoint num="15" id="182" /> +<TGConnectingPoint num="16" id="183" /> +<TGConnectingPoint num="17" id="184" /> +<TGConnectingPoint num="18" id="185" /> +<TGConnectingPoint num="19" id="186" /> +<TGConnectingPoint num="20" id="187" /> +<TGConnectingPoint num="21" id="188" /> +<TGConnectingPoint num="22" id="189" /> +<TGConnectingPoint num="23" id="190" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="216" > +<cdparam x="223" y="284" /> +<sizeparam width="199" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange with desequencing" /> +<TGConnectingPoint num="0" id="192" /> +<TGConnectingPoint num="1" id="193" /> +<TGConnectingPoint num="2" id="194" /> +<TGConnectingPoint num="3" id="195" /> +<TGConnectingPoint num="4" id="196" /> +<TGConnectingPoint num="5" id="197" /> +<TGConnectingPoint num="6" id="198" /> +<TGConnectingPoint num="7" id="199" /> +<TGConnectingPoint num="8" id="200" /> +<TGConnectingPoint num="9" id="201" /> +<TGConnectingPoint num="10" id="202" /> +<TGConnectingPoint num="11" id="203" /> +<TGConnectingPoint num="12" id="204" /> +<TGConnectingPoint num="13" id="205" /> +<TGConnectingPoint num="14" id="206" /> +<TGConnectingPoint num="15" id="207" /> +<TGConnectingPoint num="16" id="208" /> +<TGConnectingPoint num="17" id="209" /> +<TGConnectingPoint num="18" id="210" /> +<TGConnectingPoint num="19" id="211" /> +<TGConnectingPoint num="20" id="212" /> +<TGConnectingPoint num="21" id="213" /> +<TGConnectingPoint num="22" id="214" /> +<TGConnectingPoint num="23" id="215" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="225" > +<cdparam x="215" y="114" /> +<sizeparam width="379" height="230" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Non-connected" /> +<TGConnectingPoint num="0" id="217" /> +<TGConnectingPoint num="1" id="218" /> +<TGConnectingPoint num="2" id="219" /> +<TGConnectingPoint num="3" id="220" /> +<TGConnectingPoint num="4" id="221" /> +<TGConnectingPoint num="5" id="222" /> +<TGConnectingPoint num="6" id="223" /> +<TGConnectingPoint num="7" id="224" /> +</COMPONENT> + +<CONNECTOR type="113" id="226" > +<cdparam x="567" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="516" y="277" id="167" /> +<P2 x="427" y="199" id="149" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="227" > +<cdparam x="307" y="298" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="322" y="284" id="192" /> +<P2 x="427" y="199" id="145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="228" > +<cdparam x="381" y="179" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="381" y="179" id="143" /> +<P2 x="164" y="197" id="85" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="229" > +<cdparam x="694" y="198" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="647" y="219" id="111" /> +<P2 x="473" y="179" id="144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +</Modeling> + + + + +<Modeling type="Analysis" nameTab="Connected protocol" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="1400" > +<COMPONENT type="501" id="245" > +<cdparam x="287" y="513" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="233" /> +<TGConnectingPoint num="1" id="234" /> +<TGConnectingPoint num="2" id="235" /> +<TGConnectingPoint num="3" id="236" /> +<TGConnectingPoint num="4" id="237" /> +<TGConnectingPoint num="5" id="238" /> +<TGConnectingPoint num="6" id="239" /> +<TGConnectingPoint num="7" id="240" /> +<TGConnectingPoint num="8" id="241" /> +<TGConnectingPoint num="9" id="242" /> +<TGConnectingPoint num="10" id="243" /> +<TGConnectingPoint num="11" id="244" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="230" > +<father id="245" num="0" /> +<cdparam x="262" y="523" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="231" > +<father id="245" num="1" /> +<cdparam x="333" y="523" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="232" > +<father id="245" num="2" /> +<cdparam x="307" y="558" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="501" id="261" > +<cdparam x="460" y="160" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="249" /> +<TGConnectingPoint num="1" id="250" /> +<TGConnectingPoint num="2" id="251" /> +<TGConnectingPoint num="3" id="252" /> +<TGConnectingPoint num="4" id="253" /> +<TGConnectingPoint num="5" id="254" /> +<TGConnectingPoint num="6" id="255" /> +<TGConnectingPoint num="7" id="256" /> +<TGConnectingPoint num="8" id="257" /> +<TGConnectingPoint num="9" id="258" /> +<TGConnectingPoint num="10" id="259" /> +<TGConnectingPoint num="11" id="260" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="246" > +<father id="261" num="0" /> +<cdparam x="435" y="170" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="247" > +<father id="261" num="1" /> +<cdparam x="495" y="170" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="248" > +<father id="261" num="2" /> +<cdparam x="480" y="205" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="508" id="272" > +<cdparam x="329" y="229" /> +<sizeparam width="107" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Connection setup" /> +<TGConnectingPoint num="0" id="262" /> +<TGConnectingPoint num="1" id="263" /> +<TGConnectingPoint num="2" id="264" /> +<TGConnectingPoint num="3" id="265" /> +<TGConnectingPoint num="4" id="266" /> +<TGConnectingPoint num="5" id="267" /> +<TGConnectingPoint num="6" id="268" /> +<TGConnectingPoint num="7" id="269" /> +<TGConnectingPoint num="8" id="270" /> +<TGConnectingPoint num="9" id="271" /> +</COMPONENT> + +<COMPONENT type="504" id="277" > +<cdparam x="460" y="114" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="273" /> +<TGConnectingPoint num="1" id="274" /> +<TGConnectingPoint num="2" id="275" /> +<TGConnectingPoint num="3" id="276" /> +</COMPONENT> + +<COMPONENT type="502" id="279" > +<cdparam x="468" y="84" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="278" /> +</COMPONENT> + +<COMPONENT type="504" id="284" > +<cdparam x="457" y="300" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="280" /> +<TGConnectingPoint num="1" id="281" /> +<TGConnectingPoint num="2" id="282" /> +<TGConnectingPoint num="3" id="283" /> +</COMPONENT> + +<COMPONENT type="508" id="295" > +<cdparam x="102" y="583" /> +<sizeparam width="93" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data Exchange" /> +<TGConnectingPoint num="0" id="285" /> +<TGConnectingPoint num="1" id="286" /> +<TGConnectingPoint num="2" id="287" /> +<TGConnectingPoint num="3" id="288" /> +<TGConnectingPoint num="4" id="289" /> +<TGConnectingPoint num="5" id="290" /> +<TGConnectingPoint num="6" id="291" /> +<TGConnectingPoint num="7" id="292" /> +<TGConnectingPoint num="8" id="293" /> +<TGConnectingPoint num="9" id="294" /> +</COMPONENT> + +<COMPONENT type="508" id="306" > +<cdparam x="203" y="583" /> +<sizeparam width="199" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data exchange with desequencing" /> +<TGConnectingPoint num="0" id="296" /> +<TGConnectingPoint num="1" id="297" /> +<TGConnectingPoint num="2" id="298" /> +<TGConnectingPoint num="3" id="299" /> +<TGConnectingPoint num="4" id="300" /> +<TGConnectingPoint num="5" id="301" /> +<TGConnectingPoint num="6" id="302" /> +<TGConnectingPoint num="7" id="303" /> +<TGConnectingPoint num="8" id="304" /> +<TGConnectingPoint num="9" id="305" /> +</COMPONENT> + +<COMPONENT type="508" id="317" > +<cdparam x="426" y="583" /> +<sizeparam width="144" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data exchange with loss" /> +<TGConnectingPoint num="0" id="307" /> +<TGConnectingPoint num="1" id="308" /> +<TGConnectingPoint num="2" id="309" /> +<TGConnectingPoint num="3" id="310" /> +<TGConnectingPoint num="4" id="311" /> +<TGConnectingPoint num="5" id="312" /> +<TGConnectingPoint num="6" id="313" /> +<TGConnectingPoint num="7" id="314" /> +<TGConnectingPoint num="8" id="315" /> +<TGConnectingPoint num="9" id="316" /> +</COMPONENT> + +<COMPONENT type="504" id="322" > +<cdparam x="287" y="703" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="318" /> +<TGConnectingPoint num="1" id="319" /> +<TGConnectingPoint num="2" id="320" /> +<TGConnectingPoint num="3" id="321" /> +</COMPONENT> + +<COMPONENT type="504" id="327" > +<cdparam x="297" y="392" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="323" /> +<TGConnectingPoint num="1" id="324" /> +<TGConnectingPoint num="2" id="325" /> +<TGConnectingPoint num="3" id="326" /> +</COMPONENT> + +<COMPONENT type="507" id="342" > +<cdparam x="398" y="345" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="328" /> +<TGConnectingPoint num="1" id="329" /> +<TGConnectingPoint num="2" id="330" /> +<TGConnectingPoint num="3" id="331" /> +<TGConnectingPoint num="4" id="332" /> +<TGConnectingPoint num="5" id="333" /> +<TGConnectingPoint num="6" id="334" /> +<TGConnectingPoint num="7" id="335" /> +<TGConnectingPoint num="8" id="336" /> +<TGConnectingPoint num="9" id="337" /> +<TGConnectingPoint num="10" id="338" /> +<TGConnectingPoint num="11" id="339" /> +<TGConnectingPoint num="12" id="340" /> +<TGConnectingPoint num="13" id="341" /> +</COMPONENT> + +<COMPONENT type="508" id="353" > +<cdparam x="437" y="638" /> +<sizeparam width="123" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data retransmission" /> +<TGConnectingPoint num="0" id="343" /> +<TGConnectingPoint num="1" id="344" /> +<TGConnectingPoint num="2" id="345" /> +<TGConnectingPoint num="3" id="346" /> +<TGConnectingPoint num="4" id="347" /> +<TGConnectingPoint num="5" id="348" /> +<TGConnectingPoint num="6" id="349" /> +<TGConnectingPoint num="7" id="350" /> +<TGConnectingPoint num="8" id="351" /> +<TGConnectingPoint num="9" id="352" /> +</COMPONENT> + +<COMPONENT type="508" id="364" > +<cdparam x="254" y="649" /> +<sizeparam width="96" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data reordering" /> +<TGConnectingPoint num="0" id="354" /> +<TGConnectingPoint num="1" id="355" /> +<TGConnectingPoint num="2" id="356" /> +<TGConnectingPoint num="3" id="357" /> +<TGConnectingPoint num="4" id="358" /> +<TGConnectingPoint num="5" id="359" /> +<TGConnectingPoint num="6" id="360" /> +<TGConnectingPoint num="7" id="361" /> +<TGConnectingPoint num="8" id="362" /> +<TGConnectingPoint num="9" id="363" /> +</COMPONENT> + +<COMPONENT type="501" id="380" > +<cdparam x="649" y="387" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="368" /> +<TGConnectingPoint num="1" id="369" /> +<TGConnectingPoint num="2" id="370" /> +<TGConnectingPoint num="3" id="371" /> +<TGConnectingPoint num="4" id="372" /> +<TGConnectingPoint num="5" id="373" /> +<TGConnectingPoint num="6" id="374" /> +<TGConnectingPoint num="7" id="375" /> +<TGConnectingPoint num="8" id="376" /> +<TGConnectingPoint num="9" id="377" /> +<TGConnectingPoint num="10" id="378" /> +<TGConnectingPoint num="11" id="379" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="365" > +<father id="380" num="0" /> +<cdparam x="624" y="397" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="366" > +<father id="380" num="1" /> +<cdparam x="684" y="397" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="367" > +<father id="380" num="2" /> +<cdparam x="669" y="432" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="508" id="391" > +<cdparam x="528" y="470" /> +<sizeparam width="118" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Connection release" /> +<TGConnectingPoint num="0" id="381" /> +<TGConnectingPoint num="1" id="382" /> +<TGConnectingPoint num="2" id="383" /> +<TGConnectingPoint num="3" id="384" /> +<TGConnectingPoint num="4" id="385" /> +<TGConnectingPoint num="5" id="386" /> +<TGConnectingPoint num="6" id="387" /> +<TGConnectingPoint num="7" id="388" /> +<TGConnectingPoint num="8" id="389" /> +<TGConnectingPoint num="9" id="390" /> +</COMPONENT> + +<COMPONENT type="508" id="402" > +<cdparam x="682" y="469" /> +<sizeparam width="114" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Connection broken" /> +<TGConnectingPoint num="0" id="392" /> +<TGConnectingPoint num="1" id="393" /> +<TGConnectingPoint num="2" id="394" /> +<TGConnectingPoint num="3" id="395" /> +<TGConnectingPoint num="4" id="396" /> +<TGConnectingPoint num="5" id="397" /> +<TGConnectingPoint num="6" id="398" /> +<TGConnectingPoint num="7" id="399" /> +<TGConnectingPoint num="8" id="400" /> +<TGConnectingPoint num="9" id="401" /> +</COMPONENT> + +<COMPONENT type="504" id="407" > +<cdparam x="653" y="537" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="403" /> +<TGConnectingPoint num="1" id="404" /> +<TGConnectingPoint num="2" id="405" /> +<TGConnectingPoint num="3" id="406" /> +</COMPONENT> + +<COMPONENT type="508" id="418" > +<cdparam x="354" y="463" /> +<sizeparam width="101" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="QoS negociation" /> +<TGConnectingPoint num="0" id="408" /> +<TGConnectingPoint num="1" id="409" /> +<TGConnectingPoint num="2" id="410" /> +<TGConnectingPoint num="3" id="411" /> +<TGConnectingPoint num="4" id="412" /> +<TGConnectingPoint num="5" id="413" /> +<TGConnectingPoint num="6" id="414" /> +<TGConnectingPoint num="7" id="415" /> +<TGConnectingPoint num="8" id="416" /> +<TGConnectingPoint num="9" id="417" /> +</COMPONENT> + +<COMPONENT type="508" id="429" > +<cdparam x="514" y="228" /> +<sizeparam width="101" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="QoS negociation" /> +<TGConnectingPoint num="0" id="419" /> +<TGConnectingPoint num="1" id="420" /> +<TGConnectingPoint num="2" id="421" /> +<TGConnectingPoint num="3" id="422" /> +<TGConnectingPoint num="4" id="423" /> +<TGConnectingPoint num="5" id="424" /> +<TGConnectingPoint num="6" id="425" /> +<TGConnectingPoint num="7" id="426" /> +<TGConnectingPoint num="8" id="427" /> +<TGConnectingPoint num="9" id="428" /> +</COMPONENT> + +<COMPONENT type="501" id="445" > +<cdparam x="287" y="434" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="433" /> +<TGConnectingPoint num="1" id="434" /> +<TGConnectingPoint num="2" id="435" /> +<TGConnectingPoint num="3" id="436" /> +<TGConnectingPoint num="4" id="437" /> +<TGConnectingPoint num="5" id="438" /> +<TGConnectingPoint num="6" id="439" /> +<TGConnectingPoint num="7" id="440" /> +<TGConnectingPoint num="8" id="441" /> +<TGConnectingPoint num="9" id="442" /> +<TGConnectingPoint num="10" id="443" /> +<TGConnectingPoint num="11" id="444" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="430" > +<father id="445" num="0" /> +<cdparam x="262" y="444" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="431" > +<father id="445" num="1" /> +<cdparam x="322" y="444" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="432" > +<father id="445" num="2" /> +<cdparam x="307" y="479" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="446" > +<cdparam x="438" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="435" y="175" id="250" /> +<P2 x="382" y="224" id="262" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="447" > +<cdparam x="518" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="515" y="175" id="251" /> +<P2 x="564" y="223" id="419" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="448" > +<cdparam x="474" y="105" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="475" y="104" id="278" /> +<P2 x="475" y="114" id="273" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="449" > +<cdparam x="474" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="475" y="144" id="276" /> +<P2 x="475" y="150" id="249" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="450" > +<cdparam x="382" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="382" y="269" id="263" /> +<P2 x="457" y="315" id="281" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="451" > +<cdparam x="565" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="564" y="268" id="420" /> +<P2 x="487" y="315" id="282" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="452" > +<cdparam x="272" y="528" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="262" y="528" id="234" /> +<P2 x="148" y="578" id="285" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="453" > +<cdparam x="312" y="568" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="302" y="568" id="236" /> +<P2 x="302" y="578" id="296" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="454" > +<cdparam x="352" y="528" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="342" y="528" id="235" /> +<P2 x="498" y="578" id="307" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="455" > +<cdparam x="312" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="302" y="623" id="297" /> +<P2 x="302" y="644" id="354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="456" > +<cdparam x="148" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="148" y="623" id="286" /> +<P2 x="287" y="718" id="319" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="457" > +<cdparam x="498" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="498" y="678" id="344" /> +<P2 x="317" y="718" id="320" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="458" > +<cdparam x="472" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="472" y="330" id="283" /> +<P2 x="473" y="345" id="328" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="459" > +<cdparam x="307" y="543" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="312" y="422" id="326" /> +<P2 x="302" y="424" id="433" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="462" > +<cdparam x="316" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="473" y="350" id="331" /> +<P2 x="312" y="392" id="323" /> +<Point x="473" y="367" /> +<Point x="312" y="372" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="460" > +<father id="462" num="0" /> +<cdparam x="473" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="461" > +<father id="462" num="1" /> +<cdparam x="312" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="463" > +<cdparam x="498" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to Reference to an IOD" value="null" /> +<P1 x="498" y="623" id="308" /> +<P2 x="498" y="633" id="343" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="464" > +<cdparam x="312" y="687" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="302" y="689" id="355" /> +<P2 x="302" y="703" id="318" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="469" > +<cdparam x="312" y="733" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="302" y="733" id="321" /> +<P2 x="297" y="407" id="324" /> +<Point x="302" y="745" /> +<Point x="90" y="745" /> +<Point x="90" y="387" /> +<Point x="297" y="387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="465" > +<father id="469" num="0" /> +<cdparam x="302" y="745" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="466" > +<father id="469" num="1" /> +<cdparam x="90" y="745" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="467" > +<father id="469" num="2" /> +<cdparam x="90" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="468" > +<father id="469" num="3" /> +<cdparam x="297" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="470" > +<cdparam x="365" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to choice" value="null" /> +<P1 x="522" y="350" id="333" /> +<P2 x="664" y="377" id="368" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="471" > +<cdparam x="624" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="624" y="402" id="369" /> +<P2 x="587" y="465" id="381" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="472" > +<cdparam x="704" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="704" y="402" id="370" /> +<P2 x="739" y="464" id="392" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="473" > +<cdparam x="587" y="510" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="587" y="510" id="382" /> +<P2 x="653" y="552" id="404" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="474" > +<cdparam x="739" y="509" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="739" y="509" id="393" /> +<P2 x="683" y="552" id="405" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="479" > +<cdparam x="679" y="560" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="668" y="567" id="406" /> +<P2 x="490" y="129" id="275" /> +<Point x="668" y="580" /> +<Point x="806" y="580" /> +<Point x="806" y="109" /> +<Point x="490" y="109" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="475" > +<father id="479" num="0" /> +<cdparam x="668" y="580" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="476" > +<father id="479" num="1" /> +<cdparam x="806" y="580" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="477" > +<father id="479" num="2" /> +<cdparam x="806" y="109" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="478" > +<father id="479" num="3" /> +<cdparam x="490" y="109" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="480" > +<cdparam x="302" y="489" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="302" y="489" id="436" /> +<P2 x="302" y="503" id="233" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="481" > +<cdparam x="342" y="449" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="342" y="449" id="435" /> +<P2 x="404" y="458" id="408" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="486" > +<cdparam x="404" y="503" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="404" y="503" id="409" /> +<P2 x="327" y="407" id="325" /> +<Point x="404" y="523" /> +<Point x="502" y="523" /> +<Point x="502" y="387" /> +<Point x="327" y="387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="482" > +<father id="486" num="0" /> +<cdparam x="404" y="523" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="483" > +<father id="486" num="1" /> +<cdparam x="502" y="523" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="484" > +<father id="486" num="2" /> +<cdparam x="502" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="485" > +<father id="486" num="3" /> +<cdparam x="327" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="519" > +<cdparam x="126" y="312" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Sending application" /> +<TGConnectingPoint num="0" id="487" /> +<TGConnectingPoint num="1" id="488" /> +<TGConnectingPoint num="2" id="489" /> +<TGConnectingPoint num="3" id="490" /> +<TGConnectingPoint num="4" id="491" /> +<TGConnectingPoint num="5" id="492" /> +<TGConnectingPoint num="6" id="493" /> +<TGConnectingPoint num="7" id="494" /> +<TGConnectingPoint num="8" id="495" /> +<TGConnectingPoint num="9" id="496" /> +<TGConnectingPoint num="10" id="497" /> +<TGConnectingPoint num="11" id="498" /> +<TGConnectingPoint num="12" id="499" /> +<TGConnectingPoint num="13" id="500" /> +<TGConnectingPoint num="14" id="501" /> +<TGConnectingPoint num="15" id="502" /> +<TGConnectingPoint num="16" id="503" /> +<TGConnectingPoint num="17" id="504" /> +<TGConnectingPoint num="18" id="505" /> +<TGConnectingPoint num="19" id="506" /> +<TGConnectingPoint num="20" id="507" /> +<TGConnectingPoint num="21" id="508" /> +<TGConnectingPoint num="22" id="509" /> +<TGConnectingPoint num="23" id="510" /> +<TGConnectingPoint num="24" id="511" /> +<TGConnectingPoint num="25" id="512" /> +<TGConnectingPoint num="26" id="513" /> +<TGConnectingPoint num="27" id="514" /> +<TGConnectingPoint num="28" id="515" /> +<TGConnectingPoint num="29" id="516" /> +<TGConnectingPoint num="30" id="517" /> +<TGConnectingPoint num="31" id="518" /> +</COMPONENT> + +<COMPONENT type="700" id="552" > +<cdparam x="778" y="316" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Receiving application" /> +<TGConnectingPoint num="0" id="520" /> +<TGConnectingPoint num="1" id="521" /> +<TGConnectingPoint num="2" id="522" /> +<TGConnectingPoint num="3" id="523" /> +<TGConnectingPoint num="4" id="524" /> +<TGConnectingPoint num="5" id="525" /> +<TGConnectingPoint num="6" id="526" /> +<TGConnectingPoint num="7" id="527" /> +<TGConnectingPoint num="8" id="528" /> +<TGConnectingPoint num="9" id="529" /> +<TGConnectingPoint num="10" id="530" /> +<TGConnectingPoint num="11" id="531" /> +<TGConnectingPoint num="12" id="532" /> +<TGConnectingPoint num="13" id="533" /> +<TGConnectingPoint num="14" id="534" /> +<TGConnectingPoint num="15" id="535" /> +<TGConnectingPoint num="16" id="536" /> +<TGConnectingPoint num="17" id="537" /> +<TGConnectingPoint num="18" id="538" /> +<TGConnectingPoint num="19" id="539" /> +<TGConnectingPoint num="20" id="540" /> +<TGConnectingPoint num="21" id="541" /> +<TGConnectingPoint num="22" id="542" /> +<TGConnectingPoint num="23" id="543" /> +<TGConnectingPoint num="24" id="544" /> +<TGConnectingPoint num="25" id="545" /> +<TGConnectingPoint num="26" id="546" /> +<TGConnectingPoint num="27" id="547" /> +<TGConnectingPoint num="28" id="548" /> +<TGConnectingPoint num="29" id="549" /> +<TGConnectingPoint num="30" id="550" /> +<TGConnectingPoint num="31" id="551" /> +</COMPONENT> + +<COMPONENT type="701" id="577" > +<cdparam x="368" y="265" /> +<sizeparam width="81" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data transfer" /> +<TGConnectingPoint num="0" id="553" /> +<TGConnectingPoint num="1" id="554" /> +<TGConnectingPoint num="2" id="555" /> +<TGConnectingPoint num="3" id="556" /> +<TGConnectingPoint num="4" id="557" /> +<TGConnectingPoint num="5" id="558" /> +<TGConnectingPoint num="6" id="559" /> +<TGConnectingPoint num="7" id="560" /> +<TGConnectingPoint num="8" id="561" /> +<TGConnectingPoint num="9" id="562" /> +<TGConnectingPoint num="10" id="563" /> +<TGConnectingPoint num="11" id="564" /> +<TGConnectingPoint num="12" id="565" /> +<TGConnectingPoint num="13" id="566" /> +<TGConnectingPoint num="14" id="567" /> +<TGConnectingPoint num="15" id="568" /> +<TGConnectingPoint num="16" id="569" /> +<TGConnectingPoint num="17" id="570" /> +<TGConnectingPoint num="18" id="571" /> +<TGConnectingPoint num="19" id="572" /> +<TGConnectingPoint num="20" id="573" /> +<TGConnectingPoint num="21" id="574" /> +<TGConnectingPoint num="22" id="575" /> +<TGConnectingPoint num="23" id="576" /> +<extraparam> +<info extension="Parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="602" > +<cdparam x="462" y="355" /> +<sizeparam width="133" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data transfer with loss" /> +<TGConnectingPoint num="0" id="578" /> +<TGConnectingPoint num="1" id="579" /> +<TGConnectingPoint num="2" id="580" /> +<TGConnectingPoint num="3" id="581" /> +<TGConnectingPoint num="4" id="582" /> +<TGConnectingPoint num="5" id="583" /> +<TGConnectingPoint num="6" id="584" /> +<TGConnectingPoint num="7" id="585" /> +<TGConnectingPoint num="8" id="586" /> +<TGConnectingPoint num="9" id="587" /> +<TGConnectingPoint num="10" id="588" /> +<TGConnectingPoint num="11" id="589" /> +<TGConnectingPoint num="12" id="590" /> +<TGConnectingPoint num="13" id="591" /> +<TGConnectingPoint num="14" id="592" /> +<TGConnectingPoint num="15" id="593" /> +<TGConnectingPoint num="16" id="594" /> +<TGConnectingPoint num="17" id="595" /> +<TGConnectingPoint num="18" id="596" /> +<TGConnectingPoint num="19" id="597" /> +<TGConnectingPoint num="20" id="598" /> +<TGConnectingPoint num="21" id="599" /> +<TGConnectingPoint num="22" id="600" /> +<TGConnectingPoint num="23" id="601" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="627" > +<cdparam x="238" y="354" /> +<sizeparam width="188" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data transfer with desequencing" /> +<TGConnectingPoint num="0" id="603" /> +<TGConnectingPoint num="1" id="604" /> +<TGConnectingPoint num="2" id="605" /> +<TGConnectingPoint num="3" id="606" /> +<TGConnectingPoint num="4" id="607" /> +<TGConnectingPoint num="5" id="608" /> +<TGConnectingPoint num="6" id="609" /> +<TGConnectingPoint num="7" id="610" /> +<TGConnectingPoint num="8" id="611" /> +<TGConnectingPoint num="9" id="612" /> +<TGConnectingPoint num="10" id="613" /> +<TGConnectingPoint num="11" id="614" /> +<TGConnectingPoint num="12" id="615" /> +<TGConnectingPoint num="13" id="616" /> +<TGConnectingPoint num="14" id="617" /> +<TGConnectingPoint num="15" id="618" /> +<TGConnectingPoint num="16" id="619" /> +<TGConnectingPoint num="17" id="620" /> +<TGConnectingPoint num="18" id="621" /> +<TGConnectingPoint num="19" id="622" /> +<TGConnectingPoint num="20" id="623" /> +<TGConnectingPoint num="21" id="624" /> +<TGConnectingPoint num="22" id="625" /> +<TGConnectingPoint num="23" id="626" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="652" > +<cdparam x="562" y="171" /> +<sizeparam width="101" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="QoS negociation" /> +<TGConnectingPoint num="0" id="628" /> +<TGConnectingPoint num="1" id="629" /> +<TGConnectingPoint num="2" id="630" /> +<TGConnectingPoint num="3" id="631" /> +<TGConnectingPoint num="4" id="632" /> +<TGConnectingPoint num="5" id="633" /> +<TGConnectingPoint num="6" id="634" /> +<TGConnectingPoint num="7" id="635" /> +<TGConnectingPoint num="8" id="636" /> +<TGConnectingPoint num="9" id="637" /> +<TGConnectingPoint num="10" id="638" /> +<TGConnectingPoint num="11" id="639" /> +<TGConnectingPoint num="12" id="640" /> +<TGConnectingPoint num="13" id="641" /> +<TGConnectingPoint num="14" id="642" /> +<TGConnectingPoint num="15" id="643" /> +<TGConnectingPoint num="16" id="644" /> +<TGConnectingPoint num="17" id="645" /> +<TGConnectingPoint num="18" id="646" /> +<TGConnectingPoint num="19" id="647" /> +<TGConnectingPoint num="20" id="648" /> +<TGConnectingPoint num="21" id="649" /> +<TGConnectingPoint num="22" id="650" /> +<TGConnectingPoint num="23" id="651" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="677" > +<cdparam x="357" y="142" /> +<sizeparam width="107" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection setup" /> +<TGConnectingPoint num="0" id="653" /> +<TGConnectingPoint num="1" id="654" /> +<TGConnectingPoint num="2" id="655" /> +<TGConnectingPoint num="3" id="656" /> +<TGConnectingPoint num="4" id="657" /> +<TGConnectingPoint num="5" id="658" /> +<TGConnectingPoint num="6" id="659" /> +<TGConnectingPoint num="7" id="660" /> +<TGConnectingPoint num="8" id="661" /> +<TGConnectingPoint num="9" id="662" /> +<TGConnectingPoint num="10" id="663" /> +<TGConnectingPoint num="11" id="664" /> +<TGConnectingPoint num="12" id="665" /> +<TGConnectingPoint num="13" id="666" /> +<TGConnectingPoint num="14" id="667" /> +<TGConnectingPoint num="15" id="668" /> +<TGConnectingPoint num="16" id="669" /> +<TGConnectingPoint num="17" id="670" /> +<TGConnectingPoint num="18" id="671" /> +<TGConnectingPoint num="19" id="672" /> +<TGConnectingPoint num="20" id="673" /> +<TGConnectingPoint num="21" id="674" /> +<TGConnectingPoint num="22" id="675" /> +<TGConnectingPoint num="23" id="676" /> +<extraparam> +<info extension="Parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="702" > +<cdparam x="376" y="512" /> +<sizeparam width="97" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection end" /> +<TGConnectingPoint num="0" id="678" /> +<TGConnectingPoint num="1" id="679" /> +<TGConnectingPoint num="2" id="680" /> +<TGConnectingPoint num="3" id="681" /> +<TGConnectingPoint num="4" id="682" /> +<TGConnectingPoint num="5" id="683" /> +<TGConnectingPoint num="6" id="684" /> +<TGConnectingPoint num="7" id="685" /> +<TGConnectingPoint num="8" id="686" /> +<TGConnectingPoint num="9" id="687" /> +<TGConnectingPoint num="10" id="688" /> +<TGConnectingPoint num="11" id="689" /> +<TGConnectingPoint num="12" id="690" /> +<TGConnectingPoint num="13" id="691" /> +<TGConnectingPoint num="14" id="692" /> +<TGConnectingPoint num="15" id="693" /> +<TGConnectingPoint num="16" id="694" /> +<TGConnectingPoint num="17" id="695" /> +<TGConnectingPoint num="18" id="696" /> +<TGConnectingPoint num="19" id="697" /> +<TGConnectingPoint num="20" id="698" /> +<TGConnectingPoint num="21" id="699" /> +<TGConnectingPoint num="22" id="700" /> +<TGConnectingPoint num="23" id="701" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="727" > +<cdparam x="248" y="593" /> +<sizeparam width="118" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection release" /> +<TGConnectingPoint num="0" id="703" /> +<TGConnectingPoint num="1" id="704" /> +<TGConnectingPoint num="2" id="705" /> +<TGConnectingPoint num="3" id="706" /> +<TGConnectingPoint num="4" id="707" /> +<TGConnectingPoint num="5" id="708" /> +<TGConnectingPoint num="6" id="709" /> +<TGConnectingPoint num="7" id="710" /> +<TGConnectingPoint num="8" id="711" /> +<TGConnectingPoint num="9" id="712" /> +<TGConnectingPoint num="10" id="713" /> +<TGConnectingPoint num="11" id="714" /> +<TGConnectingPoint num="12" id="715" /> +<TGConnectingPoint num="13" id="716" /> +<TGConnectingPoint num="14" id="717" /> +<TGConnectingPoint num="15" id="718" /> +<TGConnectingPoint num="16" id="719" /> +<TGConnectingPoint num="17" id="720" /> +<TGConnectingPoint num="18" id="721" /> +<TGConnectingPoint num="19" id="722" /> +<TGConnectingPoint num="20" id="723" /> +<TGConnectingPoint num="21" id="724" /> +<TGConnectingPoint num="22" id="725" /> +<TGConnectingPoint num="23" id="726" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="752" > +<cdparam x="479" y="591" /> +<sizeparam width="114" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection broken" /> +<TGConnectingPoint num="0" id="728" /> +<TGConnectingPoint num="1" id="729" /> +<TGConnectingPoint num="2" id="730" /> +<TGConnectingPoint num="3" id="731" /> +<TGConnectingPoint num="4" id="732" /> +<TGConnectingPoint num="5" id="733" /> +<TGConnectingPoint num="6" id="734" /> +<TGConnectingPoint num="7" id="735" /> +<TGConnectingPoint num="8" id="736" /> +<TGConnectingPoint num="9" id="737" /> +<TGConnectingPoint num="10" id="738" /> +<TGConnectingPoint num="11" id="739" /> +<TGConnectingPoint num="12" id="740" /> +<TGConnectingPoint num="13" id="741" /> +<TGConnectingPoint num="14" id="742" /> +<TGConnectingPoint num="15" id="743" /> +<TGConnectingPoint num="16" id="744" /> +<TGConnectingPoint num="17" id="745" /> +<TGConnectingPoint num="18" id="746" /> +<TGConnectingPoint num="19" id="747" /> +<TGConnectingPoint num="20" id="748" /> +<TGConnectingPoint num="21" id="749" /> +<TGConnectingPoint num="22" id="750" /> +<TGConnectingPoint num="23" id="751" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="777" > +<cdparam x="452" y="432" /> +<sizeparam width="123" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data retransmission" /> +<TGConnectingPoint num="0" id="753" /> +<TGConnectingPoint num="1" id="754" /> +<TGConnectingPoint num="2" id="755" /> +<TGConnectingPoint num="3" id="756" /> +<TGConnectingPoint num="4" id="757" /> +<TGConnectingPoint num="5" id="758" /> +<TGConnectingPoint num="6" id="759" /> +<TGConnectingPoint num="7" id="760" /> +<TGConnectingPoint num="8" id="761" /> +<TGConnectingPoint num="9" id="762" /> +<TGConnectingPoint num="10" id="763" /> +<TGConnectingPoint num="11" id="764" /> +<TGConnectingPoint num="12" id="765" /> +<TGConnectingPoint num="13" id="766" /> +<TGConnectingPoint num="14" id="767" /> +<TGConnectingPoint num="15" id="768" /> +<TGConnectingPoint num="16" id="769" /> +<TGConnectingPoint num="17" id="770" /> +<TGConnectingPoint num="18" id="771" /> +<TGConnectingPoint num="19" id="772" /> +<TGConnectingPoint num="20" id="773" /> +<TGConnectingPoint num="21" id="774" /> +<TGConnectingPoint num="22" id="775" /> +<TGConnectingPoint num="23" id="776" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="802" > +<cdparam x="317" y="436" /> +<sizeparam width="96" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data reordering" /> +<TGConnectingPoint num="0" id="778" /> +<TGConnectingPoint num="1" id="779" /> +<TGConnectingPoint num="2" id="780" /> +<TGConnectingPoint num="3" id="781" /> +<TGConnectingPoint num="4" id="782" /> +<TGConnectingPoint num="5" id="783" /> +<TGConnectingPoint num="6" id="784" /> +<TGConnectingPoint num="7" id="785" /> +<TGConnectingPoint num="8" id="786" /> +<TGConnectingPoint num="9" id="787" /> +<TGConnectingPoint num="10" id="788" /> +<TGConnectingPoint num="11" id="789" /> +<TGConnectingPoint num="12" id="790" /> +<TGConnectingPoint num="13" id="791" /> +<TGConnectingPoint num="14" id="792" /> +<TGConnectingPoint num="15" id="793" /> +<TGConnectingPoint num="16" id="794" /> +<TGConnectingPoint num="17" id="795" /> +<TGConnectingPoint num="18" id="796" /> +<TGConnectingPoint num="19" id="797" /> +<TGConnectingPoint num="20" id="798" /> +<TGConnectingPoint num="21" id="799" /> +<TGConnectingPoint num="22" id="800" /> +<TGConnectingPoint num="23" id="801" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="811" > +<cdparam x="200" y="120" /> +<sizeparam width="528" height="552" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Connected" /> +<TGConnectingPoint num="0" id="803" /> +<TGConnectingPoint num="1" id="804" /> +<TGConnectingPoint num="2" id="805" /> +<TGConnectingPoint num="3" id="806" /> +<TGConnectingPoint num="4" id="807" /> +<TGConnectingPoint num="5" id="808" /> +<TGConnectingPoint num="6" id="809" /> +<TGConnectingPoint num="7" id="810" /> +</COMPONENT> + +<CONNECTOR type="113" id="812" > +<cdparam x="570" y="437" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="528" y="355" id="578" /> +<P2 x="408" y="305" id="560" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="813" > +<cdparam x="310" y="438" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="332" y="354" id="603" /> +<P2 x="408" y="305" id="556" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="814" > +<cdparam x="384" y="319" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="368" y="285" id="554" /> +<P2 x="156" y="347" id="496" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="815" > +<cdparam x="697" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="778" y="351" id="522" /> +<P2 x="449" y="285" id="555" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="816" > +<cdparam x="556" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="562" y="191" id="629" /> +<P2 x="464" y="162" id="655" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="817" > +<cdparam x="485" y="587" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="536" y="591" id="728" /> +<P2 x="424" y="552" id="681" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="818" > +<cdparam x="357" y="596" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="307" y="593" id="703" /> +<P2 x="424" y="552" id="685" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="819" > +<cdparam x="650" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="778" y="333" id="521" /> +<P2 x="464" y="162" id="659" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="820" > +<cdparam x="152" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="156" y="329" id="495" /> +<P2 x="357" y="162" id="654" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="821" > +<cdparam x="152" y="337" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="156" y="364" id="497" /> +<P2 x="376" y="532" id="679" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="822" > +<cdparam x="650" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="778" y="386" id="524" /> +<P2 x="473" y="532" id="680" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="823" > +<cdparam x="332" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="332" y="394" id="606" /> +<P2 x="365" y="436" id="778" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="824" > +<cdparam x="523" y="396" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="528" y="395" id="581" /> +<P2 x="513" y="432" id="753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="825" > +<cdparam x="562" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="562" y="191" id="633" /> +<P2 x="449" y="285" id="559" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +</Modeling> + + + + +<Modeling type="Analysis" nameTab="multicast protocol" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="1400" > +<COMPONENT type="501" id="841" > +<cdparam x="447" y="311" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="829" /> +<TGConnectingPoint num="1" id="830" /> +<TGConnectingPoint num="2" id="831" /> +<TGConnectingPoint num="3" id="832" /> +<TGConnectingPoint num="4" id="833" /> +<TGConnectingPoint num="5" id="834" /> +<TGConnectingPoint num="6" id="835" /> +<TGConnectingPoint num="7" id="836" /> +<TGConnectingPoint num="8" id="837" /> +<TGConnectingPoint num="9" id="838" /> +<TGConnectingPoint num="10" id="839" /> +<TGConnectingPoint num="11" id="840" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="826" > +<father id="841" num="0" /> +<cdparam x="402" y="321" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="827" > +<father id="841" num="1" /> +<cdparam x="496" y="321" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="828" > +<father id="841" num="2" /> +<cdparam x="467" y="356" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="507" id="856" > +<cdparam x="437" y="262" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="842" /> +<TGConnectingPoint num="1" id="843" /> +<TGConnectingPoint num="2" id="844" /> +<TGConnectingPoint num="3" id="845" /> +<TGConnectingPoint num="4" id="846" /> +<TGConnectingPoint num="5" id="847" /> +<TGConnectingPoint num="6" id="848" /> +<TGConnectingPoint num="7" id="849" /> +<TGConnectingPoint num="8" id="850" /> +<TGConnectingPoint num="9" id="851" /> +<TGConnectingPoint num="10" id="852" /> +<TGConnectingPoint num="11" id="853" /> +<TGConnectingPoint num="12" id="854" /> +<TGConnectingPoint num="13" id="855" /> +</COMPONENT> + +<COMPONENT type="508" id="867" > +<cdparam x="570" y="299" /> +<sizeparam width="91" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Group deletion" /> +<TGConnectingPoint num="0" id="857" /> +<TGConnectingPoint num="1" id="858" /> +<TGConnectingPoint num="2" id="859" /> +<TGConnectingPoint num="3" id="860" /> +<TGConnectingPoint num="4" id="861" /> +<TGConnectingPoint num="5" id="862" /> +<TGConnectingPoint num="6" id="863" /> +<TGConnectingPoint num="7" id="864" /> +<TGConnectingPoint num="8" id="865" /> +<TGConnectingPoint num="9" id="866" /> +</COMPONENT> + +<COMPONENT type="502" id="869" > +<cdparam x="507" y="78" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="868" /> +</COMPONENT> + +<COMPONENT type="504" id="874" > +<cdparam x="499" y="96" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="870" /> +<TGConnectingPoint num="1" id="871" /> +<TGConnectingPoint num="2" id="872" /> +<TGConnectingPoint num="3" id="873" /> +</COMPONENT> + +<COMPONENT type="504" id="879" > +<cdparam x="447" y="282" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="875" /> +<TGConnectingPoint num="1" id="876" /> +<TGConnectingPoint num="2" id="877" /> +<TGConnectingPoint num="3" id="878" /> +</COMPONENT> + +<COMPONENT type="504" id="884" > +<cdparam x="484" y="488" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="880" /> +<TGConnectingPoint num="1" id="881" /> +<TGConnectingPoint num="2" id="882" /> +<TGConnectingPoint num="3" id="883" /> +</COMPONENT> + +<COMPONENT type="508" id="895" > +<cdparam x="637" y="419" /> +<sizeparam width="78" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Leave group" /> +<TGConnectingPoint num="0" id="885" /> +<TGConnectingPoint num="1" id="886" /> +<TGConnectingPoint num="2" id="887" /> +<TGConnectingPoint num="3" id="888" /> +<TGConnectingPoint num="4" id="889" /> +<TGConnectingPoint num="5" id="890" /> +<TGConnectingPoint num="6" id="891" /> +<TGConnectingPoint num="7" id="892" /> +<TGConnectingPoint num="8" id="893" /> +<TGConnectingPoint num="9" id="894" /> +</COMPONENT> + +<COMPONENT type="501" id="911" > +<cdparam x="499" y="128" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="899" /> +<TGConnectingPoint num="1" id="900" /> +<TGConnectingPoint num="2" id="901" /> +<TGConnectingPoint num="3" id="902" /> +<TGConnectingPoint num="4" id="903" /> +<TGConnectingPoint num="5" id="904" /> +<TGConnectingPoint num="6" id="905" /> +<TGConnectingPoint num="7" id="906" /> +<TGConnectingPoint num="8" id="907" /> +<TGConnectingPoint num="9" id="908" /> +<TGConnectingPoint num="10" id="909" /> +<TGConnectingPoint num="11" id="910" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="896" > +<father id="911" num="0" /> +<cdparam x="474" y="138" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="897" > +<father id="911" num="1" /> +<cdparam x="534" y="138" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="898" > +<father id="911" num="2" /> +<cdparam x="519" y="173" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="508" id="922" > +<cdparam x="496" y="185" /> +<sizeparam width="188" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Group creation with specific QoS" /> +<TGConnectingPoint num="0" id="912" /> +<TGConnectingPoint num="1" id="913" /> +<TGConnectingPoint num="2" id="914" /> +<TGConnectingPoint num="3" id="915" /> +<TGConnectingPoint num="4" id="916" /> +<TGConnectingPoint num="5" id="917" /> +<TGConnectingPoint num="6" id="918" /> +<TGConnectingPoint num="7" id="919" /> +<TGConnectingPoint num="8" id="920" /> +<TGConnectingPoint num="9" id="921" /> +</COMPONENT> + +<COMPONENT type="508" id="933" > +<cdparam x="398" y="185" /> +<sizeparam width="91" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Group creation" /> +<TGConnectingPoint num="0" id="923" /> +<TGConnectingPoint num="1" id="924" /> +<TGConnectingPoint num="2" id="925" /> +<TGConnectingPoint num="3" id="926" /> +<TGConnectingPoint num="4" id="927" /> +<TGConnectingPoint num="5" id="928" /> +<TGConnectingPoint num="6" id="929" /> +<TGConnectingPoint num="7" id="930" /> +<TGConnectingPoint num="8" id="931" /> +<TGConnectingPoint num="9" id="932" /> +</COMPONENT> + +<COMPONENT type="504" id="938" > +<cdparam x="497" y="230" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="934" /> +<TGConnectingPoint num="1" id="935" /> +<TGConnectingPoint num="2" id="936" /> +<TGConnectingPoint num="3" id="937" /> +</COMPONENT> + +<COMPONENT type="508" id="949" > +<cdparam x="382" y="420" /> +<sizeparam width="70" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Join group" /> +<TGConnectingPoint num="0" id="939" /> +<TGConnectingPoint num="1" id="940" /> +<TGConnectingPoint num="2" id="941" /> +<TGConnectingPoint num="3" id="942" /> +<TGConnectingPoint num="4" id="943" /> +<TGConnectingPoint num="5" id="944" /> +<TGConnectingPoint num="6" id="945" /> +<TGConnectingPoint num="7" id="946" /> +<TGConnectingPoint num="8" id="947" /> +<TGConnectingPoint num="9" id="948" /> +</COMPONENT> + +<COMPONENT type="508" id="960" > +<cdparam x="467" y="419" /> +<sizeparam width="165" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Join group with specific QoS" /> +<TGConnectingPoint num="0" id="950" /> +<TGConnectingPoint num="1" id="951" /> +<TGConnectingPoint num="2" id="952" /> +<TGConnectingPoint num="3" id="953" /> +<TGConnectingPoint num="4" id="954" /> +<TGConnectingPoint num="5" id="955" /> +<TGConnectingPoint num="6" id="956" /> +<TGConnectingPoint num="7" id="957" /> +<TGConnectingPoint num="8" id="958" /> +<TGConnectingPoint num="9" id="959" /> +</COMPONENT> + +<COMPONENT type="508" id="971" > +<cdparam x="129" y="401" /> +<sizeparam width="89" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data multicast" /> +<TGConnectingPoint num="0" id="961" /> +<TGConnectingPoint num="1" id="962" /> +<TGConnectingPoint num="2" id="963" /> +<TGConnectingPoint num="3" id="964" /> +<TGConnectingPoint num="4" id="965" /> +<TGConnectingPoint num="5" id="966" /> +<TGConnectingPoint num="6" id="967" /> +<TGConnectingPoint num="7" id="968" /> +<TGConnectingPoint num="8" id="969" /> +<TGConnectingPoint num="9" id="970" /> +</COMPONENT> + +<COMPONENT type="508" id="982" > +<cdparam x="231" y="401" /> +<sizeparam width="141" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data multicast with loss" /> +<TGConnectingPoint num="0" id="972" /> +<TGConnectingPoint num="1" id="973" /> +<TGConnectingPoint num="2" id="974" /> +<TGConnectingPoint num="3" id="975" /> +<TGConnectingPoint num="4" id="976" /> +<TGConnectingPoint num="5" id="977" /> +<TGConnectingPoint num="6" id="978" /> +<TGConnectingPoint num="7" id="979" /> +<TGConnectingPoint num="8" id="980" /> +<TGConnectingPoint num="9" id="981" /> +</COMPONENT> + +<COMPONENT type="501" id="998" > +<cdparam x="447" y="367" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="986" /> +<TGConnectingPoint num="1" id="987" /> +<TGConnectingPoint num="2" id="988" /> +<TGConnectingPoint num="3" id="989" /> +<TGConnectingPoint num="4" id="990" /> +<TGConnectingPoint num="5" id="991" /> +<TGConnectingPoint num="6" id="992" /> +<TGConnectingPoint num="7" id="993" /> +<TGConnectingPoint num="8" id="994" /> +<TGConnectingPoint num="9" id="995" /> +<TGConnectingPoint num="10" id="996" /> +<TGConnectingPoint num="11" id="997" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="983" > +<father id="998" num="0" /> +<cdparam x="422" y="377" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="984" > +<father id="998" num="1" /> +<cdparam x="482" y="377" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="985" > +<father id="998" num="2" /> +<cdparam x="467" y="412" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="504" id="1003" > +<cdparam x="484" y="515" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="999" /> +<TGConnectingPoint num="1" id="1000" /> +<TGConnectingPoint num="2" id="1001" /> +<TGConnectingPoint num="3" id="1002" /> +</COMPONENT> + +<COMPONENT type="501" id="1019" > +<cdparam x="211" y="351" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1007" /> +<TGConnectingPoint num="1" id="1008" /> +<TGConnectingPoint num="2" id="1009" /> +<TGConnectingPoint num="3" id="1010" /> +<TGConnectingPoint num="4" id="1011" /> +<TGConnectingPoint num="5" id="1012" /> +<TGConnectingPoint num="6" id="1013" /> +<TGConnectingPoint num="7" id="1014" /> +<TGConnectingPoint num="8" id="1015" /> +<TGConnectingPoint num="9" id="1016" /> +<TGConnectingPoint num="10" id="1017" /> +<TGConnectingPoint num="11" id="1018" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1004" > +<father id="1019" num="0" /> +<cdparam x="186" y="361" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1005" > +<father id="1019" num="1" /> +<cdparam x="246" y="361" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1006" > +<father id="1019" num="2" /> +<cdparam x="231" y="396" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="504" id="1024" > +<cdparam x="211" y="500" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1020" /> +<TGConnectingPoint num="1" id="1021" /> +<TGConnectingPoint num="2" id="1022" /> +<TGConnectingPoint num="3" id="1023" /> +</COMPONENT> + +<COMPONENT type="508" id="1035" > +<cdparam x="128" y="458" /> +<sizeparam width="196" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data multicast with desequencing" /> +<TGConnectingPoint num="0" id="1025" /> +<TGConnectingPoint num="1" id="1026" /> +<TGConnectingPoint num="2" id="1027" /> +<TGConnectingPoint num="3" id="1028" /> +<TGConnectingPoint num="4" id="1029" /> +<TGConnectingPoint num="5" id="1030" /> +<TGConnectingPoint num="6" id="1031" /> +<TGConnectingPoint num="7" id="1032" /> +<TGConnectingPoint num="8" id="1033" /> +<TGConnectingPoint num="9" id="1034" /> +</COMPONENT> + +<CONNECTOR type="105" id="1040" > +<cdparam x="708" y="413" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="615" y="339" id="858" /> +<P2 x="529" y="111" id="872" /> +<Point x="615" y="359" /> +<Point x="694" y="359" /> +<Point x="694" y="91" /> +<Point x="529" y="91" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1036" > +<father id="1040" num="0" /> +<cdparam x="615" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1037" > +<father id="1040" num="1" /> +<cdparam x="694" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1038" > +<father id="1040" num="2" /> +<cdparam x="694" y="91" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1039" > +<father id="1040" num="3" /> +<cdparam x="529" y="91" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1041" > +<cdparam x="482" y="438" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to parallel / synchro" value="null" /> +<P1 x="486" y="267" id="844" /> +<P2 x="462" y="282" id="875" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1042" > +<cdparam x="583" y="443" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to Reference to an IOD" value="null" /> +<P1 x="561" y="267" id="847" /> +<P2 x="615" y="294" id="857" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1043" > +<cdparam x="510" y="49" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="514" y="98" id="868" /> +<P2 x="514" y="96" id="870" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1044" > +<cdparam x="597" y="91" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to Reference to an IOD" value="null" /> +<P1 x="514" y="126" id="873" /> +<P2 x="514" y="118" id="899" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1045" > +<cdparam x="533" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to parallel / synchro" value="null" /> +<P1 x="443" y="225" id="924" /> +<P2 x="497" y="245" id="935" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1046" > +<cdparam x="376" y="342" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="462" y="312" id="878" /> +<P2 x="462" y="301" id="829" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1047" > +<cdparam x="519" y="226" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="422" y="382" id="987" /> +<P2 x="417" y="415" id="939" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1048" > +<cdparam x="503" y="435" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="549" y="459" id="951" /> +<P2 x="514" y="503" id="882" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1050" > +<cdparam x="335" y="376" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="422" y="326" id="830" /> +<P2 x="226" y="341" id="1007" /> +<Point x="226" y="326" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1049" > +<father id="1050" num="0" /> +<cdparam x="226" y="326" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1051" > +<cdparam x="606" y="261" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="590" y="225" id="913" /> +<P2 x="527" y="245" id="936" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1052" > +<cdparam x="533" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="554" y="143" id="901" /> +<P2 x="590" y="180" id="912" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1053" > +<cdparam x="453" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="474" y="143" id="900" /> +<P2 x="443" y="180" id="923" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1054" > +<cdparam x="513" y="318" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to parallel / synchro" value="null" /> +<P1 x="512" y="260" id="937" /> +<P2 x="512" y="262" id="842" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1055" > +<cdparam x="480" y="524" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="462" y="366" id="832" /> +<P2 x="462" y="357" id="986" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1056" > +<cdparam x="463" y="403" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="502" y="382" id="988" /> +<P2 x="549" y="414" id="950" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1057" > +<cdparam x="448" y="465" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="417" y="460" id="940" /> +<P2 x="484" y="503" id="881" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1058" > +<cdparam x="531" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="502" y="326" id="831" /> +<P2 x="676" y="414" id="885" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1059" > +<cdparam x="487" y="670" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="499" y="518" id="883" /> +<P2 x="499" y="515" id="999" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1060" > +<cdparam x="698" y="615" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="676" y="459" id="886" /> +<P2 x="514" y="530" id="1001" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1061" > +<cdparam x="226" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="226" y="406" id="1010" /> +<P2 x="226" y="453" id="1025" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1062" > +<cdparam x="266" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="266" y="366" id="1009" /> +<P2 x="301" y="396" id="972" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1063" > +<cdparam x="186" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="186" y="366" id="1008" /> +<P2 x="173" y="396" id="961" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1064" > +<cdparam x="226" y="504" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="226" y="498" id="1026" /> +<P2 x="226" y="500" id="1020" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1067" > +<cdparam x="332" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="301" y="441" id="973" /> +<P2 x="241" y="515" id="1022" /> +<Point x="351" y="453" /> +<Point x="351" y="515" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1065" > +<father id="1067" num="0" /> +<cdparam x="351" y="453" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1066" > +<father id="1067" num="1" /> +<cdparam x="351" y="515" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1070" > +<cdparam x="124" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="173" y="441" id="962" /> +<P2 x="211" y="515" id="1021" /> +<Point x="118" y="445" /> +<Point x="118" y="515" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1068" > +<father id="1070" num="0" /> +<cdparam x="118" y="445" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1069" > +<father id="1070" num="1" /> +<cdparam x="118" y="515" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1071" > +<cdparam x="226" y="565" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="226" y="530" id="1023" /> +<P2 x="484" y="530" id="1000" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1076" > +<cdparam x="499" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="499" y="545" id="1002" /> +<P2 x="447" y="297" id="876" /> +<Point x="499" y="557" /> +<Point x="102" y="557" /> +<Point x="102" y="277" /> +<Point x="447" y="277" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1072" > +<father id="1076" num="0" /> +<cdparam x="499" y="557" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1073" > +<father id="1076" num="1" /> +<cdparam x="102" y="557" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1074" > +<father id="1076" num="2" /> +<cdparam x="102" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1075" > +<father id="1076" num="3" /> +<cdparam x="447" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="1109" > +<cdparam x="143" y="311" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Sending application" /> +<TGConnectingPoint num="0" id="1077" /> +<TGConnectingPoint num="1" id="1078" /> +<TGConnectingPoint num="2" id="1079" /> +<TGConnectingPoint num="3" id="1080" /> +<TGConnectingPoint num="4" id="1081" /> +<TGConnectingPoint num="5" id="1082" /> +<TGConnectingPoint num="6" id="1083" /> +<TGConnectingPoint num="7" id="1084" /> +<TGConnectingPoint num="8" id="1085" /> +<TGConnectingPoint num="9" id="1086" /> +<TGConnectingPoint num="10" id="1087" /> +<TGConnectingPoint num="11" id="1088" /> +<TGConnectingPoint num="12" id="1089" /> +<TGConnectingPoint num="13" id="1090" /> +<TGConnectingPoint num="14" id="1091" /> +<TGConnectingPoint num="15" id="1092" /> +<TGConnectingPoint num="16" id="1093" /> +<TGConnectingPoint num="17" id="1094" /> +<TGConnectingPoint num="18" id="1095" /> +<TGConnectingPoint num="19" id="1096" /> +<TGConnectingPoint num="20" id="1097" /> +<TGConnectingPoint num="21" id="1098" /> +<TGConnectingPoint num="22" id="1099" /> +<TGConnectingPoint num="23" id="1100" /> +<TGConnectingPoint num="24" id="1101" /> +<TGConnectingPoint num="25" id="1102" /> +<TGConnectingPoint num="26" id="1103" /> +<TGConnectingPoint num="27" id="1104" /> +<TGConnectingPoint num="28" id="1105" /> +<TGConnectingPoint num="29" id="1106" /> +<TGConnectingPoint num="30" id="1107" /> +<TGConnectingPoint num="31" id="1108" /> +</COMPONENT> + +<COMPONENT type="700" id="1142" > +<cdparam x="790" y="334" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="n Receiving application" /> +<TGConnectingPoint num="0" id="1110" /> +<TGConnectingPoint num="1" id="1111" /> +<TGConnectingPoint num="2" id="1112" /> +<TGConnectingPoint num="3" id="1113" /> +<TGConnectingPoint num="4" id="1114" /> +<TGConnectingPoint num="5" id="1115" /> +<TGConnectingPoint num="6" id="1116" /> +<TGConnectingPoint num="7" id="1117" /> +<TGConnectingPoint num="8" id="1118" /> +<TGConnectingPoint num="9" id="1119" /> +<TGConnectingPoint num="10" id="1120" /> +<TGConnectingPoint num="11" id="1121" /> +<TGConnectingPoint num="12" id="1122" /> +<TGConnectingPoint num="13" id="1123" /> +<TGConnectingPoint num="14" id="1124" /> +<TGConnectingPoint num="15" id="1125" /> +<TGConnectingPoint num="16" id="1126" /> +<TGConnectingPoint num="17" id="1127" /> +<TGConnectingPoint num="18" id="1128" /> +<TGConnectingPoint num="19" id="1129" /> +<TGConnectingPoint num="20" id="1130" /> +<TGConnectingPoint num="21" id="1131" /> +<TGConnectingPoint num="22" id="1132" /> +<TGConnectingPoint num="23" id="1133" /> +<TGConnectingPoint num="24" id="1134" /> +<TGConnectingPoint num="25" id="1135" /> +<TGConnectingPoint num="26" id="1136" /> +<TGConnectingPoint num="27" id="1137" /> +<TGConnectingPoint num="28" id="1138" /> +<TGConnectingPoint num="29" id="1139" /> +<TGConnectingPoint num="30" id="1140" /> +<TGConnectingPoint num="31" id="1141" /> +</COMPONENT> + +<COMPONENT type="701" id="1167" > +<cdparam x="411" y="363" /> +<sizeparam width="89" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data multicast" /> +<TGConnectingPoint num="0" id="1143" /> +<TGConnectingPoint num="1" id="1144" /> +<TGConnectingPoint num="2" id="1145" /> +<TGConnectingPoint num="3" id="1146" /> +<TGConnectingPoint num="4" id="1147" /> +<TGConnectingPoint num="5" id="1148" /> +<TGConnectingPoint num="6" id="1149" /> +<TGConnectingPoint num="7" id="1150" /> +<TGConnectingPoint num="8" id="1151" /> +<TGConnectingPoint num="9" id="1152" /> +<TGConnectingPoint num="10" id="1153" /> +<TGConnectingPoint num="11" id="1154" /> +<TGConnectingPoint num="12" id="1155" /> +<TGConnectingPoint num="13" id="1156" /> +<TGConnectingPoint num="14" id="1157" /> +<TGConnectingPoint num="15" id="1158" /> +<TGConnectingPoint num="16" id="1159" /> +<TGConnectingPoint num="17" id="1160" /> +<TGConnectingPoint num="18" id="1161" /> +<TGConnectingPoint num="19" id="1162" /> +<TGConnectingPoint num="20" id="1163" /> +<TGConnectingPoint num="21" id="1164" /> +<TGConnectingPoint num="22" id="1165" /> +<TGConnectingPoint num="23" id="1166" /> +<extraparam> +<info extension="Parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1192" > +<cdparam x="486" y="463" /> +<sizeparam width="141" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data multicast with loss" /> +<TGConnectingPoint num="0" id="1168" /> +<TGConnectingPoint num="1" id="1169" /> +<TGConnectingPoint num="2" id="1170" /> +<TGConnectingPoint num="3" id="1171" /> +<TGConnectingPoint num="4" id="1172" /> +<TGConnectingPoint num="5" id="1173" /> +<TGConnectingPoint num="6" id="1174" /> +<TGConnectingPoint num="7" id="1175" /> +<TGConnectingPoint num="8" id="1176" /> +<TGConnectingPoint num="9" id="1177" /> +<TGConnectingPoint num="10" id="1178" /> +<TGConnectingPoint num="11" id="1179" /> +<TGConnectingPoint num="12" id="1180" /> +<TGConnectingPoint num="13" id="1181" /> +<TGConnectingPoint num="14" id="1182" /> +<TGConnectingPoint num="15" id="1183" /> +<TGConnectingPoint num="16" id="1184" /> +<TGConnectingPoint num="17" id="1185" /> +<TGConnectingPoint num="18" id="1186" /> +<TGConnectingPoint num="19" id="1187" /> +<TGConnectingPoint num="20" id="1188" /> +<TGConnectingPoint num="21" id="1189" /> +<TGConnectingPoint num="22" id="1190" /> +<TGConnectingPoint num="23" id="1191" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1217" > +<cdparam x="234" y="467" /> +<sizeparam width="196" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data multicast with desequencing" /> +<TGConnectingPoint num="0" id="1193" /> +<TGConnectingPoint num="1" id="1194" /> +<TGConnectingPoint num="2" id="1195" /> +<TGConnectingPoint num="3" id="1196" /> +<TGConnectingPoint num="4" id="1197" /> +<TGConnectingPoint num="5" id="1198" /> +<TGConnectingPoint num="6" id="1199" /> +<TGConnectingPoint num="7" id="1200" /> +<TGConnectingPoint num="8" id="1201" /> +<TGConnectingPoint num="9" id="1202" /> +<TGConnectingPoint num="10" id="1203" /> +<TGConnectingPoint num="11" id="1204" /> +<TGConnectingPoint num="12" id="1205" /> +<TGConnectingPoint num="13" id="1206" /> +<TGConnectingPoint num="14" id="1207" /> +<TGConnectingPoint num="15" id="1208" /> +<TGConnectingPoint num="16" id="1209" /> +<TGConnectingPoint num="17" id="1210" /> +<TGConnectingPoint num="18" id="1211" /> +<TGConnectingPoint num="19" id="1212" /> +<TGConnectingPoint num="20" id="1213" /> +<TGConnectingPoint num="21" id="1214" /> +<TGConnectingPoint num="22" id="1215" /> +<TGConnectingPoint num="23" id="1216" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1242" > +<cdparam x="496" y="557" /> +<sizeparam width="123" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data retransmission" /> +<TGConnectingPoint num="0" id="1218" /> +<TGConnectingPoint num="1" id="1219" /> +<TGConnectingPoint num="2" id="1220" /> +<TGConnectingPoint num="3" id="1221" /> +<TGConnectingPoint num="4" id="1222" /> +<TGConnectingPoint num="5" id="1223" /> +<TGConnectingPoint num="6" id="1224" /> +<TGConnectingPoint num="7" id="1225" /> +<TGConnectingPoint num="8" id="1226" /> +<TGConnectingPoint num="9" id="1227" /> +<TGConnectingPoint num="10" id="1228" /> +<TGConnectingPoint num="11" id="1229" /> +<TGConnectingPoint num="12" id="1230" /> +<TGConnectingPoint num="13" id="1231" /> +<TGConnectingPoint num="14" id="1232" /> +<TGConnectingPoint num="15" id="1233" /> +<TGConnectingPoint num="16" id="1234" /> +<TGConnectingPoint num="17" id="1235" /> +<TGConnectingPoint num="18" id="1236" /> +<TGConnectingPoint num="19" id="1237" /> +<TGConnectingPoint num="20" id="1238" /> +<TGConnectingPoint num="21" id="1239" /> +<TGConnectingPoint num="22" id="1240" /> +<TGConnectingPoint num="23" id="1241" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1267" > +<cdparam x="283" y="550" /> +<sizeparam width="96" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data reordering" /> +<TGConnectingPoint num="0" id="1243" /> +<TGConnectingPoint num="1" id="1244" /> +<TGConnectingPoint num="2" id="1245" /> +<TGConnectingPoint num="3" id="1246" /> +<TGConnectingPoint num="4" id="1247" /> +<TGConnectingPoint num="5" id="1248" /> +<TGConnectingPoint num="6" id="1249" /> +<TGConnectingPoint num="7" id="1250" /> +<TGConnectingPoint num="8" id="1251" /> +<TGConnectingPoint num="9" id="1252" /> +<TGConnectingPoint num="10" id="1253" /> +<TGConnectingPoint num="11" id="1254" /> +<TGConnectingPoint num="12" id="1255" /> +<TGConnectingPoint num="13" id="1256" /> +<TGConnectingPoint num="14" id="1257" /> +<TGConnectingPoint num="15" id="1258" /> +<TGConnectingPoint num="16" id="1259" /> +<TGConnectingPoint num="17" id="1260" /> +<TGConnectingPoint num="18" id="1261" /> +<TGConnectingPoint num="19" id="1262" /> +<TGConnectingPoint num="20" id="1263" /> +<TGConnectingPoint num="21" id="1264" /> +<TGConnectingPoint num="22" id="1265" /> +<TGConnectingPoint num="23" id="1266" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1292" > +<cdparam x="337" y="197" /> +<sizeparam width="91" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Group creation" /> +<TGConnectingPoint num="0" id="1268" /> +<TGConnectingPoint num="1" id="1269" /> +<TGConnectingPoint num="2" id="1270" /> +<TGConnectingPoint num="3" id="1271" /> +<TGConnectingPoint num="4" id="1272" /> +<TGConnectingPoint num="5" id="1273" /> +<TGConnectingPoint num="6" id="1274" /> +<TGConnectingPoint num="7" id="1275" /> +<TGConnectingPoint num="8" id="1276" /> +<TGConnectingPoint num="9" id="1277" /> +<TGConnectingPoint num="10" id="1278" /> +<TGConnectingPoint num="11" id="1279" /> +<TGConnectingPoint num="12" id="1280" /> +<TGConnectingPoint num="13" id="1281" /> +<TGConnectingPoint num="14" id="1282" /> +<TGConnectingPoint num="15" id="1283" /> +<TGConnectingPoint num="16" id="1284" /> +<TGConnectingPoint num="17" id="1285" /> +<TGConnectingPoint num="18" id="1286" /> +<TGConnectingPoint num="19" id="1287" /> +<TGConnectingPoint num="20" id="1288" /> +<TGConnectingPoint num="21" id="1289" /> +<TGConnectingPoint num="22" id="1290" /> +<TGConnectingPoint num="23" id="1291" /> +<extraparam> +<info extension="parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1317" > +<cdparam x="333" y="125" /> +<sizeparam width="91" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Group deletion" /> +<TGConnectingPoint num="0" id="1293" /> +<TGConnectingPoint num="1" id="1294" /> +<TGConnectingPoint num="2" id="1295" /> +<TGConnectingPoint num="3" id="1296" /> +<TGConnectingPoint num="4" id="1297" /> +<TGConnectingPoint num="5" id="1298" /> +<TGConnectingPoint num="6" id="1299" /> +<TGConnectingPoint num="7" id="1300" /> +<TGConnectingPoint num="8" id="1301" /> +<TGConnectingPoint num="9" id="1302" /> +<TGConnectingPoint num="10" id="1303" /> +<TGConnectingPoint num="11" id="1304" /> +<TGConnectingPoint num="12" id="1305" /> +<TGConnectingPoint num="13" id="1306" /> +<TGConnectingPoint num="14" id="1307" /> +<TGConnectingPoint num="15" id="1308" /> +<TGConnectingPoint num="16" id="1309" /> +<TGConnectingPoint num="17" id="1310" /> +<TGConnectingPoint num="18" id="1311" /> +<TGConnectingPoint num="19" id="1312" /> +<TGConnectingPoint num="20" id="1313" /> +<TGConnectingPoint num="21" id="1314" /> +<TGConnectingPoint num="22" id="1315" /> +<TGConnectingPoint num="23" id="1316" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1342" > +<cdparam x="526" y="199" /> +<sizeparam width="74" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Join group" /> +<TGConnectingPoint num="0" id="1318" /> +<TGConnectingPoint num="1" id="1319" /> +<TGConnectingPoint num="2" id="1320" /> +<TGConnectingPoint num="3" id="1321" /> +<TGConnectingPoint num="4" id="1322" /> +<TGConnectingPoint num="5" id="1323" /> +<TGConnectingPoint num="6" id="1324" /> +<TGConnectingPoint num="7" id="1325" /> +<TGConnectingPoint num="8" id="1326" /> +<TGConnectingPoint num="9" id="1327" /> +<TGConnectingPoint num="10" id="1328" /> +<TGConnectingPoint num="11" id="1329" /> +<TGConnectingPoint num="12" id="1330" /> +<TGConnectingPoint num="13" id="1331" /> +<TGConnectingPoint num="14" id="1332" /> +<TGConnectingPoint num="15" id="1333" /> +<TGConnectingPoint num="16" id="1334" /> +<TGConnectingPoint num="17" id="1335" /> +<TGConnectingPoint num="18" id="1336" /> +<TGConnectingPoint num="19" id="1337" /> +<TGConnectingPoint num="20" id="1338" /> +<TGConnectingPoint num="21" id="1339" /> +<TGConnectingPoint num="22" id="1340" /> +<TGConnectingPoint num="23" id="1341" /> +<extraparam> +<info extension="parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1367" > +<cdparam x="593" y="139" /> +<sizeparam width="78" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Leave group" /> +<TGConnectingPoint num="0" id="1343" /> +<TGConnectingPoint num="1" id="1344" /> +<TGConnectingPoint num="2" id="1345" /> +<TGConnectingPoint num="3" id="1346" /> +<TGConnectingPoint num="4" id="1347" /> +<TGConnectingPoint num="5" id="1348" /> +<TGConnectingPoint num="6" id="1349" /> +<TGConnectingPoint num="7" id="1350" /> +<TGConnectingPoint num="8" id="1351" /> +<TGConnectingPoint num="9" id="1352" /> +<TGConnectingPoint num="10" id="1353" /> +<TGConnectingPoint num="11" id="1354" /> +<TGConnectingPoint num="12" id="1355" /> +<TGConnectingPoint num="13" id="1356" /> +<TGConnectingPoint num="14" id="1357" /> +<TGConnectingPoint num="15" id="1358" /> +<TGConnectingPoint num="16" id="1359" /> +<TGConnectingPoint num="17" id="1360" /> +<TGConnectingPoint num="18" id="1361" /> +<TGConnectingPoint num="19" id="1362" /> +<TGConnectingPoint num="20" id="1363" /> +<TGConnectingPoint num="21" id="1364" /> +<TGConnectingPoint num="22" id="1365" /> +<TGConnectingPoint num="23" id="1366" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1392" > +<cdparam x="285" y="278" /> +<sizeparam width="188" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Group creation with specific QoS" /> +<TGConnectingPoint num="0" id="1368" /> +<TGConnectingPoint num="1" id="1369" /> +<TGConnectingPoint num="2" id="1370" /> +<TGConnectingPoint num="3" id="1371" /> +<TGConnectingPoint num="4" id="1372" /> +<TGConnectingPoint num="5" id="1373" /> +<TGConnectingPoint num="6" id="1374" /> +<TGConnectingPoint num="7" id="1375" /> +<TGConnectingPoint num="8" id="1376" /> +<TGConnectingPoint num="9" id="1377" /> +<TGConnectingPoint num="10" id="1378" /> +<TGConnectingPoint num="11" id="1379" /> +<TGConnectingPoint num="12" id="1380" /> +<TGConnectingPoint num="13" id="1381" /> +<TGConnectingPoint num="14" id="1382" /> +<TGConnectingPoint num="15" id="1383" /> +<TGConnectingPoint num="16" id="1384" /> +<TGConnectingPoint num="17" id="1385" /> +<TGConnectingPoint num="18" id="1386" /> +<TGConnectingPoint num="19" id="1387" /> +<TGConnectingPoint num="20" id="1388" /> +<TGConnectingPoint num="21" id="1389" /> +<TGConnectingPoint num="22" id="1390" /> +<TGConnectingPoint num="23" id="1391" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1417" > +<cdparam x="483" y="290" /> +<sizeparam width="165" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Join group with specific QoS" /> +<TGConnectingPoint num="0" id="1393" /> +<TGConnectingPoint num="1" id="1394" /> +<TGConnectingPoint num="2" id="1395" /> +<TGConnectingPoint num="3" id="1396" /> +<TGConnectingPoint num="4" id="1397" /> +<TGConnectingPoint num="5" id="1398" /> +<TGConnectingPoint num="6" id="1399" /> +<TGConnectingPoint num="7" id="1400" /> +<TGConnectingPoint num="8" id="1401" /> +<TGConnectingPoint num="9" id="1402" /> +<TGConnectingPoint num="10" id="1403" /> +<TGConnectingPoint num="11" id="1404" /> +<TGConnectingPoint num="12" id="1405" /> +<TGConnectingPoint num="13" id="1406" /> +<TGConnectingPoint num="14" id="1407" /> +<TGConnectingPoint num="15" id="1408" /> +<TGConnectingPoint num="16" id="1409" /> +<TGConnectingPoint num="17" id="1410" /> +<TGConnectingPoint num="18" id="1411" /> +<TGConnectingPoint num="19" id="1412" /> +<TGConnectingPoint num="20" id="1413" /> +<TGConnectingPoint num="21" id="1414" /> +<TGConnectingPoint num="22" id="1415" /> +<TGConnectingPoint num="23" id="1416" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="1426" > +<cdparam x="220" y="97" /> +<sizeparam width="481" height="522" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Multicast" /> +<TGConnectingPoint num="0" id="1418" /> +<TGConnectingPoint num="1" id="1419" /> +<TGConnectingPoint num="2" id="1420" /> +<TGConnectingPoint num="3" id="1421" /> +<TGConnectingPoint num="4" id="1422" /> +<TGConnectingPoint num="5" id="1423" /> +<TGConnectingPoint num="6" id="1424" /> +<TGConnectingPoint num="7" id="1425" /> +</COMPONENT> + +<CONNECTOR type="113" id="1427" > +<cdparam x="1003" y="595" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="556" y="463" id="1168" /> +<P2 x="455" y="403" id="1150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="1428" > +<cdparam x="743" y="596" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="332" y="467" id="1193" /> +<P2 x="455" y="403" id="1146" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1429" > +<cdparam x="385" y="319" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="411" y="383" id="1144" /> +<P2 x="173" y="346" id="1086" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1430" > +<cdparam x="698" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="790" y="334" id="1110" /> +<P2 x="600" y="219" id="1320" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1431" > +<cdparam x="153" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="173" y="328" id="1085" /> +<P2 x="337" y="217" id="1269" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1432" > +<cdparam x="765" y="552" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="332" y="507" id="1196" /> +<P2 x="331" y="550" id="1243" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1433" > +<cdparam x="956" y="554" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="556" y="503" id="1171" /> +<P2 x="557" y="557" id="1218" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1434" > +<cdparam x="149" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="173" y="328" id="1097" /> +<P2 x="333" y="145" id="1294" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="1435" > +<cdparam x="548" y="280" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="379" y="278" id="1368" /> +<P2 x="382" y="237" id="1271" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1436" > +<cdparam x="897" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="805" y="334" id="1115" /> +<P2 x="671" y="159" id="1345" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="1437" > +<cdparam x="603" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="565" y="290" id="1393" /> +<P2 x="563" y="239" id="1321" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1438" > +<cdparam x="997" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="790" y="386" id="1113" /> +<P2 x="500" y="383" id="1145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1440" > +<cdparam x="790" y="334" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="790" y="334" id="1122" /> +<P2 x="424" y="145" id="1295" /> +<Point x="577" y="174" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1439" > +<father id="1440" num="0" /> +<cdparam x="577" y="174" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</UseCaseDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/Protocol_example1.xml b/preinstallTTool/linux/TTool/modeling/Protocol_example1.xml new file mode 100755 index 0000000000000000000000000000000000000000..328dd98f2995324bab132aaa8e3610e8ecd57dac --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/Protocol_example1.xml @@ -0,0 +1,832 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.80beta3c"> + +<Modeling type="Analysis" nameTab="Analysis" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="501" id="8" > +<cdparam x="305" y="279" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<TGConnectingPoint num="2" id="6" /> +<TGConnectingPoint num="3" id="7" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1" > +<father id="8" num="0" /> +<cdparam x="230" y="289" /> +<sizeparam width="66" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[client / x<3 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2" > +<father id="8" num="1" /> +<cdparam x="360" y="289" /> +<sizeparam width="66" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[client / x>2 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3" > +<father id="8" num="2" /> +<cdparam x="325" y="324" /> +<sizeparam width="79" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[client / x == 1 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="502" id="10" > +<cdparam x="396" y="25" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="9" /> +</COMPONENT> + +<COMPONENT type="506" id="13" > +<cdparam x="390" y="347" /> +<sizeparam width="120" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="ConnectionRelease" /> +<TGConnectingPoint num="0" id="11" /> +<TGConnectingPoint num="1" id="12" /> +</COMPONENT> + +<COMPONENT type="503" id="15" > +<cdparam x="440" y="425" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="14" /> +</COMPONENT> + +<COMPONENT type="506" id="18" > +<cdparam x="195" y="354" /> +<sizeparam width="82" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="DataTransfer" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +</COMPONENT> + +<COMPONENT type="504" id="23" > +<cdparam x="304" y="226" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +</COMPONENT> + +<COMPONENT type="506" id="26" > +<cdparam x="351" y="67" /> +<sizeparam width="105" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="ConnectionSetup" /> +<TGConnectingPoint num="0" id="24" /> +<TGConnectingPoint num="1" id="25" /> +</COMPONENT> + +<COMPONENT type="507" id="33" > +<cdparam x="328" y="171" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +<TGConnectingPoint num="2" id="29" /> +<TGConnectingPoint num="3" id="30" /> +<TGConnectingPoint num="4" id="31" /> +<TGConnectingPoint num="5" id="32" /> +</COMPONENT> + +<COMPONENT type="506" id="36" > +<cdparam x="455" y="220" /> +<sizeparam width="112" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="ConnectionBroken" /> +<TGConnectingPoint num="0" id="34" /> +<TGConnectingPoint num="1" id="35" /> +</COMPONENT> + +<COMPONENT type="503" id="38" > +<cdparam x="501" y="291" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="37" /> +</COMPONENT> + +<CONNECTOR type="105" id="39" > +<cdparam x="367" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="360" y="294" id="6" /> +<P2 x="450" y="342" id="11" /> +</CONNECTOR> +<CONNECTOR type="105" id="40" > +<cdparam x="425" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="403" y="45" id="9" /> +<P2 x="403" y="62" id="24" /> +</CONNECTOR> +<CONNECTOR type="105" id="41" > +<cdparam x="450" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="450" y="387" id="12" /> +<P2 x="450" y="420" id="14" /> +</CONNECTOR> +<CONNECTOR type="105" id="42" > +<cdparam x="287" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="280" y="294" id="5" /> +<P2 x="236" y="349" id="16" /> +</CONNECTOR> +<CONNECTOR type="105" id="43" > +<cdparam x="320" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="319" y="256" id="22" /> +<P2 x="320" y="269" id="4" /> +</CONNECTOR> +<CONNECTOR type="105" id="48" > +<cdparam x="236" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to junction" value="null" /> +<P1 x="236" y="394" id="17" /> +<P2 x="304" y="241" id="20" /> +<Point x="236" y="419" /> +<Point x="177" y="419" /> +<Point x="177" y="200" /> +<Point x="304" y="200" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="44" > +<father id="48" num="0" /> +<cdparam x="236" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="45" > +<father id="48" num="1" /> +<cdparam x="177" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="46" > +<father id="48" num="2" /> +<cdparam x="177" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="47" > +<father id="48" num="3" /> +<cdparam x="304" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="49" > +<cdparam x="403" y="107" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to junction" value="null" /> +<P1 x="403" y="107" id="25" /> +<P2 x="403" y="171" id="27" /> +</CONNECTOR> +<CONNECTOR type="105" id="50" > +<cdparam x="380" y="217" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="353" y="176" id="28" /> +<P2 x="319" y="226" id="19" /> +</CONNECTOR> +<CONNECTOR type="105" id="51" > +<cdparam x="452" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to Reference to a SD" value="null" /> +<P1 x="452" y="176" id="32" /> +<P2 x="511" y="215" id="34" /> +</CONNECTOR> +<CONNECTOR type="105" id="52" > +<cdparam x="511" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="511" y="260" id="35" /> +<P2 x="511" y="286" id="37" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<SequenceDiagramPanel name="DataTransfer" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="105" > +<cdparam x="248" y="103" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="56" /> +<TGConnectingPoint num="1" id="57" /> +<TGConnectingPoint num="2" id="58" /> +<TGConnectingPoint num="3" id="59" /> +<TGConnectingPoint num="4" id="60" /> +<TGConnectingPoint num="5" id="61" /> +<TGConnectingPoint num="6" id="62" /> +<TGConnectingPoint num="7" id="63" /> +<TGConnectingPoint num="8" id="64" /> +<TGConnectingPoint num="9" id="65" /> +<TGConnectingPoint num="10" id="66" /> +<TGConnectingPoint num="11" id="67" /> +<TGConnectingPoint num="12" id="68" /> +<TGConnectingPoint num="13" id="69" /> +<TGConnectingPoint num="14" id="70" /> +<TGConnectingPoint num="15" id="71" /> +<TGConnectingPoint num="16" id="72" /> +<TGConnectingPoint num="17" id="73" /> +<TGConnectingPoint num="18" id="74" /> +<TGConnectingPoint num="19" id="75" /> +<TGConnectingPoint num="20" id="76" /> +<TGConnectingPoint num="21" id="77" /> +<TGConnectingPoint num="22" id="78" /> +<TGConnectingPoint num="23" id="79" /> +<TGConnectingPoint num="24" id="80" /> +<TGConnectingPoint num="25" id="81" /> +<TGConnectingPoint num="26" id="82" /> +<TGConnectingPoint num="27" id="83" /> +<TGConnectingPoint num="28" id="84" /> +<TGConnectingPoint num="29" id="85" /> +<TGConnectingPoint num="30" id="86" /> +<TGConnectingPoint num="31" id="87" /> +<TGConnectingPoint num="32" id="88" /> +<TGConnectingPoint num="33" id="89" /> +<TGConnectingPoint num="34" id="90" /> +<TGConnectingPoint num="35" id="91" /> +<TGConnectingPoint num="36" id="92" /> +<TGConnectingPoint num="37" id="93" /> +<TGConnectingPoint num="38" id="94" /> +<TGConnectingPoint num="39" id="95" /> +<TGConnectingPoint num="40" id="96" /> +<TGConnectingPoint num="41" id="97" /> +<TGConnectingPoint num="42" id="98" /> +<TGConnectingPoint num="43" id="99" /> +<TGConnectingPoint num="44" id="100" /> +<TGConnectingPoint num="45" id="101" /> +<TGConnectingPoint num="46" id="102" /> +<TGConnectingPoint num="47" id="103" /> +<TGConnectingPoint num="48" id="104" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="53" > +<father id="105" num="0" /> +<cdparam x="253" y="276" /> +<sizeparam width="50" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="x = x +1" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="603" id="54" > +<father id="105" num="1" /> +<cdparam x="266" y="327" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="478" /> +<infoparam name="setting timer" value="{timer=myTimer, duration=10}" /> +<extraparam> +<Interval timer="myTimer" duration="10" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="605" id="55" > +<father id="105" num="2" /> +<cdparam x="266" y="397" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="478" /> +<infoparam name="timer expiration" value="{timer=myTimer}" /> +<extraparam> +<Interval timer="myTimer" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="159" > +<cdparam x="480" y="103" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="110" /> +<TGConnectingPoint num="1" id="111" /> +<TGConnectingPoint num="2" id="112" /> +<TGConnectingPoint num="3" id="113" /> +<TGConnectingPoint num="4" id="114" /> +<TGConnectingPoint num="5" id="115" /> +<TGConnectingPoint num="6" id="116" /> +<TGConnectingPoint num="7" id="117" /> +<TGConnectingPoint num="8" id="118" /> +<TGConnectingPoint num="9" id="119" /> +<TGConnectingPoint num="10" id="120" /> +<TGConnectingPoint num="11" id="121" /> +<TGConnectingPoint num="12" id="122" /> +<TGConnectingPoint num="13" id="123" /> +<TGConnectingPoint num="14" id="124" /> +<TGConnectingPoint num="15" id="125" /> +<TGConnectingPoint num="16" id="126" /> +<TGConnectingPoint num="17" id="127" /> +<TGConnectingPoint num="18" id="128" /> +<TGConnectingPoint num="19" id="129" /> +<TGConnectingPoint num="20" id="130" /> +<TGConnectingPoint num="21" id="131" /> +<TGConnectingPoint num="22" id="132" /> +<TGConnectingPoint num="23" id="133" /> +<TGConnectingPoint num="24" id="134" /> +<TGConnectingPoint num="25" id="135" /> +<TGConnectingPoint num="26" id="136" /> +<TGConnectingPoint num="27" id="137" /> +<TGConnectingPoint num="28" id="138" /> +<TGConnectingPoint num="29" id="139" /> +<TGConnectingPoint num="30" id="140" /> +<TGConnectingPoint num="31" id="141" /> +<TGConnectingPoint num="32" id="142" /> +<TGConnectingPoint num="33" id="143" /> +<TGConnectingPoint num="34" id="144" /> +<TGConnectingPoint num="35" id="145" /> +<TGConnectingPoint num="36" id="146" /> +<TGConnectingPoint num="37" id="147" /> +<TGConnectingPoint num="38" id="148" /> +<TGConnectingPoint num="39" id="149" /> +<TGConnectingPoint num="40" id="150" /> +<TGConnectingPoint num="41" id="151" /> +<TGConnectingPoint num="42" id="152" /> +<TGConnectingPoint num="43" id="153" /> +<TGConnectingPoint num="44" id="154" /> +<TGConnectingPoint num="45" id="155" /> +<TGConnectingPoint num="46" id="156" /> +<TGConnectingPoint num="47" id="157" /> +<TGConnectingPoint num="48" id="158" /> +</COMPONENT> +<SUBCOMPONENT type="601" id="107" > +<father id="159" num="0" /> +<cdparam x="485" y="163" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="106" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="109" > +<father id="159" num="1" /> +<cdparam x="485" y="213" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="108" /> +</SUBCOMPONENT> + +<CONNECTOR type="106" id="160" > +<cdparam x="253" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="getData" /> +<P1 x="253" y="163" id="61" /> +<P2 x="485" y="163" id="115" /> +</CONNECTOR> +<CONNECTOR type="106" id="161" > +<cdparam x="485" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="data" /> +<P1 x="485" y="213" id="120" /> +<P2 x="253" y="213" id="66" /> +</CONNECTOR> +<CONNECTOR type="109" id="162" > +<cdparam x="495" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{5..10}" /> +<P1 x="495" y="163" id="106" /> +<P2 x="495" y="213" id="108" /> +<extraparam> +<Interval minConstraint="5" maxConstraint="10" /> +</extraparam> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="ConnectionRelease" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="212" > +<cdparam x="265" y="99" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="163" /> +<TGConnectingPoint num="1" id="164" /> +<TGConnectingPoint num="2" id="165" /> +<TGConnectingPoint num="3" id="166" /> +<TGConnectingPoint num="4" id="167" /> +<TGConnectingPoint num="5" id="168" /> +<TGConnectingPoint num="6" id="169" /> +<TGConnectingPoint num="7" id="170" /> +<TGConnectingPoint num="8" id="171" /> +<TGConnectingPoint num="9" id="172" /> +<TGConnectingPoint num="10" id="173" /> +<TGConnectingPoint num="11" id="174" /> +<TGConnectingPoint num="12" id="175" /> +<TGConnectingPoint num="13" id="176" /> +<TGConnectingPoint num="14" id="177" /> +<TGConnectingPoint num="15" id="178" /> +<TGConnectingPoint num="16" id="179" /> +<TGConnectingPoint num="17" id="180" /> +<TGConnectingPoint num="18" id="181" /> +<TGConnectingPoint num="19" id="182" /> +<TGConnectingPoint num="20" id="183" /> +<TGConnectingPoint num="21" id="184" /> +<TGConnectingPoint num="22" id="185" /> +<TGConnectingPoint num="23" id="186" /> +<TGConnectingPoint num="24" id="187" /> +<TGConnectingPoint num="25" id="188" /> +<TGConnectingPoint num="26" id="189" /> +<TGConnectingPoint num="27" id="190" /> +<TGConnectingPoint num="28" id="191" /> +<TGConnectingPoint num="29" id="192" /> +<TGConnectingPoint num="30" id="193" /> +<TGConnectingPoint num="31" id="194" /> +<TGConnectingPoint num="32" id="195" /> +<TGConnectingPoint num="33" id="196" /> +<TGConnectingPoint num="34" id="197" /> +<TGConnectingPoint num="35" id="198" /> +<TGConnectingPoint num="36" id="199" /> +<TGConnectingPoint num="37" id="200" /> +<TGConnectingPoint num="38" id="201" /> +<TGConnectingPoint num="39" id="202" /> +<TGConnectingPoint num="40" id="203" /> +<TGConnectingPoint num="41" id="204" /> +<TGConnectingPoint num="42" id="205" /> +<TGConnectingPoint num="43" id="206" /> +<TGConnectingPoint num="44" id="207" /> +<TGConnectingPoint num="45" id="208" /> +<TGConnectingPoint num="46" id="209" /> +<TGConnectingPoint num="47" id="210" /> +<TGConnectingPoint num="48" id="211" /> +</COMPONENT> + +<COMPONENT type="606" id="262" > +<cdparam x="526" y="99" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="213" /> +<TGConnectingPoint num="1" id="214" /> +<TGConnectingPoint num="2" id="215" /> +<TGConnectingPoint num="3" id="216" /> +<TGConnectingPoint num="4" id="217" /> +<TGConnectingPoint num="5" id="218" /> +<TGConnectingPoint num="6" id="219" /> +<TGConnectingPoint num="7" id="220" /> +<TGConnectingPoint num="8" id="221" /> +<TGConnectingPoint num="9" id="222" /> +<TGConnectingPoint num="10" id="223" /> +<TGConnectingPoint num="11" id="224" /> +<TGConnectingPoint num="12" id="225" /> +<TGConnectingPoint num="13" id="226" /> +<TGConnectingPoint num="14" id="227" /> +<TGConnectingPoint num="15" id="228" /> +<TGConnectingPoint num="16" id="229" /> +<TGConnectingPoint num="17" id="230" /> +<TGConnectingPoint num="18" id="231" /> +<TGConnectingPoint num="19" id="232" /> +<TGConnectingPoint num="20" id="233" /> +<TGConnectingPoint num="21" id="234" /> +<TGConnectingPoint num="22" id="235" /> +<TGConnectingPoint num="23" id="236" /> +<TGConnectingPoint num="24" id="237" /> +<TGConnectingPoint num="25" id="238" /> +<TGConnectingPoint num="26" id="239" /> +<TGConnectingPoint num="27" id="240" /> +<TGConnectingPoint num="28" id="241" /> +<TGConnectingPoint num="29" id="242" /> +<TGConnectingPoint num="30" id="243" /> +<TGConnectingPoint num="31" id="244" /> +<TGConnectingPoint num="32" id="245" /> +<TGConnectingPoint num="33" id="246" /> +<TGConnectingPoint num="34" id="247" /> +<TGConnectingPoint num="35" id="248" /> +<TGConnectingPoint num="36" id="249" /> +<TGConnectingPoint num="37" id="250" /> +<TGConnectingPoint num="38" id="251" /> +<TGConnectingPoint num="39" id="252" /> +<TGConnectingPoint num="40" id="253" /> +<TGConnectingPoint num="41" id="254" /> +<TGConnectingPoint num="42" id="255" /> +<TGConnectingPoint num="43" id="256" /> +<TGConnectingPoint num="44" id="257" /> +<TGConnectingPoint num="45" id="258" /> +<TGConnectingPoint num="46" id="259" /> +<TGConnectingPoint num="47" id="260" /> +<TGConnectingPoint num="48" id="261" /> +</COMPONENT> + +<CONNECTOR type="106" id="263" > +<cdparam x="270" y="159" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionRelease" /> +<P1 x="270" y="159" id="168" /> +<P2 x="531" y="159" id="218" /> +</CONNECTOR> +<CONNECTOR type="106" id="264" > +<cdparam x="502" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="Ok" /> +<P1 x="531" y="209" id="223" /> +<P2 x="270" y="209" id="173" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="ConnectionSetup" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="314" > +<cdparam x="227" y="96" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="265" /> +<TGConnectingPoint num="1" id="266" /> +<TGConnectingPoint num="2" id="267" /> +<TGConnectingPoint num="3" id="268" /> +<TGConnectingPoint num="4" id="269" /> +<TGConnectingPoint num="5" id="270" /> +<TGConnectingPoint num="6" id="271" /> +<TGConnectingPoint num="7" id="272" /> +<TGConnectingPoint num="8" id="273" /> +<TGConnectingPoint num="9" id="274" /> +<TGConnectingPoint num="10" id="275" /> +<TGConnectingPoint num="11" id="276" /> +<TGConnectingPoint num="12" id="277" /> +<TGConnectingPoint num="13" id="278" /> +<TGConnectingPoint num="14" id="279" /> +<TGConnectingPoint num="15" id="280" /> +<TGConnectingPoint num="16" id="281" /> +<TGConnectingPoint num="17" id="282" /> +<TGConnectingPoint num="18" id="283" /> +<TGConnectingPoint num="19" id="284" /> +<TGConnectingPoint num="20" id="285" /> +<TGConnectingPoint num="21" id="286" /> +<TGConnectingPoint num="22" id="287" /> +<TGConnectingPoint num="23" id="288" /> +<TGConnectingPoint num="24" id="289" /> +<TGConnectingPoint num="25" id="290" /> +<TGConnectingPoint num="26" id="291" /> +<TGConnectingPoint num="27" id="292" /> +<TGConnectingPoint num="28" id="293" /> +<TGConnectingPoint num="29" id="294" /> +<TGConnectingPoint num="30" id="295" /> +<TGConnectingPoint num="31" id="296" /> +<TGConnectingPoint num="32" id="297" /> +<TGConnectingPoint num="33" id="298" /> +<TGConnectingPoint num="34" id="299" /> +<TGConnectingPoint num="35" id="300" /> +<TGConnectingPoint num="36" id="301" /> +<TGConnectingPoint num="37" id="302" /> +<TGConnectingPoint num="38" id="303" /> +<TGConnectingPoint num="39" id="304" /> +<TGConnectingPoint num="40" id="305" /> +<TGConnectingPoint num="41" id="306" /> +<TGConnectingPoint num="42" id="307" /> +<TGConnectingPoint num="43" id="308" /> +<TGConnectingPoint num="44" id="309" /> +<TGConnectingPoint num="45" id="310" /> +<TGConnectingPoint num="46" id="311" /> +<TGConnectingPoint num="47" id="312" /> +<TGConnectingPoint num="48" id="313" /> +</COMPONENT> + +<COMPONENT type="606" id="364" > +<cdparam x="459" y="96" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="315" /> +<TGConnectingPoint num="1" id="316" /> +<TGConnectingPoint num="2" id="317" /> +<TGConnectingPoint num="3" id="318" /> +<TGConnectingPoint num="4" id="319" /> +<TGConnectingPoint num="5" id="320" /> +<TGConnectingPoint num="6" id="321" /> +<TGConnectingPoint num="7" id="322" /> +<TGConnectingPoint num="8" id="323" /> +<TGConnectingPoint num="9" id="324" /> +<TGConnectingPoint num="10" id="325" /> +<TGConnectingPoint num="11" id="326" /> +<TGConnectingPoint num="12" id="327" /> +<TGConnectingPoint num="13" id="328" /> +<TGConnectingPoint num="14" id="329" /> +<TGConnectingPoint num="15" id="330" /> +<TGConnectingPoint num="16" id="331" /> +<TGConnectingPoint num="17" id="332" /> +<TGConnectingPoint num="18" id="333" /> +<TGConnectingPoint num="19" id="334" /> +<TGConnectingPoint num="20" id="335" /> +<TGConnectingPoint num="21" id="336" /> +<TGConnectingPoint num="22" id="337" /> +<TGConnectingPoint num="23" id="338" /> +<TGConnectingPoint num="24" id="339" /> +<TGConnectingPoint num="25" id="340" /> +<TGConnectingPoint num="26" id="341" /> +<TGConnectingPoint num="27" id="342" /> +<TGConnectingPoint num="28" id="343" /> +<TGConnectingPoint num="29" id="344" /> +<TGConnectingPoint num="30" id="345" /> +<TGConnectingPoint num="31" id="346" /> +<TGConnectingPoint num="32" id="347" /> +<TGConnectingPoint num="33" id="348" /> +<TGConnectingPoint num="34" id="349" /> +<TGConnectingPoint num="35" id="350" /> +<TGConnectingPoint num="36" id="351" /> +<TGConnectingPoint num="37" id="352" /> +<TGConnectingPoint num="38" id="353" /> +<TGConnectingPoint num="39" id="354" /> +<TGConnectingPoint num="40" id="355" /> +<TGConnectingPoint num="41" id="356" /> +<TGConnectingPoint num="42" id="357" /> +<TGConnectingPoint num="43" id="358" /> +<TGConnectingPoint num="44" id="359" /> +<TGConnectingPoint num="45" id="360" /> +<TGConnectingPoint num="46" id="361" /> +<TGConnectingPoint num="47" id="362" /> +<TGConnectingPoint num="48" id="363" /> +</COMPONENT> + +<CONNECTOR type="106" id="365" > +<cdparam x="232" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionReq" /> +<P1 x="232" y="156" id="270" /> +<P2 x="464" y="156" id="320" /> +</CONNECTOR> +<CONNECTOR type="106" id="366" > +<cdparam x="464" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionOK" /> +<P1 x="464" y="206" id="325" /> +<P2 x="232" y="206" id="275" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="ConnectionBroken" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="416" > +<cdparam x="235" y="62" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="367" /> +<TGConnectingPoint num="1" id="368" /> +<TGConnectingPoint num="2" id="369" /> +<TGConnectingPoint num="3" id="370" /> +<TGConnectingPoint num="4" id="371" /> +<TGConnectingPoint num="5" id="372" /> +<TGConnectingPoint num="6" id="373" /> +<TGConnectingPoint num="7" id="374" /> +<TGConnectingPoint num="8" id="375" /> +<TGConnectingPoint num="9" id="376" /> +<TGConnectingPoint num="10" id="377" /> +<TGConnectingPoint num="11" id="378" /> +<TGConnectingPoint num="12" id="379" /> +<TGConnectingPoint num="13" id="380" /> +<TGConnectingPoint num="14" id="381" /> +<TGConnectingPoint num="15" id="382" /> +<TGConnectingPoint num="16" id="383" /> +<TGConnectingPoint num="17" id="384" /> +<TGConnectingPoint num="18" id="385" /> +<TGConnectingPoint num="19" id="386" /> +<TGConnectingPoint num="20" id="387" /> +<TGConnectingPoint num="21" id="388" /> +<TGConnectingPoint num="22" id="389" /> +<TGConnectingPoint num="23" id="390" /> +<TGConnectingPoint num="24" id="391" /> +<TGConnectingPoint num="25" id="392" /> +<TGConnectingPoint num="26" id="393" /> +<TGConnectingPoint num="27" id="394" /> +<TGConnectingPoint num="28" id="395" /> +<TGConnectingPoint num="29" id="396" /> +<TGConnectingPoint num="30" id="397" /> +<TGConnectingPoint num="31" id="398" /> +<TGConnectingPoint num="32" id="399" /> +<TGConnectingPoint num="33" id="400" /> +<TGConnectingPoint num="34" id="401" /> +<TGConnectingPoint num="35" id="402" /> +<TGConnectingPoint num="36" id="403" /> +<TGConnectingPoint num="37" id="404" /> +<TGConnectingPoint num="38" id="405" /> +<TGConnectingPoint num="39" id="406" /> +<TGConnectingPoint num="40" id="407" /> +<TGConnectingPoint num="41" id="408" /> +<TGConnectingPoint num="42" id="409" /> +<TGConnectingPoint num="43" id="410" /> +<TGConnectingPoint num="44" id="411" /> +<TGConnectingPoint num="45" id="412" /> +<TGConnectingPoint num="46" id="413" /> +<TGConnectingPoint num="47" id="414" /> +<TGConnectingPoint num="48" id="415" /> +</COMPONENT> + +<COMPONENT type="606" id="471" > +<cdparam x="467" y="62" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="422" /> +<TGConnectingPoint num="1" id="423" /> +<TGConnectingPoint num="2" id="424" /> +<TGConnectingPoint num="3" id="425" /> +<TGConnectingPoint num="4" id="426" /> +<TGConnectingPoint num="5" id="427" /> +<TGConnectingPoint num="6" id="428" /> +<TGConnectingPoint num="7" id="429" /> +<TGConnectingPoint num="8" id="430" /> +<TGConnectingPoint num="9" id="431" /> +<TGConnectingPoint num="10" id="432" /> +<TGConnectingPoint num="11" id="433" /> +<TGConnectingPoint num="12" id="434" /> +<TGConnectingPoint num="13" id="435" /> +<TGConnectingPoint num="14" id="436" /> +<TGConnectingPoint num="15" id="437" /> +<TGConnectingPoint num="16" id="438" /> +<TGConnectingPoint num="17" id="439" /> +<TGConnectingPoint num="18" id="440" /> +<TGConnectingPoint num="19" id="441" /> +<TGConnectingPoint num="20" id="442" /> +<TGConnectingPoint num="21" id="443" /> +<TGConnectingPoint num="22" id="444" /> +<TGConnectingPoint num="23" id="445" /> +<TGConnectingPoint num="24" id="446" /> +<TGConnectingPoint num="25" id="447" /> +<TGConnectingPoint num="26" id="448" /> +<TGConnectingPoint num="27" id="449" /> +<TGConnectingPoint num="28" id="450" /> +<TGConnectingPoint num="29" id="451" /> +<TGConnectingPoint num="30" id="452" /> +<TGConnectingPoint num="31" id="453" /> +<TGConnectingPoint num="32" id="454" /> +<TGConnectingPoint num="33" id="455" /> +<TGConnectingPoint num="34" id="456" /> +<TGConnectingPoint num="35" id="457" /> +<TGConnectingPoint num="36" id="458" /> +<TGConnectingPoint num="37" id="459" /> +<TGConnectingPoint num="38" id="460" /> +<TGConnectingPoint num="39" id="461" /> +<TGConnectingPoint num="40" id="462" /> +<TGConnectingPoint num="41" id="463" /> +<TGConnectingPoint num="42" id="464" /> +<TGConnectingPoint num="43" id="465" /> +<TGConnectingPoint num="44" id="466" /> +<TGConnectingPoint num="45" id="467" /> +<TGConnectingPoint num="46" id="468" /> +<TGConnectingPoint num="47" id="469" /> +<TGConnectingPoint num="48" id="470" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="417" > +<father id="471" num="0" /> +<cdparam x="472" y="96" /> +<sizeparam width="105" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="broke = broke + 1" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="419" > +<father id="471" num="1" /> +<cdparam x="472" y="96" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="418" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="421" > +<father id="471" num="2" /> +<cdparam x="472" y="172" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="420" /> +</SUBCOMPONENT> + +<CONNECTOR type="106" id="472" > +<cdparam x="472" y="172" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionBroken" /> +<P1 x="472" y="172" id="432" /> +<P2 x="240" y="172" id="377" /> +</CONNECTOR> +<CONNECTOR type="109" id="473" > +<cdparam x="482" y="96" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{15..15}" /> +<P1 x="482" y="96" id="418" /> +<P2 x="482" y="172" id="420" /> +<extraparam> +<Interval minConstraint="15" maxConstraint="15" /> +</extraparam> +</CONNECTOR> + +</SequenceDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/README_modeling b/preinstallTTool/linux/TTool/modeling/README_modeling new file mode 100644 index 0000000000000000000000000000000000000000..66f0b9d79e2b9efba42625eece8cb82f3ce72192 --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/README_modeling @@ -0,0 +1,7 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The modeling directory contains a few examples that can be opened and tested with TTool. For more examples, please refer to: +http://labsoc.comelec.enst.fr/turtle/HELP +and then select "examples" in the menu on the left diff --git a/preinstallTTool/linux/TTool/modeling/SmartCardProtocol.xml b/preinstallTTool/linux/TTool/modeling/SmartCardProtocol.xml new file mode 100755 index 0000000000000000000000000000000000000000..d27d1216a41d35290e3d1d1e6d0046305d177e57 --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/SmartCardProtocol.xml @@ -0,0 +1,7420 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta1"> + +<Modeling type="Diplodocus Methodology" nameTab="DIPLODOCUS_Methodology" > +<DiplodocusMethodologyDiagramPanel name="Diplodocus methodology" minX="10" maxX="1400" minY="10" maxY="900" zoom="0.8" > +<COMPONENT type="6003" id="5" > +<cdparam x="40" y="120" /> +<sizeparam width="160" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Requirements" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +</COMPONENT> + +<COMPONENT type="6002" id="13" > +<cdparam x="438" y="234" /> +<sizeparam width="264" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Mapping" /> +<TGConnectingPoint num="0" id="8" /> +<TGConnectingPoint num="1" id="9" /> +<TGConnectingPoint num="2" id="10" /> +<TGConnectingPoint num="3" id="11" /> +<TGConnectingPoint num="4" id="12" /> +</COMPONENT> +<SUBCOMPONENT type="6005" id="6" > +<father id="13" num="0" /> +<cdparam x="442" y="278" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="605" maxX="605" minY="355" maxY="355" /> +<infoparam name="value " value="Mapping2" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="6005" id="7" > +<father id="13" num="1" /> +<cdparam x="442" y="265" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="605" maxX="605" minY="340" maxY="340" /> +<infoparam name="value " value="Mapping1" /> +</SUBCOMPONENT> + +<COMPONENT type="6001" id="20" > +<cdparam x="600" y="80" /> +<sizeparam width="160" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Architecture" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +<TGConnectingPoint num="2" id="18" /> +<TGConnectingPoint num="3" id="19" /> +</COMPONENT> +<SUBCOMPONENT type="6005" id="14" > +<father id="20" num="0" /> +<cdparam x="604" y="124" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="604" maxX="604" minY="124" maxY="124" /> +<infoparam name="value " value="Architecture2" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="6005" id="15" > +<father id="20" num="1" /> +<cdparam x="604" y="112" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="604" maxX="604" minY="112" maxY="112" /> +<infoparam name="value " value="Architecture1" /> +</SUBCOMPONENT> + +<COMPONENT type="6000" id="26" > +<cdparam x="360" y="80" /> +<sizeparam width="160" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Application" /> +<TGConnectingPoint num="0" id="22" /> +<TGConnectingPoint num="1" id="23" /> +<TGConnectingPoint num="2" id="24" /> +<TGConnectingPoint num="3" id="25" /> +</COMPONENT> +<SUBCOMPONENT type="6005" id="21" > +<father id="26" num="0" /> +<cdparam x="364" y="112" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="455" maxX="455" minY="140" maxY="140" /> +<infoparam name="value " value="AppC" /> +</SUBCOMPONENT> + +<CONNECTOR type="6004" id="28" > +<cdparam x="850" y="220" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="27" /> +<P1 x="680" y="176" id="16" /> +<P2 x="596" y="234" id="9" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="6004" id="30" > +<cdparam x="550" y="220" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="29" /> +<P1 x="440" y="176" id="22" /> +<P2 x="543" y="234" id="8" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</DiplodocusMethodologyDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Component Design" nameTab="AppC" > +<TMLComponentTaskDiagramPanel name="TML Component Task Diagram" minX="10" maxX="3400" minY="10" maxY="2400" channels="true" events="true" requests="true" zoom="0.8000000000000013" > +<CONNECTOR type="126" id="31" > +<cdparam x="967" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="126" id="392" /> +<P2 x="639" y="126" id="133" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="33" > +<cdparam x="967" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="831" y="152" id="195" /> +<P2 x="717" y="126" id="397" /> +<Point x="832" y="126" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="32" > +<father id="33" num="0" /> +<cdparam x="832" y="126" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="35" > +<cdparam x="337" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="417" y="85" id="515" /> +<P2 x="326" y="94" id="98" /> +<Point x="326" y="85" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="34" > +<father id="35" num="0" /> +<cdparam x="326" y="85" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="37" > +<cdparam x="440" y="107" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="515" y="95" id="131" /> +<P2 x="437" y="85" id="520" /> +<Point x="515" y="85" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="36" > +<father id="37" num="0" /> +<cdparam x="515" y="85" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="38" > +<cdparam x="337" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="417" y="295" id="496" /> +<P2 x="387" y="295" id="96" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="39" > +<cdparam x="396" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="459" y="295" id="129" /> +<P2 x="437" y="295" id="501" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="40" > +<cdparam x="337" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="417" y="235" id="477" /> +<P2 x="387" y="235" id="94" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="41" > +<cdparam x="396" y="236" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="459" y="235" id="127" /> +<P2 x="437" y="235" id="482" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="42" > +<cdparam x="353" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="199" id="463" /> +<P2 x="459" y="199" id="125" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="43" > +<cdparam x="266" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="387" y="199" id="92" /> +<P2 x="417" y="199" id="458" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="44" > +<cdparam x="353" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="269" id="444" /> +<P2 x="459" y="269" id="123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="45" > +<cdparam x="235" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="387" y="269" id="90" /> +<P2 x="417" y="269" id="439" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="46" > +<cdparam x="353" y="161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="162" id="539" /> +<P2 x="459" y="162" id="121" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="47" > +<cdparam x="235" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="387" y="162" id="88" /> +<P2 x="417" y="162" id="534" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="48" > +<cdparam x="787" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="253" id="373" /> +<P2 x="639" y="253" id="119" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="49" > +<cdparam x="867" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="757" y="253" id="189" /> +<P2 x="717" y="253" id="378" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="50" > +<cdparam x="803" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="224" id="359" /> +<P2 x="757" y="224" id="191" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="51" > +<cdparam x="655" y="211" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="639" y="224" id="117" /> +<P2 x="697" y="224" id="354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="52" > +<cdparam x="803" y="159" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="189" id="340" /> +<P2 x="757" y="189" id="193" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="53" > +<cdparam x="655" y="182" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="639" y="189" id="115" /> +<P2 x="697" y="189" id="335" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="54" > +<cdparam x="655" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="628" y="306" id="113" /> +<P2 x="697" y="314" id="317" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="55" > +<cdparam x="1028" y="535" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="545" y="304" id="109" /> +<P2 x="545" y="323" id="144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="56" > +<cdparam x="1307" y="853" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="314" id="321" /> +<P2 x="759" y="314" id="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="57" > +<cdparam x="1154" y="902" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="633" y="323" id="156" /> +<P2 x="697" y="314" id="316" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="59" > +<cdparam x="1307" y="807" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="434" id="264" /> +<P2 x="826" y="425" id="185" /> +<Point x="826" y="434" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="58" > +<father id="59" num="0" /> +<cdparam x="826" y="434" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="60" > +<cdparam x="1154" y="856" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="664" y="434" id="152" /> +<P2 x="697" y="434" id="259" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="61" > +<cdparam x="1307" y="761" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="413" id="245" /> +<P2 x="759" y="413" id="183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="62" > +<cdparam x="1154" y="811" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="664" y="413" id="150" /> +<P2 x="697" y="413" id="240" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="63" > +<cdparam x="1626" y="770" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="391" id="221" /> +<P2 x="664" y="391" id="148" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="64" > +<cdparam x="1799" y="785" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="759" y="391" id="177" /> +<P2 x="717" y="391" id="226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="65" > +<cdparam x="1438" y="869" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="664" y="366" id="146" /> +<P2 x="697" y="366" id="278" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="66" > +<cdparam x="1699" y="736" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="366" id="283" /> +<P2 x="759" y="366" id="179" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="67" > +<cdparam x="1626" y="659" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="344" id="297" /> +<P2 x="664" y="344" id="154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="68" > +<cdparam x="1799" y="673" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="759" y="344" id="181" /> +<P2 x="717" y="344" id="302" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="69" > +<cdparam x="1304" y="321" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="1014" y="244" id="210" /> +<P2 x="965" y="244" id="175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="70" > +<cdparam x="1168" y="455" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="965" y="273" id="173" /> +<P2 x="1014" y="273" id="208" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="73" > +<cdparam x="1037" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="965" y="174" id="171" /> +<P2 x="965" y="206" id="169" /> +<Point x="1017" y="174" /> +<Point x="1017" y="206" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="71" > +<father id="73" num="0" /> +<cdparam x="1017" y="174" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="72" > +<father id="73" num="1" /> +<cdparam x="1017" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="74" > +<cdparam x="873" y="361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="965" y="304" id="167" /> +<P2 x="1014" y="304" id="206" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="75" > +<cdparam x="361" y="136" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="128" id="425" /> +<P2 x="461" y="128" id="111" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="76" > +<cdparam x="306" y="210" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="385" y="128" id="86" /> +<P2 x="417" y="128" id="420" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="1205" id="85" > +<cdparam x="978" y="353" /> +<sizeparam width="165" height="84" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="Record component" value="TCP_CTRL" /> +<TGConnectingPoint num="0" id="77" /> +<TGConnectingPoint num="1" id="78" /> +<TGConnectingPoint num="2" id="79" /> +<TGConnectingPoint num="3" id="80" /> +<TGConnectingPoint num="4" id="81" /> +<TGConnectingPoint num="5" id="82" /> +<TGConnectingPoint num="6" id="83" /> +<TGConnectingPoint num="7" id="84" /> +<extraparam> +<Attribute access="2" id="a" value="" type="0" typeOther="" /> +<Attribute access="2" id="state" value="" type="0" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1202" id="108" > +<cdparam x="136" y="104" /> +<sizeparam width="241" height="216" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="TGComponent" value="InterfaceDevice" /> +<TGConnectingPoint num="0" id="100" /> +<TGConnectingPoint num="1" id="101" /> +<TGConnectingPoint num="2" id="102" /> +<TGConnectingPoint num="3" id="103" /> +<TGConnectingPoint num="4" id="104" /> +<TGConnectingPoint num="5" id="105" /> +<TGConnectingPoint num="6" id="106" /> +<TGConnectingPoint num="7" id="107" /> +<extraparam> +<Attribute access="2" id="resetType" value="0" type="0" typeOther="" /> +<Attribute access="2" id="x" value="0" type="0" typeOther="" /> +<Attribute access="2" id="i" value="0" type="0" typeOther="" /> +<Attribute access="2" id="nbOfComputedPackets" value="1" type="0" typeOther="" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1203" id="87" > +<father id="108" num="0" /> +<cdparam x="369" y="120" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="233" minY="-8" maxY="208" /> +<infoparam name="TGComponent" value="Request activation" /> +<TGConnectingPoint num="0" id="86" /> +<extraparam> +<Prop commName="activation" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="89" > +<father id="108" num="1" /> +<cdparam x="367" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event data_Ready" /> +<TGConnectingPoint num="0" id="88" /> +<extraparam> +<Prop commName="data_Ready" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="91" > +<father id="108" num="2" /> +<cdparam x="367" y="259" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event data_Ready_SC" /> +<TGConnectingPoint num="0" id="90" /> +<extraparam> +<Prop commName="data_Ready_SC" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="93" > +<father id="108" num="3" /> +<cdparam x="367" y="189" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Channel fromDtoSC" /> +<TGConnectingPoint num="0" id="92" /> +<extraparam> +<Prop commName="fromDtoSC" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="95" > +<father id="108" num="4" /> +<cdparam x="367" y="225" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Channel fromSCtoD" /> +<TGConnectingPoint num="0" id="94" /> +<extraparam> +<Prop commName="fromSCtoD" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="97" > +<father id="108" num="5" /> +<cdparam x="367" y="285" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event answerToReset, pTSConfirm" /> +<TGConnectingPoint num="0" id="96" /> +<extraparam> +<Prop commName="answerToReset, pTSConfirm" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="99" > +<father id="108" num="6" /> +<cdparam x="316" y="94" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event reset, pTS" /> +<TGConnectingPoint num="0" id="98" /> +<extraparam> +<Prop commName="reset, pTS" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1200" id="561" > +<cdparam x="427" y="70" /> +<sizeparam width="736" height="390" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="TGComponent" value="SmartCard" /> +<TGConnectingPoint num="0" id="553" /> +<TGConnectingPoint num="1" id="554" /> +<TGConnectingPoint num="2" id="555" /> +<TGConnectingPoint num="3" id="556" /> +<TGConnectingPoint num="4" id="557" /> +<TGConnectingPoint num="5" id="558" /> +<TGConnectingPoint num="6" id="559" /> +<TGConnectingPoint num="7" id="560" /> +<extraparam> +<info hiddeni="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1202" id="143" > +<father id="561" num="0" /> +<cdparam x="469" y="105" /> +<sizeparam width="160" height="191" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="576" minY="0" maxY="199" /> +<infoparam name="TGComponent" value="SmartCard" /> +<TGConnectingPoint num="0" id="135" /> +<TGConnectingPoint num="1" id="136" /> +<TGConnectingPoint num="2" id="137" /> +<TGConnectingPoint num="3" id="138" /> +<TGConnectingPoint num="4" id="139" /> +<TGConnectingPoint num="5" id="140" /> +<TGConnectingPoint num="6" id="141" /> +<TGConnectingPoint num="7" id="142" /> +<extraparam> +<Attribute access="2" id="resetType" value="0" type="0" typeOther="" /> +<Attribute access="2" id="a" value="0" type="0" typeOther="" /> +<Attribute access="2" id="b" value="0" type="0" typeOther="" /> +<Attribute access="2" id="i" value="0" type="0" typeOther="" /> +<Attribute access="2" id="j" value="0" type="0" typeOther="" /> +<Attribute access="2" id="x" value="0" type="0" typeOther="" /> +<Attribute access="2" id="tcpctrl" value="" type="5" typeOther="TCP_CTRL" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="110" > +<father id="143" num="0" /> +<cdparam x="537" y="288" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="152" minY="-8" maxY="183" /> +<infoparam name="TGComponent" value="Request start_Application" /> +<TGConnectingPoint num="0" id="109" /> +<extraparam> +<Prop commName="start_Application" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="112" > +<father id="143" num="1" /> +<cdparam x="461" y="120" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="152" minY="-8" maxY="183" /> +<infoparam name="TGComponent" value="Request activation" /> +<TGConnectingPoint num="0" id="111" /> +<extraparam> +<Prop commName="activation" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="114" > +<father id="143" num="2" /> +<cdparam x="618" y="286" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Request start_TCP_IP" /> +<TGConnectingPoint num="0" id="113" /> +<extraparam> +<Prop commName="start_TCP_IP" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="116" > +<father id="143" num="3" /> +<cdparam x="619" y="179" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event receive" /> +<TGConnectingPoint num="0" id="115" /> +<extraparam> +<Prop commName="receive" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="118" > +<father id="143" num="4" /> +<cdparam x="619" y="214" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromPtoT" /> +<TGConnectingPoint num="0" id="117" /> +<extraparam> +<Prop commName="fromPtoT" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="120" > +<father id="143" num="5" /> +<cdparam x="619" y="243" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromTtoP" /> +<TGConnectingPoint num="0" id="119" /> +<extraparam> +<Prop commName="fromTtoP" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="122" > +<father id="143" num="6" /> +<cdparam x="459" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event data_Ready" /> +<TGConnectingPoint num="0" id="121" /> +<extraparam> +<Prop commName="data_Ready" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="124" > +<father id="143" num="7" /> +<cdparam x="459" y="259" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event data_Ready_SC" /> +<TGConnectingPoint num="0" id="123" /> +<extraparam> +<Prop commName="data_Ready_SC" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="126" > +<father id="143" num="8" /> +<cdparam x="459" y="189" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromDtoSC0" /> +<TGConnectingPoint num="0" id="125" /> +<extraparam> +<Prop commName="fromDtoSC0" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="128" > +<father id="143" num="9" /> +<cdparam x="459" y="225" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromSCtoD" /> +<TGConnectingPoint num="0" id="127" /> +<extraparam> +<Prop commName="fromSCtoD" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="130" > +<father id="143" num="10" /> +<cdparam x="459" y="285" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event answerToReset, pTSConfirm" /> +<TGConnectingPoint num="0" id="129" /> +<extraparam> +<Prop commName="answerToReset, pTSConfirm" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="132" > +<father id="143" num="11" /> +<cdparam x="505" y="95" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event reset, pTS" /> +<TGConnectingPoint num="0" id="131" /> +<extraparam> +<Prop commName="reset, pTS" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="134" > +<father id="143" num="12" /> +<cdparam x="619" y="116" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event send" /> +<TGConnectingPoint num="0" id="133" /> +<extraparam> +<Prop commName="send" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1202" id="166" > +<father id="561" num="1" /> +<cdparam x="464" y="331" /> +<sizeparam width="192" height="116" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="544" minY="0" maxY="274" /> +<infoparam name="TGComponent" value="Application" /> +<TGConnectingPoint num="0" id="158" /> +<TGConnectingPoint num="1" id="159" /> +<TGConnectingPoint num="2" id="160" /> +<TGConnectingPoint num="3" id="161" /> +<TGConnectingPoint num="4" id="162" /> +<TGConnectingPoint num="5" id="163" /> +<TGConnectingPoint num="6" id="164" /> +<TGConnectingPoint num="7" id="165" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="145" > +<father id="166" num="0" /> +<cdparam x="537" y="323" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Request start_Application" /> +<TGConnectingPoint num="0" id="144" /> +<extraparam> +<Prop commName="start_Application" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="147" > +<father id="166" num="1" /> +<cdparam x="648" y="358" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Channel fromAtoT" /> +<TGConnectingPoint num="0" id="146" /> +<extraparam> +<Prop commName="fromAtoT" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="149" > +<father id="166" num="2" /> +<cdparam x="648" y="383" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Event receive_Application" /> +<TGConnectingPoint num="0" id="148" /> +<extraparam> +<Prop commName="receive_Application" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="151" > +<father id="166" num="3" /> +<cdparam x="648" y="405" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Event open, abort, close" /> +<TGConnectingPoint num="0" id="150" /> +<extraparam> +<Prop commName="open, abort, close" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="153" > +<father id="166" num="4" /> +<cdparam x="648" y="426" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Event send_TCP" /> +<TGConnectingPoint num="0" id="152" /> +<extraparam> +<Prop commName="send_TCP" commType="1" origin="true" finite="false" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="155" > +<father id="166" num="5" /> +<cdparam x="648" y="336" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Channel fromTtoA" /> +<TGConnectingPoint num="0" id="154" /> +<extraparam> +<Prop commName="fromTtoA" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="157" > +<father id="166" num="6" /> +<cdparam x="625" y="323" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Request start_TCP_IP" /> +<TGConnectingPoint num="0" id="156" /> +<extraparam> +<Prop commName="start_TCP_IP" commType="2" origin="true" finite="false" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1200" id="419" > +<father id="561" num="2" /> +<cdparam x="707" y="112" /> +<sizeparam width="445" height="336" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="291" minY="0" maxY="54" /> +<infoparam name="TGComponent" value="TCPIP Entities" /> +<TGConnectingPoint num="0" id="411" /> +<TGConnectingPoint num="1" id="412" /> +<TGConnectingPoint num="2" id="413" /> +<TGConnectingPoint num="3" id="414" /> +<TGConnectingPoint num="4" id="415" /> +<TGConnectingPoint num="5" id="416" /> +<TGConnectingPoint num="6" id="417" /> +<TGConnectingPoint num="7" id="418" /> +<extraparam> +<info hiddeni="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1202" id="205" > +<father id="419" num="0" /> +<cdparam x="767" y="162" /> +<sizeparam width="190" height="255" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="255" minY="0" maxY="81" /> +<infoparam name="TGComponent" value="TCPIP" /> +<TGConnectingPoint num="0" id="197" /> +<TGConnectingPoint num="1" id="198" /> +<TGConnectingPoint num="2" id="199" /> +<TGConnectingPoint num="3" id="200" /> +<TGConnectingPoint num="4" id="201" /> +<TGConnectingPoint num="5" id="202" /> +<TGConnectingPoint num="6" id="203" /> +<TGConnectingPoint num="7" id="204" /> +<extraparam> +<Attribute access="2" id="wind" value="64" type="0" typeOther="" /> +<Attribute access="2" id="i" value="" type="0" typeOther="" /> +<Attribute access="2" id="j" value="" type="0" typeOther="" /> +<Attribute access="2" id="a" value="0" type="0" typeOther="" /> +<Attribute access="2" id="b" value="0" type="0" typeOther="" /> +<Attribute access="2" id="tcpctrl" value="" type="5" typeOther="TCP_CTRL" /> +<Attribute access="2" id="seqi" value="0" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="168" > +<father id="205" num="0" /> +<cdparam x="949" y="296" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event stop" /> +<TGConnectingPoint num="0" id="167" /> +<extraparam> +<Prop commName="stop" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="170" > +<father id="205" num="1" /> +<cdparam x="949" y="198" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel temp" /> +<TGConnectingPoint num="0" id="169" /> +<extraparam> +<Prop commName="temp" commType="0" origin="false" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="172" > +<father id="205" num="2" /> +<cdparam x="949" y="166" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel temp" /> +<TGConnectingPoint num="0" id="171" /> +<extraparam> +<Prop commName="temp" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="174" > +<father id="205" num="3" /> +<cdparam x="949" y="265" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Request req_Timer" /> +<TGConnectingPoint num="0" id="173" /> +<extraparam> +<Prop commName="req_Timer" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="176" > +<father id="205" num="4" /> +<cdparam x="949" y="236" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event timeOut" /> +<TGConnectingPoint num="0" id="175" /> +<extraparam> +<Prop commName="timeOut" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="178" > +<father id="205" num="5" /> +<cdparam x="759" y="383" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event receive_Application" /> +<TGConnectingPoint num="0" id="177" /> +<extraparam> +<Prop commName="receive_Application" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="180" > +<father id="205" num="6" /> +<cdparam x="759" y="358" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel fromAtoT" /> +<TGConnectingPoint num="0" id="179" /> +<extraparam> +<Prop commName="fromAtoT" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="182" > +<father id="205" num="7" /> +<cdparam x="759" y="336" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel fromTtoA" /> +<TGConnectingPoint num="0" id="181" /> +<extraparam> +<Prop commName="fromTtoA" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="184" > +<father id="205" num="8" /> +<cdparam x="759" y="405" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event open, abort, close" /> +<TGConnectingPoint num="0" id="183" /> +<extraparam> +<Prop commName="open, abort, close" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="186" > +<father id="205" num="9" /> +<cdparam x="818" y="409" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event send_TCP" /> +<TGConnectingPoint num="0" id="185" /> +<extraparam> +<Prop commName="send_TCP" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="188" > +<father id="205" num="10" /> +<cdparam x="759" y="306" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Request start_TCP_IP" /> +<TGConnectingPoint num="0" id="187" /> +<extraparam> +<Prop commName="start_TCP_IP" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="190" > +<father id="205" num="11" /> +<cdparam x="757" y="243" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Channel fromTtoP" /> +<TGConnectingPoint num="0" id="189" /> +<extraparam> +<Prop commName="fromTtoP" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="192" > +<father id="205" num="12" /> +<cdparam x="757" y="214" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Channel fromPtoT" /> +<TGConnectingPoint num="0" id="191" /> +<extraparam> +<Prop commName="fromPtoT" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="194" > +<father id="205" num="13" /> +<cdparam x="757" y="179" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Event receive" /> +<TGConnectingPoint num="0" id="193" /> +<extraparam> +<Prop commName="receive" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="196" > +<father id="205" num="14" /> +<cdparam x="821" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Event send" /> +<TGConnectingPoint num="0" id="195" /> +<extraparam> +<Prop commName="send" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1202" id="220" > +<father id="419" num="1" /> +<cdparam x="1022" y="219" /> +<sizeparam width="112" height="113" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="333" minY="0" maxY="223" /> +<infoparam name="TGComponent" value="Timer" /> +<TGConnectingPoint num="0" id="212" /> +<TGConnectingPoint num="1" id="213" /> +<TGConnectingPoint num="2" id="214" /> +<TGConnectingPoint num="3" id="215" /> +<TGConnectingPoint num="4" id="216" /> +<TGConnectingPoint num="5" id="217" /> +<TGConnectingPoint num="6" id="218" /> +<TGConnectingPoint num="7" id="219" /> +<extraparam> +<Attribute access="2" id="x" value="0" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="207" > +<father id="220" num="0" /> +<cdparam x="1014" y="296" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="104" minY="-8" maxY="105" /> +<infoparam name="TGComponent" value="Event stop" /> +<TGConnectingPoint num="0" id="206" /> +<extraparam> +<Prop commName="stop" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="209" > +<father id="220" num="1" /> +<cdparam x="1014" y="265" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="104" minY="-8" maxY="105" /> +<infoparam name="TGComponent" value="Request req_Timer" /> +<TGConnectingPoint num="0" id="208" /> +<extraparam> +<Prop commName="req_Timer" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="211" > +<father id="220" num="2" /> +<cdparam x="1014" y="236" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="104" minY="-8" maxY="105" /> +<infoparam name="TGComponent" value="Event timeOut" /> +<TGConnectingPoint num="0" id="210" /> +<extraparam> +<Prop commName="timeOut" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="239" > +<father id="419" num="2" /> +<cdparam x="697" y="381" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="221" /> +<TGConnectingPoint num="1" id="222" /> +<TGConnectingPoint num="2" id="223" /> +<TGConnectingPoint num="3" id="224" /> +<TGConnectingPoint num="4" id="225" /> +<TGConnectingPoint num="5" id="226" /> +<TGConnectingPoint num="6" id="227" /> +<TGConnectingPoint num="7" id="228" /> +<TGConnectingPoint num="8" id="229" /> +<TGConnectingPoint num="9" id="230" /> +<TGConnectingPoint num="10" id="231" /> +<TGConnectingPoint num="11" id="232" /> +<TGConnectingPoint num="12" id="233" /> +<TGConnectingPoint num="13" id="234" /> +<TGConnectingPoint num="14" id="235" /> +<TGConnectingPoint num="15" id="236" /> +<TGConnectingPoint num="16" id="237" /> +<TGConnectingPoint num="17" id="238" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="258" > +<father id="419" num="3" /> +<cdparam x="697" y="403" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="240" /> +<TGConnectingPoint num="1" id="241" /> +<TGConnectingPoint num="2" id="242" /> +<TGConnectingPoint num="3" id="243" /> +<TGConnectingPoint num="4" id="244" /> +<TGConnectingPoint num="5" id="245" /> +<TGConnectingPoint num="6" id="246" /> +<TGConnectingPoint num="7" id="247" /> +<TGConnectingPoint num="8" id="248" /> +<TGConnectingPoint num="9" id="249" /> +<TGConnectingPoint num="10" id="250" /> +<TGConnectingPoint num="11" id="251" /> +<TGConnectingPoint num="12" id="252" /> +<TGConnectingPoint num="13" id="253" /> +<TGConnectingPoint num="14" id="254" /> +<TGConnectingPoint num="15" id="255" /> +<TGConnectingPoint num="16" id="256" /> +<TGConnectingPoint num="17" id="257" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="277" > +<father id="419" num="4" /> +<cdparam x="697" y="424" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="259" /> +<TGConnectingPoint num="1" id="260" /> +<TGConnectingPoint num="2" id="261" /> +<TGConnectingPoint num="3" id="262" /> +<TGConnectingPoint num="4" id="263" /> +<TGConnectingPoint num="5" id="264" /> +<TGConnectingPoint num="6" id="265" /> +<TGConnectingPoint num="7" id="266" /> +<TGConnectingPoint num="8" id="267" /> +<TGConnectingPoint num="9" id="268" /> +<TGConnectingPoint num="10" id="269" /> +<TGConnectingPoint num="11" id="270" /> +<TGConnectingPoint num="12" id="271" /> +<TGConnectingPoint num="13" id="272" /> +<TGConnectingPoint num="14" id="273" /> +<TGConnectingPoint num="15" id="274" /> +<TGConnectingPoint num="16" id="275" /> +<TGConnectingPoint num="17" id="276" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="296" > +<father id="419" num="5" /> +<cdparam x="697" y="356" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="278" /> +<TGConnectingPoint num="1" id="279" /> +<TGConnectingPoint num="2" id="280" /> +<TGConnectingPoint num="3" id="281" /> +<TGConnectingPoint num="4" id="282" /> +<TGConnectingPoint num="5" id="283" /> +<TGConnectingPoint num="6" id="284" /> +<TGConnectingPoint num="7" id="285" /> +<TGConnectingPoint num="8" id="286" /> +<TGConnectingPoint num="9" id="287" /> +<TGConnectingPoint num="10" id="288" /> +<TGConnectingPoint num="11" id="289" /> +<TGConnectingPoint num="12" id="290" /> +<TGConnectingPoint num="13" id="291" /> +<TGConnectingPoint num="14" id="292" /> +<TGConnectingPoint num="15" id="293" /> +<TGConnectingPoint num="16" id="294" /> +<TGConnectingPoint num="17" id="295" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="315" > +<father id="419" num="6" /> +<cdparam x="697" y="334" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="297" /> +<TGConnectingPoint num="1" id="298" /> +<TGConnectingPoint num="2" id="299" /> +<TGConnectingPoint num="3" id="300" /> +<TGConnectingPoint num="4" id="301" /> +<TGConnectingPoint num="5" id="302" /> +<TGConnectingPoint num="6" id="303" /> +<TGConnectingPoint num="7" id="304" /> +<TGConnectingPoint num="8" id="305" /> +<TGConnectingPoint num="9" id="306" /> +<TGConnectingPoint num="10" id="307" /> +<TGConnectingPoint num="11" id="308" /> +<TGConnectingPoint num="12" id="309" /> +<TGConnectingPoint num="13" id="310" /> +<TGConnectingPoint num="14" id="311" /> +<TGConnectingPoint num="15" id="312" /> +<TGConnectingPoint num="16" id="313" /> +<TGConnectingPoint num="17" id="314" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="334" > +<father id="419" num="7" /> +<cdparam x="697" y="304" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="316" /> +<TGConnectingPoint num="1" id="317" /> +<TGConnectingPoint num="2" id="318" /> +<TGConnectingPoint num="3" id="319" /> +<TGConnectingPoint num="4" id="320" /> +<TGConnectingPoint num="5" id="321" /> +<TGConnectingPoint num="6" id="322" /> +<TGConnectingPoint num="7" id="323" /> +<TGConnectingPoint num="8" id="324" /> +<TGConnectingPoint num="9" id="325" /> +<TGConnectingPoint num="10" id="326" /> +<TGConnectingPoint num="11" id="327" /> +<TGConnectingPoint num="12" id="328" /> +<TGConnectingPoint num="13" id="329" /> +<TGConnectingPoint num="14" id="330" /> +<TGConnectingPoint num="15" id="331" /> +<TGConnectingPoint num="16" id="332" /> +<TGConnectingPoint num="17" id="333" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="353" > +<father id="419" num="8" /> +<cdparam x="697" y="179" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="335" /> +<TGConnectingPoint num="1" id="336" /> +<TGConnectingPoint num="2" id="337" /> +<TGConnectingPoint num="3" id="338" /> +<TGConnectingPoint num="4" id="339" /> +<TGConnectingPoint num="5" id="340" /> +<TGConnectingPoint num="6" id="341" /> +<TGConnectingPoint num="7" id="342" /> +<TGConnectingPoint num="8" id="343" /> +<TGConnectingPoint num="9" id="344" /> +<TGConnectingPoint num="10" id="345" /> +<TGConnectingPoint num="11" id="346" /> +<TGConnectingPoint num="12" id="347" /> +<TGConnectingPoint num="13" id="348" /> +<TGConnectingPoint num="14" id="349" /> +<TGConnectingPoint num="15" id="350" /> +<TGConnectingPoint num="16" id="351" /> +<TGConnectingPoint num="17" id="352" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="372" > +<father id="419" num="9" /> +<cdparam x="697" y="214" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="354" /> +<TGConnectingPoint num="1" id="355" /> +<TGConnectingPoint num="2" id="356" /> +<TGConnectingPoint num="3" id="357" /> +<TGConnectingPoint num="4" id="358" /> +<TGConnectingPoint num="5" id="359" /> +<TGConnectingPoint num="6" id="360" /> +<TGConnectingPoint num="7" id="361" /> +<TGConnectingPoint num="8" id="362" /> +<TGConnectingPoint num="9" id="363" /> +<TGConnectingPoint num="10" id="364" /> +<TGConnectingPoint num="11" id="365" /> +<TGConnectingPoint num="12" id="366" /> +<TGConnectingPoint num="13" id="367" /> +<TGConnectingPoint num="14" id="368" /> +<TGConnectingPoint num="15" id="369" /> +<TGConnectingPoint num="16" id="370" /> +<TGConnectingPoint num="17" id="371" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="391" > +<father id="419" num="10" /> +<cdparam x="697" y="243" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="373" /> +<TGConnectingPoint num="1" id="374" /> +<TGConnectingPoint num="2" id="375" /> +<TGConnectingPoint num="3" id="376" /> +<TGConnectingPoint num="4" id="377" /> +<TGConnectingPoint num="5" id="378" /> +<TGConnectingPoint num="6" id="379" /> +<TGConnectingPoint num="7" id="380" /> +<TGConnectingPoint num="8" id="381" /> +<TGConnectingPoint num="9" id="382" /> +<TGConnectingPoint num="10" id="383" /> +<TGConnectingPoint num="11" id="384" /> +<TGConnectingPoint num="12" id="385" /> +<TGConnectingPoint num="13" id="386" /> +<TGConnectingPoint num="14" id="387" /> +<TGConnectingPoint num="15" id="388" /> +<TGConnectingPoint num="16" id="389" /> +<TGConnectingPoint num="17" id="390" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="410" > +<father id="419" num="11" /> +<cdparam x="697" y="116" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="392" /> +<TGConnectingPoint num="1" id="393" /> +<TGConnectingPoint num="2" id="394" /> +<TGConnectingPoint num="3" id="395" /> +<TGConnectingPoint num="4" id="396" /> +<TGConnectingPoint num="5" id="397" /> +<TGConnectingPoint num="6" id="398" /> +<TGConnectingPoint num="7" id="399" /> +<TGConnectingPoint num="8" id="400" /> +<TGConnectingPoint num="9" id="401" /> +<TGConnectingPoint num="10" id="402" /> +<TGConnectingPoint num="11" id="403" /> +<TGConnectingPoint num="12" id="404" /> +<TGConnectingPoint num="13" id="405" /> +<TGConnectingPoint num="14" id="406" /> +<TGConnectingPoint num="15" id="407" /> +<TGConnectingPoint num="16" id="408" /> +<TGConnectingPoint num="17" id="409" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="438" > +<father id="561" num="3" /> +<cdparam x="417" y="118" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="420" /> +<TGConnectingPoint num="1" id="421" /> +<TGConnectingPoint num="2" id="422" /> +<TGConnectingPoint num="3" id="423" /> +<TGConnectingPoint num="4" id="424" /> +<TGConnectingPoint num="5" id="425" /> +<TGConnectingPoint num="6" id="426" /> +<TGConnectingPoint num="7" id="427" /> +<TGConnectingPoint num="8" id="428" /> +<TGConnectingPoint num="9" id="429" /> +<TGConnectingPoint num="10" id="430" /> +<TGConnectingPoint num="11" id="431" /> +<TGConnectingPoint num="12" id="432" /> +<TGConnectingPoint num="13" id="433" /> +<TGConnectingPoint num="14" id="434" /> +<TGConnectingPoint num="15" id="435" /> +<TGConnectingPoint num="16" id="436" /> +<TGConnectingPoint num="17" id="437" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="457" > +<father id="561" num="4" /> +<cdparam x="417" y="259" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="439" /> +<TGConnectingPoint num="1" id="440" /> +<TGConnectingPoint num="2" id="441" /> +<TGConnectingPoint num="3" id="442" /> +<TGConnectingPoint num="4" id="443" /> +<TGConnectingPoint num="5" id="444" /> +<TGConnectingPoint num="6" id="445" /> +<TGConnectingPoint num="7" id="446" /> +<TGConnectingPoint num="8" id="447" /> +<TGConnectingPoint num="9" id="448" /> +<TGConnectingPoint num="10" id="449" /> +<TGConnectingPoint num="11" id="450" /> +<TGConnectingPoint num="12" id="451" /> +<TGConnectingPoint num="13" id="452" /> +<TGConnectingPoint num="14" id="453" /> +<TGConnectingPoint num="15" id="454" /> +<TGConnectingPoint num="16" id="455" /> +<TGConnectingPoint num="17" id="456" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="476" > +<father id="561" num="5" /> +<cdparam x="417" y="189" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="458" /> +<TGConnectingPoint num="1" id="459" /> +<TGConnectingPoint num="2" id="460" /> +<TGConnectingPoint num="3" id="461" /> +<TGConnectingPoint num="4" id="462" /> +<TGConnectingPoint num="5" id="463" /> +<TGConnectingPoint num="6" id="464" /> +<TGConnectingPoint num="7" id="465" /> +<TGConnectingPoint num="8" id="466" /> +<TGConnectingPoint num="9" id="467" /> +<TGConnectingPoint num="10" id="468" /> +<TGConnectingPoint num="11" id="469" /> +<TGConnectingPoint num="12" id="470" /> +<TGConnectingPoint num="13" id="471" /> +<TGConnectingPoint num="14" id="472" /> +<TGConnectingPoint num="15" id="473" /> +<TGConnectingPoint num="16" id="474" /> +<TGConnectingPoint num="17" id="475" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="495" > +<father id="561" num="6" /> +<cdparam x="417" y="225" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="477" /> +<TGConnectingPoint num="1" id="478" /> +<TGConnectingPoint num="2" id="479" /> +<TGConnectingPoint num="3" id="480" /> +<TGConnectingPoint num="4" id="481" /> +<TGConnectingPoint num="5" id="482" /> +<TGConnectingPoint num="6" id="483" /> +<TGConnectingPoint num="7" id="484" /> +<TGConnectingPoint num="8" id="485" /> +<TGConnectingPoint num="9" id="486" /> +<TGConnectingPoint num="10" id="487" /> +<TGConnectingPoint num="11" id="488" /> +<TGConnectingPoint num="12" id="489" /> +<TGConnectingPoint num="13" id="490" /> +<TGConnectingPoint num="14" id="491" /> +<TGConnectingPoint num="15" id="492" /> +<TGConnectingPoint num="16" id="493" /> +<TGConnectingPoint num="17" id="494" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="514" > +<father id="561" num="7" /> +<cdparam x="417" y="285" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="496" /> +<TGConnectingPoint num="1" id="497" /> +<TGConnectingPoint num="2" id="498" /> +<TGConnectingPoint num="3" id="499" /> +<TGConnectingPoint num="4" id="500" /> +<TGConnectingPoint num="5" id="501" /> +<TGConnectingPoint num="6" id="502" /> +<TGConnectingPoint num="7" id="503" /> +<TGConnectingPoint num="8" id="504" /> +<TGConnectingPoint num="9" id="505" /> +<TGConnectingPoint num="10" id="506" /> +<TGConnectingPoint num="11" id="507" /> +<TGConnectingPoint num="12" id="508" /> +<TGConnectingPoint num="13" id="509" /> +<TGConnectingPoint num="14" id="510" /> +<TGConnectingPoint num="15" id="511" /> +<TGConnectingPoint num="16" id="512" /> +<TGConnectingPoint num="17" id="513" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="533" > +<father id="561" num="8" /> +<cdparam x="417" y="75" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="515" /> +<TGConnectingPoint num="1" id="516" /> +<TGConnectingPoint num="2" id="517" /> +<TGConnectingPoint num="3" id="518" /> +<TGConnectingPoint num="4" id="519" /> +<TGConnectingPoint num="5" id="520" /> +<TGConnectingPoint num="6" id="521" /> +<TGConnectingPoint num="7" id="522" /> +<TGConnectingPoint num="8" id="523" /> +<TGConnectingPoint num="9" id="524" /> +<TGConnectingPoint num="10" id="525" /> +<TGConnectingPoint num="11" id="526" /> +<TGConnectingPoint num="12" id="527" /> +<TGConnectingPoint num="13" id="528" /> +<TGConnectingPoint num="14" id="529" /> +<TGConnectingPoint num="15" id="530" /> +<TGConnectingPoint num="16" id="531" /> +<TGConnectingPoint num="17" id="532" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="552" > +<father id="561" num="9" /> +<cdparam x="417" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="534" /> +<TGConnectingPoint num="1" id="535" /> +<TGConnectingPoint num="2" id="536" /> +<TGConnectingPoint num="3" id="537" /> +<TGConnectingPoint num="4" id="538" /> +<TGConnectingPoint num="5" id="539" /> +<TGConnectingPoint num="6" id="540" /> +<TGConnectingPoint num="7" id="541" /> +<TGConnectingPoint num="8" id="542" /> +<TGConnectingPoint num="9" id="543" /> +<TGConnectingPoint num="10" id="544" /> +<TGConnectingPoint num="11" id="545" /> +<TGConnectingPoint num="12" id="546" /> +<TGConnectingPoint num="13" id="547" /> +<TGConnectingPoint num="14" id="548" /> +<TGConnectingPoint num="15" id="549" /> +<TGConnectingPoint num="16" id="550" /> +<TGConnectingPoint num="17" id="551" /> +</SUBCOMPONENT> + + +</TMLComponentTaskDiagramPanel> + +<TMLActivityDiagramPanel name="InterfaceDevice" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1012" id="569" > +<cdparam x="553" y="376" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="565" /> +<TGConnectingPoint num="1" id="566" /> +<TGConnectingPoint num="2" id="567" /> +<TGConnectingPoint num="3" id="568" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="562" > +<father id="569" num="0" /> +<cdparam x="528" y="386" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="563" > +<father id="569" num="1" /> +<cdparam x="588" y="386" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="564" > +<father id="569" num="2" /> +<cdparam x="573" y="421" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="577" > +<cdparam x="644" y="517" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="573" /> +<TGConnectingPoint num="1" id="574" /> +<TGConnectingPoint num="2" id="575" /> +<TGConnectingPoint num="3" id="576" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="570" > +<father id="577" num="0" /> +<cdparam x="599" y="527" /> +<sizeparam width="52" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ x==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="571" > +<father id="577" num="1" /> +<cdparam x="679" y="527" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="572" > +<father id="577" num="2" /> +<cdparam x="664" y="562" /> +<sizeparam width="42" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ x>0 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="579" > +<cdparam x="221" y="37" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="578" /> +</COMPONENT> + +<COMPONENT type="1007" id="582" > +<cdparam x="188" y="137" /> +<sizeparam width="81" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send request" value="activation()" /> +<TGConnectingPoint num="0" id="580" /> +<TGConnectingPoint num="1" id="581" /> +<extraparam> +<Data requestName="activation" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="585" > +<cdparam x="202" y="237" /> +<sizeparam width="53" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="reset()" /> +<TGConnectingPoint num="0" id="583" /> +<TGConnectingPoint num="1" id="584" /> +<extraparam> +<Data eventName="reset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="588" > +<cdparam x="167" y="288" /> +<sizeparam width="120" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="answerToReset() " /> +<TGConnectingPoint num="0" id="586" /> +<TGConnectingPoint num="1" id="587" /> +<extraparam> +<Data eventName="answerToReset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="591" > +<cdparam x="207" y="337" /> +<sizeparam width="43" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="pTS()" /> +<TGConnectingPoint num="0" id="589" /> +<TGConnectingPoint num="1" id="590" /> +<extraparam> +<Data eventName="pTS" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="594" > +<cdparam x="356" y="165" /> +<sizeparam width="94" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="pTSConfirm() " /> +<TGConnectingPoint num="0" id="592" /> +<TGConnectingPoint num="1" id="593" /> +<breakpoint /> +<extraparam> +<Data eventName="pTSConfirm" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="603" > +<cdparam x="367" y="222" /> +<sizeparam width="114" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="data exchange +" /> +<TGConnectingPoint num="0" id="595" /> +<TGConnectingPoint num="1" id="596" /> +<TGConnectingPoint num="2" id="597" /> +<TGConnectingPoint num="3" id="598" /> +<TGConnectingPoint num="4" id="599" /> +<TGConnectingPoint num="5" id="600" /> +<TGConnectingPoint num="6" id="601" /> +<TGConnectingPoint num="7" id="602" /> +<extraparam> +<Line value="data exchange" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="606" > +<cdparam x="429" y="448" /> +<sizeparam width="94" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromDtoSC(1)" /> +<TGConnectingPoint num="0" id="604" /> +<TGConnectingPoint num="1" id="605" /> +<extraparam> +<Data channelName="fromDtoSC" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="609" > +<cdparam x="430" y="507" /> +<sizeparam width="93" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="data_Ready()" /> +<TGConnectingPoint num="0" id="607" /> +<TGConnectingPoint num="1" id="608" /> +<extraparam> +<Data eventName="data_Ready" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="611" > +<cdparam x="466" y="570" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="610" /> +</COMPONENT> + +<COMPONENT type="1017" id="614" > +<cdparam x="588" y="447" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="notified event" value="x=?data_Ready_SC()" /> +<TGConnectingPoint num="0" id="612" /> +<TGConnectingPoint num="1" id="613" /> +<extraparam> +<Data eventName="data_Ready_SC" variable="x" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="616" > +<cdparam x="569" y="577" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="615" /> +</COMPONENT> + +<COMPONENT type="1009" id="619" > +<cdparam x="610" y="700" /> +<sizeparam width="98" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="read channel" value="fromSCtoD(1) " /> +<TGConnectingPoint num="0" id="617" /> +<TGConnectingPoint num="1" id="618" /> +<extraparam> +<Data channelName="fromSCtoD" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="622" > +<cdparam x="600" y="619" /> +<sizeparam width="119" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="data_Ready_SC() " /> +<TGConnectingPoint num="0" id="620" /> +<TGConnectingPoint num="1" id="621" /> +<accessibility /> +<extraparam> +<Data eventName="data_Ready_SC" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="624" > +<cdparam x="649" y="774" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="623" /> +</COMPONENT> + +<COMPONENT type="1014" id="628" > +<cdparam x="300" y="287" /> +<sizeparam width="268" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="for loop" value="for(i=0;i<nbOfComputedPackets;i = i +1)" /> +<TGConnectingPoint num="0" id="625" /> +<TGConnectingPoint num="1" id="626" /> +<TGConnectingPoint num="2" id="627" /> +<extraparam> +<Data init="i=0" condition="i<nbOfComputedPackets" increment="i = i +1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="630" > +<cdparam x="382" y="380" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="629" /> +</COMPONENT> + +<CONNECTOR type="115" id="635" > +<cdparam x="78" y="363" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to wait event" value="null" /> +<P1 x="228" y="362" id="590" /> +<P2 x="403" y="160" id="592" /> +<Point x="228" y="383" /> +<Point x="307" y="383" /> +<Point x="307" y="140" /> +<Point x="403" y="140" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="631" > +<father id="635" num="0" /> +<cdparam x="228" y="383" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="632" > +<father id="635" num="1" /> +<cdparam x="307" y="383" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="633" > +<father id="635" num="2" /> +<cdparam x="307" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="634" > +<father id="635" num="3" /> +<cdparam x="403" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="115" id="636" > +<cdparam x="228" y="57" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send request" value="null" /> +<P1 x="228" y="57" id="578" /> +<P2 x="228" y="132" id="580" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="637" > +<cdparam x="228" y="162" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to send event" value="null" /> +<P1 x="228" y="162" id="581" /> +<P2 x="228" y="232" id="583" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="638" > +<cdparam x="228" y="284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to send event" value="null" /> +<P1 x="227" y="313" id="587" /> +<P2 x="228" y="332" id="589" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="639" > +<cdparam x="528" y="391" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to write channel" value="null" /> +<P1 x="528" y="391" id="566" /> +<P2 x="476" y="443" id="604" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="640" > +<cdparam x="476" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="476" y="473" id="605" /> +<P2 x="476" y="502" id="607" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="641" > +<cdparam x="471" y="529" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="476" y="532" id="608" /> +<P2 x="476" y="565" id="610" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="642" > +<cdparam x="619" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="619" y="532" id="574" /> +<P2 x="579" y="572" id="615" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="643" > +<cdparam x="580" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to notified event" value="null" /> +<P1 x="608" y="391" id="567" /> +<P2 x="659" y="442" id="612" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="644" > +<cdparam x="659" y="472" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from notified event to choice" value="null" /> +<P1 x="659" y="472" id="613" /> +<P2 x="659" y="507" id="573" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="645" > +<cdparam x="659" y="572" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="659" y="572" id="576" /> +<P2 x="659" y="614" id="620" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="646" > +<cdparam x="670" y="644" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="659" y="644" id="621" /> +<P2 x="659" y="695" id="617" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="647" > +<cdparam x="659" y="725" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to stop state" value="null" /> +<P1 x="659" y="725" id="618" /> +<P2 x="659" y="769" id="623" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="648" > +<cdparam x="491" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to choice" value="null" /> +<P1 x="568" y="301" id="626" /> +<P2 x="568" y="366" id="565" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="649" > +<cdparam x="403" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to for loop" value="null" /> +<P1 x="403" y="190" id="593" /> +<P2 x="434" y="282" id="625" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="650" > +<cdparam x="437" y="313" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to stop state" value="null" /> +<P1 x="434" y="312" id="627" /> +<P2 x="392" y="375" id="629" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="651" > +<cdparam x="228" y="262" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to wait event" value="null" /> +<P1 x="228" y="262" id="584" /> +<P2 x="227" y="283" id="586" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="Timer" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1012" id="659" > +<cdparam x="509" y="222" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="655" /> +<TGConnectingPoint num="1" id="656" /> +<TGConnectingPoint num="2" id="657" /> +<TGConnectingPoint num="3" id="658" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="652" > +<father id="659" num="0" /> +<cdparam x="464" y="232" /> +<sizeparam width="51" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ x==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="653" > +<father id="659" num="1" /> +<cdparam x="544" y="234" /> +<sizeparam width="41" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ x>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="654" > +<father id="659" num="2" /> +<cdparam x="529" y="267" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="661" > +<cdparam x="517" y="87" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="660" /> +</COMPONENT> + +<COMPONENT type="1001" id="663" > +<cdparam x="417" y="367" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="662" /> +</COMPONENT> + +<COMPONENT type="1008" id="666" > +<cdparam x="396" y="299" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="timeOut()" /> +<TGConnectingPoint num="0" id="664" /> +<TGConnectingPoint num="1" id="665" /> +<extraparam> +<Data eventName="timeOut" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="669" > +<cdparam x="599" y="300" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="stop() " /> +<TGConnectingPoint num="0" id="667" /> +<TGConnectingPoint num="1" id="668" /> +<extraparam> +<Data eventName="stop" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="671" > +<cdparam x="612" y="365" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="670" /> +</COMPONENT> + +<COMPONENT type="1017" id="674" > +<cdparam x="489" y="150" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="notified event" value="x=?stop()" /> +<TGConnectingPoint num="0" id="672" /> +<TGConnectingPoint num="1" id="673" /> +<extraparam> +<Data eventName="stop" variable="x" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="115" id="675" > +<cdparam x="427" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="427" y="324" id="665" /> +<P2 x="427" y="362" id="662" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="676" > +<cdparam x="622" y="325" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to stop state" value="null" /> +<P1 x="622" y="325" id="668" /> +<P2 x="622" y="360" id="670" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="677" > +<cdparam x="524" y="107" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to notified event" value="null" /> +<P1 x="524" y="107" id="660" /> +<P2 x="524" y="145" id="672" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="678" > +<cdparam x="524" y="175" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from notified event to choice" value="null" /> +<P1 x="524" y="175" id="673" /> +<P2 x="524" y="212" id="655" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="679" > +<cdparam x="484" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="484" y="237" id="656" /> +<P2 x="427" y="294" id="664" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="680" > +<cdparam x="564" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="564" y="237" id="657" /> +<P2 x="622" y="295" id="667" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="TCPIP" minX="10" maxX="2900" minY="10" maxY="1900" > +<COMPONENT type="1012" id="688" > +<cdparam x="2086" y="1378" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="684" /> +<TGConnectingPoint num="1" id="685" /> +<TGConnectingPoint num="2" id="686" /> +<TGConnectingPoint num="3" id="687" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="681" > +<father id="688" num="0" /> +<cdparam x="2061" y="1388" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="682" > +<father id="688" num="1" /> +<cdparam x="2121" y="1388" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="683" > +<father id="688" num="2" /> +<cdparam x="2106" y="1426" /> +<sizeparam width="124" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==10 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="696" > +<cdparam x="2262" y="951" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="692" /> +<TGConnectingPoint num="1" id="693" /> +<TGConnectingPoint num="2" id="694" /> +<TGConnectingPoint num="3" id="695" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="689" > +<father id="696" num="0" /> +<cdparam x="2212" y="961" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==1 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="690" > +<father id="696" num="1" /> +<cdparam x="2297" y="961" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ tcpctrl.state ==3 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="691" > +<father id="696" num="2" /> +<cdparam x="2282" y="996" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ else ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="704" > +<cdparam x="1981" y="1346" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="700" /> +<TGConnectingPoint num="1" id="701" /> +<TGConnectingPoint num="2" id="702" /> +<TGConnectingPoint num="3" id="703" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="697" > +<father id="704" num="0" /> +<cdparam x="1934" y="1356" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==5 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="698" > +<father id="704" num="1" /> +<cdparam x="2016" y="1356" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="699" > +<father id="704" num="2" /> +<cdparam x="2001" y="1391" /> +<sizeparam width="120" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state == 7 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="712" > +<cdparam x="1811" y="1269" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="708" /> +<TGConnectingPoint num="1" id="709" /> +<TGConnectingPoint num="2" id="710" /> +<TGConnectingPoint num="3" id="711" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="705" > +<father id="712" num="0" /> +<cdparam x="1762" y="1279" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==4 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="706" > +<father id="712" num="1" /> +<cdparam x="1846" y="1279" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="707" > +<father id="712" num="2" /> +<cdparam x="1831" y="1314" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==2 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="720" > +<cdparam x="1716" y="1141" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="716" /> +<TGConnectingPoint num="1" id="717" /> +<TGConnectingPoint num="2" id="718" /> +<TGConnectingPoint num="3" id="719" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="713" > +<father id="720" num="0" /> +<cdparam x="1691" y="1151" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="714" > +<father id="720" num="1" /> +<cdparam x="1751" y="1151" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="715" > +<father id="720" num="2" /> +<cdparam x="1736" y="1186" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="724" > +<cdparam x="1524" y="1254" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="722" /> +<TGConnectingPoint num="1" id="723" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="721" > +<father id="724" num="0" /> +<cdparam x="1539" y="1274" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="728" > +<cdparam x="1524" y="1064" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="726" /> +<TGConnectingPoint num="1" id="727" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="725" > +<father id="728" num="0" /> +<cdparam x="1538" y="1088" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="736" > +<cdparam x="1592" y="1006" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="732" /> +<TGConnectingPoint num="1" id="733" /> +<TGConnectingPoint num="2" id="734" /> +<TGConnectingPoint num="3" id="735" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="729" > +<father id="736" num="0" /> +<cdparam x="1542" y="1016" /> +<sizeparam width="124" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state == 4 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="730" > +<father id="736" num="1" /> +<cdparam x="1627" y="1016" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="731" > +<father id="736" num="2" /> +<cdparam x="1612" y="1051" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="744" > +<cdparam x="1713" y="875" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="740" /> +<TGConnectingPoint num="1" id="741" /> +<TGConnectingPoint num="2" id="742" /> +<TGConnectingPoint num="3" id="743" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="737" > +<father id="744" num="0" /> +<cdparam x="1688" y="885" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="738" > +<father id="744" num="1" /> +<cdparam x="1748" y="885" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="739" > +<father id="744" num="2" /> +<cdparam x="1733" y="920" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="748" > +<cdparam x="1636" y="1235" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="746" /> +<TGConnectingPoint num="1" id="747" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="745" > +<father id="748" num="0" /> +<cdparam x="1655" y="1254" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="752" > +<cdparam x="2213" y="1059" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="750" /> +<TGConnectingPoint num="1" id="751" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="749" > +<father id="752" num="0" /> +<cdparam x="2200" y="1083" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="756" > +<cdparam x="2336" y="1024" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="754" /> +<TGConnectingPoint num="1" id="755" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="753" > +<father id="756" num="0" /> +<cdparam x="2312" y="1044" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="764" > +<cdparam x="1193" y="1020" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="760" /> +<TGConnectingPoint num="1" id="761" /> +<TGConnectingPoint num="2" id="762" /> +<TGConnectingPoint num="3" id="763" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="757" > +<father id="764" num="0" /> +<cdparam x="1168" y="1030" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="758" > +<father id="764" num="1" /> +<cdparam x="1228" y="1030" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="759" > +<father id="764" num="2" /> +<cdparam x="1213" y="1065" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==6 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="768" > +<cdparam x="1203" y="1107" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="766" /> +<TGConnectingPoint num="1" id="767" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="765" > +<father id="768" num="0" /> +<cdparam x="1218" y="1127" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="776" > +<cdparam x="557" y="712" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="772" /> +<TGConnectingPoint num="1" id="773" /> +<TGConnectingPoint num="2" id="774" /> +<TGConnectingPoint num="3" id="775" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="769" > +<father id="776" num="0" /> +<cdparam x="514" y="722" /> +<sizeparam width="120" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state == 1 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="770" > +<father id="776" num="1" /> +<cdparam x="592" y="722" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="771" > +<father id="776" num="2" /> +<cdparam x="577" y="757" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="780" > +<cdparam x="717" y="694" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="778" /> +<TGConnectingPoint num="1" id="779" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="777" > +<father id="780" num="0" /> +<cdparam x="732" y="714" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="784" > +<cdparam x="938" y="1025" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="782" /> +<TGConnectingPoint num="1" id="783" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="781" > +<father id="784" num="0" /> +<cdparam x="953" y="1045" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="792" > +<cdparam x="1034" y="939" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="788" /> +<TGConnectingPoint num="1" id="789" /> +<TGConnectingPoint num="2" id="790" /> +<TGConnectingPoint num="3" id="791" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="785" > +<father id="792" num="0" /> +<cdparam x="989" y="949" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==4 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="786" > +<father id="792" num="1" /> +<cdparam x="1070" y="949" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="787" > +<father id="792" num="2" /> +<cdparam x="1054" y="984" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state == 5]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="796" > +<cdparam x="795" y="1009" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="794" /> +<TGConnectingPoint num="1" id="795" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="793" > +<father id="796" num="0" /> +<cdparam x="818" y="1031" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="804" > +<cdparam x="828" y="869" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="800" /> +<TGConnectingPoint num="1" id="801" /> +<TGConnectingPoint num="2" id="802" /> +<TGConnectingPoint num="3" id="803" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="797" > +<father id="804" num="0" /> +<cdparam x="753" y="885" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="798" > +<father id="804" num="1" /> +<cdparam x="863" y="879" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="799" > +<father id="804" num="2" /> +<cdparam x="848" y="914" /> +<sizeparam width="112" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state==0 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="808" > +<cdparam x="341" y="764" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="806" /> +<TGConnectingPoint num="1" id="807" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="805" > +<father id="808" num="0" /> +<cdparam x="354" y="785" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="812" > +<cdparam x="127" y="794" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="810" /> +<TGConnectingPoint num="1" id="811" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="809" > +<father id="812" num="0" /> +<cdparam x="146" y="818" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="820" > +<cdparam x="993" y="780" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="816" /> +<TGConnectingPoint num="1" id="817" /> +<TGConnectingPoint num="2" id="818" /> +<TGConnectingPoint num="3" id="819" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="813" > +<father id="820" num="0" /> +<cdparam x="949" y="793" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="814" > +<father id="820" num="1" /> +<cdparam x="1028" y="790" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="815" > +<father id="820" num="2" /> +<cdparam x="1013" y="825" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="824" > +<cdparam x="1003" y="701" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="822" /> +<TGConnectingPoint num="1" id="823" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="821" > +<father id="824" num="0" /> +<cdparam x="1018" y="721" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="828" > +<cdparam x="434" y="783" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="826" /> +<TGConnectingPoint num="1" id="827" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="825" > +<father id="828" num="0" /> +<cdparam x="449" y="802" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="832" > +<cdparam x="225" y="863" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="830" /> +<TGConnectingPoint num="1" id="831" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="829" > +<father id="832" num="0" /> +<cdparam x="245" y="885" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="836" > +<cdparam x="1044" y="1057" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="834" /> +<TGConnectingPoint num="1" id="835" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="833" > +<father id="836" num="0" /> +<cdparam x="1059" y="1077" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="844" > +<cdparam x="173" y="486" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="840" /> +<TGConnectingPoint num="1" id="841" /> +<TGConnectingPoint num="2" id="842" /> +<TGConnectingPoint num="3" id="843" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="837" > +<father id="844" num="0" /> +<cdparam x="98" y="496" /> +<sizeparam width="112" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="838" > +<father id="844" num="1" /> +<cdparam x="208" y="496" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="839" > +<father id="844" num="2" /> +<cdparam x="193" y="531" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="852" > +<cdparam x="359" y="192" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="848" /> +<TGConnectingPoint num="1" id="849" /> +<TGConnectingPoint num="2" id="850" /> +<TGConnectingPoint num="3" id="851" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="845" > +<father id="852" num="0" /> +<cdparam x="317" y="202" /> +<sizeparam width="81" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.a>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="846" > +<father id="852" num="1" /> +<cdparam x="394" y="202" /> +<sizeparam width="91" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ tcpctrl.a==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="847" > +<father id="852" num="2" /> +<cdparam x="379" y="237" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="860" > +<cdparam x="449" y="582" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="856" /> +<TGConnectingPoint num="1" id="857" /> +<TGConnectingPoint num="2" id="858" /> +<TGConnectingPoint num="3" id="859" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="853" > +<father id="860" num="0" /> +<cdparam x="398" y="592" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==9 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="854" > +<father id="860" num="1" /> +<cdparam x="500" y="599" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="855" > +<father id="860" num="2" /> +<cdparam x="469" y="627" /> +<sizeparam width="252" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ (tcpctrl.state ==2) or (tcpctrl.state ==4) ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="868" > +<cdparam x="274" y="564" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="864" /> +<TGConnectingPoint num="1" id="865" /> +<TGConnectingPoint num="2" id="866" /> +<TGConnectingPoint num="3" id="867" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="861" > +<father id="868" num="0" /> +<cdparam x="228" y="574" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state == 1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="862" > +<father id="868" num="1" /> +<cdparam x="317" y="584" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="863" > +<father id="868" num="2" /> +<cdparam x="294" y="613" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==4 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="870" > +<cdparam x="227" y="27" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="869" /> +</COMPONENT> + +<COMPONENT type="301" id="879" > +<cdparam x="59" y="131" /> +<sizeparam width="92" height="185" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="0: closed +1: Listen +2: SYN rcvd +3: SYN sent +4: Estab +5: Fin wait1 +6: Fin wait2 +7: closing +8: Time wait +9: close wait +10:last ack +" /> +<TGConnectingPoint num="0" id="871" /> +<TGConnectingPoint num="1" id="872" /> +<TGConnectingPoint num="2" id="873" /> +<TGConnectingPoint num="3" id="874" /> +<TGConnectingPoint num="4" id="875" /> +<TGConnectingPoint num="5" id="876" /> +<TGConnectingPoint num="6" id="877" /> +<TGConnectingPoint num="7" id="878" /> +<extraparam> +<Line value="0: closed" /> +<Line value="1: Listen" /> +<Line value="2: SYN rcvd" /> +<Line value="3: SYN sent" /> +<Line value="4: Estab" /> +<Line value="5: Fin wait1" /> +<Line value="6: Fin wait2" /> +<Line value="7: closing" /> +<Line value="8: Time wait" /> +<Line value="9: close wait" /> +<Line value="10:last ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="882" > +<cdparam x="76" y="549" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =1" /> +<TGConnectingPoint num="0" id="880" /> +<TGConnectingPoint num="1" id="881" /> +</COMPONENT> + +<COMPONENT type="1001" id="884" > +<cdparam x="116" y="615" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="883" /> +</COMPONENT> + +<COMPONENT type="1009" id="887" > +<cdparam x="967" y="585" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="fromPtoT(1) " /> +<TGConnectingPoint num="0" id="885" /> +<TGConnectingPoint num="1" id="886" /> +<extraparam> +<Data channelName="fromPtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1014" id="891" > +<cdparam x="149" y="79" /> +<sizeparam width="170" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="for loop" value="for(i=0;(tcpctrl.a==0);i = i)" /> +<TGConnectingPoint num="0" id="888" /> +<TGConnectingPoint num="1" id="889" /> +<TGConnectingPoint num="2" id="890" /> +<extraparam> +<Data init="i=0" condition="(tcpctrl.a==0)" increment="i = i" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="893" > +<cdparam x="224" y="207" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="892" /> +</COMPONENT> + +<COMPONENT type="1011" id="896" > +<cdparam x="186" y="144" /> +<sizeparam width="96" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state=0" /> +<TGConnectingPoint num="0" id="894" /> +<TGConnectingPoint num="1" id="895" /> +</COMPONENT> + +<COMPONENT type="1017" id="899" > +<cdparam x="316" y="133" /> +<sizeparam width="116" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="notified event" value="tcpctrl.a=?abort()" /> +<TGConnectingPoint num="0" id="897" /> +<TGConnectingPoint num="1" id="898" /> +<extraparam> +<Data eventName="abort" variable="tcpctrl.a" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="902" > +<cdparam x="692" y="589" /> +<sizeparam width="60" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="temp(1) " /> +<TGConnectingPoint num="0" id="900" /> +<TGConnectingPoint num="1" id="901" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="905" > +<cdparam x="689" y="534" /> +<sizeparam width="67" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="timeOut() " /> +<TGConnectingPoint num="0" id="903" /> +<TGConnectingPoint num="1" id="904" /> +<extraparam> +<Data eventName="timeOut" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="908" > +<cdparam x="977" y="528" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="receive() " /> +<TGConnectingPoint num="0" id="906" /> +<TGConnectingPoint num="1" id="907" /> +<extraparam> +<Data eventName="receive" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="911" > +<cdparam x="439" y="492" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="close() " /> +<TGConnectingPoint num="0" id="909" /> +<TGConnectingPoint num="1" id="910" /> +<extraparam> +<Data eventName="close" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="914" > +<cdparam x="250" y="468" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="send_TCP() " /> +<TGConnectingPoint num="0" id="912" /> +<TGConnectingPoint num="1" id="913" /> +<extraparam> +<Data eventName="send_TCP" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="917" > +<cdparam x="163" y="419" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="open() " /> +<TGConnectingPoint num="0" id="915" /> +<TGConnectingPoint num="1" id="916" /> +<breakpoint /> +<extraparam> +<Data eventName="open" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1018" id="928" > +<cdparam x="449" y="267" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="select" value="null" /> +<TGConnectingPoint num="0" id="918" /> +<TGConnectingPoint num="1" id="919" /> +<TGConnectingPoint num="2" id="920" /> +<TGConnectingPoint num="3" id="921" /> +<TGConnectingPoint num="4" id="922" /> +<TGConnectingPoint num="5" id="923" /> +<TGConnectingPoint num="6" id="924" /> +<TGConnectingPoint num="7" id="925" /> +<TGConnectingPoint num="8" id="926" /> +<TGConnectingPoint num="9" id="927" /> +<breakpoint /> +</COMPONENT> + +<COMPONENT type="1001" id="930" > +<cdparam x="226" y="529" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="929" /> +</COMPONENT> + +<COMPONENT type="1001" id="932" > +<cdparam x="343" y="614" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="931" /> +</COMPONENT> + +<COMPONENT type="1010" id="935" > +<cdparam x="275" y="228" /> +<sizeparam width="53" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="abort() " /> +<TGConnectingPoint num="0" id="933" /> +<TGConnectingPoint num="1" id="934" /> +<extraparam> +<Data eventName="abort" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="937" > +<cdparam x="291" y="290" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="936" /> +</COMPONENT> + +<COMPONENT type="301" id="946" > +<cdparam x="602" y="86" /> +<sizeparam width="360" height="80" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="b est le nombre d'instructions necessaires pour paquetiser +ou depaquitiser un paquet TCP + +On prend b=1 comme exemple +" /> +<TGConnectingPoint num="0" id="938" /> +<TGConnectingPoint num="1" id="939" /> +<TGConnectingPoint num="2" id="940" /> +<TGConnectingPoint num="3" id="941" /> +<TGConnectingPoint num="4" id="942" /> +<TGConnectingPoint num="5" id="943" /> +<TGConnectingPoint num="6" id="944" /> +<TGConnectingPoint num="7" id="945" /> +<extraparam> +<Line value="b est le nombre d'instructions necessaires pour paquetiser" /> +<Line value="ou depaquitiser un paquet TCP" /> +<Line value="" /> +<Line value="On prend b=1 comme exemple" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="949" > +<cdparam x="188" y="808" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="fromAtoT(1) " /> +<TGConnectingPoint num="0" id="947" /> +<TGConnectingPoint num="1" id="948" /> +<extraparam> +<Data channelName="fromAtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="952" > +<cdparam x="191" y="1002" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="950" /> +<TGConnectingPoint num="1" id="951" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="954" > +<cdparam x="219" y="1237" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="953" /> +</COMPONENT> + +<COMPONENT type="1011" id="957" > +<cdparam x="388" y="1032" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =5" /> +<TGConnectingPoint num="0" id="955" /> +<TGConnectingPoint num="1" id="956" /> +</COMPONENT> + +<COMPONENT type="1001" id="959" > +<cdparam x="428" y="1213" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="958" /> +</COMPONENT> + +<COMPONENT type="1011" id="962" > +<cdparam x="84" y="1041" /> +<sizeparam width="96" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state=3" /> +<TGConnectingPoint num="0" id="960" /> +<TGConnectingPoint num="1" id="961" /> +</COMPONENT> + +<COMPONENT type="1006" id="965" > +<cdparam x="93" y="938" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="963" /> +<TGConnectingPoint num="1" id="964" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="968" > +<cdparam x="292" y="1026" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =10" /> +<TGConnectingPoint num="0" id="966" /> +<TGConnectingPoint num="1" id="967" /> +</COMPONENT> + +<COMPONENT type="1001" id="970" > +<cdparam x="334" y="1229" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="969" /> +</COMPONENT> + +<COMPONENT type="1006" id="973" > +<cdparam x="400" y="941" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="971" /> +<TGConnectingPoint num="1" id="972" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="976" > +<cdparam x="307" y="900" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="974" /> +<TGConnectingPoint num="1" id="975" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="978" > +<cdparam x="789" y="1270" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="977" /> +</COMPONENT> + +<COMPONENT type="301" id="987" > +<cdparam x="998" y="850" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Fin +" /> +<TGConnectingPoint num="0" id="979" /> +<TGConnectingPoint num="1" id="980" /> +<TGConnectingPoint num="2" id="981" /> +<TGConnectingPoint num="3" id="982" /> +<TGConnectingPoint num="4" id="983" /> +<TGConnectingPoint num="5" id="984" /> +<TGConnectingPoint num="6" id="985" /> +<TGConnectingPoint num="7" id="986" /> +<extraparam> +<Line value="Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="990" > +<cdparam x="678" y="965" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =1" /> +<TGConnectingPoint num="0" id="988" /> +<TGConnectingPoint num="1" id="989" /> +</COMPONENT> + +<COMPONENT type="1001" id="992" > +<cdparam x="718" y="1032" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="991" /> +</COMPONENT> + +<COMPONENT type="1006" id="995" > +<cdparam x="761" y="1086" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="993" /> +<TGConnectingPoint num="1" id="994" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1004" > +<cdparam x="781" y="950" /> +<sizeparam width="89" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Active Open +" /> +<TGConnectingPoint num="0" id="996" /> +<TGConnectingPoint num="1" id="997" /> +<TGConnectingPoint num="2" id="998" /> +<TGConnectingPoint num="3" id="999" /> +<TGConnectingPoint num="4" id="1000" /> +<TGConnectingPoint num="5" id="1001" /> +<TGConnectingPoint num="6" id="1002" /> +<TGConnectingPoint num="7" id="1003" /> +<extraparam> +<Line value="Active Open" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1013" > +<cdparam x="715" y="907" /> +<sizeparam width="97" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Passive Open +" /> +<TGConnectingPoint num="0" id="1005" /> +<TGConnectingPoint num="1" id="1006" /> +<TGConnectingPoint num="2" id="1007" /> +<TGConnectingPoint num="3" id="1008" /> +<TGConnectingPoint num="4" id="1009" /> +<TGConnectingPoint num="5" id="1010" /> +<TGConnectingPoint num="6" id="1011" /> +<TGConnectingPoint num="7" id="1012" /> +<extraparam> +<Line value="Passive Open" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1016" > +<cdparam x="749" y="1193" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =3" /> +<TGConnectingPoint num="0" id="1014" /> +<TGConnectingPoint num="1" id="1015" /> +</COMPONENT> + +<COMPONENT type="1011" id="1019" > +<cdparam x="446" y="768" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1017" /> +<TGConnectingPoint num="1" id="1018" /> +</COMPONENT> + +<COMPONENT type="1001" id="1021" > +<cdparam x="486" y="830" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1020" /> +</COMPONENT> + +<COMPONENT type="1006" id="1024" > +<cdparam x="904" y="1123" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1022" /> +<TGConnectingPoint num="1" id="1023" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1033" > +<cdparam x="884" y="1068" /> +<sizeparam width="108" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of Fin +" /> +<TGConnectingPoint num="0" id="1025" /> +<TGConnectingPoint num="1" id="1026" /> +<TGConnectingPoint num="2" id="1027" /> +<TGConnectingPoint num="3" id="1028" /> +<TGConnectingPoint num="4" id="1029" /> +<TGConnectingPoint num="5" id="1030" /> +<TGConnectingPoint num="6" id="1031" /> +<TGConnectingPoint num="7" id="1032" /> +<extraparam> +<Line value="send Ack of Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1036" > +<cdparam x="893" y="1234" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =9" /> +<TGConnectingPoint num="0" id="1034" /> +<TGConnectingPoint num="1" id="1035" /> +</COMPONENT> + +<COMPONENT type="1001" id="1038" > +<cdparam x="933" y="1311" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1037" /> +</COMPONENT> + +<COMPONENT type="1006" id="1041" > +<cdparam x="1010" y="1155" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1039" /> +<TGConnectingPoint num="1" id="1040" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1050" > +<cdparam x="1000" y="1094" /> +<sizeparam width="108" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of Fin +" /> +<TGConnectingPoint num="0" id="1042" /> +<TGConnectingPoint num="1" id="1043" /> +<TGConnectingPoint num="2" id="1044" /> +<TGConnectingPoint num="3" id="1045" /> +<TGConnectingPoint num="4" id="1046" /> +<TGConnectingPoint num="5" id="1047" /> +<TGConnectingPoint num="6" id="1048" /> +<TGConnectingPoint num="7" id="1049" /> +<extraparam> +<Line value="send Ack of Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1053" > +<cdparam x="999" y="1266" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =7" /> +<TGConnectingPoint num="0" id="1051" /> +<TGConnectingPoint num="1" id="1052" /> +</COMPONENT> + +<COMPONENT type="1001" id="1055" > +<cdparam x="1039" y="1341" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1054" /> +</COMPONENT> + +<COMPONENT type="1006" id="1058" > +<cdparam x="683" y="758" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1056" /> +<TGConnectingPoint num="1" id="1057" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1060" > +<cdparam x="712" y="865" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1059" /> +</COMPONENT> + +<COMPONENT type="1007" id="1063" > +<cdparam x="93" y="1100" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1061" /> +<TGConnectingPoint num="1" id="1062" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1066" > +<cdparam x="104" y="1167" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1064" /> +<TGConnectingPoint num="1" id="1065" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1068" > +<cdparam x="122" y="1236" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1067" /> +</COMPONENT> + +<COMPONENT type="1007" id="1071" > +<cdparam x="190" y="1102" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1069" /> +<TGConnectingPoint num="1" id="1070" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1074" > +<cdparam x="201" y="1169" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1072" /> +<TGConnectingPoint num="1" id="1073" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1077" > +<cdparam x="307" y="1106" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1075" /> +<TGConnectingPoint num="1" id="1076" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1080" > +<cdparam x="318" y="1173" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1078" /> +<TGConnectingPoint num="1" id="1079" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1083" > +<cdparam x="399" y="1090" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1081" /> +<TGConnectingPoint num="1" id="1082" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1086" > +<cdparam x="410" y="1159" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1084" /> +<TGConnectingPoint num="1" id="1085" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1089" > +<cdparam x="72" y="861" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1087" /> +<TGConnectingPoint num="1" id="1088" /> +</COMPONENT> + +<COMPONENT type="1011" id="1092" > +<cdparam x="170" y="940" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1090" /> +<TGConnectingPoint num="1" id="1091" /> +</COMPONENT> + +<COMPONENT type="1011" id="1095" > +<cdparam x="379" y="865" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1093" /> +<TGConnectingPoint num="1" id="1094" /> +</COMPONENT> + +<COMPONENT type="1011" id="1098" > +<cdparam x="286" y="831" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1096" /> +<TGConnectingPoint num="1" id="1097" /> +</COMPONENT> + +<COMPONENT type="1008" id="1101" > +<cdparam x="206" y="1052" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1099" /> +<TGConnectingPoint num="1" id="1100" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1104" > +<cdparam x="323" y="962" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1102" /> +<TGConnectingPoint num="1" id="1103" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1107" > +<cdparam x="415" y="983" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1105" /> +<TGConnectingPoint num="1" id="1106" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1110" > +<cdparam x="109" y="986" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1108" /> +<TGConnectingPoint num="1" id="1109" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1113" > +<cdparam x="699" y="813" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1111" /> +<TGConnectingPoint num="1" id="1112" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1116" > +<cdparam x="775" y="1141" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1114" /> +<TGConnectingPoint num="1" id="1115" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1119" > +<cdparam x="920" y="1178" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1117" /> +<TGConnectingPoint num="1" id="1118" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1122" > +<cdparam x="1026" y="1211" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1120" /> +<TGConnectingPoint num="1" id="1121" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1124" > +<cdparam x="612" y="762" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1123" /> +</COMPONENT> + +<COMPONENT type="1001" id="1126" > +<cdparam x="899" y="922" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1125" /> +</COMPONENT> + +<COMPONENT type="1006" id="1129" > +<cdparam x="1169" y="1214" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1127" /> +<TGConnectingPoint num="1" id="1128" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1138" > +<cdparam x="1159" y="1153" /> +<sizeparam width="108" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of Fin +" /> +<TGConnectingPoint num="0" id="1130" /> +<TGConnectingPoint num="1" id="1131" /> +<TGConnectingPoint num="2" id="1132" /> +<TGConnectingPoint num="3" id="1133" /> +<TGConnectingPoint num="4" id="1134" /> +<TGConnectingPoint num="5" id="1135" /> +<TGConnectingPoint num="6" id="1136" /> +<TGConnectingPoint num="7" id="1137" /> +<extraparam> +<Line value="send Ack of Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1141" > +<cdparam x="1158" y="1295" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =8" /> +<TGConnectingPoint num="0" id="1139" /> +<TGConnectingPoint num="1" id="1140" /> +</COMPONENT> + +<COMPONENT type="1001" id="1143" > +<cdparam x="1197" y="1471" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1142" /> +</COMPONENT> + +<COMPONENT type="1011" id="1146" > +<cdparam x="1157" y="1402" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1144" /> +<TGConnectingPoint num="1" id="1145" /> +</COMPONENT> + +<COMPONENT type="1008" id="1149" > +<cdparam x="1185" y="1351" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1147" /> +<TGConnectingPoint num="1" id="1148" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1151" > +<cdparam x="1277" y="1070" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1150" /> +</COMPONENT> + +<COMPONENT type="1001" id="1153" > +<cdparam x="1519" y="1457" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1152" /> +</COMPONENT> + +<COMPONENT type="1006" id="1156" > +<cdparam x="1489" y="1132" /> +<sizeparam width="80" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoA(1)" /> +<TGConnectingPoint num="0" id="1154" /> +<TGConnectingPoint num="1" id="1155" /> +<extraparam> +<Data channelName="fromTtoA" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1159" > +<cdparam x="1490" y="1348" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1157" /> +<TGConnectingPoint num="1" id="1158" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1162" > +<cdparam x="1710" y="1026" /> +<sizeparam width="43" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="stop()" /> +<TGConnectingPoint num="0" id="1160" /> +<TGConnectingPoint num="1" id="1161" /> +<extraparam> +<Data eventName="stop" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1171" > +<cdparam x="1759" y="1192" /> +<sizeparam width="86" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Correct ack +" /> +<TGConnectingPoint num="0" id="1163" /> +<TGConnectingPoint num="1" id="1164" /> +<TGConnectingPoint num="2" id="1165" /> +<TGConnectingPoint num="3" id="1166" /> +<TGConnectingPoint num="4" id="1167" /> +<TGConnectingPoint num="5" id="1168" /> +<TGConnectingPoint num="6" id="1169" /> +<TGConnectingPoint num="7" id="1170" /> +<extraparam> +<Line value="Correct ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1180" > +<cdparam x="1635" y="1168" /> +<sizeparam width="71" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="false ack +" /> +<TGConnectingPoint num="0" id="1172" /> +<TGConnectingPoint num="1" id="1173" /> +<TGConnectingPoint num="2" id="1174" /> +<TGConnectingPoint num="3" id="1175" /> +<TGConnectingPoint num="4" id="1176" /> +<TGConnectingPoint num="5" id="1177" /> +<TGConnectingPoint num="6" id="1178" /> +<TGConnectingPoint num="7" id="1179" /> +<extraparam> +<Line value="false ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1183" > +<cdparam x="1602" y="1299" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1181" /> +<TGConnectingPoint num="1" id="1182" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1185" > +<cdparam x="1632" y="1468" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1184" /> +</COMPONENT> + +<COMPONENT type="301" id="1194" > +<cdparam x="1469" y="1295" /> +<sizeparam width="127" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="return acknowldge +" /> +<TGConnectingPoint num="0" id="1186" /> +<TGConnectingPoint num="1" id="1187" /> +<TGConnectingPoint num="2" id="1188" /> +<TGConnectingPoint num="3" id="1189" /> +<TGConnectingPoint num="4" id="1190" /> +<TGConnectingPoint num="5" id="1191" /> +<TGConnectingPoint num="6" id="1192" /> +<TGConnectingPoint num="7" id="1193" /> +<extraparam> +<Line value="return acknowldge" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1203" > +<cdparam x="1620" y="927" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="data +" /> +<TGConnectingPoint num="0" id="1195" /> +<TGConnectingPoint num="1" id="1196" /> +<TGConnectingPoint num="2" id="1197" /> +<TGConnectingPoint num="3" id="1198" /> +<TGConnectingPoint num="4" id="1199" /> +<TGConnectingPoint num="5" id="1200" /> +<TGConnectingPoint num="6" id="1201" /> +<TGConnectingPoint num="7" id="1202" /> +<extraparam> +<Line value="data" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1206" > +<cdparam x="1506" y="1405" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1204" /> +<TGConnectingPoint num="1" id="1205" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1209" > +<cdparam x="1619" y="1348" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1207" /> +<TGConnectingPoint num="1" id="1208" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1212" > +<cdparam x="1614" y="1404" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1210" /> +<TGConnectingPoint num="1" id="1211" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1214" > +<cdparam x="1730" y="1335" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1213" /> +</COMPONENT> + +<COMPONENT type="1011" id="1217" > +<cdparam x="1776" y="1349" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =4" /> +<TGConnectingPoint num="0" id="1215" /> +<TGConnectingPoint num="1" id="1216" /> +</COMPONENT> + +<COMPONENT type="1001" id="1219" > +<cdparam x="1818" y="1457" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1218" /> +</COMPONENT> + +<COMPONENT type="1011" id="1222" > +<cdparam x="1870" y="1411" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =6" /> +<TGConnectingPoint num="0" id="1220" /> +<TGConnectingPoint num="1" id="1221" /> +</COMPONENT> + +<COMPONENT type="1001" id="1224" > +<cdparam x="1910" y="1481" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1223" /> +</COMPONENT> + +<COMPONENT type="1001" id="1226" > +<cdparam x="1986" y="1543" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1225" /> +</COMPONENT> + +<COMPONENT type="1011" id="1229" > +<cdparam x="2051" y="1466" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1227" /> +<TGConnectingPoint num="1" id="1228" /> +</COMPONENT> + +<COMPONENT type="1001" id="1231" > +<cdparam x="2091" y="1537" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1230" /> +</COMPONENT> + +<COMPONENT type="1011" id="1234" > +<cdparam x="1946" y="1493" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1232" /> +<TGConnectingPoint num="1" id="1233" /> +</COMPONENT> + +<COMPONENT type="1011" id="1237" > +<cdparam x="1946" y="1434" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =8" /> +<TGConnectingPoint num="0" id="1235" /> +<TGConnectingPoint num="1" id="1236" /> +</COMPONENT> + +<COMPONENT type="301" id="1246" > +<cdparam x="1825" y="889" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Syn +" /> +<TGConnectingPoint num="0" id="1238" /> +<TGConnectingPoint num="1" id="1239" /> +<TGConnectingPoint num="2" id="1240" /> +<TGConnectingPoint num="3" id="1241" /> +<TGConnectingPoint num="4" id="1242" /> +<TGConnectingPoint num="5" id="1243" /> +<TGConnectingPoint num="6" id="1244" /> +<TGConnectingPoint num="7" id="1245" /> +<extraparam> +<Line value="Syn" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1255" > +<cdparam x="1707" y="945" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="ack +" /> +<TGConnectingPoint num="0" id="1247" /> +<TGConnectingPoint num="1" id="1248" /> +<TGConnectingPoint num="2" id="1249" /> +<TGConnectingPoint num="3" id="1250" /> +<TGConnectingPoint num="4" id="1251" /> +<TGConnectingPoint num="5" id="1252" /> +<TGConnectingPoint num="6" id="1253" /> +<TGConnectingPoint num="7" id="1254" /> +<extraparam> +<Line value="ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1258" > +<cdparam x="2179" y="1198" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1256" /> +<TGConnectingPoint num="1" id="1257" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1260" > +<cdparam x="2207" y="1483" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1259" /> +</COMPONENT> + +<COMPONENT type="1007" id="1263" > +<cdparam x="2178" y="1298" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1261" /> +<TGConnectingPoint num="1" id="1262" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1266" > +<cdparam x="2189" y="1365" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1264" /> +<TGConnectingPoint num="1" id="1265" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1269" > +<cdparam x="2158" y="1136" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1267" /> +<TGConnectingPoint num="1" id="1268" /> +</COMPONENT> + +<COMPONENT type="1008" id="1272" > +<cdparam x="2194" y="1248" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1270" /> +<TGConnectingPoint num="1" id="1271" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1275" > +<cdparam x="2167" y="1424" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =2" /> +<TGConnectingPoint num="0" id="1273" /> +<TGConnectingPoint num="1" id="1274" /> +</COMPONENT> + +<COMPONENT type="1006" id="1278" > +<cdparam x="2302" y="1122" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1276" /> +<TGConnectingPoint num="1" id="1277" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1287" > +<cdparam x="2283" y="1065" /> +<sizeparam width="114" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of SYN +" /> +<TGConnectingPoint num="0" id="1279" /> +<TGConnectingPoint num="1" id="1280" /> +<TGConnectingPoint num="2" id="1281" /> +<TGConnectingPoint num="3" id="1282" /> +<TGConnectingPoint num="4" id="1283" /> +<TGConnectingPoint num="5" id="1284" /> +<TGConnectingPoint num="6" id="1285" /> +<TGConnectingPoint num="7" id="1286" /> +<extraparam> +<Line value="send Ack of SYN" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1290" > +<cdparam x="2291" y="1267" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =2" /> +<TGConnectingPoint num="0" id="1288" /> +<TGConnectingPoint num="1" id="1289" /> +</COMPONENT> + +<COMPONENT type="1001" id="1292" > +<cdparam x="2330" y="1324" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1291" /> +</COMPONENT> + +<COMPONENT type="1008" id="1295" > +<cdparam x="2318" y="1199" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1293" /> +<TGConnectingPoint num="1" id="1294" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1297" > +<cdparam x="1649" y="1057" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1296" /> +</COMPONENT> + +<COMPONENT type="1001" id="1299" > +<cdparam x="2168" y="1421" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1298" /> +</COMPONENT> + +<COMPONENT type="1001" id="1301" > +<cdparam x="2268" y="1039" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1300" /> +</COMPONENT> + +<COMPONENT type="1008" id="1304" > +<cdparam x="1465" y="1192" /> +<sizeparam width="129" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="receive_Application()" /> +<TGConnectingPoint num="0" id="1302" /> +<TGConnectingPoint num="1" id="1303" /> +<extraparam> +<Data eventName="receive_Application" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="1307" > +<cdparam x="1701" y="1086" /> +<sizeparam width="60" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="temp(1) " /> +<TGConnectingPoint num="0" id="1305" /> +<TGConnectingPoint num="1" id="1306" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="115" id="1308" > +<cdparam x="1048" y="795" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1048" y="795" id="818" /> +<P2 x="1728" y="865" id="740" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1309" > +<cdparam x="1048" y="795" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1089" y="954" id="790" /> +<P2 x="1208" y="1010" id="760" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1310" > +<cdparam x="1008" y="610" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to execI" value="null" /> +<P1 x="1008" y="610" id="886" /> +<P2 x="1008" y="696" id="822" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1311" > +<cdparam x="722" y="614" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to execI" value="null" /> +<P1 x="722" y="614" id="901" /> +<P2 x="722" y="689" id="778" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1312" > +<cdparam x="504" y="597" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="504" y="597" id="858" /> +<P2 x="572" y="702" id="772" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1313" > +<cdparam x="464" y="637" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="464" y="637" id="859" /> +<P2 x="439" y="778" id="826" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1314" > +<cdparam x="424" y="597" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="424" y="597" id="857" /> +<P2 x="346" y="759" id="806" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1315" > +<cdparam x="289" y="619" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to read channel" value="null" /> +<P1 x="289" y="619" id="867" /> +<P2 x="230" y="803" id="947" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1316" > +<cdparam x="249" y="579" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="249" y="579" id="865" /> +<P2 x="132" y="789" id="810" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1317" > +<cdparam x="371" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to notified event" value="null" /> +<P1 x="319" y="93" id="889" /> +<P2 x="374" y="128" id="897" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1318" > +<cdparam x="234" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="234" y="169" id="895" /> +<P2 x="234" y="202" id="892" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1319" > +<cdparam x="234" y="104" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to action state" value="null" /> +<P1 x="234" y="104" id="890" /> +<P2 x="234" y="139" id="894" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1320" > +<cdparam x="234" y="47" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to for loop" value="null" /> +<P1 x="234" y="47" id="869" /> +<P2 x="234" y="74" id="888" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1321" > +<cdparam x="425" y="162" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from notified event to choice" value="null" /> +<P1 x="374" y="158" id="898" /> +<P2 x="374" y="182" id="848" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1322" > +<cdparam x="564" y="482" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="464" y="322" id="924" /> +<P2 x="722" y="529" id="903" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1323" > +<cdparam x="722" y="559" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="722" y="559" id="904" /> +<P2 x="722" y="584" id="900" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1324" > +<cdparam x="604" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="504" y="282" id="920" /> +<P2 x="1008" y="523" id="906" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1325" > +<cdparam x="1007" y="553" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="1008" y="553" id="907" /> +<P2 x="1008" y="580" id="885" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1326" > +<cdparam x="524" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="464" y="322" id="921" /> +<P2 x="464" y="487" id="909" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1327" > +<cdparam x="330" y="428" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="424" y="282" id="922" /> +<P2 x="289" y="463" id="912" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1328" > +<cdparam x="318" y="520" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to choice" value="null" /> +<P1 x="289" y="493" id="913" /> +<P2 x="289" y="554" id="864" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1329" > +<cdparam x="160" y="481" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="148" y="501" id="841" /> +<P2 x="126" y="544" id="880" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1330" > +<cdparam x="290" y="388" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="424" y="282" id="919" /> +<P2 x="188" y="414" id="915" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1331" > +<cdparam x="229" y="467" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to choice" value="null" /> +<P1 x="188" y="444" id="916" /> +<P2 x="188" y="476" id="840" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1332" > +<cdparam x="228" y="501" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="228" y="501" id="842" /> +<P2 x="236" y="524" id="929" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1333" > +<cdparam x="334" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="334" y="207" id="849" /> +<P2 x="301" y="223" id="933" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1334" > +<cdparam x="301" y="253" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to stop state" value="null" /> +<P1 x="301" y="253" id="934" /> +<P2 x="301" y="285" id="936" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1335" > +<cdparam x="464" y="517" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to choice" value="null" /> +<P1 x="464" y="517" id="910" /> +<P2 x="464" y="572" id="856" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1336" > +<cdparam x="329" y="579" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="329" y="579" id="866" /> +<P2 x="353" y="609" id="931" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1337" > +<cdparam x="126" y="574" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="126" y="574" id="881" /> +<P2 x="126" y="610" id="883" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1338" > +<cdparam x="414" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to select" value="null" /> +<P1 x="414" y="207" id="850" /> +<P2 x="464" y="257" id="918" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1339" > +<cdparam x="230" y="833" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to execI" value="null" /> +<P1 x="230" y="833" id="948" /> +<P2 x="230" y="858" id="830" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1340" > +<cdparam x="716" y="749" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="968" y="795" id="817" /> +<P2 x="843" y="859" id="800" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1341" > +<cdparam x="720" y="1074" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="728" y="990" id="989" /> +<P2 x="728" y="1027" id="991" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1342" > +<cdparam x="733" y="899" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="803" y="884" id="801" /> +<P2 x="728" y="960" id="988" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1343" > +<cdparam x="800" y="938" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="843" y="924" id="803" /> +<P2 x="800" y="1004" id="794" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1344" > +<cdparam x="800" y="1057" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="800" y="1044" id="795" /> +<P2 x="800" y="1081" id="993" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1345" > +<cdparam x="132" y="886" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="132" y="886" id="1088" /> +<P2 x="132" y="933" id="963" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1346" > +<cdparam x="943" y="1061" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="943" y="1060" id="783" /> +<P2 x="943" y="1118" id="1022" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1347" > +<cdparam x="1049" y="1093" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1049" y="1092" id="835" /> +<P2 x="1049" y="1150" id="1039" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1348" > +<cdparam x="1049" y="994" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1049" y="994" id="791" /> +<P2 x="1049" y="1052" id="834" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1349" > +<cdparam x="696" y="742" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="722" y="729" id="779" /> +<P2 x="722" y="753" id="1056" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1350" > +<cdparam x="132" y="1125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="132" y="1125" id="1062" /> +<P2 x="132" y="1162" id="1064" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1351" > +<cdparam x="132" y="1192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="132" y="1192" id="1065" /> +<P2 x="132" y="1231" id="1067" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1352" > +<cdparam x="132" y="1066" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send request" value="null" /> +<P1 x="132" y="1066" id="961" /> +<P2 x="132" y="1095" id="1061" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1353" > +<cdparam x="229" y="1127" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="229" y="1127" id="1070" /> +<P2 x="229" y="1164" id="1072" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1354" > +<cdparam x="346" y="1131" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="346" y="1131" id="1076" /> +<P2 x="346" y="1168" id="1078" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1355" > +<cdparam x="346" y="1051" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send request" value="null" /> +<P1 x="346" y="1051" id="967" /> +<P2 x="346" y="1101" id="1075" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1356" > +<cdparam x="437" y="1118" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="438" y="1115" id="1082" /> +<P2 x="438" y="1154" id="1084" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1357" > +<cdparam x="438" y="1057" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send request" value="null" /> +<P1 x="438" y="1057" id="956" /> +<P2 x="438" y="1085" id="1081" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1358" > +<cdparam x="132" y="808" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="132" y="829" id="811" /> +<P2 x="132" y="856" id="1087" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1359" > +<cdparam x="230" y="898" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="230" y="898" id="831" /> +<P2 x="230" y="935" id="1090" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1360" > +<cdparam x="230" y="965" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="230" y="965" id="1091" /> +<P2 x="230" y="997" id="950" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1361" > +<cdparam x="346" y="799" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="346" y="799" id="807" /> +<P2 x="346" y="826" id="1096" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1362" > +<cdparam x="346" y="856" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="346" y="856" id="1097" /> +<P2 x="346" y="895" id="974" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1363" > +<cdparam x="439" y="818" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="439" y="818" id="827" /> +<P2 x="439" y="860" id="1093" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1364" > +<cdparam x="439" y="890" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="439" y="890" id="1094" /> +<P2 x="439" y="936" id="971" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1365" > +<cdparam x="132" y="963" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="132" y="963" id="964" /> +<P2 x="132" y="981" id="1108" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1366" > +<cdparam x="132" y="1011" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="132" y="1011" id="1109" /> +<P2 x="132" y="1036" id="960" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1367" > +<cdparam x="230" y="1027" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="230" y="1027" id="951" /> +<P2 x="229" y="1047" id="1099" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1368" > +<cdparam x="228" y="1088" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send request" value="null" /> +<P1 x="229" y="1077" id="1100" /> +<P2 x="229" y="1097" id="1069" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1369" > +<cdparam x="346" y="925" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="346" y="925" id="975" /> +<P2 x="346" y="957" id="1102" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1370" > +<cdparam x="348" y="987" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="346" y="987" id="1103" /> +<P2 x="346" y="1021" id="966" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1371" > +<cdparam x="439" y="966" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="439" y="966" id="972" /> +<P2 x="438" y="978" id="1105" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1372" > +<cdparam x="438" y="1008" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="438" y="1008" id="1106" /> +<P2 x="438" y="1027" id="955" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1373" > +<cdparam x="722" y="783" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="722" y="783" id="1057" /> +<P2 x="722" y="808" id="1111" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1374" > +<cdparam x="722" y="838" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="722" y="838" id="1112" /> +<P2 x="722" y="860" id="1059" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1375" > +<cdparam x="800" y="1111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="800" y="1111" id="994" /> +<P2 x="798" y="1136" id="1114" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1376" > +<cdparam x="798" y="1166" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="798" y="1166" id="1115" /> +<P2 x="799" y="1188" id="1014" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1377" > +<cdparam x="943" y="1148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="943" y="1148" id="1023" /> +<P2 x="943" y="1173" id="1117" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1378" > +<cdparam x="950" y="1201" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="943" y="1203" id="1118" /> +<P2 x="943" y="1229" id="1034" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1379" > +<cdparam x="1049" y="1180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1049" y="1180" id="1040" /> +<P2 x="1049" y="1206" id="1120" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1380" > +<cdparam x="1049" y="1223" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="1049" y="1236" id="1121" /> +<P2 x="1049" y="1261" id="1051" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1381" > +<cdparam x="883" y="884" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="883" y="884" id="802" /> +<P2 x="909" y="917" id="1125" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1382" > +<cdparam x="612" y="727" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="612" y="727" id="774" /> +<P2 x="622" y="757" id="1123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1383" > +<cdparam x="532" y="727" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="532" y="727" id="773" /> +<P2 x="496" y="763" id="1017" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1384" > +<cdparam x="799" y="1218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="799" y="1218" id="1015" /> +<P2 x="799" y="1265" id="977" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1385" > +<cdparam x="1009" y="954" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1009" y="954" id="789" /> +<P2 x="943" y="1020" id="782" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1386" > +<cdparam x="229" y="1194" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="229" y="1194" id="1073" /> +<P2 x="229" y="1232" id="953" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1387" > +<cdparam x="346" y="1198" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="346" y="1198" id="1079" /> +<P2 x="344" y="1224" id="969" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1388" > +<cdparam x="438" y="1184" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="438" y="1184" id="1085" /> +<P2 x="438" y="1208" id="958" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1389" > +<cdparam x="496" y="793" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="496" y="793" id="1018" /> +<P2 x="496" y="825" id="1020" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1390" > +<cdparam x="943" y="1259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="943" y="1259" id="1035" /> +<P2 x="943" y="1306" id="1037" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1391" > +<cdparam x="1008" y="736" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to choice" value="null" /> +<P1 x="1008" y="736" id="823" /> +<P2 x="1008" y="770" id="816" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1392" > +<cdparam x="1008" y="835" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1008" y="835" id="819" /> +<P2 x="1049" y="929" id="788" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1393" > +<cdparam x="1049" y="1291" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1049" y="1291" id="1052" /> +<P2 x="1049" y="1336" id="1054" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1394" > +<cdparam x="1208" y="1152" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1208" y="1142" id="767" /> +<P2 x="1208" y="1209" id="1127" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1395" > +<cdparam x="1208" y="1239" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to action state" value="null" /> +<P1 x="1208" y="1239" id="1128" /> +<P2 x="1208" y="1290" id="1139" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1396" > +<cdparam x="1208" y="1320" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send event" value="null" /> +<P1 x="1208" y="1320" id="1140" /> +<P2 x="1208" y="1346" id="1147" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1397" > +<cdparam x="1206" y="1385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="1208" y="1376" id="1148" /> +<P2 x="1207" y="1397" id="1144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1398" > +<cdparam x="1206" y="1088" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1208" y="1075" id="763" /> +<P2 x="1208" y="1102" id="766" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1399" > +<cdparam x="1248" y="1035" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="1248" y="1035" id="762" /> +<P2 x="1287" y="1065" id="1150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1400" > +<cdparam x="1207" y="1427" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1207" y="1427" id="1145" /> +<P2 x="1207" y="1466" id="1142" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1401" > +<cdparam x="1553" y="1019" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1567" y="1021" id="733" /> +<P2 x="1529" y="1059" id="726" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1402" > +<cdparam x="1529" y="1324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1529" y="1289" id="723" /> +<P2 x="1529" y="1343" id="1157" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1403" > +<cdparam x="1684" y="929" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="1728" y="930" id="743" /> +<P2 x="1731" y="1021" id="1160" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1404" > +<cdparam x="1615" y="1283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1641" y="1270" id="747" /> +<P2 x="1641" y="1294" id="1181" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1405" > +<cdparam x="1641" y="1324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1641" y="1324" id="1182" /> +<P2 x="1642" y="1343" id="1207" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1406" > +<cdparam x="1529" y="1373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1529" y="1373" id="1158" /> +<P2 x="1529" y="1400" id="1204" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1407" > +<cdparam x="1529" y="1422" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="1529" y="1430" id="1205" /> +<P2 x="1529" y="1452" id="1152" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1408" > +<cdparam x="1642" y="1373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="1642" y="1373" id="1208" /> +<P2 x="1642" y="1399" id="1210" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1409" > +<cdparam x="1956" y="1361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="1956" y="1361" id="701" /> +<P2 x="1920" y="1406" id="1220" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1410" > +<cdparam x="2100" y="1490" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="2101" y="1491" id="1228" /> +<P2 x="2101" y="1532" id="1230" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1411" > +<cdparam x="1996" y="1401" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="1996" y="1401" id="703" /> +<P2 x="1996" y="1429" id="1235" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1412" > +<cdparam x="1996" y="1459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="1996" y="1459" id="1236" /> +<P2 x="1996" y="1488" id="1232" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1413" > +<cdparam x="2021" y="1038" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="2237" y="966" id="693" /> +<P2 x="2218" y="1054" id="750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1414" > +<cdparam x="2217" y="1323" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="2217" y="1323" id="1262" /> +<P2 x="2217" y="1360" id="1264" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1415" > +<cdparam x="2218" y="1094" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="2218" y="1094" id="751" /> +<P2 x="2218" y="1131" id="1267" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1416" > +<cdparam x="2218" y="1161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="2218" y="1161" id="1268" /> +<P2 x="2218" y="1193" id="1256" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1417" > +<cdparam x="2218" y="1223" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="2218" y="1223" id="1257" /> +<P2 x="2217" y="1243" id="1270" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1418" > +<cdparam x="2216" y="1284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send request" value="null" /> +<P1 x="2217" y="1273" id="1271" /> +<P2 x="2217" y="1293" id="1261" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1419" > +<cdparam x="2217" y="1390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to action state" value="null" /> +<P1 x="2217" y="1390" id="1265" /> +<P2 x="2217" y="1419" id="1273" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1420" > +<cdparam x="2341" y="1060" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="2341" y="1059" id="755" /> +<P2 x="2341" y="1117" id="1276" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1421" > +<cdparam x="1529" y="1099" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1529" y="1099" id="727" /> +<P2 x="1529" y="1127" id="1154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1422" > +<cdparam x="2101" y="1433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="2101" y="1433" id="687" /> +<P2 x="2101" y="1461" id="1227" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1423" > +<cdparam x="2158" y="1460" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="2141" y="1393" id="686" /> +<P2 x="2178" y="1416" id="1298" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1424" > +<cdparam x="1688" y="890" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1688" y="890" id="741" /> +<P2 x="1607" y="996" id="732" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1425" > +<cdparam x="1768" y="890" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1768" y="890" id="742" /> +<P2 x="2277" y="941" id="692" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1426" > +<cdparam x="2317" y="966" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="2317" y="966" id="694" /> +<P2 x="2341" y="1019" id="754" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1427" > +<cdparam x="2341" y="1147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="2341" y="1147" id="1277" /> +<P2 x="2341" y="1194" id="1293" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1428" > +<cdparam x="2341" y="1224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send event" value="null" /> +<P1 x="2341" y="1224" id="1294" /> +<P2 x="2341" y="1262" id="1288" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1429" > +<cdparam x="1731" y="1051" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to choice" value="null" /> +<P1 x="1731" y="1051" id="1161" /> +<P2 x="1731" y="1081" id="1305" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1430" > +<cdparam x="1647" y="1021" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="1647" y="1021" id="734" /> +<P2 x="1659" y="1052" id="1296" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1431" > +<cdparam x="1826" y="1324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="1826" y="1324" id="711" /> +<P2 x="1826" y="1344" id="1215" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1432" > +<cdparam x="1826" y="1374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1826" y="1374" id="1216" /> +<P2 x="1828" y="1452" id="1218" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1433" > +<cdparam x="1786" y="1284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="1786" y="1284" id="709" /> +<P2 x="1740" y="1330" id="1213" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1434" > +<cdparam x="1920" y="1436" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1920" y="1436" id="1221" /> +<P2 x="1920" y="1476" id="1223" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1435" > +<cdparam x="1996" y="1518" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1996" y="1518" id="1233" /> +<P2 x="1996" y="1538" id="1225" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1436" > +<cdparam x="2036" y="1361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="2036" y="1361" id="702" /> +<P2 x="2101" y="1368" id="684" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1437" > +<cdparam x="1866" y="1284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1866" y="1284" id="710" /> +<P2 x="1996" y="1336" id="700" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1438" > +<cdparam x="2341" y="1292" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="2341" y="1292" id="1289" /> +<P2 x="2340" y="1319" id="1291" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1439" > +<cdparam x="2217" y="1449" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="2217" y="1449" id="1274" /> +<P2 x="2217" y="1478" id="1259" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1440" > +<cdparam x="2277" y="1006" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="2277" y="1006" id="695" /> +<P2 x="2278" y="1034" id="1300" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1441" > +<cdparam x="1642" y="1429" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="1642" y="1429" id="1211" /> +<P2 x="1642" y="1463" id="1184" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1442" > +<cdparam x="1529" y="1157" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1529" y="1157" id="1155" /> +<P2 x="1529" y="1187" id="1302" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1443" > +<cdparam x="1529" y="1217" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to execI" value="null" /> +<P1 x="1529" y="1217" id="1303" /> +<P2 x="1529" y="1249" id="722" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1444" > +<cdparam x="1691" y="1156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1691" y="1156" id="717" /> +<P2 x="1641" y="1230" id="746" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1445" > +<cdparam x="1771" y="1156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1771" y="1156" id="718" /> +<P2 x="1826" y="1259" id="708" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1446" > +<cdparam x="1731" y="1111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to choice" value="null" /> +<P1 x="1731" y="1111" id="1306" /> +<P2 x="1731" y="1131" id="716" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="Application" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1012" id="1454" > +<cdparam x="491" y="277" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1450" /> +<TGConnectingPoint num="1" id="1451" /> +<TGConnectingPoint num="2" id="1452" /> +<TGConnectingPoint num="3" id="1453" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1447" > +<father id="1454" num="0" /> +<cdparam x="466" y="287" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1448" > +<father id="1454" num="1" /> +<cdparam x="526" y="287" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1449" > +<father id="1454" num="2" /> +<cdparam x="511" y="322" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="1456" > +<cdparam x="501" y="91" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1455" /> +</COMPONENT> + +<COMPONENT type="1008" id="1459" > +<cdparam x="485" y="129" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="open()" /> +<TGConnectingPoint num="0" id="1457" /> +<TGConnectingPoint num="1" id="1458" /> +<extraparam> +<Data eventName="open" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1462" > +<cdparam x="468" y="178" /> +<sizeparam width="80" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromAtoT(1)" /> +<TGConnectingPoint num="0" id="1460" /> +<TGConnectingPoint num="1" id="1461" /> +<extraparam> +<Data channelName="fromAtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1465" > +<cdparam x="470" y="226" /> +<sizeparam width="75" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="send_TCP()" /> +<TGConnectingPoint num="0" id="1463" /> +<TGConnectingPoint num="1" id="1464" /> +<extraparam> +<Data eventName="send_TCP" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1467" > +<cdparam x="576" y="388" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1466" /> +</COMPONENT> + +<COMPONENT type="1008" id="1470" > +<cdparam x="562" y="329" /> +<sizeparam width="49" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="abort()" /> +<TGConnectingPoint num="0" id="1468" /> +<TGConnectingPoint num="1" id="1469" /> +<extraparam> +<Data eventName="abort" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1473" > +<cdparam x="409" y="337" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="close()" /> +<TGConnectingPoint num="0" id="1471" /> +<TGConnectingPoint num="1" id="1472" /> +<extraparam> +<Data eventName="close" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1475" > +<cdparam x="422" y="386" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1474" /> +</COMPONENT> + +<CONNECTOR type="115" id="1476" > +<cdparam x="509" y="94" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send event" value="null" /> +<P1 x="508" y="111" id="1455" /> +<P2 x="508" y="124" id="1457" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1477" > +<cdparam x="508" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="508" y="154" id="1458" /> +<P2 x="508" y="173" id="1460" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1478" > +<cdparam x="508" y="222" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="508" y="203" id="1461" /> +<P2 x="507" y="221" id="1463" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1479" > +<cdparam x="586" y="354" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="586" y="354" id="1469" /> +<P2 x="586" y="383" id="1466" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1480" > +<cdparam x="508" y="298" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to choice" value="null" /> +<P1 x="507" y="251" id="1464" /> +<P2 x="506" y="267" id="1450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1481" > +<cdparam x="470" y="348" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="466" y="292" id="1451" /> +<P2 x="432" y="332" id="1471" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1482" > +<cdparam x="432" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="432" y="362" id="1472" /> +<P2 x="432" y="381" id="1474" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1483" > +<cdparam x="550" y="348" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="546" y="292" id="1452" /> +<P2 x="586" y="324" id="1468" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="SmartCard" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1000" id="1485" > +<cdparam x="159" y="66" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1484" /> +</COMPONENT> + +<COMPONENT type="1010" id="1488" > +<cdparam x="138" y="129" /> +<sizeparam width="57" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="reset() " /> +<TGConnectingPoint num="0" id="1486" /> +<TGConnectingPoint num="1" id="1487" /> +<accessibility /> +<extraparam> +<Data eventName="reset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1491" > +<cdparam x="108" y="182" /> +<sizeparam width="116" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="answerToReset()" /> +<TGConnectingPoint num="0" id="1489" /> +<TGConnectingPoint num="1" id="1490" /> +<extraparam> +<Data eventName="answerToReset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="1494" > +<cdparam x="143" y="237" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="pTS() " /> +<TGConnectingPoint num="0" id="1492" /> +<TGConnectingPoint num="1" id="1493" /> +<extraparam> +<Data eventName="pTS" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1497" > +<cdparam x="121" y="308" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="pTSConfirm()" /> +<TGConnectingPoint num="0" id="1495" /> +<TGConnectingPoint num="1" id="1496" /> +<extraparam> +<Data eventName="pTSConfirm" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1506" > +<cdparam x="376" y="98" /> +<sizeparam width="249" height="65" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="The first two layers of the OSI model +are used to communicate between +the smart card and the terminal +" /> +<TGConnectingPoint num="0" id="1498" /> +<TGConnectingPoint num="1" id="1499" /> +<TGConnectingPoint num="2" id="1500" /> +<TGConnectingPoint num="3" id="1501" /> +<TGConnectingPoint num="4" id="1502" /> +<TGConnectingPoint num="5" id="1503" /> +<TGConnectingPoint num="6" id="1504" /> +<TGConnectingPoint num="7" id="1505" /> +<extraparam> +<Line value="The first two layers of the OSI model " /> +<Line value="are used to communicate between " /> +<Line value="the smart card and the terminal" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1509" > +<cdparam x="250" y="97" /> +<sizeparam width="96" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send request" value="start_TCP_IP()" /> +<TGConnectingPoint num="0" id="1507" /> +<TGConnectingPoint num="1" id="1508" /> +<extraparam> +<Data requestName="start_TCP_IP" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1512" > +<cdparam x="236" y="148" /> +<sizeparam width="125" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send request" value="start_Application()" /> +<TGConnectingPoint num="0" id="1510" /> +<TGConnectingPoint num="1" id="1511" /> +<extraparam> +<Data requestName="start_Application" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1514" > +<cdparam x="515" y="428" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1513" /> +</COMPONENT> + +<COMPONENT type="1008" id="1517" > +<cdparam x="305" y="350" /> +<sizeparam width="115" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="data_Ready_SC()" /> +<TGConnectingPoint num="0" id="1515" /> +<TGConnectingPoint num="1" id="1516" /> +<extraparam> +<Data eventName="data_Ready_SC" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1519" > +<cdparam x="352" y="426" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1518" /> +</COMPONENT> + +<COMPONENT type="1009" id="1522" > +<cdparam x="318" y="308" /> +<sizeparam width="88" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="read channel" value="fromTtoP(1) " /> +<TGConnectingPoint num="0" id="1520" /> +<TGConnectingPoint num="1" id="1521" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="1525" > +<cdparam x="335" y="264" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="send() " /> +<TGConnectingPoint num="0" id="1523" /> +<TGConnectingPoint num="1" id="1524" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1528" > +<cdparam x="315" y="392" /> +<sizeparam width="94" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromSCtoD(1)" /> +<TGConnectingPoint num="0" id="1526" /> +<TGConnectingPoint num="1" id="1527" /> +<extraparam> +<Data channelName="fromSCtoD" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1531" > +<cdparam x="493" y="350" /> +<sizeparam width="65" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="receive()" /> +<TGConnectingPoint num="0" id="1529" /> +<TGConnectingPoint num="1" id="1530" /> +<extraparam> +<Data eventName="receive" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="1534" > +<cdparam x="472" y="311" /> +<sizeparam width="106" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="read channel" value="fromDtoSC0(1) " /> +<TGConnectingPoint num="0" id="1532" /> +<TGConnectingPoint num="1" id="1533" /> +<extraparam> +<Data channelName="fromDtoSC0" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1537" > +<cdparam x="483" y="387" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromPtoT(1)" /> +<TGConnectingPoint num="0" id="1535" /> +<TGConnectingPoint num="1" id="1536" /> +<extraparam> +<Data channelName="fromPtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="1540" > +<cdparam x="477" y="268" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="data_Ready() " /> +<TGConnectingPoint num="0" id="1538" /> +<TGConnectingPoint num="1" id="1539" /> +<breakpoint /> +<extraparam> +<Data eventName="data_Ready" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1014" id="1544" > +<cdparam x="236" y="202" /> +<sizeparam width="124" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="for loop" value="for(j=0;x==0;j = j)" /> +<TGConnectingPoint num="0" id="1541" /> +<TGConnectingPoint num="1" id="1542" /> +<TGConnectingPoint num="2" id="1543" /> +<extraparam> +<Data init="j=0" condition="x==0" increment="j = j" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1546" > +<cdparam x="297" y="231" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1545" /> +</COMPONENT> + +<COMPONENT type="1018" id="1557" > +<cdparam x="424" y="226" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="select" value="null" /> +<TGConnectingPoint num="0" id="1547" /> +<TGConnectingPoint num="1" id="1548" /> +<TGConnectingPoint num="2" id="1549" /> +<TGConnectingPoint num="3" id="1550" /> +<TGConnectingPoint num="4" id="1551" /> +<TGConnectingPoint num="5" id="1552" /> +<TGConnectingPoint num="6" id="1553" /> +<TGConnectingPoint num="7" id="1554" /> +<TGConnectingPoint num="8" id="1555" /> +<TGConnectingPoint num="9" id="1556" /> +</COMPONENT> + +<CONNECTOR type="115" id="1562" > +<cdparam x="111" y="331" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send request" value="null" /> +<P1 x="166" y="333" id="1496" /> +<P2 x="298" y="92" id="1507" /> +<Point x="166" y="351" /> +<Point x="231" y="351" /> +<Point x="231" y="72" /> +<Point x="298" y="72" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1558" > +<father id="1562" num="0" /> +<cdparam x="166" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1559" > +<father id="1562" num="1" /> +<cdparam x="231" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1560" > +<father id="1562" num="2" /> +<cdparam x="231" y="72" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1561" > +<father id="1562" num="3" /> +<cdparam x="298" y="72" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="115" id="1563" > +<cdparam x="166" y="64" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to wait event" value="null" /> +<P1 x="166" y="86" id="1484" /> +<P2 x="166" y="124" id="1486" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1564" > +<cdparam x="166" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to send event" value="null" /> +<P1 x="166" y="154" id="1487" /> +<P2 x="166" y="177" id="1489" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1565" > +<cdparam x="312" y="133" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to send request" value="null" /> +<P1 x="298" y="122" id="1508" /> +<P2 x="298" y="143" id="1510" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1566" > +<cdparam x="355" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="362" y="289" id="1524" /> +<P2 x="362" y="303" id="1520" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1567" > +<cdparam x="355" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to send event" value="null" /> +<P1 x="362" y="333" id="1521" /> +<P2 x="362" y="345" id="1515" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1568" > +<cdparam x="355" y="417" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="362" y="375" id="1516" /> +<P2 x="362" y="387" id="1526" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1569" > +<cdparam x="355" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="362" y="417" id="1527" /> +<P2 x="362" y="421" id="1518" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1570" > +<cdparam x="541" y="358" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to send event" value="null" /> +<P1 x="525" y="336" id="1533" /> +<P2 x="525" y="345" id="1529" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1571" > +<cdparam x="540" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="525" y="375" id="1530" /> +<P2 x="525" y="382" id="1535" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1572" > +<cdparam x="543" y="305" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="525" y="293" id="1539" /> +<P2 x="525" y="306" id="1532" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1573" > +<cdparam x="540" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="525" y="412" id="1536" /> +<P2 x="525" y="423" id="1513" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1574" > +<cdparam x="298" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to for loop" value="null" /> +<P1 x="298" y="173" id="1511" /> +<P2 x="298" y="197" id="1541" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1575" > +<cdparam x="328" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to stop state" value="null" /> +<P1 x="298" y="227" id="1543" /> +<P2 x="307" y="226" id="1545" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1576" > +<cdparam x="395" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from select to wait event" value="null" /> +<P1 x="399" y="241" id="1548" /> +<P2 x="362" y="259" id="1523" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1577" > +<cdparam x="543" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from select to wait event" value="null" /> +<P1 x="479" y="241" id="1549" /> +<P2 x="525" y="263" id="1538" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1578" > +<cdparam x="391" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to select" value="null" /> +<P1 x="360" y="216" id="1542" /> +<P2 x="439" y="216" id="1547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1579" > +<cdparam x="164" y="262" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to send event" value="null" /> +<P1 x="166" y="262" id="1493" /> +<P2 x="166" y="303" id="1495" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1580" > +<cdparam x="166" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to wait event" value="null" /> +<P1 x="166" y="207" id="1490" /> +<P2 x="166" y="232" id="1492" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Architecture1" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1100" id="1605" > +<cdparam x="51" y="90" /> +<sizeparam width="459" height="321" minWidth="150" minHeight="150" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="cpu0" value="name" /> +<TGConnectingPoint num="0" id="1581" /> +<TGConnectingPoint num="1" id="1582" /> +<TGConnectingPoint num="2" id="1583" /> +<TGConnectingPoint num="3" id="1584" /> +<TGConnectingPoint num="4" id="1585" /> +<TGConnectingPoint num="5" id="1586" /> +<TGConnectingPoint num="6" id="1587" /> +<TGConnectingPoint num="7" id="1588" /> +<TGConnectingPoint num="8" id="1589" /> +<TGConnectingPoint num="9" id="1590" /> +<TGConnectingPoint num="10" id="1591" /> +<TGConnectingPoint num="11" id="1592" /> +<TGConnectingPoint num="12" id="1593" /> +<TGConnectingPoint num="13" id="1594" /> +<TGConnectingPoint num="14" id="1595" /> +<TGConnectingPoint num="15" id="1596" /> +<TGConnectingPoint num="16" id="1597" /> +<TGConnectingPoint num="17" id="1598" /> +<TGConnectingPoint num="18" id="1599" /> +<TGConnectingPoint num="19" id="1600" /> +<TGConnectingPoint num="20" id="1601" /> +<TGConnectingPoint num="21" id="1602" /> +<TGConnectingPoint num="22" id="1603" /> +<TGConnectingPoint num="23" id="1604" /> +<extraparam> +<info stereotype="CPURRPB" nodeName="cpu0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="1" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="99" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Architecture2" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1105" id="1630" > +<cdparam x="290" y="308" /> +<sizeparam width="189" height="131" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Memory0" value="name" /> +<TGConnectingPoint num="0" id="1606" /> +<TGConnectingPoint num="1" id="1607" /> +<TGConnectingPoint num="2" id="1608" /> +<TGConnectingPoint num="3" id="1609" /> +<TGConnectingPoint num="4" id="1610" /> +<TGConnectingPoint num="5" id="1611" /> +<TGConnectingPoint num="6" id="1612" /> +<TGConnectingPoint num="7" id="1613" /> +<TGConnectingPoint num="8" id="1614" /> +<TGConnectingPoint num="9" id="1615" /> +<TGConnectingPoint num="10" id="1616" /> +<TGConnectingPoint num="11" id="1617" /> +<TGConnectingPoint num="12" id="1618" /> +<TGConnectingPoint num="13" id="1619" /> +<TGConnectingPoint num="14" id="1620" /> +<TGConnectingPoint num="15" id="1621" /> +<TGConnectingPoint num="16" id="1622" /> +<TGConnectingPoint num="17" id="1623" /> +<TGConnectingPoint num="18" id="1624" /> +<TGConnectingPoint num="19" id="1625" /> +<TGConnectingPoint num="20" id="1626" /> +<TGConnectingPoint num="21" id="1627" /> +<TGConnectingPoint num="22" id="1628" /> +<TGConnectingPoint num="23" id="1629" /> +<extraparam> +<info stereotype="MEMORY" nodeName="Memory0" /> +<attributes byteDataSize="4" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1102" id="1655" > +<cdparam x="259" y="219" /> +<sizeparam width="250" height="50" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Bus0" value="name" /> +<TGConnectingPoint num="0" id="1631" /> +<TGConnectingPoint num="1" id="1632" /> +<TGConnectingPoint num="2" id="1633" /> +<TGConnectingPoint num="3" id="1634" /> +<TGConnectingPoint num="4" id="1635" /> +<TGConnectingPoint num="5" id="1636" /> +<TGConnectingPoint num="6" id="1637" /> +<TGConnectingPoint num="7" id="1638" /> +<TGConnectingPoint num="8" id="1639" /> +<TGConnectingPoint num="9" id="1640" /> +<TGConnectingPoint num="10" id="1641" /> +<TGConnectingPoint num="11" id="1642" /> +<TGConnectingPoint num="12" id="1643" /> +<TGConnectingPoint num="13" id="1644" /> +<TGConnectingPoint num="14" id="1645" /> +<TGConnectingPoint num="15" id="1646" /> +<TGConnectingPoint num="16" id="1647" /> +<TGConnectingPoint num="17" id="1648" /> +<TGConnectingPoint num="18" id="1649" /> +<TGConnectingPoint num="19" id="1650" /> +<TGConnectingPoint num="20" id="1651" /> +<TGConnectingPoint num="21" id="1652" /> +<TGConnectingPoint num="22" id="1653" /> +<TGConnectingPoint num="23" id="1654" /> +<extraparam> +<info stereotype="BUS" nodeName="Bus0" /> +<attributes byteDataSize="4" arbitrationPolicy="0" sliceTime="10000" pipelineSize="1" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1680" > +<cdparam x="555" y="177" /> +<sizeparam width="174" height="135" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW2" value="name" /> +<TGConnectingPoint num="0" id="1656" /> +<TGConnectingPoint num="1" id="1657" /> +<TGConnectingPoint num="2" id="1658" /> +<TGConnectingPoint num="3" id="1659" /> +<TGConnectingPoint num="4" id="1660" /> +<TGConnectingPoint num="5" id="1661" /> +<TGConnectingPoint num="6" id="1662" /> +<TGConnectingPoint num="7" id="1663" /> +<TGConnectingPoint num="8" id="1664" /> +<TGConnectingPoint num="9" id="1665" /> +<TGConnectingPoint num="10" id="1666" /> +<TGConnectingPoint num="11" id="1667" /> +<TGConnectingPoint num="12" id="1668" /> +<TGConnectingPoint num="13" id="1669" /> +<TGConnectingPoint num="14" id="1670" /> +<TGConnectingPoint num="15" id="1671" /> +<TGConnectingPoint num="16" id="1672" /> +<TGConnectingPoint num="17" id="1673" /> +<TGConnectingPoint num="18" id="1674" /> +<TGConnectingPoint num="19" id="1675" /> +<TGConnectingPoint num="20" id="1676" /> +<TGConnectingPoint num="21" id="1677" /> +<TGConnectingPoint num="22" id="1678" /> +<TGConnectingPoint num="23" id="1679" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW2" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1705" > +<cdparam x="37" y="181" /> +<sizeparam width="165" height="126" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW1" value="name" /> +<TGConnectingPoint num="0" id="1681" /> +<TGConnectingPoint num="1" id="1682" /> +<TGConnectingPoint num="2" id="1683" /> +<TGConnectingPoint num="3" id="1684" /> +<TGConnectingPoint num="4" id="1685" /> +<TGConnectingPoint num="5" id="1686" /> +<TGConnectingPoint num="6" id="1687" /> +<TGConnectingPoint num="7" id="1688" /> +<TGConnectingPoint num="8" id="1689" /> +<TGConnectingPoint num="9" id="1690" /> +<TGConnectingPoint num="10" id="1691" /> +<TGConnectingPoint num="11" id="1692" /> +<TGConnectingPoint num="12" id="1693" /> +<TGConnectingPoint num="13" id="1694" /> +<TGConnectingPoint num="14" id="1695" /> +<TGConnectingPoint num="15" id="1696" /> +<TGConnectingPoint num="16" id="1697" /> +<TGConnectingPoint num="17" id="1698" /> +<TGConnectingPoint num="18" id="1699" /> +<TGConnectingPoint num="19" id="1700" /> +<TGConnectingPoint num="20" id="1701" /> +<TGConnectingPoint num="21" id="1702" /> +<TGConnectingPoint num="22" id="1703" /> +<TGConnectingPoint num="23" id="1704" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW1" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1730" > +<cdparam x="250" y="27" /> +<sizeparam width="268" height="144" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="CPU0" value="name" /> +<TGConnectingPoint num="0" id="1706" /> +<TGConnectingPoint num="1" id="1707" /> +<TGConnectingPoint num="2" id="1708" /> +<TGConnectingPoint num="3" id="1709" /> +<TGConnectingPoint num="4" id="1710" /> +<TGConnectingPoint num="5" id="1711" /> +<TGConnectingPoint num="6" id="1712" /> +<TGConnectingPoint num="7" id="1713" /> +<TGConnectingPoint num="8" id="1714" /> +<TGConnectingPoint num="9" id="1715" /> +<TGConnectingPoint num="10" id="1716" /> +<TGConnectingPoint num="11" id="1717" /> +<TGConnectingPoint num="12" id="1718" /> +<TGConnectingPoint num="13" id="1719" /> +<TGConnectingPoint num="14" id="1720" /> +<TGConnectingPoint num="15" id="1721" /> +<TGConnectingPoint num="16" id="1722" /> +<TGConnectingPoint num="17" id="1723" /> +<TGConnectingPoint num="18" id="1724" /> +<TGConnectingPoint num="19" id="1725" /> +<TGConnectingPoint num="20" id="1726" /> +<TGConnectingPoint num="21" id="1727" /> +<TGConnectingPoint num="22" id="1728" /> +<TGConnectingPoint num="23" id="1729" /> +<extraparam> +<info stereotype="CPURR" nodeName="CPU0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + +<CONNECTOR type="125" id="1731" > +<cdparam x="383" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Memory0 to Bus0" value="{info}" /> +<P1 x="384" y="308" id="1607" /> +<P2 x="384" y="269" id="1637" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1732" > +<cdparam x="171" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU1 to Bus0" value="{info}" /> +<P1 x="202" y="244" id="1685" /> +<P2 x="259" y="244" id="1634" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1733" > +<cdparam x="643" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU2 to Bus0" value="{info}" /> +<P1 x="555" y="244" id="1659" /> +<P2 x="509" y="244" id="1635" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1734" > +<cdparam x="369" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU0 to Bus0" value="{info}" /> +<P1 x="384" y="171" id="1712" /> +<P2 x="384" y="219" id="1632" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Mapping1" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1100" id="1804" > +<cdparam x="51" y="90" /> +<sizeparam width="459" height="321" minWidth="150" minHeight="150" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="cpu0" value="name" /> +<TGConnectingPoint num="0" id="1780" /> +<TGConnectingPoint num="1" id="1781" /> +<TGConnectingPoint num="2" id="1782" /> +<TGConnectingPoint num="3" id="1783" /> +<TGConnectingPoint num="4" id="1784" /> +<TGConnectingPoint num="5" id="1785" /> +<TGConnectingPoint num="6" id="1786" /> +<TGConnectingPoint num="7" id="1787" /> +<TGConnectingPoint num="8" id="1788" /> +<TGConnectingPoint num="9" id="1789" /> +<TGConnectingPoint num="10" id="1790" /> +<TGConnectingPoint num="11" id="1791" /> +<TGConnectingPoint num="12" id="1792" /> +<TGConnectingPoint num="13" id="1793" /> +<TGConnectingPoint num="14" id="1794" /> +<TGConnectingPoint num="15" id="1795" /> +<TGConnectingPoint num="16" id="1796" /> +<TGConnectingPoint num="17" id="1797" /> +<TGConnectingPoint num="18" id="1798" /> +<TGConnectingPoint num="19" id="1799" /> +<TGConnectingPoint num="20" id="1800" /> +<TGConnectingPoint num="21" id="1801" /> +<TGConnectingPoint num="22" id="1802" /> +<TGConnectingPoint num="23" id="1803" /> +<extraparam> +<info stereotype="CPURRPB" nodeName="cpu0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="1" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="99" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1743" > +<father id="1804" num="0" /> +<cdparam x="226" y="304" /> +<sizeparam width="109" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="350" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::Timer" /> +<TGConnectingPoint num="0" id="1735" /> +<TGConnectingPoint num="1" id="1736" /> +<TGConnectingPoint num="2" id="1737" /> +<TGConnectingPoint num="3" id="1738" /> +<TGConnectingPoint num="4" id="1739" /> +<TGConnectingPoint num="5" id="1740" /> +<TGConnectingPoint num="6" id="1741" /> +<TGConnectingPoint num="7" id="1742" /> +<extraparam> +<info value="AppC::Timer" taskName="Timer" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1752" > +<father id="1804" num="1" /> +<cdparam x="290" y="234" /> +<sizeparam width="139" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="320" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::Application" /> +<TGConnectingPoint num="0" id="1744" /> +<TGConnectingPoint num="1" id="1745" /> +<TGConnectingPoint num="2" id="1746" /> +<TGConnectingPoint num="3" id="1747" /> +<TGConnectingPoint num="4" id="1748" /> +<TGConnectingPoint num="5" id="1749" /> +<TGConnectingPoint num="6" id="1750" /> +<TGConnectingPoint num="7" id="1751" /> +<extraparam> +<info value="AppC::Application" taskName="Application" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1761" > +<father id="1804" num="2" /> +<cdparam x="96" y="246" /> +<sizeparam width="108" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="351" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::TCPIP" /> +<TGConnectingPoint num="0" id="1753" /> +<TGConnectingPoint num="1" id="1754" /> +<TGConnectingPoint num="2" id="1755" /> +<TGConnectingPoint num="3" id="1756" /> +<TGConnectingPoint num="4" id="1757" /> +<TGConnectingPoint num="5" id="1758" /> +<TGConnectingPoint num="6" id="1759" /> +<TGConnectingPoint num="7" id="1760" /> +<extraparam> +<info value="AppC::TCPIP" taskName="TCPIP" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1770" > +<father id="1804" num="3" /> +<cdparam x="291" y="153" /> +<sizeparam width="136" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="323" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::SmartCard" /> +<TGConnectingPoint num="0" id="1762" /> +<TGConnectingPoint num="1" id="1763" /> +<TGConnectingPoint num="2" id="1764" /> +<TGConnectingPoint num="3" id="1765" /> +<TGConnectingPoint num="4" id="1766" /> +<TGConnectingPoint num="5" id="1767" /> +<TGConnectingPoint num="6" id="1768" /> +<TGConnectingPoint num="7" id="1769" /> +<extraparam> +<info value="AppC::SmartCard" taskName="SmartCard" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1779" > +<father id="1804" num="4" /> +<cdparam x="92" y="154" /> +<sizeparam width="163" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="296" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::InterfaceDevice" /> +<TGConnectingPoint num="0" id="1771" /> +<TGConnectingPoint num="1" id="1772" /> +<TGConnectingPoint num="2" id="1773" /> +<TGConnectingPoint num="3" id="1774" /> +<TGConnectingPoint num="4" id="1775" /> +<TGConnectingPoint num="5" id="1776" /> +<TGConnectingPoint num="6" id="1777" /> +<TGConnectingPoint num="7" id="1778" /> +<extraparam> +<info value="AppC::InterfaceDevice" taskName="InterfaceDevice" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Mapping2" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1105" id="1829" > +<cdparam x="290" y="308" /> +<sizeparam width="189" height="131" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Memory0" value="name" /> +<TGConnectingPoint num="0" id="1805" /> +<TGConnectingPoint num="1" id="1806" /> +<TGConnectingPoint num="2" id="1807" /> +<TGConnectingPoint num="3" id="1808" /> +<TGConnectingPoint num="4" id="1809" /> +<TGConnectingPoint num="5" id="1810" /> +<TGConnectingPoint num="6" id="1811" /> +<TGConnectingPoint num="7" id="1812" /> +<TGConnectingPoint num="8" id="1813" /> +<TGConnectingPoint num="9" id="1814" /> +<TGConnectingPoint num="10" id="1815" /> +<TGConnectingPoint num="11" id="1816" /> +<TGConnectingPoint num="12" id="1817" /> +<TGConnectingPoint num="13" id="1818" /> +<TGConnectingPoint num="14" id="1819" /> +<TGConnectingPoint num="15" id="1820" /> +<TGConnectingPoint num="16" id="1821" /> +<TGConnectingPoint num="17" id="1822" /> +<TGConnectingPoint num="18" id="1823" /> +<TGConnectingPoint num="19" id="1824" /> +<TGConnectingPoint num="20" id="1825" /> +<TGConnectingPoint num="21" id="1826" /> +<TGConnectingPoint num="22" id="1827" /> +<TGConnectingPoint num="23" id="1828" /> +<extraparam> +<info stereotype="MEMORY" nodeName="Memory0" /> +<attributes byteDataSize="4" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1102" id="1854" > +<cdparam x="259" y="219" /> +<sizeparam width="250" height="50" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Bus0" value="name" /> +<TGConnectingPoint num="0" id="1830" /> +<TGConnectingPoint num="1" id="1831" /> +<TGConnectingPoint num="2" id="1832" /> +<TGConnectingPoint num="3" id="1833" /> +<TGConnectingPoint num="4" id="1834" /> +<TGConnectingPoint num="5" id="1835" /> +<TGConnectingPoint num="6" id="1836" /> +<TGConnectingPoint num="7" id="1837" /> +<TGConnectingPoint num="8" id="1838" /> +<TGConnectingPoint num="9" id="1839" /> +<TGConnectingPoint num="10" id="1840" /> +<TGConnectingPoint num="11" id="1841" /> +<TGConnectingPoint num="12" id="1842" /> +<TGConnectingPoint num="13" id="1843" /> +<TGConnectingPoint num="14" id="1844" /> +<TGConnectingPoint num="15" id="1845" /> +<TGConnectingPoint num="16" id="1846" /> +<TGConnectingPoint num="17" id="1847" /> +<TGConnectingPoint num="18" id="1848" /> +<TGConnectingPoint num="19" id="1849" /> +<TGConnectingPoint num="20" id="1850" /> +<TGConnectingPoint num="21" id="1851" /> +<TGConnectingPoint num="22" id="1852" /> +<TGConnectingPoint num="23" id="1853" /> +<extraparam> +<info stereotype="BUS" nodeName="Bus0" /> +<attributes byteDataSize="4" arbitrationPolicy="0" sliceTime="10000" pipelineSize="1" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1888" > +<cdparam x="555" y="177" /> +<sizeparam width="174" height="135" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW2" value="name" /> +<TGConnectingPoint num="0" id="1864" /> +<TGConnectingPoint num="1" id="1865" /> +<TGConnectingPoint num="2" id="1866" /> +<TGConnectingPoint num="3" id="1867" /> +<TGConnectingPoint num="4" id="1868" /> +<TGConnectingPoint num="5" id="1869" /> +<TGConnectingPoint num="6" id="1870" /> +<TGConnectingPoint num="7" id="1871" /> +<TGConnectingPoint num="8" id="1872" /> +<TGConnectingPoint num="9" id="1873" /> +<TGConnectingPoint num="10" id="1874" /> +<TGConnectingPoint num="11" id="1875" /> +<TGConnectingPoint num="12" id="1876" /> +<TGConnectingPoint num="13" id="1877" /> +<TGConnectingPoint num="14" id="1878" /> +<TGConnectingPoint num="15" id="1879" /> +<TGConnectingPoint num="16" id="1880" /> +<TGConnectingPoint num="17" id="1881" /> +<TGConnectingPoint num="18" id="1882" /> +<TGConnectingPoint num="19" id="1883" /> +<TGConnectingPoint num="20" id="1884" /> +<TGConnectingPoint num="21" id="1885" /> +<TGConnectingPoint num="22" id="1886" /> +<TGConnectingPoint num="23" id="1887" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW2" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1863" > +<father id="1888" num="0" /> +<cdparam x="585" y="229" /> +<sizeparam width="109" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="65" minY="0" maxY="95" /> +<infoparam name="TGComponent" value="AppC::Timer" /> +<TGConnectingPoint num="0" id="1855" /> +<TGConnectingPoint num="1" id="1856" /> +<TGConnectingPoint num="2" id="1857" /> +<TGConnectingPoint num="3" id="1858" /> +<TGConnectingPoint num="4" id="1859" /> +<TGConnectingPoint num="5" id="1860" /> +<TGConnectingPoint num="6" id="1861" /> +<TGConnectingPoint num="7" id="1862" /> +<extraparam> +<info value="AppC::Timer" taskName="Timer" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1100" id="1922" > +<cdparam x="37" y="181" /> +<sizeparam width="165" height="126" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW1" value="name" /> +<TGConnectingPoint num="0" id="1898" /> +<TGConnectingPoint num="1" id="1899" /> +<TGConnectingPoint num="2" id="1900" /> +<TGConnectingPoint num="3" id="1901" /> +<TGConnectingPoint num="4" id="1902" /> +<TGConnectingPoint num="5" id="1903" /> +<TGConnectingPoint num="6" id="1904" /> +<TGConnectingPoint num="7" id="1905" /> +<TGConnectingPoint num="8" id="1906" /> +<TGConnectingPoint num="9" id="1907" /> +<TGConnectingPoint num="10" id="1908" /> +<TGConnectingPoint num="11" id="1909" /> +<TGConnectingPoint num="12" id="1910" /> +<TGConnectingPoint num="13" id="1911" /> +<TGConnectingPoint num="14" id="1912" /> +<TGConnectingPoint num="15" id="1913" /> +<TGConnectingPoint num="16" id="1914" /> +<TGConnectingPoint num="17" id="1915" /> +<TGConnectingPoint num="18" id="1916" /> +<TGConnectingPoint num="19" id="1917" /> +<TGConnectingPoint num="20" id="1918" /> +<TGConnectingPoint num="21" id="1919" /> +<TGConnectingPoint num="22" id="1920" /> +<TGConnectingPoint num="23" id="1921" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW1" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1897" > +<father id="1922" num="0" /> +<cdparam x="30" y="226" /> +<sizeparam width="172" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="-7" minY="0" maxY="86" /> +<infoparam name="TGComponent" value="AppC::InterfaceDevice" /> +<TGConnectingPoint num="0" id="1889" /> +<TGConnectingPoint num="1" id="1890" /> +<TGConnectingPoint num="2" id="1891" /> +<TGConnectingPoint num="3" id="1892" /> +<TGConnectingPoint num="4" id="1893" /> +<TGConnectingPoint num="5" id="1894" /> +<TGConnectingPoint num="6" id="1895" /> +<TGConnectingPoint num="7" id="1896" /> +<extraparam> +<info value="AppC::InterfaceDevice" taskName="InterfaceDevice" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1100" id="1974" > +<cdparam x="250" y="27" /> +<sizeparam width="268" height="144" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="CPU0" value="name" /> +<TGConnectingPoint num="0" id="1950" /> +<TGConnectingPoint num="1" id="1951" /> +<TGConnectingPoint num="2" id="1952" /> +<TGConnectingPoint num="3" id="1953" /> +<TGConnectingPoint num="4" id="1954" /> +<TGConnectingPoint num="5" id="1955" /> +<TGConnectingPoint num="6" id="1956" /> +<TGConnectingPoint num="7" id="1957" /> +<TGConnectingPoint num="8" id="1958" /> +<TGConnectingPoint num="9" id="1959" /> +<TGConnectingPoint num="10" id="1960" /> +<TGConnectingPoint num="11" id="1961" /> +<TGConnectingPoint num="12" id="1962" /> +<TGConnectingPoint num="13" id="1963" /> +<TGConnectingPoint num="14" id="1964" /> +<TGConnectingPoint num="15" id="1965" /> +<TGConnectingPoint num="16" id="1966" /> +<TGConnectingPoint num="17" id="1967" /> +<TGConnectingPoint num="18" id="1968" /> +<TGConnectingPoint num="19" id="1969" /> +<TGConnectingPoint num="20" id="1970" /> +<TGConnectingPoint num="21" id="1971" /> +<TGConnectingPoint num="22" id="1972" /> +<TGConnectingPoint num="23" id="1973" /> +<extraparam> +<info stereotype="CPURR" nodeName="CPU0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1931" > +<father id="1974" num="0" /> +<cdparam x="258" y="61" /> +<sizeparam width="109" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="159" minY="0" maxY="104" /> +<infoparam name="TGComponent" value="AppC::TCPIP" /> +<TGConnectingPoint num="0" id="1923" /> +<TGConnectingPoint num="1" id="1924" /> +<TGConnectingPoint num="2" id="1925" /> +<TGConnectingPoint num="3" id="1926" /> +<TGConnectingPoint num="4" id="1927" /> +<TGConnectingPoint num="5" id="1928" /> +<TGConnectingPoint num="6" id="1929" /> +<TGConnectingPoint num="7" id="1930" /> +<extraparam> +<info value="AppC::TCPIP" taskName="TCPIP" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1940" > +<father id="1974" num="1" /> +<cdparam x="313" y="110" /> +<sizeparam width="144" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="124" minY="0" maxY="104" /> +<infoparam name="TGComponent" value="AppC::Application" /> +<TGConnectingPoint num="0" id="1932" /> +<TGConnectingPoint num="1" id="1933" /> +<TGConnectingPoint num="2" id="1934" /> +<TGConnectingPoint num="3" id="1935" /> +<TGConnectingPoint num="4" id="1936" /> +<TGConnectingPoint num="5" id="1937" /> +<TGConnectingPoint num="6" id="1938" /> +<TGConnectingPoint num="7" id="1939" /> +<extraparam> +<info value="AppC::Application" taskName="Application" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1949" > +<father id="1974" num="2" /> +<cdparam x="373" y="61" /> +<sizeparam width="141" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="127" minY="0" maxY="104" /> +<infoparam name="TGComponent" value="AppC::SmartCard" /> +<TGConnectingPoint num="0" id="1941" /> +<TGConnectingPoint num="1" id="1942" /> +<TGConnectingPoint num="2" id="1943" /> +<TGConnectingPoint num="3" id="1944" /> +<TGConnectingPoint num="4" id="1945" /> +<TGConnectingPoint num="5" id="1946" /> +<TGConnectingPoint num="6" id="1947" /> +<TGConnectingPoint num="7" id="1948" /> +<extraparam> +<info value="AppC::SmartCard" taskName="SmartCard" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="125" id="1975" > +<cdparam x="383" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Memory0 to Bus0" value="{info}" /> +<P1 x="384" y="308" id="1806" /> +<P2 x="384" y="269" id="1836" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1976" > +<cdparam x="171" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU1 to Bus0" value="{info}" /> +<P1 x="202" y="244" id="1902" /> +<P2 x="259" y="244" id="1833" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1977" > +<cdparam x="643" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU2 to Bus0" value="{info}" /> +<P1 x="555" y="244" id="1867" /> +<P2 x="509" y="244" id="1834" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1978" > +<cdparam x="369" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU0 to Bus0" value="{info}" /> +<P1 x="384" y="171" id="1956" /> +<P2 x="384" y="219" id="1831" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/WebV01.xml b/preinstallTTool/linux/TTool/modeling/WebV01.xml new file mode 100755 index 0000000000000000000000000000000000000000..9273c0075a0f138d6d344d7db4635c2cb62ffecc --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/WebV01.xml @@ -0,0 +1,1850 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.92-beta1"> + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1900" minY="10" maxY="900" attributes="true" gates="true" synchro="true" > +<COMPONENT type="201" id="35" > +<cdparam x="18" y="225" /> +<sizeparam width="152" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="WebClient" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +<TGConnectingPoint num="2" id="29" /> +<TGConnectingPoint num="3" id="30" /> +<TGConnectingPoint num="4" id="31" /> +<TGConnectingPoint num="5" id="32" /> +<TGConnectingPoint num="6" id="33" /> +<TGConnectingPoint num="7" id="34" /> +<extraparam> +<Start isStart="false" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="7" > +<father id="35" num="0" /> +<cdparam x="18" y="255" /> +<sizeparam width="152" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ id : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +<TGConnectingPoint num="4" id="5" /> +<TGConnectingPoint num="5" id="6" /> +<extraparam> +<Attribute access="2" id="id" value="" type="0" typeOther="" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="10" > +<father id="35" num="1" /> +<cdparam x="18" y="301" /> +<sizeparam width="152" height="62" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="152" minDesiredHeight="62" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tclass gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="8" /> +<TGConnectingPoint num="1" id="9" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="17" > +<father id="35" num="2" /> +<cdparam x="18" y="363" /> +<sizeparam width="152" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="138" maxY="138" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="11" /> +<TGConnectingPoint num="1" id="12" /> +<TGConnectingPoint num="2" id="13" /> +<TGConnectingPoint num="3" id="14" /> +<TGConnectingPoint num="4" id="15" /> +<TGConnectingPoint num="5" id="16" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="26" > +<father id="35" num="3" /> +<cdparam x="18" y="393" /> +<sizeparam width="152" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="168" maxY="168" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="18" /> +<TGConnectingPoint num="1" id="19" /> +<TGConnectingPoint num="2" id="20" /> +<TGConnectingPoint num="3" id="21" /> +<TGConnectingPoint num="4" id="22" /> +<TGConnectingPoint num="5" id="23" /> +<TGConnectingPoint num="6" id="24" /> +<TGConnectingPoint num="7" id="25" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="70" > +<cdparam x="950" y="262" /> +<sizeparam width="186" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="WebServer" /> +<TGConnectingPoint num="0" id="62" /> +<TGConnectingPoint num="1" id="63" /> +<TGConnectingPoint num="2" id="64" /> +<TGConnectingPoint num="3" id="65" /> +<TGConnectingPoint num="4" id="66" /> +<TGConnectingPoint num="5" id="67" /> +<TGConnectingPoint num="6" id="68" /> +<TGConnectingPoint num="7" id="69" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="42" > +<father id="70" num="0" /> +<cdparam x="950" y="292" /> +<sizeparam width="186" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="186" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ computing_delay = 6 : Natural; ++ id : Natural; +" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +<TGConnectingPoint num="4" id="40" /> +<TGConnectingPoint num="5" id="41" /> +<extraparam> +<Attribute access="2" id="computing_delay" value="6" type="0" typeOther="" /> +<Attribute access="2" id="id" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="45" > +<father id="70" num="1" /> +<cdparam x="950" y="338" /> +<sizeparam width="186" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tclass gates" value="+ getRequest : InGate; ++ sendData : OutGate; +" /> +<TGConnectingPoint num="0" id="43" /> +<TGConnectingPoint num="1" id="44" /> +<extraparam> +<Attribute access="2" id="getRequest" value="" type="3" typeOther="" /> +<Attribute access="2" id="sendData" value="" type="2" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="52" > +<father id="70" num="2" /> +<cdparam x="950" y="384" /> +<sizeparam width="186" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="122" maxY="122" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="46" /> +<TGConnectingPoint num="1" id="47" /> +<TGConnectingPoint num="2" id="48" /> +<TGConnectingPoint num="3" id="49" /> +<TGConnectingPoint num="4" id="50" /> +<TGConnectingPoint num="5" id="51" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="61" > +<father id="70" num="3" /> +<cdparam x="950" y="414" /> +<sizeparam width="186" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="152" maxY="152" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="53" /> +<TGConnectingPoint num="1" id="54" /> +<TGConnectingPoint num="2" id="55" /> +<TGConnectingPoint num="3" id="56" /> +<TGConnectingPoint num="4" id="57" /> +<TGConnectingPoint num="5" id="58" /> +<TGConnectingPoint num="6" id="59" /> +<TGConnectingPoint num="7" id="60" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="105" > +<cdparam x="206" y="60" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tobject" value="cl1_WebClient" /> +<TGConnectingPoint num="0" id="97" /> +<TGConnectingPoint num="1" id="98" /> +<TGConnectingPoint num="2" id="99" /> +<TGConnectingPoint num="3" id="100" /> +<TGConnectingPoint num="4" id="101" /> +<TGConnectingPoint num="5" id="102" /> +<TGConnectingPoint num="6" id="103" /> +<TGConnectingPoint num="7" id="104" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="WebClient" /> +<FirstName name="cl1" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="77" > +<father id="105" num="0" /> +<cdparam x="206" y="90" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ id = 1 : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="71" /> +<TGConnectingPoint num="1" id="72" /> +<TGConnectingPoint num="2" id="73" /> +<TGConnectingPoint num="3" id="74" /> +<TGConnectingPoint num="4" id="75" /> +<TGConnectingPoint num="5" id="76" /> +<extraparam> +<Attribute access="2" id="id" value="1" type="0" typeOther="" set="true" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="80" > +<father id="105" num="1" /> +<cdparam x="206" y="136" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tobject gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="78" /> +<TGConnectingPoint num="1" id="79" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" set="false" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" set="false" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="87" > +<father id="105" num="2" /> +<cdparam x="206" y="166" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="106" maxY="106" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="81" /> +<TGConnectingPoint num="1" id="82" /> +<TGConnectingPoint num="2" id="83" /> +<TGConnectingPoint num="3" id="84" /> +<TGConnectingPoint num="4" id="85" /> +<TGConnectingPoint num="5" id="86" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="96" > +<father id="105" num="3" /> +<cdparam x="206" y="196" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="136" maxY="136" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="88" /> +<TGConnectingPoint num="1" id="89" /> +<TGConnectingPoint num="2" id="90" /> +<TGConnectingPoint num="3" id="91" /> +<TGConnectingPoint num="4" id="92" /> +<TGConnectingPoint num="5" id="93" /> +<TGConnectingPoint num="6" id="94" /> +<TGConnectingPoint num="7" id="95" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="140" > +<cdparam x="204" y="420" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tobject" value="cl3_WebClient" /> +<TGConnectingPoint num="0" id="132" /> +<TGConnectingPoint num="1" id="133" /> +<TGConnectingPoint num="2" id="134" /> +<TGConnectingPoint num="3" id="135" /> +<TGConnectingPoint num="4" id="136" /> +<TGConnectingPoint num="5" id="137" /> +<TGConnectingPoint num="6" id="138" /> +<TGConnectingPoint num="7" id="139" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="WebClient" /> +<FirstName name="cl3" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="140" num="0" /> +<cdparam x="204" y="450" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ id = 3 : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="106" /> +<TGConnectingPoint num="1" id="107" /> +<TGConnectingPoint num="2" id="108" /> +<TGConnectingPoint num="3" id="109" /> +<TGConnectingPoint num="4" id="110" /> +<TGConnectingPoint num="5" id="111" /> +<extraparam> +<Attribute access="2" id="id" value="3" type="0" typeOther="" set="true" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="115" > +<father id="140" num="1" /> +<cdparam x="204" y="496" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tobject gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="113" /> +<TGConnectingPoint num="1" id="114" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" set="false" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" set="false" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="122" > +<father id="140" num="2" /> +<cdparam x="204" y="526" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="106" maxY="106" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="116" /> +<TGConnectingPoint num="1" id="117" /> +<TGConnectingPoint num="2" id="118" /> +<TGConnectingPoint num="3" id="119" /> +<TGConnectingPoint num="4" id="120" /> +<TGConnectingPoint num="5" id="121" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="131" > +<father id="140" num="3" /> +<cdparam x="204" y="556" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="136" maxY="136" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="123" /> +<TGConnectingPoint num="1" id="124" /> +<TGConnectingPoint num="2" id="125" /> +<TGConnectingPoint num="3" id="126" /> +<TGConnectingPoint num="4" id="127" /> +<TGConnectingPoint num="5" id="128" /> +<TGConnectingPoint num="6" id="129" /> +<TGConnectingPoint num="7" id="130" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="175" > +<cdparam x="204" y="239" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tobject" value="cl2_WebClient" /> +<TGConnectingPoint num="0" id="167" /> +<TGConnectingPoint num="1" id="168" /> +<TGConnectingPoint num="2" id="169" /> +<TGConnectingPoint num="3" id="170" /> +<TGConnectingPoint num="4" id="171" /> +<TGConnectingPoint num="5" id="172" /> +<TGConnectingPoint num="6" id="173" /> +<TGConnectingPoint num="7" id="174" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="WebClient" /> +<FirstName name="cl2" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="147" > +<father id="175" num="0" /> +<cdparam x="204" y="269" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ id = 2 : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="141" /> +<TGConnectingPoint num="1" id="142" /> +<TGConnectingPoint num="2" id="143" /> +<TGConnectingPoint num="3" id="144" /> +<TGConnectingPoint num="4" id="145" /> +<TGConnectingPoint num="5" id="146" /> +<extraparam> +<Attribute access="2" id="id" value="2" type="0" typeOther="" set="true" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="150" > +<father id="175" num="1" /> +<cdparam x="204" y="315" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tobject gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="148" /> +<TGConnectingPoint num="1" id="149" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" set="false" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" set="false" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="157" > +<father id="175" num="2" /> +<cdparam x="204" y="345" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="106" maxY="106" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="151" /> +<TGConnectingPoint num="1" id="152" /> +<TGConnectingPoint num="2" id="153" /> +<TGConnectingPoint num="3" id="154" /> +<TGConnectingPoint num="4" id="155" /> +<TGConnectingPoint num="5" id="156" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="166" > +<father id="175" num="3" /> +<cdparam x="204" y="375" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="136" maxY="136" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="158" /> +<TGConnectingPoint num="1" id="159" /> +<TGConnectingPoint num="2" id="160" /> +<TGConnectingPoint num="3" id="161" /> +<TGConnectingPoint num="4" id="162" /> +<TGConnectingPoint num="5" id="163" /> +<TGConnectingPoint num="6" id="164" /> +<TGConnectingPoint num="7" id="165" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="210" > +<cdparam x="633" y="198" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Medium" /> +<TGConnectingPoint num="0" id="202" /> +<TGConnectingPoint num="1" id="203" /> +<TGConnectingPoint num="2" id="204" /> +<TGConnectingPoint num="3" id="205" /> +<TGConnectingPoint num="4" id="206" /> +<TGConnectingPoint num="5" id="207" /> +<TGConnectingPoint num="6" id="208" /> +<TGConnectingPoint num="7" id="209" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="182" > +<father id="210" num="0" /> +<cdparam x="633" y="228" /> +<sizeparam width="150" height="62" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="62" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ tr_delay = 10 : Natural; ++ id1 : Natural; ++ id2 : Natural; +" /> +<TGConnectingPoint num="0" id="176" /> +<TGConnectingPoint num="1" id="177" /> +<TGConnectingPoint num="2" id="178" /> +<TGConnectingPoint num="3" id="179" /> +<TGConnectingPoint num="4" id="180" /> +<TGConnectingPoint num="5" id="181" /> +<extraparam> +<Attribute access="2" id="tr_delay" value="10" type="0" typeOther="" /> +<Attribute access="2" id="id1" value="" type="0" typeOther="" /> +<Attribute access="2" id="id2" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="185" > +<father id="210" num="1" /> +<cdparam x="633" y="290" /> +<sizeparam width="150" height="142" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="142" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="92" maxY="92" /> +<infoparam name="Tclass gates" value="+ port1_i : InGate; ++ port2_i : InGate; ++ port3_i : InGate; ++ port1_o : OutGate; ++ port2_o : OutGate; ++ port3_o : OutGate; ++ port_i : InGate; ++ port_o : OutGate; +" /> +<TGConnectingPoint num="0" id="183" /> +<TGConnectingPoint num="1" id="184" /> +<extraparam> +<Attribute access="2" id="port1_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port2_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port3_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port1_o" value="" type="2" typeOther="" /> +<Attribute access="2" id="port2_o" value="" type="2" typeOther="" /> +<Attribute access="2" id="port3_o" value="" type="2" typeOther="" /> +<Attribute access="2" id="port_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port_o" value="" type="2" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="192" > +<father id="210" num="2" /> +<cdparam x="633" y="432" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="234" maxY="234" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="186" /> +<TGConnectingPoint num="1" id="187" /> +<TGConnectingPoint num="2" id="188" /> +<TGConnectingPoint num="3" id="189" /> +<TGConnectingPoint num="4" id="190" /> +<TGConnectingPoint num="5" id="191" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="201" > +<father id="210" num="3" /> +<cdparam x="633" y="462" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="264" maxY="264" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="193" /> +<TGConnectingPoint num="1" id="194" /> +<TGConnectingPoint num="2" id="195" /> +<TGConnectingPoint num="3" id="196" /> +<TGConnectingPoint num="4" id="197" /> +<TGConnectingPoint num="5" id="198" /> +<TGConnectingPoint num="6" id="199" /> +<TGConnectingPoint num="7" id="200" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="224" > +<cdparam x="457" y="142" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between cl1_WebClient and Medium" value="Synchro" /> +<TGConnectingPoint num="0" id="212" /> +<TGConnectingPoint num="1" id="213" /> +<TGConnectingPoint num="2" id="214" /> +<TGConnectingPoint num="3" id="215" /> +<TGConnectingPoint num="4" id="216" /> +<TGConnectingPoint num="5" id="217" /> +<TGConnectingPoint num="6" id="218" /> +<TGConnectingPoint num="7" id="219" /> +<TGConnectingPoint num="8" id="220" /> +<TGConnectingPoint num="9" id="221" /> +<TGConnectingPoint num="10" id="222" /> +<TGConnectingPoint num="11" id="223" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="211" > +<father id="224" num="0" /> +<cdparam x="383" y="101" /> +<sizeparam width="263" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="105" g1="sendRequest" t2="210" g2="port1_i" /> +<Synchro t1="105" g1="getData" t2="210" g2="port1_o" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="238" > +<cdparam x="443" y="303" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between cl2_WebClient and Medium" value="Synchro" /> +<TGConnectingPoint num="0" id="226" /> +<TGConnectingPoint num="1" id="227" /> +<TGConnectingPoint num="2" id="228" /> +<TGConnectingPoint num="3" id="229" /> +<TGConnectingPoint num="4" id="230" /> +<TGConnectingPoint num="5" id="231" /> +<TGConnectingPoint num="6" id="232" /> +<TGConnectingPoint num="7" id="233" /> +<TGConnectingPoint num="8" id="234" /> +<TGConnectingPoint num="9" id="235" /> +<TGConnectingPoint num="10" id="236" /> +<TGConnectingPoint num="11" id="237" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="225" > +<father id="238" num="0" /> +<cdparam x="360" y="380" /> +<sizeparam width="263" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="175" g1="sendRequest" t2="210" g2="port2_i" /> +<Synchro t1="175" g1="getData" t2="210" g2="port2_o" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="252" > +<cdparam x="442" y="436" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between cl3_WebClient and Medium" value="Synchro" /> +<TGConnectingPoint num="0" id="240" /> +<TGConnectingPoint num="1" id="241" /> +<TGConnectingPoint num="2" id="242" /> +<TGConnectingPoint num="3" id="243" /> +<TGConnectingPoint num="4" id="244" /> +<TGConnectingPoint num="5" id="245" /> +<TGConnectingPoint num="6" id="246" /> +<TGConnectingPoint num="7" id="247" /> +<TGConnectingPoint num="8" id="248" /> +<TGConnectingPoint num="9" id="249" /> +<TGConnectingPoint num="10" id="250" /> +<TGConnectingPoint num="11" id="251" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="239" > +<father id="252" num="0" /> +<cdparam x="439" y="558" /> +<sizeparam width="263" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="140" g1="sendRequest" t2="210" g2="port3_i" /> +<Synchro t1="140" g1="getData" t2="210" g2="port3_o" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="266" > +<cdparam x="816" y="274" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Medium and WebServer" value="Synchro" /> +<TGConnectingPoint num="0" id="254" /> +<TGConnectingPoint num="1" id="255" /> +<TGConnectingPoint num="2" id="256" /> +<TGConnectingPoint num="3" id="257" /> +<TGConnectingPoint num="4" id="258" /> +<TGConnectingPoint num="5" id="259" /> +<TGConnectingPoint num="6" id="260" /> +<TGConnectingPoint num="7" id="261" /> +<TGConnectingPoint num="8" id="262" /> +<TGConnectingPoint num="9" id="263" /> +<TGConnectingPoint num="10" id="264" /> +<TGConnectingPoint num="11" id="265" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="253" > +<father id="266" num="0" /> +<cdparam x="818" y="233" /> +<sizeparam width="229" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="210" g1="port_i" t2="70" g2="sendData" /> +<Synchro t1="210" g1="port_o" t2="70" g2="getRequest" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="268" > +<cdparam x="354" y="159" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tobject gates to Tclass attributes" value="null" /> +<TGConnectingPoint num="0" id="267" /> +<P1 x="356" y="151" id="79" /> +<P2 x="633" y="259" id="176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="270" > +<cdparam x="354" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="269" /> +<P1 x="354" y="360" id="152" /> +<P2 x="633" y="361" id="183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="272" > +<cdparam x="353" y="528" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to Tclass operations" value="null" /> +<TGConnectingPoint num="0" id="271" /> +<P1 x="354" y="541" id="117" /> +<P2 x="633" y="447" id="186" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="274" > +<cdparam x="711" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="273" /> +<P1 x="783" y="361" id="184" /> +<P2 x="950" y="361" id="43" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="275" > +<cdparam x="458" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tobject gates to synchro composition operator" value="null" /> +<P1 x="494" y="205" id="267" /> +<P2 x="507" y="167" id="214" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="276" > +<cdparam x="493" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to synchro composition operator" value="null" /> +<P1 x="493" y="360" id="269" /> +<P2 x="493" y="328" id="228" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="277" > +<cdparam x="493" y="496" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to synchro composition operator" value="null" /> +<P1 x="493" y="494" id="271" /> +<P2 x="492" y="461" id="242" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="278" > +<cdparam x="866" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="866" y="361" id="273" /> +<P2 x="866" y="299" id="256" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="WebClient" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="280" > +<cdparam x="417" y="123" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="279" /> +</COMPONENT> + +<COMPONENT type="15" id="291" > +<cdparam x="307" y="217" /> +<sizeparam width="98" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="sendRequest!id" /> +<TGConnectingPoint num="0" id="281" /> +<TGConnectingPoint num="1" id="282" /> +<TGConnectingPoint num="2" id="283" /> +<TGConnectingPoint num="3" id="284" /> +<TGConnectingPoint num="4" id="285" /> +<TGConnectingPoint num="5" id="286" /> +<TGConnectingPoint num="6" id="287" /> +<TGConnectingPoint num="7" id="288" /> +<TGConnectingPoint num="8" id="289" /> +<TGConnectingPoint num="9" id="290" /> +</COMPONENT> + +<COMPONENT type="13" id="293" > +<cdparam x="346" y="274" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="292" /> +</COMPONENT> + +<COMPONENT type="12" id="309" > +<cdparam x="349" y="171" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="295" /> +<TGConnectingPoint num="1" id="296" /> +<TGConnectingPoint num="2" id="297" /> +<TGConnectingPoint num="3" id="298" /> +<TGConnectingPoint num="4" id="299" /> +<TGConnectingPoint num="5" id="300" /> +<TGConnectingPoint num="6" id="301" /> +<TGConnectingPoint num="7" id="302" /> +<TGConnectingPoint num="8" id="303" /> +<TGConnectingPoint num="9" id="304" /> +<TGConnectingPoint num="10" id="305" /> +<TGConnectingPoint num="11" id="306" /> +<TGConnectingPoint num="12" id="307" /> +<TGConnectingPoint num="13" id="308" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="294" > +<father id="309" num="0" /> +<cdparam x="499" y="168" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="115" maxX="150" minY="-3" maxY="-3" /> +<infoparam name="list of synchronization gates" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="320" > +<cdparam x="437" y="275" /> +<sizeparam width="123" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="getData?id_received" /> +<TGConnectingPoint num="0" id="310" /> +<TGConnectingPoint num="1" id="311" /> +<TGConnectingPoint num="2" id="312" /> +<TGConnectingPoint num="3" id="313" /> +<TGConnectingPoint num="4" id="314" /> +<TGConnectingPoint num="5" id="315" /> +<TGConnectingPoint num="6" id="316" /> +<TGConnectingPoint num="7" id="317" /> +<TGConnectingPoint num="8" id="318" /> +<TGConnectingPoint num="9" id="319" /> +</COMPONENT> + +<COMPONENT type="17" id="343" > +<cdparam x="482" y="218" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="321" /> +<TGConnectingPoint num="1" id="322" /> +<TGConnectingPoint num="2" id="323" /> +<TGConnectingPoint num="3" id="324" /> +<TGConnectingPoint num="4" id="325" /> +<TGConnectingPoint num="5" id="326" /> +<TGConnectingPoint num="6" id="327" /> +<TGConnectingPoint num="7" id="328" /> +<TGConnectingPoint num="8" id="329" /> +<TGConnectingPoint num="9" id="330" /> +<TGConnectingPoint num="10" id="331" /> +<TGConnectingPoint num="11" id="332" /> +<TGConnectingPoint num="12" id="333" /> +<TGConnectingPoint num="13" id="334" /> +<TGConnectingPoint num="14" id="335" /> +<TGConnectingPoint num="15" id="336" /> +<TGConnectingPoint num="16" id="337" /> +<TGConnectingPoint num="17" id="338" /> +<TGConnectingPoint num="18" id="339" /> +<TGConnectingPoint num="19" id="340" /> +<TGConnectingPoint num="20" id="341" /> +<TGConnectingPoint num="21" id="342" /> +</COMPONENT> + +<COMPONENT type="19" id="359" > +<cdparam x="485" y="325" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="347" /> +<TGConnectingPoint num="1" id="348" /> +<TGConnectingPoint num="2" id="349" /> +<TGConnectingPoint num="3" id="350" /> +<TGConnectingPoint num="4" id="351" /> +<TGConnectingPoint num="5" id="352" /> +<TGConnectingPoint num="6" id="353" /> +<TGConnectingPoint num="7" id="354" /> +<TGConnectingPoint num="8" id="355" /> +<TGConnectingPoint num="9" id="356" /> +<TGConnectingPoint num="10" id="357" /> +<TGConnectingPoint num="11" id="358" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="344" > +<father id="359" num="0" /> +<cdparam x="410" y="335" /> +<sizeparam width="127" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[not(id_received == id) ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="345" > +<father id="359" num="1" /> +<cdparam x="540" y="335" /> +<sizeparam width="102" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[id_received == id ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="346" > +<father id="359" num="2" /> +<cdparam x="505" y="370" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="370" > +<cdparam x="529" y="403" /> +<sizeparam width="85" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="dataReceived" /> +<TGConnectingPoint num="0" id="360" /> +<TGConnectingPoint num="1" id="361" /> +<TGConnectingPoint num="2" id="362" /> +<TGConnectingPoint num="3" id="363" /> +<TGConnectingPoint num="4" id="364" /> +<TGConnectingPoint num="5" id="365" /> +<TGConnectingPoint num="6" id="366" /> +<TGConnectingPoint num="7" id="367" /> +<TGConnectingPoint num="8" id="368" /> +<TGConnectingPoint num="9" id="369" /> +</COMPONENT> + +<CONNECTOR type="101" id="371" > +<cdparam x="290" y="129" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="424" y="143" id="279" /> +<P2 x="424" y="171" id="297" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="372" > +<cdparam x="374" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to action state" value="null" /> +<P1 x="374" y="176" id="300" /> +<P2 x="356" y="212" id="281" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="373" > +<cdparam x="356" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="356" y="242" id="282" /> +<P2 x="356" y="269" id="292" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="374" > +<cdparam x="473" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="473" y="176" id="304" /> +<P2 x="497" y="218" id="321" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="375" > +<cdparam x="497" y="248" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="497" y="248" id="324" /> +<P2 x="498" y="270" id="310" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="379" > +<cdparam x="460" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="460" y="340" id="348" /> +<P2 x="482" y="233" id="322" /> +<Point x="422" y="367" /> +<Point x="398" y="346" /> +<Point x="402" y="264" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="376" > +<father id="379" num="0" /> +<cdparam x="422" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="377" > +<father id="379" num="1" /> +<cdparam x="398" y="346" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="378" > +<father id="379" num="2" /> +<cdparam x="402" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="380" > +<cdparam x="540" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="540" y="340" id="349" /> +<P2 x="571" y="398" id="360" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="381" > +<cdparam x="498" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to choice" value="null" /> +<P1 x="498" y="300" id="311" /> +<P2 x="500" y="315" id="347" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="385" > +<cdparam x="571" y="428" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="571" y="428" id="361" /> +<P2 x="512" y="233" id="323" /> +<Point x="565" y="460" /> +<Point x="715" y="462" /> +<Point x="717" y="262" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="382" > +<father id="385" num="0" /> +<cdparam x="565" y="460" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="383" > +<father id="385" num="1" /> +<cdparam x="715" y="462" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="384" > +<father id="385" num="2" /> +<cdparam x="717" y="262" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="WebServer" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="387" > +<cdparam x="357" y="138" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="386" /> +</COMPONENT> + +<COMPONENT type="17" id="410" > +<cdparam x="349" y="177" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="388" /> +<TGConnectingPoint num="1" id="389" /> +<TGConnectingPoint num="2" id="390" /> +<TGConnectingPoint num="3" id="391" /> +<TGConnectingPoint num="4" id="392" /> +<TGConnectingPoint num="5" id="393" /> +<TGConnectingPoint num="6" id="394" /> +<TGConnectingPoint num="7" id="395" /> +<TGConnectingPoint num="8" id="396" /> +<TGConnectingPoint num="9" id="397" /> +<TGConnectingPoint num="10" id="398" /> +<TGConnectingPoint num="11" id="399" /> +<TGConnectingPoint num="12" id="400" /> +<TGConnectingPoint num="13" id="401" /> +<TGConnectingPoint num="14" id="402" /> +<TGConnectingPoint num="15" id="403" /> +<TGConnectingPoint num="16" id="404" /> +<TGConnectingPoint num="17" id="405" /> +<TGConnectingPoint num="18" id="406" /> +<TGConnectingPoint num="19" id="407" /> +<TGConnectingPoint num="20" id="408" /> +<TGConnectingPoint num="21" id="409" /> +</COMPONENT> + +<COMPONENT type="15" id="421" > +<cdparam x="319" y="235" /> +<sizeparam width="91" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="getRequest?id" /> +<TGConnectingPoint num="0" id="411" /> +<TGConnectingPoint num="1" id="412" /> +<TGConnectingPoint num="2" id="413" /> +<TGConnectingPoint num="3" id="414" /> +<TGConnectingPoint num="4" id="415" /> +<TGConnectingPoint num="5" id="416" /> +<TGConnectingPoint num="6" id="417" /> +<TGConnectingPoint num="7" id="418" /> +<TGConnectingPoint num="8" id="419" /> +<TGConnectingPoint num="9" id="420" /> +</COMPONENT> + +<COMPONENT type="11" id="433" > +<cdparam x="359" y="286" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="423" /> +<TGConnectingPoint num="1" id="424" /> +<TGConnectingPoint num="2" id="425" /> +<TGConnectingPoint num="3" id="426" /> +<TGConnectingPoint num="4" id="427" /> +<TGConnectingPoint num="5" id="428" /> +<TGConnectingPoint num="6" id="429" /> +<TGConnectingPoint num="7" id="430" /> +<TGConnectingPoint num="8" id="431" /> +<TGConnectingPoint num="9" id="432" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="422" > +<father id="433" num="0" /> +<cdparam x="374" y="306" /> +<sizeparam width="94" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="computing_delay" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="444" > +<cdparam x="326" y="352" /> +<sizeparam width="77" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="sendData!id" /> +<TGConnectingPoint num="0" id="434" /> +<TGConnectingPoint num="1" id="435" /> +<TGConnectingPoint num="2" id="436" /> +<TGConnectingPoint num="3" id="437" /> +<TGConnectingPoint num="4" id="438" /> +<TGConnectingPoint num="5" id="439" /> +<TGConnectingPoint num="6" id="440" /> +<TGConnectingPoint num="7" id="441" /> +<TGConnectingPoint num="8" id="442" /> +<TGConnectingPoint num="9" id="443" /> +</COMPONENT> + +<CONNECTOR type="101" id="445" > +<cdparam x="364" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="364" y="158" id="386" /> +<P2 x="364" y="177" id="388" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="446" > +<cdparam x="369" y="261" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="364" y="260" id="412" /> +<P2 x="364" y="281" id="423" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="447" > +<cdparam x="369" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="364" y="321" id="424" /> +<P2 x="364" y="347" id="434" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="448" > +<cdparam x="364" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="364" y="207" id="391" /> +<P2 x="364" y="230" id="411" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="452" > +<cdparam x="369" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="364" y="377" id="435" /> +<P2 x="349" y="192" id="389" /> +<Point x="364" y="407" /> +<Point x="308" y="407" /> +<Point x="308" y="192" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="449" > +<father id="452" num="0" /> +<cdparam x="364" y="407" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="450" > +<father id="452" num="1" /> +<cdparam x="308" y="407" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="451" > +<father id="452" num="2" /> +<cdparam x="308" y="192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Medium" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="454" > +<cdparam x="454" y="93" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="453" /> +</COMPONENT> + +<COMPONENT type="12" id="470" > +<cdparam x="386" y="163" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="456" /> +<TGConnectingPoint num="1" id="457" /> +<TGConnectingPoint num="2" id="458" /> +<TGConnectingPoint num="3" id="459" /> +<TGConnectingPoint num="4" id="460" /> +<TGConnectingPoint num="5" id="461" /> +<TGConnectingPoint num="6" id="462" /> +<TGConnectingPoint num="7" id="463" /> +<TGConnectingPoint num="8" id="464" /> +<TGConnectingPoint num="9" id="465" /> +<TGConnectingPoint num="10" id="466" /> +<TGConnectingPoint num="11" id="467" /> +<TGConnectingPoint num="12" id="468" /> +<TGConnectingPoint num="13" id="469" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="455" > +<father id="470" num="0" /> +<cdparam x="536" y="160" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="115" maxX="150" minY="-3" maxY="-3" /> +<infoparam name="list of synchronization gates" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="19" id="486" > +<cdparam x="315" y="271" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="474" /> +<TGConnectingPoint num="1" id="475" /> +<TGConnectingPoint num="2" id="476" /> +<TGConnectingPoint num="3" id="477" /> +<TGConnectingPoint num="4" id="478" /> +<TGConnectingPoint num="5" id="479" /> +<TGConnectingPoint num="6" id="480" /> +<TGConnectingPoint num="7" id="481" /> +<TGConnectingPoint num="8" id="482" /> +<TGConnectingPoint num="9" id="483" /> +<TGConnectingPoint num="10" id="484" /> +<TGConnectingPoint num="11" id="485" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="471" > +<father id="486" num="0" /> +<cdparam x="290" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="472" > +<father id="486" num="1" /> +<cdparam x="350" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="473" > +<father id="486" num="2" /> +<cdparam x="335" y="316" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="509" > +<cdparam x="316" y="214" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="487" /> +<TGConnectingPoint num="1" id="488" /> +<TGConnectingPoint num="2" id="489" /> +<TGConnectingPoint num="3" id="490" /> +<TGConnectingPoint num="4" id="491" /> +<TGConnectingPoint num="5" id="492" /> +<TGConnectingPoint num="6" id="493" /> +<TGConnectingPoint num="7" id="494" /> +<TGConnectingPoint num="8" id="495" /> +<TGConnectingPoint num="9" id="496" /> +<TGConnectingPoint num="10" id="497" /> +<TGConnectingPoint num="11" id="498" /> +<TGConnectingPoint num="12" id="499" /> +<TGConnectingPoint num="13" id="500" /> +<TGConnectingPoint num="14" id="501" /> +<TGConnectingPoint num="15" id="502" /> +<TGConnectingPoint num="16" id="503" /> +<TGConnectingPoint num="17" id="504" /> +<TGConnectingPoint num="18" id="505" /> +<TGConnectingPoint num="19" id="506" /> +<TGConnectingPoint num="20" id="507" /> +<TGConnectingPoint num="21" id="508" /> +</COMPONENT> + +<COMPONENT type="15" id="520" > +<cdparam x="193" y="380" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port1_i?id1" /> +<TGConnectingPoint num="0" id="510" /> +<TGConnectingPoint num="1" id="511" /> +<TGConnectingPoint num="2" id="512" /> +<TGConnectingPoint num="3" id="513" /> +<TGConnectingPoint num="4" id="514" /> +<TGConnectingPoint num="5" id="515" /> +<TGConnectingPoint num="6" id="516" /> +<TGConnectingPoint num="7" id="517" /> +<TGConnectingPoint num="8" id="518" /> +<TGConnectingPoint num="9" id="519" /> +</COMPONENT> + +<COMPONENT type="15" id="531" > +<cdparam x="401" y="381" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port3_i?id1" /> +<TGConnectingPoint num="0" id="521" /> +<TGConnectingPoint num="1" id="522" /> +<TGConnectingPoint num="2" id="523" /> +<TGConnectingPoint num="3" id="524" /> +<TGConnectingPoint num="4" id="525" /> +<TGConnectingPoint num="5" id="526" /> +<TGConnectingPoint num="6" id="527" /> +<TGConnectingPoint num="7" id="528" /> +<TGConnectingPoint num="8" id="529" /> +<TGConnectingPoint num="9" id="530" /> +</COMPONENT> + +<COMPONENT type="15" id="542" > +<cdparam x="294" y="381" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port2_i?id1" /> +<TGConnectingPoint num="0" id="532" /> +<TGConnectingPoint num="1" id="533" /> +<TGConnectingPoint num="2" id="534" /> +<TGConnectingPoint num="3" id="535" /> +<TGConnectingPoint num="4" id="536" /> +<TGConnectingPoint num="5" id="537" /> +<TGConnectingPoint num="6" id="538" /> +<TGConnectingPoint num="7" id="539" /> +<TGConnectingPoint num="8" id="540" /> +<TGConnectingPoint num="9" id="541" /> +</COMPONENT> + +<COMPONENT type="17" id="565" > +<cdparam x="315" y="444" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="543" /> +<TGConnectingPoint num="1" id="544" /> +<TGConnectingPoint num="2" id="545" /> +<TGConnectingPoint num="3" id="546" /> +<TGConnectingPoint num="4" id="547" /> +<TGConnectingPoint num="5" id="548" /> +<TGConnectingPoint num="6" id="549" /> +<TGConnectingPoint num="7" id="550" /> +<TGConnectingPoint num="8" id="551" /> +<TGConnectingPoint num="9" id="552" /> +<TGConnectingPoint num="10" id="553" /> +<TGConnectingPoint num="11" id="554" /> +<TGConnectingPoint num="12" id="555" /> +<TGConnectingPoint num="13" id="556" /> +<TGConnectingPoint num="14" id="557" /> +<TGConnectingPoint num="15" id="558" /> +<TGConnectingPoint num="16" id="559" /> +<TGConnectingPoint num="17" id="560" /> +<TGConnectingPoint num="18" id="561" /> +<TGConnectingPoint num="19" id="562" /> +<TGConnectingPoint num="20" id="563" /> +<TGConnectingPoint num="21" id="564" /> +</COMPONENT> + +<COMPONENT type="11" id="577" > +<cdparam x="326" y="497" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="567" /> +<TGConnectingPoint num="1" id="568" /> +<TGConnectingPoint num="2" id="569" /> +<TGConnectingPoint num="3" id="570" /> +<TGConnectingPoint num="4" id="571" /> +<TGConnectingPoint num="5" id="572" /> +<TGConnectingPoint num="6" id="573" /> +<TGConnectingPoint num="7" id="574" /> +<TGConnectingPoint num="8" id="575" /> +<TGConnectingPoint num="9" id="576" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="566" > +<father id="577" num="0" /> +<cdparam x="341" y="517" /> +<sizeparam width="43" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="tr_delay" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="588" > +<cdparam x="300" y="557" /> +<sizeparam width="65" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port_o!id1" /> +<TGConnectingPoint num="0" id="578" /> +<TGConnectingPoint num="1" id="579" /> +<TGConnectingPoint num="2" id="580" /> +<TGConnectingPoint num="3" id="581" /> +<TGConnectingPoint num="4" id="582" /> +<TGConnectingPoint num="5" id="583" /> +<TGConnectingPoint num="6" id="584" /> +<TGConnectingPoint num="7" id="585" /> +<TGConnectingPoint num="8" id="586" /> +<TGConnectingPoint num="9" id="587" /> +</COMPONENT> + +<COMPONENT type="15" id="599" > +<cdparam x="535" y="271" /> +<sizeparam width="65" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port_i?id2" /> +<TGConnectingPoint num="0" id="589" /> +<TGConnectingPoint num="1" id="590" /> +<TGConnectingPoint num="2" id="591" /> +<TGConnectingPoint num="3" id="592" /> +<TGConnectingPoint num="4" id="593" /> +<TGConnectingPoint num="5" id="594" /> +<TGConnectingPoint num="6" id="595" /> +<TGConnectingPoint num="7" id="596" /> +<TGConnectingPoint num="8" id="597" /> +<TGConnectingPoint num="9" id="598" /> +</COMPONENT> + +<COMPONENT type="17" id="622" > +<cdparam x="552" y="226" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="600" /> +<TGConnectingPoint num="1" id="601" /> +<TGConnectingPoint num="2" id="602" /> +<TGConnectingPoint num="3" id="603" /> +<TGConnectingPoint num="4" id="604" /> +<TGConnectingPoint num="5" id="605" /> +<TGConnectingPoint num="6" id="606" /> +<TGConnectingPoint num="7" id="607" /> +<TGConnectingPoint num="8" id="608" /> +<TGConnectingPoint num="9" id="609" /> +<TGConnectingPoint num="10" id="610" /> +<TGConnectingPoint num="11" id="611" /> +<TGConnectingPoint num="12" id="612" /> +<TGConnectingPoint num="13" id="613" /> +<TGConnectingPoint num="14" id="614" /> +<TGConnectingPoint num="15" id="615" /> +<TGConnectingPoint num="16" id="616" /> +<TGConnectingPoint num="17" id="617" /> +<TGConnectingPoint num="18" id="618" /> +<TGConnectingPoint num="19" id="619" /> +<TGConnectingPoint num="20" id="620" /> +<TGConnectingPoint num="21" id="621" /> +</COMPONENT> + +<COMPONENT type="11" id="634" > +<cdparam x="562" y="324" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="624" /> +<TGConnectingPoint num="1" id="625" /> +<TGConnectingPoint num="2" id="626" /> +<TGConnectingPoint num="3" id="627" /> +<TGConnectingPoint num="4" id="628" /> +<TGConnectingPoint num="5" id="629" /> +<TGConnectingPoint num="6" id="630" /> +<TGConnectingPoint num="7" id="631" /> +<TGConnectingPoint num="8" id="632" /> +<TGConnectingPoint num="9" id="633" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="623" > +<father id="634" num="0" /> +<cdparam x="577" y="344" /> +<sizeparam width="43" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="tr_delay" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="657" > +<cdparam x="552" y="387" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="635" /> +<TGConnectingPoint num="1" id="636" /> +<TGConnectingPoint num="2" id="637" /> +<TGConnectingPoint num="3" id="638" /> +<TGConnectingPoint num="4" id="639" /> +<TGConnectingPoint num="5" id="640" /> +<TGConnectingPoint num="6" id="641" /> +<TGConnectingPoint num="7" id="642" /> +<TGConnectingPoint num="8" id="643" /> +<TGConnectingPoint num="9" id="644" /> +<TGConnectingPoint num="10" id="645" /> +<TGConnectingPoint num="11" id="646" /> +<TGConnectingPoint num="12" id="647" /> +<TGConnectingPoint num="13" id="648" /> +<TGConnectingPoint num="14" id="649" /> +<TGConnectingPoint num="15" id="650" /> +<TGConnectingPoint num="16" id="651" /> +<TGConnectingPoint num="17" id="652" /> +<TGConnectingPoint num="18" id="653" /> +<TGConnectingPoint num="19" id="654" /> +<TGConnectingPoint num="20" id="655" /> +<TGConnectingPoint num="21" id="656" /> +</COMPONENT> + +<COMPONENT type="15" id="668" > +<cdparam x="531" y="448" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port1_o!id2" /> +<TGConnectingPoint num="0" id="658" /> +<TGConnectingPoint num="1" id="659" /> +<TGConnectingPoint num="2" id="660" /> +<TGConnectingPoint num="3" id="661" /> +<TGConnectingPoint num="4" id="662" /> +<TGConnectingPoint num="5" id="663" /> +<TGConnectingPoint num="6" id="664" /> +<TGConnectingPoint num="7" id="665" /> +<TGConnectingPoint num="8" id="666" /> +<TGConnectingPoint num="9" id="667" /> +</COMPONENT> + +<COMPONENT type="15" id="679" > +<cdparam x="531" y="542" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port3_o!id2" /> +<TGConnectingPoint num="0" id="669" /> +<TGConnectingPoint num="1" id="670" /> +<TGConnectingPoint num="2" id="671" /> +<TGConnectingPoint num="3" id="672" /> +<TGConnectingPoint num="4" id="673" /> +<TGConnectingPoint num="5" id="674" /> +<TGConnectingPoint num="6" id="675" /> +<TGConnectingPoint num="7" id="676" /> +<TGConnectingPoint num="8" id="677" /> +<TGConnectingPoint num="9" id="678" /> +</COMPONENT> + +<COMPONENT type="15" id="690" > +<cdparam x="531" y="501" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port2_o!id2" /> +<TGConnectingPoint num="0" id="680" /> +<TGConnectingPoint num="1" id="681" /> +<TGConnectingPoint num="2" id="682" /> +<TGConnectingPoint num="3" id="683" /> +<TGConnectingPoint num="4" id="684" /> +<TGConnectingPoint num="5" id="685" /> +<TGConnectingPoint num="6" id="686" /> +<TGConnectingPoint num="7" id="687" /> +<TGConnectingPoint num="8" id="688" /> +<TGConnectingPoint num="9" id="689" /> +</COMPONENT> + +<CONNECTOR type="101" id="691" > +<cdparam x="410" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="411" y="168" id="461" /> +<P2 x="331" y="214" id="487" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="692" > +<cdparam x="331" y="244" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="331" y="244" id="490" /> +<P2 x="330" y="261" id="474" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="693" > +<cdparam x="290" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="290" y="286" id="475" /> +<P2 x="229" y="375" id="510" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="694" > +<cdparam x="330" y="326" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="330" y="326" id="477" /> +<P2 x="330" y="376" id="532" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="695" > +<cdparam x="370" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="370" y="286" id="476" /> +<P2 x="437" y="376" id="521" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="696" > +<cdparam x="332" y="475" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to deterministic delay" value="null" /> +<P1 x="330" y="474" id="546" /> +<P2 x="331" y="492" id="567" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="697" > +<cdparam x="333" y="533" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="331" y="532" id="568" /> +<P2 x="332" y="552" id="578" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="701" > +<cdparam x="332" y="582" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="332" y="582" id="579" /> +<P2 x="316" y="229" id="488" /> +<Point x="332" y="615" /> +<Point x="158" y="615" /> +<Point x="158" y="229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="698" > +<father id="701" num="0" /> +<cdparam x="332" y="615" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="699" > +<father id="701" num="1" /> +<cdparam x="158" y="615" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="700" > +<father id="701" num="2" /> +<cdparam x="158" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="702" > +<cdparam x="229" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="229" y="405" id="511" /> +<P2 x="315" y="459" id="544" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="703" > +<cdparam x="330" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="330" y="406" id="533" /> +<P2 x="330" y="444" id="543" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="704" > +<cdparam x="437" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="437" y="406" id="522" /> +<P2 x="345" y="459" id="545" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="705" > +<cdparam x="567" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="567" y="296" id="590" /> +<P2 x="567" y="319" id="624" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="706" > +<cdparam x="575" y="246" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="567" y="256" id="603" /> +<P2 x="567" y="266" id="589" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="707" > +<cdparam x="567" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to junction" value="null" /> +<P1 x="567" y="359" id="625" /> +<P2 x="567" y="387" id="635" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="708" > +<cdparam x="567" y="417" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="567" y="417" id="638" /> +<P2 x="567" y="443" id="658" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="709" > +<cdparam x="567" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="567" y="473" id="659" /> +<P2 x="567" y="496" id="680" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="710" > +<cdparam x="567" y="526" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="567" y="526" id="681" /> +<P2 x="567" y="537" id="669" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="714" > +<cdparam x="567" y="567" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="567" y="567" id="670" /> +<P2 x="582" y="241" id="602" /> +<Point x="567" y="599" /> +<Point x="664" y="599" /> +<Point x="664" y="241" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="711" > +<father id="714" num="0" /> +<cdparam x="567" y="599" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="712" > +<father id="714" num="1" /> +<cdparam x="664" y="599" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="713" > +<father id="714" num="2" /> +<cdparam x="664" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="715" > +<cdparam x="510" y="168" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="510" y="168" id="465" /> +<P2 x="567" y="226" id="600" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="716" > +<cdparam x="519" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to parallel / synchro" value="null" /> +<P1 x="461" y="113" id="453" /> +<P2 x="461" y="163" id="458" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/modeling/manual-HW.xml b/preinstallTTool/linux/TTool/modeling/manual-HW.xml new file mode 100755 index 0000000000000000000000000000000000000000..c519b092369c827bab2d52c240c159e0c7621c87 --- /dev/null +++ b/preinstallTTool/linux/TTool/modeling/manual-HW.xml @@ -0,0 +1,321 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.80beta3c"> + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="201" id="21" > +<cdparam x="442" y="107" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Greetings" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +<TGConnectingPoint num="2" id="18" /> +<TGConnectingPoint num="3" id="19" /> +<TGConnectingPoint num="4" id="20" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="3" > +<father id="21" num="0" /> +<cdparam x="442" y="138" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="6" > +<father id="21" num="1" /> +<cdparam x="442" y="169" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="62" maxY="62" /> +<infoparam name="Tclass gates" value="+ HelloWorld : OutGate; ++ DoIt : InGate; +" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<extraparam> +<Attribute access="2" id="HelloWorld" value="" type="2" /> +<Attribute access="2" id="DoIt" value="" type="3" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="9" > +<father id="21" num="2" /> +<cdparam x="442" y="214" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="107" maxY="107" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="7" /> +<TGConnectingPoint num="1" id="8" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="15" > +<father id="21" num="3" /> +<cdparam x="442" y="245" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="138" maxY="138" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="10" /> +<TGConnectingPoint num="1" id="11" /> +<TGConnectingPoint num="2" id="12" /> +<TGConnectingPoint num="3" id="13" /> +<TGConnectingPoint num="4" id="14" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="42" > +<cdparam x="84" y="115" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Controller" /> +<TGConnectingPoint num="0" id="37" /> +<TGConnectingPoint num="1" id="38" /> +<TGConnectingPoint num="2" id="39" /> +<TGConnectingPoint num="3" id="40" /> +<TGConnectingPoint num="4" id="41" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="24" > +<father id="42" num="0" /> +<cdparam x="84" y="146" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="" /> +<TGConnectingPoint num="0" id="22" /> +<TGConnectingPoint num="1" id="23" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="27" > +<father id="42" num="1" /> +<cdparam x="84" y="177" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="62" maxY="62" /> +<infoparam name="Tclass gates" value="+ DoIt : OutGate; +" /> +<TGConnectingPoint num="0" id="25" /> +<TGConnectingPoint num="1" id="26" /> +<extraparam> +<Attribute access="2" id="DoIt" value="" type="2" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="30" > +<father id="42" num="2" /> +<cdparam x="84" y="208" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="93" maxY="93" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="28" /> +<TGConnectingPoint num="1" id="29" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="36" > +<father id="42" num="3" /> +<cdparam x="84" y="239" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="124" maxY="124" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="31" /> +<TGConnectingPoint num="1" id="32" /> +<TGConnectingPoint num="2" id="33" /> +<TGConnectingPoint num="3" id="34" /> +<TGConnectingPoint num="4" id="35" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="48" > +<cdparam x="288" y="91" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Controller and Greetings" value="Synchro" /> +<TGConnectingPoint num="0" id="44" /> +<TGConnectingPoint num="1" id="45" /> +<TGConnectingPoint num="2" id="46" /> +<TGConnectingPoint num="3" id="47" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="43" > +<father id="48" num="0" /> +<cdparam x="244" y="148" /> +<sizeparam width="36" height="18" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="42" g1="DoIt" t2="21" g2="DoIt" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="50" > +<cdparam x="248" y="184" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="49" /> +<P1 x="234" y="192" id="26" /> +<P2 x="442" y="192" id="4" /> +</CONNECTOR> +<CONNECTOR type="103" id="51" > +<cdparam x="338" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="338" y="192" id="49" /> +<P2 x="338" y="116" id="46" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="Greetings" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="53" > +<cdparam x="144" y="13" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="52" /> +</COMPONENT> + +<COMPONENT type="18" id="57" > +<cdparam x="152" y="100" /> +<sizeparam width="8" height="32" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="non deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="55" /> +<TGConnectingPoint num="1" id="56" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="54" > +<father id="57" num="0" /> +<cdparam x="165" y="120" /> +<sizeparam width="14" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="8" maxX="18" minY="11" maxY="31" /> +<infoparam name="value of the latency" value="20" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="60" > +<cdparam x="118" y="159" /> +<sizeparam width="71" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="HelloWorld" /> +<TGConnectingPoint num="0" id="58" /> +<TGConnectingPoint num="1" id="59" /> +</COMPONENT> + +<COMPONENT type="13" id="62" > +<cdparam x="143" y="207" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="61" /> +</COMPONENT> + +<COMPONENT type="15" id="65" > +<cdparam x="136" y="55" /> +<sizeparam width="32" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="DoIt" /> +<TGConnectingPoint num="0" id="63" /> +<TGConnectingPoint num="1" id="64" /> +</COMPONENT> + +<CONNECTOR type="101" id="66" > +<cdparam x="155" y="40" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to non deterministic delay" value="null" /> +<P1 x="151" y="33" id="52" /> +<P2 x="152" y="50" id="63" /> +</CONNECTOR> +<CONNECTOR type="101" id="67" > +<cdparam x="156" y="106" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from non deterministic delay to action state" value="null" /> +<P1 x="152" y="137" id="56" /> +<P2 x="153" y="154" id="58" /> +</CONNECTOR> +<CONNECTOR type="101" id="68" > +<cdparam x="156" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="153" y="184" id="59" /> +<P2 x="153" y="202" id="61" /> +</CONNECTOR> +<CONNECTOR type="101" id="69" > +<cdparam x="229" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to non deterministic delay" value="null" /> +<P1 x="152" y="80" id="64" /> +<P2 x="152" y="95" id="55" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Controller" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="71" > +<cdparam x="122" y="24" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="70" /> +</COMPONENT> + +<COMPONENT type="11" id="75" > +<cdparam x="124" y="72" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="73" /> +<TGConnectingPoint num="1" id="74" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="72" > +<father id="75" num="0" /> +<cdparam x="139" y="92" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="2" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="78" > +<cdparam x="113" y="131" /> +<sizeparam width="32" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="DoIt" /> +<TGConnectingPoint num="0" id="76" /> +<TGConnectingPoint num="1" id="77" /> +</COMPONENT> + +<COMPONENT type="13" id="80" > +<cdparam x="119" y="178" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="79" /> +</COMPONENT> + +<CONNECTOR type="101" id="81" > +<cdparam x="129" y="44" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to deterministic delay" value="null" /> +<P1 x="129" y="44" id="70" /> +<P2 x="129" y="67" id="73" /> +</CONNECTOR> +<CONNECTOR type="101" id="82" > +<cdparam x="130" y="105" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="129" y="107" id="74" /> +<P2 x="129" y="126" id="76" /> +</CONNECTOR> +<CONNECTOR type="101" id="83" > +<cdparam x="129" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="129" y="156" id="77" /> +<P2 x="129" y="173" id="79" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/nc/README_nc b/preinstallTTool/linux/TTool/nc/README_nc new file mode 100644 index 0000000000000000000000000000000000000000..b1b28aaac55bfbb1dfa15e0d8cb92f8221a264bd --- /dev/null +++ b/preinstallTTool/linux/TTool/nc/README_nc @@ -0,0 +1,6 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +Directory generally configured as the one for saving network-calculus xml files. + diff --git a/preinstallTTool/linux/TTool/proverif/README_proverif b/preinstallTTool/linux/TTool/proverif/README_proverif new file mode 100644 index 0000000000000000000000000000000000000000..16e2aac6f30bfb157281a17bfc5532db2a8348f4 --- /dev/null +++ b/preinstallTTool/linux/TTool/proverif/README_proverif @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at Telecom ParisTech, http://ttool.telecom-paristech.fr/ +------------------------------------------------------------------------------- + +The proverif directory is intended to store the proverif files generated from TTool. To generate these files, please refer to http://ttool.telecom-paristech.fr/ \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/simulators/c++2/Makefile b/preinstallTTool/linux/TTool/simulators/c++2/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..6d27829930cd2f6a37f2340469690824ad298e7c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/Makefile @@ -0,0 +1,35 @@ +TARGET_ARCH = linux + +CC = g++ -g +#CC = test2.sh +#CC = /packages/gcc_3.2.2/bin/g++32 +OPT = -O3 -pthread +# Solaris +#LOPT = -O1 -pthread -ldl -lnsl -lsocket +#Linux +LOPT = -O3 -ldl +LTHREAD = -pthread + +DEBUG = -g +PROFILE = -pg +OTHER = -Wall +SOLARIS_SPECIFIC = -lsocket -lnsl +TRY = -Wno-deprecated +#make = $(OPT) $(OTHER) $(TRY) +LFLAGS = $(LOPT) $(OTHER) $(TRY) +LFLAGS_SOLARIS = $(LFLAGS) $(SOLARIS_SPECIFIC) +CFLAGS = $(OTHER) +OBJDIR = lib +OS := $(shell uname) + +MODULE = run +include Makefile.src +SRCS_base = app/TMLTask.cpp app/TMLCommand.cpp TMLTransaction.cpp app/TMLChannel.cpp arch/SingleCoreCPU.cpp app/TMLWriteCommand.cpp app/TMLWriteMultCommand.cpp app/TMLStateChannel.cpp app/TMLbrbwChannel.cpp app/TMLnbrnbwChannel.cpp app/TMLbrnbwChannel.cpp app/TMLReadCommand.cpp app/TMLExeciCommand.cpp app/TMLExeciRangeCommand.cpp app/TMLActionCommand.cpp app/TMLChoiceCommand.cpp app/TMLRandomChoiceCommand.cpp app/TMLWaitCommand.cpp app/TMLSendCommand.cpp app/TMLSelectCommand.cpp app/TMLRequestCommand.cpp app/TMLNotifiedCommand.cpp app/TMLRandomCommand.cpp app/TMLStopCommand.cpp arch/Bus.cpp definitions.cpp arch/Bridge.cpp arch/Memory.cpp Comment.cpp sim/Server.cpp sim/ServerLocal.cpp sim/Simulator.cpp sim/SimComponents.cpp sim/ServerIF.cpp evt/ListenersSimCmd.cpp arch/PrioScheduler.cpp arch/RRScheduler.cpp arch/RRPrioScheduler.cpp arch/WorkloadSource.cpp TEPE/AliasConstraint.cpp TEPE/EqConstraint.cpp TEPE/FSMConstraint.cpp TEPE/PropertyConstraint.cpp TEPE/PropertyStateConstraint.cpp TEPE/PropLabConstraint.cpp TEPE/PropRelConstraint.cpp TEPE/SignalConstraint.cpp TEPE/ThreeSigConstraint.cpp TEPE/TimeMMConstraint.cpp TEPE/TimeTConstraint.cpp TEPE/TwoSigConstraint.cpp + +SRCS_base_DIR = src_simulator +SRCS_generated = . + +OBJS_simulator = $(SRCS_base:%.cpp=lib/%.o) +OBJS = $(SRCS:%.cpp=lib/%.o) + +include Makefile.defs diff --git a/preinstallTTool/linux/TTool/simulators/c++2/Makefile.defs b/preinstallTTool/linux/TTool/simulators/c++2/Makefile.defs new file mode 100644 index 0000000000000000000000000000000000000000..1dc3a66358f9a6314a72346f69ec3f3c9ac69afc --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/Makefile.defs @@ -0,0 +1,44 @@ +## Variable that points to SystemC installation path + + +INCDIR = -I. -I.. -I$(SRCS_base_DIR) -I$(SRCS_base_DIR)/app -I$(SRCS_base_DIR)/arch -I$(SRCS_base_DIR)/evt -I$(SRCS_base_DIR)/sim -I$(SRCS_base_DIR)/TEPE +LIBDIR = -L. -L.. +LIBS = -lm $(EXTRA_LIBS) + +EXE = $(MODULE).x + +.SUFFIXES: .cpp .o .x + + +$(EXE): makedir $(OBJS) $(OBJS_simulator) + echo Making target +ifeq ($(OS), SunOS) + $(CC) $(LFLAGS_SOLARIS) -lsocket $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_simulator) $(LIBS) 2>&1 | c++filt + endif +ifneq ($(OS), SunOS) + $(CC) $(LFLAGS) $(LTHREAD) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_simulator) $(LIBS) 2>&1 | c++filt +endif + +makedir: + echo Making directories + mkdir -p ./lib/app + mkdir -p ./lib/arch + mkdir -p ./lib/TEPE + mkdir -p ./lib/evt + mkdir -p ./lib/sim + +$(OBJDIR)/%.o: $(SRCS_base_DIR)/%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +#$(OBJDIR)/evt/ListenersSimCmd.o: $(SRCS_base_DIR)/evt/ListenersSimCmd.cpp +# $(CC) $(CFLAGS) $(INCDIR) -o - ldl $@ -c $< + +$(OBJDIR)/%.o: ./%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +clean:: + rm -f $(OBJS_simulator) $(OBJS) *~ $(EXE) core + +ultraclean: clean + rm -f Makefile.deps + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/lib/README b/preinstallTTool/linux/TTool/simulators/c++2/lib/README new file mode 100644 index 0000000000000000000000000000000000000000..be110e6ec98dbe7763f322e6949c409130fcc05d --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/lib/README @@ -0,0 +1 @@ +This directory contains object-files generated by the "make" command executed on upper level folder diff --git a/preinstallTTool/linux/TTool/simulators/c++2/schedstyle.css b/preinstallTTool/linux/TTool/simulators/c++2/schedstyle.css new file mode 100755 index 0000000000000000000000000000000000000000..4a2dbd77f9a03147885ce51b51116def6fc055a1 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/schedstyle.css @@ -0,0 +1,55 @@ +table{ + border-collapse: collapse; + empty-cells: show; + margin: 0.4cm; +} + +td{ + padding: 10px 5px; + border: 1px solid black; +} + +th{ + padding: 5px; + border-left: 1px dotted black; + border-right: 1px dotted black; +} + +.sc{ + border-style: none; + padding: 0px; +} + +h2 { + border-bottom: 1px solid #666; +} + +h2 span { + position: relative; + left: -0.3em; + bottom: -0.6em; + padding: 1px 0.5em; + border-style: solid; + border-width: 1px 1px 1px 0.8em; + border-color: #666 #666 #666 #008; + background-color: #ddd; +} + +.space{border-style: none;} +.not{background-color: white;} +.t1{background-color: yellow;} +.t2{background-color: purple;} +.t3{background-color: red;} +.t4{background-color: silver;} +.t5{background-color: teal;} +.t6{background-color: aqua;} +.t7{background-color: olive;} +.t8{background-color: navy;} +.t9{background-color: maroon;} +.t10{background-color: lime;} +.t11{background-color: green;} +.t12{background-color: gray;} +.t13{background-color: fuchsia;} +.t14{background-color: blue;} +.t15{background-color: black;} +.t16{background-color: white;} \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Comment.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Comment.cpp new file mode 100644 index 0000000000000000000000000000000000000000..49422cae1e503bf7cccfac7b81339285ce6de58b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Comment.cpp @@ -0,0 +1,57 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<Comment.h> + +MemPool<Comment> Comment::memPool(BLOCK_SIZE_COMMENT); + +Comment::Comment(TMLTime iTime, TMLCommand* iCommand, unsigned int iActionCode):_time(iTime), _command(iCommand), _actionCode(iActionCode){} + +void * Comment::operator new(size_t size){ + return memPool.pmalloc(size); +} + +void Comment::operator delete(void *p, size_t size){ + memPool.pfree(p, size); +} + +void Comment::reset(){ + memPool.reset(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Comment.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Comment.h new file mode 100644 index 0000000000000000000000000000000000000000..8508218104f33efb0e26c78a31dbfd921e49a51c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Comment.h @@ -0,0 +1,81 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef CommentH +#define CommentH + +#include <MemPool.h> + +///Class which encapsulates a comment concerning the control flow or task execution +class Comment{ +public: + ///Constructor + /** + \param iTime Time when the message occurred + \param iCommand Pointer to the command which created the comment, 0 if comment was created by a task + \param iActionCode Code specifying the comment message + */ + Comment(TMLTime iTime, TMLCommand* iCommand, unsigned int iActionCode); + ///New operator + /** + \param size Size of memory chunk to be allocated + \return Pointer to the allocated chunk of memory + */ + static void * operator new(size_t size); + ///Delete operator + /** + \param p Pointer to the memory chunk to be deallocated + \param size Size of memory chunk to be deallocated + */ + static void operator delete(void *p, size_t size); + + static void reset(); + + ///Time when the massage occurred + TMLTime _time; + ///Pointer to the command which created the comment, 0 if comment was created by a task + TMLCommand* _command; + ///Code specifying the comment message + unsigned int _actionCode; +private: + ///Memory pool for comments + static MemPool<Comment> memPool; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/HashAlgo.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/HashAlgo.h new file mode 100644 index 0000000000000000000000000000000000000000..886c4c9ee6975b76b9326842e4e9be4e5e2ff22e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/HashAlgo.h @@ -0,0 +1,156 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef JenkinsHashH +#define JenkinsHashH + +#define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) + +#define imix(a,b,c) \ +{ \ + b -= a; c ^= rot(b, 4); c += b; \ + a -= c; b ^= rot(a, 19); b += a; \ + c -= b; a ^= rot(c, 16); a += c; \ + b -= a; c ^= rot(b,8); c += b; \ + a -= c; b ^= rot(a,6); b += a; \ + c -= b; a ^= rot(c, 4); a += c; \ +} + +#define mix(a,b,c) \ +{ \ + a -= c; a ^= rot(c, 4); c += b; \ + b -= a; b ^= rot(a, 6); a += c; \ + c -= b; c ^= rot(b, 8); b += a; \ + a -= c; a ^= rot(c,16); c += b; \ + b -= a; b ^= rot(a,19); a += c; \ + c -= b; c ^= rot(b, 4); b += a; \ +} + +#define ifinal(a,b,c) \ +{ \ + b += rot(a,14); b ^= a;\ + a += rot(c,4); a ^= c;\ + c += rot(b,16); c ^= b;\ + b += rot(a,25); b ^= a;\ + a += rot(c,11); a ^= c;\ + c += rot(b,14); c ^= b;\ +} + +#define final(a,b,c) \ +{ \ + c ^= b; c -= rot(b,14); \ + a ^= c; a -= rot(c,11); \ + b ^= a; b -= rot(a,25); \ + c ^= b; c -= rot(b,16); \ + a ^= c; a -= rot(c,4); \ + b ^= a; b -= rot(a,14); \ + c ^= b; c -= rot(b,24); \ +} + +///Class which encapsulates a comment concerning the control flow or task execution +class HashAlgo{ +public: + + HashAlgo()/*: _bufferSize(0), _buffer(0), _bufferPos(0)*/{ + init(0,0); + } + + HashAlgo(HashValueType iInitVal, HashValueType iLength /*, iBufferSize=0*/)/*: _bufferSize(iBufferSize), _buffer(0), _bufferPos(0)*/{ + init(iInitVal, iLength); + //if (_bufferSize!=0) _buffer = new HashValueType[_bufferSize]; + //memset(_buffer, 0, _bufferSize*sizeof(HashValueType)); + } + + ~HashAlgo(){ + //if (_bufferSize!=0) delete [] _buffer; + } + + void init(HashValueType iInitVal, HashValueType iLength){ + _a = _b = _c = 0xdeadbeef + (((HashValueType)iLength)<<2) + iInitVal; + _state = 0; + _finalized = false; + } + + void addValue(HashValueType iVal){ + //std::cout << "++++++++++++++++++++ Added value: " << iVal << std::endl; + _finalized = false; + switch(_state){ + case 0: _a+= iVal; break; + case 1: _b+= iVal; break; + case 2: _c+= iVal; mix(_a,_b,_c); + } + _state = (_state==2)?0 : _state+1; + } + + /*void removeValue(HashValueType iVal){ + if(_finalized){ + ifinal(_a, _b, _c); + _finalized=false; + } + switch(_state){ + case 1: _a-= iVal; break; + case 2: _b-= iVal; break; + case 0: imix(_a,_b,_c); _c-= iVal; + } + _state = (_state==0)?2 : _state-1; + }*/ + + HashValueType getHash() const{ + if (!_finalized){ + _result = _c; + if(_state!=0){ + HashValueType aA = _a, aB=_b; + final(aA, aB, _result); + _finalized=true; + } + } + return _result; + } + + protected: + HashValueType _a,_b,_c; + mutable HashValueType _result; + char _state; + mutable bool _finalized; + //unsigned int _bufferSize; + //HashValueType * _buffer; + //unsigned int _bufferPos; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPool.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPool.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7c992dcdadb61229972f579a78fb9b4484b45424 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPool.cpp @@ -0,0 +1,116 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<MemPool.h> +#include<TMLTransaction.h> +#include<Comment.h> +#include<Parameter.h> + +///Generic Memory pool class + +template <typename T> +MemPool<T>::MemPool(unsigned int iBlockSize):_headFreeList(0), _blockSize(iBlockSize){ + //std::cerr << "Construct Mem Pool ********\n"; +} + +template <typename T> +void* MemPool<T>::pmalloc(unsigned int n){ + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR malloc********\n"; + return ::operator new(n); + } + //std::cerr << "ALLOC in MemPool " << this << "--------------\n"; + T* aHead = _headFreeList; + if (aHead){ + _headFreeList = *(reinterpret_cast<T**>(aHead)); + }else{ + T** aAdr; + T* newBlock = static_cast<T*>(::operator new(_blockSize * sizeof(T))); + _chunkList.push_back(newBlock); + for (unsigned int i = 1; i < _blockSize-1; ++i){ + aAdr = reinterpret_cast<T**>(&newBlock[i]); + *aAdr = &newBlock[i+1]; + } + aAdr = reinterpret_cast<T**>(&newBlock[_blockSize-1]); + *aAdr = 0; + aHead = newBlock; + _headFreeList = &newBlock[1]; + } + return aHead; +} + +template <typename T> +void MemPool<T>::pfree(void *p, unsigned int n){ + //std::cerr << "DELETE in MemPool--------------\n"; + if (p == 0) return; + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR delete********\n"; + ::operator delete(p); + return; + } + T* aDelObj = static_cast<T*>(p); + T** aAdr = reinterpret_cast<T**>(aDelObj); + //std::cerr << "Lets crash\n"; + *aAdr = _headFreeList; + //std::cerr << "Not crashed\n"; + _headFreeList = aDelObj; +} + +template <typename T> +void MemPool<T>::reset(){ + _headFreeList=0; + for(typename std::list<T*>::iterator i=_chunkList.begin(); i != _chunkList.end(); ++i) ::operator delete(*i); + _chunkList.clear(); +} + +template <typename T> +MemPool<T>::~MemPool(){ + reset(); +} + +/*template class MemPool<TMLTransaction>; +template class MemPool<Comment>; +template class MemPool<SizedParameter<ParamType, 0> >; +template class MemPool<SizedParameter<ParamType, 1> >; +template class MemPool<SizedParameter<ParamType, 2> >; +template class MemPool<SizedParameter<ParamType, 3> >; +template class MemPool<SizedParameter<ParamType, 4> >; +template class MemPool<SizedParameter<ParamType, 5> >; +template class MemPool<SizedParameter<ParamType, 6> >;*/ diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPool.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPool.h new file mode 100644 index 0000000000000000000000000000000000000000..c3ba20c45fc6c9bf42733b34963c5b5dca6ab7b5 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPool.h @@ -0,0 +1,124 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MemPoolH +#define MemPoolH + +#include <definitions.h> + +///Generic Memory pool +template <typename T> +class MemPool { +public: + ///Constructor + /** + \param iBlockSize Size of chunks to be allocated + */ + MemPool(unsigned int iBlockSize) :_headFreeList(0), _blockSize(iBlockSize){} + //MemPool(); + ///Allocation method + /** + \param n Size of memory chunk to be allocated + \return Pointer to the allocated chunk of memory + */ + void* pmalloc(unsigned int n){ + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR malloc********\n"; + return ::operator new(n); + } + //std::cerr << "ALLOC in MemPool " << this << "--------------\n"; + T* aHead = _headFreeList; + if (aHead){ + _headFreeList = *(reinterpret_cast<T**>(aHead)); + }else{ + T** aAdr; + T* newBlock = static_cast<T*>(::operator new(_blockSize * sizeof(T))); + _chunkList.push_back(newBlock); + for (unsigned int i = 1; i < _blockSize-1; ++i){ + aAdr = reinterpret_cast<T**>(&newBlock[i]); + *aAdr = &newBlock[i+1]; + } + aAdr = reinterpret_cast<T**>(&newBlock[_blockSize-1]); + *aAdr = 0; + aHead = newBlock; + _headFreeList = &newBlock[1]; + } + return aHead; + } + + ///Deallocation method + /** + \param p Pointer to the memory chunk to be deallocated + \param n Size of memory chunk to be deallocated + */ + void pfree(void *p, unsigned int n){ + //std::cerr << "DELETE in MemPool--------------\n"; + if (p == 0) return; + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR delete********\n"; + ::operator delete(p); + return; + } + T* aDelObj = static_cast<T*>(p); + T** aAdr = reinterpret_cast<T**>(aDelObj); + //std::cerr << "Lets crash\n"; + *aAdr = _headFreeList; + //std::cerr << "Not crashed\n"; + _headFreeList = aDelObj; + } + ///Reset memory pool, deallocate all memory chunks + void reset(){ + _headFreeList=0; + for(typename std::list<T*>::iterator i=_chunkList.begin(); i != _chunkList.end(); ++i) ::operator delete(*i); + _chunkList.clear(); + } + ///Destructor + ~MemPool(){ + reset(); + } +private: + ///Head pointer of the free list + T* _headFreeList; + ///Size of chunks to be allocated + unsigned int _blockSize; + ///List containing allocated memory chunks + std::list<T*> _chunkList; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPoolNoDel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPoolNoDel.h new file mode 100644 index 0000000000000000000000000000000000000000..2872ac723f9f3c5cb81c13b484992f0f8f0d5772 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/MemPoolNoDel.h @@ -0,0 +1,122 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MemPoolNoDelH +#define MemPoolNoDelH + +#include <definitions.h> + +///Generic Memory pool without delete functionality +template <typename T> +class MemPoolNoDel { +public: + ///Constructor + /** + \param iChunkSize Size of chunks to be allocated + */ + MemPoolNoDel(unsigned int iChunkSize): _currChunk(0), _currPos(0), _chunkSize(iChunkSize), _currPosInList(_chunkList.end()){} + ///Allocation method + /** + \param n Size of memory chunk to be allocated + \return Pointer to the allocated chunk of memory + */ + void* pmalloc(unsigned int n){ + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR malloc********\n"; + return ::operator new(n); + } + if (_currChunk==0 || _currPos==_chunkSize){ + if (_currPosInList != _chunkList.end()) _currPosInList++; + if (_currPosInList == _chunkList.end()){ + //std::cout << "Reallocate size=" << _chunkList.size() << "\n" ; + _currChunk = static_cast<T*>(::operator new(_chunkSize * sizeof(T))); + _chunkList.push_back(_currChunk); + _currPosInList = _chunkList.end(); + }else{ + //std::cout << "Next List pos size=" << _chunkList.size() << "\n" ; + _currChunk = *_currPosInList; + } + _currPos=0; + } + + //std::cout << "Allocated adr: " << &_currChunk[_currPos] << "\n"; + return &_currChunk[_currPos++]; + } + + ///Deallocation method + /** + \param p Pointer to the memory chunk to be deallocated + \param n Size of memory chunk to be deallocated + */ + void pfree(void *p, unsigned int n){ + //if (p == 0) return; + if (p!=0 && n != sizeof(T)){ + std::cerr << "MemPool ERROR delete********\n"; + ::operator delete(p); + return; + } + } + ///Reset memory pool, deallocate all memory chunks + void reset(){ + _currPosInList = _chunkList.begin(); + if (_currPosInList==_chunkList.end()) + _currChunk=0; + else + _currChunk = *_currPosInList; + _currPos=0; + } + + ///Destructor + ~MemPoolNoDel(){ + for(typename std::list<T*>::const_iterator i=_chunkList.begin(); i != _chunkList.end(); ++i) ::operator delete(*i); + } +private: + ///Current memory chunk to be used + T* _currChunk; + ///Next free position in current chunk + unsigned int _currPos; + ///Size of chunks to be allocated + unsigned int _chunkSize; + ///List containing allocated memory chunks + std::list<T*> _chunkList; + ///Position in List + typename std::list<T*>::iterator _currPosInList; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Serializable.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Serializable.h new file mode 100644 index 0000000000000000000000000000000000000000..c7f0efbf315d0c619549569b001e80cf75fc1d41 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/Serializable.h @@ -0,0 +1,63 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SerializableH +#define SerializableH +///Interface prividing the basic means to serialize and deserialize objects +class Serializable{ +public: + ///Serializes the object + /** + \param s Reference to an instance of an output stream + \return A reference to the same output stream + */ + virtual std::ostream& writeObject(std::ostream& s) = 0; + ///Deserializes the object + /** + \param s Reference to an instance of an input stream + \return A reference to the same input stream + */ + virtual std::istream& readObject(std::istream& s) = 0; + ///Resets a simulation component to its initial state + virtual void reset()=0; + ///Destructor + virtual ~Serializable(){} +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..85662ead74f1ffa3df4ab7fd094be2215d27c1d3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.cpp @@ -0,0 +1,58 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <AliasConstraint.h> + +AliasConstraint::AliasConstraint(ID iID): TwoSigConstraint(iID, false){ +} + +void AliasConstraint::evalInput(){ + //if (_rightConstr==0) std::cout << "Not connected\n"; + //if (_s1Notified==UNDEF) std::cout << "s1 undef\n"; + //if (_s2Notified==UNDEF) std::cout << "s2 undef\n"; + //if (!( _s1Notified==UNDEF || _s2Notified==UNDEF || _rightConstr==0)){ + if (!( _s1Notified==UNDEF || _s2Notified==UNDEF)){ + //std::cout << "Allright\n"; + //(_rightConstr->*_ntfFuncSigOut)(_s1Notified==TRUE || _s2Notified==TRUE); + notifyRightConstraints(_s1Notified==TRUE || _s2Notified==TRUE); + notifiedReset(); + }//else + //std::cout << "Something is wrong\n"; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..9dcbb967e53630324e5a624c91ddebd6d31e3d64 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.h @@ -0,0 +1,57 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef AliasConstraintH +#define AliasConstraintH +#include <TwoSigConstraint.h> + +///Class representing the TEPE Alias Constraint +class AliasConstraint: public TwoSigConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + */ + AliasConstraint(ID iID); + +protected: + void evalInput(); +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8a1f9ddf37270e4dcd538929ef234f18001ddb29 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.cpp @@ -0,0 +1,113 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EqConstraint.h> + +EqConstraint::EqConstraint(ID iID, PropType iType, bool iIncludeBounds): SignalConstraint(iID, iIncludeBounds), PropertyStateConstraint(iType), _eqResult(true), _propReported(false){ +} + +void EqConstraint::notifiedReset(){ + SignalConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void EqConstraint::reset(){ + PropertyStateConstraint::reset(); + _propReported=false; +} + +std::ostream& EqConstraint::writeObject(std::ostream& s){ + unsigned char aTmp = (_eqResult)?1:0; + if (_propReported) aTmp |=2; + PropertyStateConstraint::writeObject(s); + WRITE_STREAM(s, aTmp); + return s; +} + +std::istream& EqConstraint::readObject(std::istream& s){ + unsigned char aTmp; + PropertyStateConstraint::readObject(s); + READ_STREAM(s, aTmp); + _eqResult = ((aTmp & 1)!=0); + _propReported = ((aTmp & 2)!=0); + return s; +} + + +void EqConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF)){ + if(_enabledNotified==TRUE){ //early enable + _constrEnabled = (_disabledNotified==FALSE); + _propReported = false; //why do we need that? --> failure may otherwise not be reported if _eqResult==true + } + + bool aRelevantEqResult=_eqResult; + if (_s1Notified==TRUE){ //sigout and enable/disable notifications for connected operators + //_eqResult = ! _eqResult; + if (_eqResult){ + _eqResult=false; + notifyRightConstraints(false); + }else{ + _eqResult=true; + notifyRightConstraints(true); + } + }else{ + notifyRightConstraints(false); + } + if (_includeBounds ) aRelevantEqResult=_eqResult; + + std::cout << "Enabled: " << _constrEnabled << " eqresult: " << _eqResult << " reported: " << _propReported <<"\n"; + if (_constrEnabled && (!aRelevantEqResult) && (!_propReported)){ //report failure + reportPropOccurrence(false); + std::cout << "Report occurrence of Eq: 0\n"; + _propReported = true; + } + if (_disabledNotified==TRUE){ //disable, report success + //std::cout << " DIsable*********************************************\n"; + if (!_propReported){ + reportPropOccurrence(true); + //std::cout << "Report occurrence of Eq: 1\n"; + }//else + //std::cout << "Prop occurrence suppressed\n"; + reset(); + } + notifiedReset(); + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..7367614675864189579125b4862de6a50a9e2b36 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.h @@ -0,0 +1,67 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EqConstraintH +#define EqConstraintH +#include <SignalConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing a TEPE equation constraint +class EqConstraint: public SignalConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + EqConstraint(ID iID, PropType iType, bool iIncludeBounds); + void notifiedReset(); + void reset(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Result of equation + bool _eqResult; + ///Indiactes whether the property occurrence has already been reported + bool _propReported; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eff31245daf0b9e62d8afa21442f643a08f13cea --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.cpp @@ -0,0 +1,119 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <FSMConstraint.h> + +FSMConstraint::FSMConstraint(ID iID, PropType iType, bool iIncludeBounds): ThreeSigConstraint(iID, iIncludeBounds), PropertyStateConstraint(iType), _state(0){ +} + +void FSMConstraint::notifiedReset(){ + ThreeSigConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void FSMConstraint::reset(){ + PropertyStateConstraint::reset(); + _state=0; +} + +std::ostream& FSMConstraint::writeObject(std::ostream& s){ + PropertyStateConstraint::writeObject(s); + std::cout << "_state written " << _state << "\n"; + WRITE_STREAM(s, _state); + return s; +} + +std::istream& FSMConstraint::readObject(std::istream& s){ + PropertyStateConstraint::readObject(s); + READ_STREAM(s, _state); + std::cout << "_state read " << _state << "\n"; + return s; +} + +void FSMConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF || _sfNotified==UNDEF || _s2Notified==UNDEF)){ + //std::cout << "_notificationMask=15\n"; + if(_enabledNotified==TRUE && _includeBounds){ + //std::cout << "_enabledNotified && _includeBounds\n"; + _constrEnabled=true; + } + if (_disabledNotified==TRUE && !_includeBounds) _constrEnabled=false; + unsigned int aEnableFlag=0; + bool aSigOutFlag=false, aPropResult=true; + if(_constrEnabled){ + //std::cout << "_constrEnabled\n"; + if( _s1Notified==TRUE) aPropResult &= moveToNextState(1, &aEnableFlag, &aSigOutFlag); + if( _sfNotified==TRUE) aPropResult &= moveToNextState(3, &aEnableFlag, &aSigOutFlag); + if( _s2Notified==TRUE) aPropResult &= moveToNextState(2, &aEnableFlag, &aSigOutFlag); + } + _constrEnabled |= (_enabledNotified==TRUE); + if (_disabledNotified==TRUE){ + std::cout << "DISABLE============================= " << _state << "\n"; + //aEnableFlag |=1; + if (_state!=0) aEnableFlag |=1; + //if (_state!=0) reportPropOccurrence(false); + aPropResult &= (_state==0); + //if (_state!=0) std::cout << "Violation detected!!!\n"; + reset(); + } + notifiedReset(); + if (_aboveConstr!=0) _aboveConstr[0]->notifyEnable(aEnableFlag); + //if (_rightConstr!=0) (_rightConstr->*_ntfFuncSigOut)(aSigOutFlag); + notifyRightConstraints(aSigOutFlag); + //if (aSigOutFlag || !aPropResult) reportPropOccurrence(aPropResult); + if (aSigOutFlag || ((aEnableFlag & 1)!=0 && !aPropResult) ){ + //if (aSigOutFlag || (aEnableFlag & 1)!=0){ + std::cout << "Report occurrence of FSM: " << aPropResult << "\n"; + reportPropOccurrence(aPropResult); + } + //std::cout << "... violation: " << _propViolation << "\n"; + }//else + //std::cout << "_notificationMask=" << _notificationMask << "\n"; +} + +bool FSMConstraint::moveToNextState(unsigned int iSignal, unsigned int * iEnableFlag, bool * iSigOutFlag){ + unsigned int aTabEntry = _transTable[iSignal + (_state << 2)]; + //if ((aTabEntry & 1) !=0) reportPropViolation(); + //if ((aTabEntry & 1) !=0) reportPropOccurrence(false); + *iEnableFlag |= ((aTabEntry>>1) & 3); + *iSigOutFlag |= ((aTabEntry & 8)!=0); + _state = (aTabEntry >> 4); + //std::cout << "State: " << _state << " enable: " << ((aTabEntry>>1) & 3) << " sigout: " << ((aTabEntry & 8)!=0) << " violation: " << _propViolation << "\n"; + return ((aTabEntry & 1) ==0); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..ad4f8b6ebb81ee72606223f088dcc836f7cdb0c6 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef FSMConstraintH +#define FSMConstraintH +#include <ThreeSigConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing a TEPE constraint whose behavior is described with an FSM +class FSMConstraint: public ThreeSigConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + FSMConstraint(ID iID, PropType iType, bool iIncludeBounds); + void notifiedReset(); + void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Reads the transition table and deduces the next state, iEnableFlag and iSigOutFlag as a function of the received input signals + /** + \param iSignal Signal Code between 1 and 3 for first, second, and failure signal + \param iEnableFlag Enable flag of the constraint + \param iSigOutFlag Flag indicating whether an output signal is sent + \return False if the property was violated, true otherwise + */ + bool moveToNextState(unsigned int iSignal, unsigned int * iEnableFlag, bool * iSigOutFlag); + ///Transition table of FSM + const unsigned int* _transTable; + ///Current state of FSM + unsigned int _state; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/LogConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/LogConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..339bb4d34b819910b5c83cb26e96bc797d830cc8 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/LogConstraint.h @@ -0,0 +1,61 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef LogConstraintH +#define LogConstraintH +#include <FSMConstraint.h> + +///Class representing a TEPE Logical Constraint +class LogConstraint: public FSMConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + LogConstraint(ID iID, PropType iType, bool iIncludeBounds): FSMConstraint(iID, iType, iIncludeBounds){ + _transTable=_transTableLog; + } +protected: + ///Transition table of state machine + static const unsigned int _transTableLog[20]; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..abaac3c8ae5be670eb83817e4312f9569ad62dc2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.cpp @@ -0,0 +1,90 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <PropLabConstraint.h> + +PropLabConstraint::PropLabConstraint(PropLabType iType): _type(iType), _property(_type==LIVENESS || _type == NREACHABILITY){ +} + +bool PropLabConstraint::evalProp(){ + switch (_type){ + case LIVENESS: + _property &= _aboveConstr[0]->evalProp(); + break; + case NLIVENESS: + _property |= (!_aboveConstr[0]->evalProp()); + break; + case REACHABILITY: + _property |= (_aboveConstr[0]->evalProp()); + break; + case NREACHABILITY: + _property &= (!_aboveConstr[0]->evalProp()); + break; + } + return _property; +} + +void PropLabConstraint::forceDisable(){ + _aboveConstr[0]->forceDisable(); +} + +void PropLabConstraint::notifyEnable(unsigned int iSigState){ + _aboveConstr[0]->notifyEnable(iSigState); +} + +std::ostream& PropLabConstraint::writeObject(std::ostream& s){ + //unsigned char aTmp = (_property)?1:0; + //WRITE_STREAM(s, aTmp); + std::cout << "PropLabConstraint::writeObject"; + _aboveConstr[0]->writeObject(s); + return s; +} + +std::istream& PropLabConstraint::readObject(std::istream& s){ + //unsigned char aTmp; + //READ_STREAM(s, aTmp); + //_property = (aTmp ==1); + std::cout << "PropLabConstraint::readObject"; + _aboveConstr[0]->readObject(s); + return s; +} + +void PropLabConstraint::reset(){ +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..4d2f0d365c89abc7a6594570ef28728f62a5b089 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.h @@ -0,0 +1,67 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropLabConstraintH +#define PropLabConstraintH +#include <PropertyConstraint.h> + +typedef enum{LIVENESS, NLIVENESS, REACHABILITY, NREACHABILITY} PropLabType; + +///Class representing a TEPE property label constraint +class PropLabConstraint: public PropertyConstraint{ +public: + ///Constructor + /** + \param iType Path quantifier: LIVENESS, NLIVENESS, REACHABILITY, NREACHABILITY + */ + PropLabConstraint(PropLabType iType); + bool evalProp(); + void forceDisable(); + void notifyEnable(unsigned int iSigState); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); +protected: + ///Path quantifier: LIVENESS, NLIVENESS, REACHABILITY, NREACHABILITY + PropLabType _type; + ///Current value of the property for all explored paths + bool _property; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..062011494f4ec348adf242b4bce7b07c45749a3c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <PropRelConstraint.h> + +PropRelConstraint::PropRelConstraint(PropRelType iType): _type(iType){ +} + +bool PropRelConstraint::evalProp(){ + bool aProperty; + switch (_type){ + case AND: + aProperty=true; + for (unsigned int i=0;i <_noAboveConstr && aProperty; i++) + aProperty &= _aboveConstr[i]->evalProp(); + break; + case OR: + aProperty=false; + for (unsigned int i=0;i <_noAboveConstr && !aProperty; i++) + aProperty |= _aboveConstr[i]->evalProp(); + break; + } + return aProperty; +} + +void PropRelConstraint::forceDisable(){ + for (unsigned int i=0;i <_noAboveConstr; i++) _aboveConstr[i]->forceDisable(); +} + +void PropRelConstraint::notifyEnable(unsigned int iSigState){ + for (unsigned int i=0;i <_noAboveConstr; i++) _aboveConstr[i]->notifyEnable(iSigState); +} + +//std::ostream& PropRelConstraint::writeObject(std::ostream& s){ +// return s; +//} + +//std::istream& PropRelConstraint::readObject(std::istream& s){ +// return s; +//} + +void PropRelConstraint::reset(){ +} \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..ba32a8f37eb50777f118ce520e7c6331024e7333 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.h @@ -0,0 +1,63 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropRelConstraintH +#define PropRelConstraintH +#include <PropertyConstraint.h> + +typedef enum{AND, OR} PropRelType; + +///Class representing a TEPE Property Logics Constraint +class PropRelConstraint: public PropertyConstraint{ +public: + ///Constructor + /** + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + */ + PropRelConstraint(PropRelType iType); + bool evalProp(); + void forceDisable(); + void notifyEnable(unsigned int iSigState); + void reset(); +protected: + ///Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + PropRelType _type; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..791574c7ab8b000e09cea27c2854002aa012b840 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.cpp @@ -0,0 +1,68 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <PropertyConstraint.h> + +PropertyConstraint::PropertyConstraint():_aboveConstr(0), _noAboveConstr(0){ +} + +PropertyConstraint::~PropertyConstraint(){ + if (_aboveConstr!=0){ + for (unsigned int i=0; i<_noAboveConstr; i++) + delete _aboveConstr[i]; + delete [] _aboveConstr; + } +} + +std::ostream& PropertyConstraint::writeObject(std::ostream& s){ + for (unsigned int i=0; i<_noAboveConstr; i++) + _aboveConstr[i]->writeObject(s); + return s; +} + +std::istream& PropertyConstraint::readObject(std::istream& s){ + for (unsigned int i=0; i<_noAboveConstr; i++) + _aboveConstr[i]->readObject(s); + return s; +} + +void PropertyConstraint::connectEnaOut(PropertyConstraint** aAboveConstr, unsigned int iNoAboveConstr){ + _aboveConstr = aAboveConstr; + _noAboveConstr = iNoAboveConstr; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..67101b4a357bae5bc0137635f249d89d7a8a9a56 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropertyConstraintH +#define PropertyConstraintH + +#include <definitions.h> +#include <Serializable.h> + +///Class representing TEPE constraints that provide a property input/output +class PropertyConstraint: public Serializable{ +public: + ///Constructor + PropertyConstraint(); + ///Destructor + virtual ~PropertyConstraint(); + ///Determines the current property value of the constraint + /** + \return Property value of the constraint + */ + virtual bool evalProp()=0; + ///Instantaneous deactivation of the constraint + virtual void forceDisable()=0; + ///Notify the enable input signal + /** + \param iSigState Indicates whether the signal was notified + */ + virtual void notifyEnable(unsigned int iSigState)=0; + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + ///Connects the enable ouput to the enable input of another constraint + /** + \param aAboveConstr Target constraints to be connected to the enable output + \param iNoAboveConstr Number of target constraints + */ + void connectEnaOut(PropertyConstraint** aAboveConstr, unsigned int iNoAboveConstr); +protected: + ///Target constraints that are connected to the enable output + PropertyConstraint** _aboveConstr; + ///Number of target constraints + unsigned int _noAboveConstr; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2d0430f97bd93f2b72cbbfdbf1e520e280443c2f --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.cpp @@ -0,0 +1,125 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <PropertyStateConstraint.h> +#include <SignalConstraint.h> + +PropertyStateConstraint::PropertyStateConstraint(PropType iType): _type(iType), _constrEnabled(false), _enabledNotified(UNDEF), _disabledNotified(UNDEF), _property(_type==GENERAL || _type == NFINALLY){ +} + +bool PropertyStateConstraint::evalProp(){ + if (_aboveConstr==0) + return _property; + else + return _aboveConstr[0]->evalProp() && _property; +} + +void PropertyStateConstraint::notifyEnable(unsigned int iSigState){ + _disabledNotified = ((iSigState & 1)==0)? FALSE:TRUE; + _enabledNotified = ((iSigState & 2)==0)? FALSE:TRUE; + SignalConstraint* testSig= dynamic_cast<SignalConstraint*>(this); + if (testSig!=0){ + switch (iSigState){ + case 1: + std::cout << testSig->getID() << ": -d\n"; + break; + case 2: + std::cout << testSig->getID() << ": e-\n"; + break; + case 3: + std::cout << testSig->getID() << ": ed\n"; + break; + default: ; + } + } + evalInput(); +} + +void PropertyStateConstraint::notifiedReset(){ + _enabledNotified=UNDEF; + _disabledNotified=UNDEF; +} + +void PropertyStateConstraint::reset(){ + _constrEnabled=false; +} + +void PropertyStateConstraint::forceDisable(){ + _constrEnabled=false; + std::cout << "Force disable was called\n"; + if (_aboveConstr!=0) _aboveConstr[0]->forceDisable(); + +} + +std::ostream& PropertyStateConstraint::writeObject(std::ostream& s){ + unsigned char aTmp = (_property)?1:0; + std::cout << "_property written " << _property << "\n"; + if (_constrEnabled) aTmp |= 2; + WRITE_STREAM(s, aTmp); + PropertyConstraint::writeObject(s); + return s; +} + +std::istream& PropertyStateConstraint::readObject(std::istream& s){ + unsigned char aTmp; + READ_STREAM(s, aTmp); + _property = ((aTmp & 1) !=0); + std::cout << "_property read " << _property << "\n"; + _constrEnabled = ((aTmp & 2) !=0); + PropertyConstraint::readObject(s); + return s; +} + +void PropertyStateConstraint::reportPropOccurrence(bool iProp){ + switch (_type){ + case GENERAL: + _property &= iProp; + break; + case NGENERAL: + _property |= !iProp; + break; + case FINALLY: + _property |= iProp; + break; + case NFINALLY: + _property &= !iProp; + break; + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..fbc5e08d836b83ee8e9a38d003bdc979cf7eed79 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.h @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropertyStateConstraintH +#define PropertyStateConstraintH +#include <PropertyConstraint.h> + +typedef enum{GENERAL, NGENERAL, FINALLY, NFINALLY} PropType; + +///Class representing a stateful TEPE constraint +class PropertyStateConstraint: public PropertyConstraint{ +public: + ///Constructor + /** + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + */ + PropertyStateConstraint(PropType iType); + bool evalProp(); + void notifyEnable(unsigned int iSigState); + ///Reset function to be called after a simulation round, thus upon advance of simulation time + virtual void notifiedReset(); + virtual void reset(); + void forceDisable(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); +protected: + ///Logics that evaluates the input signals, updates the internal state of the constraint and generates output signals + virtual void evalInput()=0; + ///Is called to report a(n) (un)successfull property occurrence + /** + \param iProp Property value + */ + void reportPropOccurrence(bool iProp); + ///Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + PropType _type; + ///Constraint enabled flag + bool _constrEnabled; + ///State of enable input signal + Tristate _enabledNotified; + ///State of disable input signal + Tristate _disabledNotified; +private: + ///Current value of the property for the current path to be explored + bool _property; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SeqConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SeqConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..8abed2ddc88e3087340f83de7f0d6e35c7d5c6f3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SeqConstraint.h @@ -0,0 +1,62 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SeqConstraintH +#define SeqConstraintH +#include <FSMConstraint.h> + +///Class representing a TEPE Sequence Constraint +class SeqConstraint: public FSMConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + SeqConstraint(ID iID, PropType iType, bool iIncludeBounds): FSMConstraint(iID, iType, iIncludeBounds){ + _transTable=_transTableSeq; + } + +protected: + ///Transition table of state machine + static const unsigned int _transTableSeq[12]; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ccdcad96d8b9fa253c913192b2229677b600c7ab --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.cpp @@ -0,0 +1,95 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <SignalConstraint.h> +#include <PropertyConstraint.h> + +SignalConstraint::SignalConstraint(ID iID, bool iIncludeBounds): _ID(iID), _s1Notified(UNDEF), /*_ntfFuncSigOut(0), _rightConstr(0),*/ _includeBounds(iIncludeBounds){ +} + +SignalConstraint::~SignalConstraint(){ + /*std::cout << "SignalConstraint Destructor\n"; + for(SignalNotificationList::const_iterator i=_rightConstraints.begin(); i != _rightConstraints.end(); ++i){ + if (dynamic_cast<PropertyConstraint*>(i->first)==0){ + delete i->first; + std::cout << "Delete done\n"; + } + }*/ +} + +void SignalConstraint::notifyS1(bool iSigState){ + //_s1Notified = iSigState; + //_notificationMask |=1; + if (iSigState) + std::cout << _ID << ": s1 ok\n"; + else + std::cout << _ID << ": s1 --\n"; + _s1Notified = (iSigState)?TRUE:FALSE; + evalInput(); +} + +void SignalConstraint::notifyS2(bool iSigState){} + +void SignalConstraint::notifySf(bool iSigState){} + +void SignalConstraint::connectSigOut(SignalConstraint* iRightConstr, NtfSigFuncPointer iNotFunc){ + //_ntfFuncSigOut = iNotFunc; + //_rightConstr = iRightConstr; + _rightConstraints.push_back(std::pair<SignalConstraint*, NtfSigFuncPointer>(iRightConstr, iNotFunc)); +} + +void SignalConstraint::notifiedReset(){ + //_notificationMask=0; + _s1Notified = UNDEF; +} + +void SignalConstraint::notifyRightConstraints(bool iSigState){ + for(SignalNotificationList::const_iterator i=_rightConstraints.begin(); i != _rightConstraints.end(); ++i){ + ((i->first)->*(i->second))(iSigState); + } +} + +ID SignalConstraint::getID(){ + return _ID; +} + +//void SignalConstraint::setSimTime(TMLTime iSimTime){ +// _simTime = iSimTime; +//} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..2783096f866509ee098e88c54fed018030e1a7f5 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.h @@ -0,0 +1,100 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SignalConstraintH +#define SignalConstraintH + +#include <definitions.h> + +class SignalConstraint; + +class SignalConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + SignalConstraint(ID iID, bool iIncludeBounds); + ///Destructor + virtual ~SignalConstraint(); + ///Notify the first input signal + /** + \param iSigState Indicates whether the signal was notified + */ + void notifyS1(bool iSigState); + ///Notify the second input signal + /** + \param iSigState Indicates whether the signal was notified + */ + virtual void notifyS2(bool iSigState); + ///Notify the negated (failure) input signal + /** + \param iSigState Indicates whether the signal was notified + */ + virtual void notifySf(bool iSigState); + ///Connects the signal ouput to the input of another constraint + /** + \param iRightConstr Target constraint to be connected to the signal output + \param iNotFunc Notification function of the target constraint + */ + void connectSigOut(SignalConstraint* iRightConstr, NtfSigFuncPointer iNotFunc); + /// + virtual void notifiedReset(); + ///Returns the ID of the constraint + /** + \return ID of the constraint + */ + ID getID(); + //static void setSimTime(TMLTime iSimTime); +protected: + virtual void evalInput()=0; + void notifyRightConstraints(bool iSigState); + ID _ID; + ///State of first input signal + Tristate _s1Notified; + ///Constraint connected to signal output + SignalNotificationList _rightConstraints; + ///Indicates whether the verification interval is open or closed (on both sides in each case) + bool _includeBounds; + ///Simulation time + static TMLTime _simTime; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..da46e07fcc9fd6c26ff5052b56526120ddb8bf3d --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.cpp @@ -0,0 +1,60 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ThreeSigConstraint.h> + +ThreeSigConstraint::ThreeSigConstraint(ID iID, bool iIncludeBounds): TwoSigConstraint(iID, iIncludeBounds), _sfNotified(UNDEF){ +} + +void ThreeSigConstraint::notifySf(bool iSigState){ + //_sfNotified = iSigState; + //_notificationMask |=4; + if (iSigState) + std::cout << _ID << ": sf ok\n"; + else + std::cout << _ID << ": sf --\n"; + _sfNotified = (iSigState)?TRUE:FALSE; + evalInput(); +} + +void ThreeSigConstraint::notifiedReset(){ + TwoSigConstraint::notifiedReset(); + _sfNotified=UNDEF; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..024aeae4e53009e91f4344f554464657b4793e88 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.h @@ -0,0 +1,56 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ThreeSigConstraintH +#define ThreeSigConstraintH +#include <TwoSigConstraint.h> + +///Class representing any TEPE constraint with 3 input signals +class ThreeSigConstraint: public TwoSigConstraint{ +public: + ///Constructor + ThreeSigConstraint(ID iID, bool iIncludeBounds); + void notifySf(bool iSigState); + virtual void notifiedReset(); +protected: + ///State of the negated input (failure) signal + Tristate _sfNotified; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..251a5b1ade7ef2c6dbaf847ebd3477e4b94722b8 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.cpp @@ -0,0 +1,115 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TimeMMConstraint.h> +#include <SchedulableDevice.h> + +TimeMMConstraint::TimeMMConstraint(ID iID, PropType iType, TMLTime iTmin, TMLTime iTmax, bool iRetrigger, bool iIncludeBounds): TwoSigConstraint(iID, iIncludeBounds), PropertyStateConstraint(iType), _tmin(iTmin), _tmax(iTmax), _retrigger(iRetrigger), _s1Time(-1){ +} + +void TimeMMConstraint::notifiedReset(){ + TwoSigConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void TimeMMConstraint::reset(){ + PropertyStateConstraint::reset(); + _s1Time=-1; +} + +std::ostream& TimeMMConstraint::writeObject(std::ostream& s){ + PropertyStateConstraint::writeObject(s); + WRITE_STREAM(s, _s1Time); + return s; +} + +std::istream& TimeMMConstraint::readObject(std::istream& s){ + PropertyStateConstraint::readObject(s); + READ_STREAM(s, _s1Time); + return s; +} + +void TimeMMConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF || _s2Notified==UNDEF)){ + if(_enabledNotified==TRUE && _includeBounds){ + std::cout << "_enabledNotified && _includeBounds\n"; + _constrEnabled=true; + } + unsigned int aEnaFlag=0; + bool aSigOut=false; + if (_disabledNotified==TRUE && !_includeBounds) _constrEnabled=false; + if(_constrEnabled){ + if (_s1Notified==TRUE){ + if (_s1Time==-1){ + _s1Time = SchedulableDevice::getSimulatedTime(); + aEnaFlag |=2; + }else{ + if (_retrigger){ + std::cout << "retrigger!!!\n"; + _s1Time = SchedulableDevice::getSimulatedTime(); + } + } + } + if (_s1Time!=-1){ + //if (_simTime-_s1Time>_tmax) reportPropViolation(); + if (SchedulableDevice::getSimulatedTime() - _s1Time>_tmax) reportPropOccurrence(false); + + if (_s2Notified==TRUE){ + aEnaFlag |=1; + std::cout << "s2 notified _simTime " << SchedulableDevice::getSimulatedTime() << " _s1Time " << _s1Time << "\n"; + //if (_simTime-_s1Time<_tmin) reportPropViolation(); + if (SchedulableDevice::getSimulatedTime() - _s1Time<=_tmax) reportPropOccurrence(SchedulableDevice::getSimulatedTime() - _s1Time >= _tmin); + aSigOut=true; + _s1Time=-1; + } + } + + } + _constrEnabled |= (_enabledNotified==TRUE); + if (_disabledNotified==TRUE){ + if (_s1Time!=-1) aEnaFlag |=1; //NEW to investigate + reset(); + } + notifiedReset(); + if (_aboveConstr!=0) _aboveConstr[0]->notifyEnable(aEnaFlag); + //if (_rightConstr!=0) (_rightConstr->*_ntfFuncSigOut)(aSigOut); + notifyRightConstraints(aSigOut); + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..b7fa3d77f2ad4576f3227a142fc38bdb5237b3fc --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TimeMMConstraintH +#define TimeMMConstraintH +#include <TwoSigConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing the TEPE Time Constraint with one input signal and one time value +class TimeMMConstraint: public TwoSigConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iTmin Minimum time to elapse between the two input signals + \param iTmax Maximum time to elapse between the two input signals + \param iRetrigger Indicates whether a sencond occurrence of the first input signals retriggers the timer + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + TimeMMConstraint(ID iID, PropType iType, TMLTime iTmin, TMLTime iTmax, bool iRetrigger, bool iIncludeBounds); + void notifiedReset(); + void reset(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Minimum time to elapse between the two input signals + TMLTime _tmin; + ///Maximum time to elapse between the two input signals + TMLTime _tmax; + ///Indicates whether a sencond occurrence of the first input signals retriggers the timer + bool _retrigger; + ///Time of occurrence of the first input signal + TMLTime _s1Time; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..45afea1d6bfeabd5b26862ed16a872b82ee5276f --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.cpp @@ -0,0 +1,105 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TimeTConstraint.h> +#include <SchedulableDevice.h> + +TimeTConstraint::TimeTConstraint(ID iID, TMLTime iT, bool iRetrigger, bool iIncludeBounds): SignalConstraint(iID, iIncludeBounds), PropertyStateConstraint (GENERAL), _t(iT), _retrigger(iRetrigger), _s1Time(-1){ +} + +void TimeTConstraint::notifiedReset(){ + SignalConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void TimeTConstraint::reset(){ + PropertyStateConstraint::reset(); + _s1Time=-1; +} + +std::ostream& TimeTConstraint::writeObject(std::ostream& s){ + PropertyStateConstraint::writeObject(s); + WRITE_STREAM(s, _s1Time); + return s; +} + +std::istream& TimeTConstraint::readObject(std::istream& s){ + PropertyStateConstraint::readObject(s); + READ_STREAM(s, _s1Time); + return s; +} + +void TimeTConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF)){ + if(_enabledNotified==TRUE && _includeBounds){ + //std::cout << "_enabledNotified && _includeBounds\n"; + _constrEnabled=true; + } + unsigned int aEnaFlag=0; + bool aSigOut=false; + if (_disabledNotified==TRUE && !_includeBounds) _constrEnabled=false; + if(_constrEnabled){ + if (_s1Notified==TRUE){ + if (_s1Time==-1){ + _s1Time = SchedulableDevice::getSimulatedTime(); + aEnaFlag |=2; + }else{ + if (_retrigger) _s1Time = SchedulableDevice::getSimulatedTime(); + } + } + if (_s1Time!=-1 && SchedulableDevice::getSimulatedTime() -_s1Time>=_t){ + if (SchedulableDevice::getSimulatedTime() - _s1Time > _t && _aboveConstr!=0) _aboveConstr[0]->forceDisable(); + aEnaFlag |=1; + aSigOut=true; + _s1Time=-1; + } + + } + _constrEnabled |= (_enabledNotified==TRUE); + if (_disabledNotified==TRUE){ + if (_s1Time!=-1) aEnaFlag |=1; //NEW to investigate + reset(); + } + notifiedReset(); + if (_aboveConstr!=0) _aboveConstr[0]->notifyEnable(aEnaFlag); + //if (_rightConstr!=0) (_rightConstr->*_ntfFuncSigOut)(aSigOut); + notifyRightConstraints(aSigOut); + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..48d192bfc65096da14d495623be9c9f93da24878 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.h @@ -0,0 +1,70 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TimeTConstraintH +#define TimeTConstraintH +#include <SignalConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing the TEPE Time Constraint with one input signal and one time value +class TimeTConstraint: public SignalConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iT Time that the property must hold + \param iRetrigger Indicates whether a sencond occurrence of the first input signals retriggers the timer + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + TimeTConstraint(ID iID, TMLTime iT, bool iRetrigger, bool iIncludeBounds); + void notifiedReset(); + void reset(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Time that the property must hold + TMLTime _t; + ///Indicates whether a sencond occurrence of the first input signals retriggers the timer + bool _retrigger; + ///Time of occurrence of the first input signal + TMLTime _s1Time; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a6c449db4174ee03f421b0df8ddd7fa3aa4aef0e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.cpp @@ -0,0 +1,61 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TwoSigConstraint.h> + +TwoSigConstraint::TwoSigConstraint(ID iID, bool iIncludeBounds): SignalConstraint(iID, iIncludeBounds), _s2Notified(UNDEF){ +} + +void TwoSigConstraint::notifyS2(bool iSigState){ + //_s2Notified = iSigState; + //_notificationMask |=2; + if (iSigState) + std::cout << _ID << ": s2 ok\n"; + else + std::cout << _ID << ": s2 --\n"; + _s2Notified = (iSigState)?TRUE:FALSE; + evalInput(); +} + +void TwoSigConstraint::notifiedReset(){ + //_notificationMask=0; + SignalConstraint::notifiedReset(); + _s2Notified = UNDEF; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..1c292e0c065fcd41b77b3f3a21eb631fe6653878 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.h @@ -0,0 +1,60 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TwoSigConstraintH +#define TwoSigConstraintH +#include <SignalConstraint.h> + +///Class representing any TEPE constraint with 2 input signals +class TwoSigConstraint: public SignalConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + TwoSigConstraint(ID iID, bool iIncludeBounds); + void notifyS2(bool iSigState); + virtual void notifiedReset(); +protected: + ///State of second input signal + Tristate _s2Notified; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TMLTransaction.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TMLTransaction.cpp new file mode 100755 index 0000000000000000000000000000000000000000..4050a0cec058dd2ff6472144de00ac87faa10be3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TMLTransaction.cpp @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLTransaction.h> +#include <TMLTask.h> +#include <CPU.h> +#include <TMLCommand.h> + +MemPoolNoDel<TMLTransaction> TMLTransaction::memPool(BLOCK_SIZE_TRANS); + + +TMLTransaction::TMLTransaction():_runnableTime(0), _startTime(0), _length(0), _virtualLength(0), _command(0), +#ifdef PENALTIES_ENABLED + _idlePenalty(0), _taskSwitchingPenalty(0), //, _branchingPenalty(0), +#endif +_channel(0),_stateID(0) { +} + +TMLTransaction::TMLTransaction(TMLCommand* iCommand, TMLLength iVirtualLength, TMLTime iRunnableTime, TMLChannel* iChannel):_runnableTime(iRunnableTime), _startTime(0), _length(0), _virtualLength(iVirtualLength), _command(iCommand), +#ifdef PENALTIES_ENABLED + _idlePenalty(0), _taskSwitchingPenalty(0), //, _branchingPenalty(0), +#endif +_channel(iChannel),_stateID(0) { +} + +std::string TMLTransaction::toString() const{ + std::ostringstream outp; + outp << _command->toString() << std::endl << "Transaction runnable:" << _runnableTime << " len:" << _length << " start:" << _startTime << " vLength:" << _virtualLength; + if (_channel!=0) outp << " Ch: " << _channel->toShortString(); + return outp.str(); +} + +std::string TMLTransaction::toShortString() const{ + std::ostringstream outp; + if (_command==0) + outp << "Sytem State ID: " << _virtualLength; + else{ + outp << _command->toShortString() << " t:" << _startTime << " l:" << _length << " (vl:"<< _virtualLength << ")"; + if (_channel!=0) outp << " Ch: " << _channel->toShortString(); + } + return outp.str(); +} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TMLTransaction.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TMLTransaction.h new file mode 100644 index 0000000000000000000000000000000000000000..d8613cc716f13a8b0275d0ecc93d246022ddcfce --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/TMLTransaction.h @@ -0,0 +1,257 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLTransactionH +#define TMLTransactionH + +#include <definitions.h> +#include <MemPoolNoDel.h> + +class TMLCommand; +class TMLChannel; + +class TMLTransaction{ +public: + ///Constructor + /** + \param iCommand Pointer to the command the transaction belongs to + \param iVirtualLength Virtual length of the transaction + \param iRunnableTime Time when the transaction became runnable + \param iChannel Channel on which data was conveyed + */ + TMLTransaction(TMLCommand* iCommand, TMLLength iVirtualLength, TMLTime iRunnableTime, TMLChannel* iChannel=0); + ///Constructor + TMLTransaction(); + ///Returns the time when the transaction became runnable + /** + \return Runnable time + */ + inline TMLTime getRunnableTime() const {return _runnableTime;} + ///Sets the time when the transaction became runnable + /** + \param iRunnableTime Runnable time + */ + inline void setRunnableTime(TMLTime iRunnableTime) {_runnableTime = max(_runnableTime,iRunnableTime);} + ///Returns the start time of the transaction + /** + \return Start time + */ + inline TMLTime getStartTime() const {return _startTime;} + ///Returns the start time of the operational part of the transaction + /** + \return Start time of the operational part + */ + inline TMLTime getStartTimeOperation() const { +#ifdef PENALTIES_ENABLED + return _startTime + _idlePenalty + _taskSwitchingPenalty; +#else + return _startTime; +#endif + } + ///Sets the start time of the transaction + /** + \param iStartTime Start time + */ + inline void setStartTime(TMLTime iStartTime) {_startTime=iStartTime;} + ///Returns the length of the operational part of the transaction + /** + \return Length of the operational part + */ + inline TMLTime getOperationLength() const {return _length;} + ///Returns the length of the operation and penalties + /** + \return Overall transaction length + */ + inline TMLTime getOverallLength() const{ +#ifdef PENALTIES_ENABLED + return _length + _idlePenalty + _taskSwitchingPenalty; +#else + return _length; +#endif + } + ///Sets the length of the transaction + /** + \param iLength Length of the transaction + */ + inline void setLength(TMLTime iLength) {_length=iLength;} + ///Returns the length of all penalties + /** + \return Length of penalties + */ + inline TMLTime getPenalties() const{ +#ifdef PENALTIES_ENABLED + return _idlePenalty + _taskSwitchingPenalty; +#else + return 0; +#endif + } + ///Returns the virtual length of the transaction (number of execution units already carried out by previous transactions) + /** + \return Virtual length + */ + inline TMLLength getVirtualLength() const {return _virtualLength;} + ///Sets the virtual length of the transaction (number of execution units already carried out by previous transactions) + /** + \param iLength Virtual length of the transaction + */ + inline void setVirtualLength(TMLLength iLength) {_virtualLength=iLength;} + ///Returns a pointer to the command the transaction belongs to + /** + \return Pointer to command + */ + inline TMLCommand* getCommand() const {return _command;} + ///Returns the end time of the transaction + /** + \return End time + */ + inline TMLTime getEndTime() const{ +#ifdef PENALTIES_ENABLED + return _startTime + _length + _idlePenalty + _taskSwitchingPenalty; +#else + return _startTime + _length; +#endif + } + ///Returns the idle panalty of the transaction + /** + \return Idle panalty + */ + inline TMLTime getIdlePenalty() const{ +#ifdef PENALTIES_ENABLED + return _idlePenalty; +#else + return 0; +#endif + } + ///Sets the idle panalty of the transaction + /** + \param iIdlePenalty Idle penalty + */ + inline void setIdlePenalty(TMLTime iIdlePenalty){ +#ifdef PENALTIES_ENABLED + _idlePenalty=iIdlePenalty; +#endif + } + ///Returns the task switching panalty of the transaction + /** + \return Task switching penalty + */ + inline TMLTime getTaskSwitchingPenalty() const{ +#ifdef PENALTIES_ENABLED + return _taskSwitchingPenalty; +#else + return 0; +#endif + } + ///Sets the task switching panalty of the transaction + /** + \param iTaskSwitchingPenalty Task switching penalty + */ + inline void setTaskSwitchingPenalty(TMLTime iTaskSwitchingPenalty){ +#ifdef PENALTIES_ENABLED + _taskSwitchingPenalty=iTaskSwitchingPenalty; +#endif + } + /////Returns the branching panalty of the transaction + ////** + //\return Branching penalty + //*/ + //TMLTime getBranchingPenalty() const; + ////Sets the branching panalty of the transaction + ////** + ////\param iBranchingPenalty Branching penalty + //*/ + //void setBranchingPenalty(TMLTime iBranchingPenalty); + ///Returns a string representation of the transaction + /** + \return Detailed string representation + */ + std::string toString() const; + ///Returns a short string representation of the transaction + /** + \return Short string representation + */ + std::string toShortString() const; + ///Set channel on which data was conveyed + /** + \param iChannel Pointer to a channel + */ + inline void setChannel(TMLChannel* iChannel) {_channel=iChannel;} + ///Get channel on which data was conveyed + /** + \return Pointer to channel + */ + inline TMLChannel* getChannel() const {return _channel;} + inline static void * operator new(size_t size) {return memPool.pmalloc(size);} + inline static void operator delete(void *p, size_t size) {memPool.pfree(p, size);} + inline static void reset() {memPool.reset();} + inline static void incID() {_ID++;} + inline static ID getID() {return _ID;} + inline static void resetID() {_ID=1;} + inline void setStateID(ID iID) {_stateID=iID;} + inline ID getStateID() {return _stateID;} +protected: + ///Time when the transaction became runnable + TMLTime _runnableTime; + ///Start time of the transaction + TMLTime _startTime; + ///Length of the transaction + TMLTime _length; + ///Virtual length of the transaction (number of execution units of the transaction) + TMLLength _virtualLength; + ///Pointer to the command the transaction belongs to + TMLCommand* _command; +#ifdef PENALTIES_ENABLED + ///Idle penalty + TMLTime _idlePenalty; + ///Task switching penalty + TMLTime _taskSwitchingPenalty; + /////Branching penalty + //TMLTime _branchingPenalty; +#endif + ///Channel on which data was conveyed + TMLChannel* _channel; + ID _stateID; + ///Memory pool for transactions + static MemPoolNoDel<TMLTransaction> memPool; + ///Current Transaction ID + static ID _ID; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/IndeterminismSource.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/IndeterminismSource.h new file mode 100644 index 0000000000000000000000000000000000000000..0c579c398e48e5008f22031c36f9b450dabd9084 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/IndeterminismSource.h @@ -0,0 +1,69 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef IndeterminismSourceH +#define IndeterminismSourceH +#include <definitions.h> + +///This interface characterizes a non-deterministic behavior of a TML command +class IndeterminismSource{ + public: + ///Constructor + IndeterminismSource(): _randomValue(-1) {} + ///Destructor + virtual ~IndeterminismSource(){} + ///Returns the range of the random variable + /** + \return Range of random variable + */ + virtual unsigned int getRandomRange()=0; + ///Sets the value of the random variable in exploration mode + /** + \param iValue Value of random variable + */ + virtual void setRandomValue(unsigned int iValue){ + _randomValue=iValue; + //std::cout << "Random value by sim" << _randomValue << "\n"; + } + protected: + ///Value of random variable + mutable unsigned int _randomValue; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/Parameter.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/Parameter.h new file mode 100644 index 0000000000000000000000000000000000000000..d6f99a625a74e3ec206dcc23699fb52118b2501c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/Parameter.h @@ -0,0 +1,211 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ParameterH +#define ParameterH + +#include <definitions.h> +#include <MemPool.h> +#include <HashAlgo.h> + +class Parameter { +public: + ///Constructor + virtual void print() const=0; + virtual std::ostream& writeObject(std::ostream& s) = 0; + virtual void streamStateXML(std::ostream& s) const = 0; + virtual void getP(void* op1 ...) const = 0; + virtual void getStateHash(HashAlgo* iHash) const = 0; + virtual void readFromStream(std::istream &is)=0; + + ///Stream operator >> + friend std::istream& operator >>(std::istream &is,Parameter* obj){ + obj->readFromStream(is); + //for (unsigned int i=0;i<obj.size;i++){ + // is >> obj._p[i]; + //} + return is; + } +}; + +template <typename T, int size> +class SizedParameter: public Parameter { +public: + SizedParameter(){ + } + + SizedParameter(const T& ip1 ...){ +//#if size>0 + if (size!=0){ + T arg=ip1; + va_list args; // argument list + va_start(args, ip1); // initialize args + for (unsigned int i=0;i<size;i++){ + _p[i]=arg; + arg=va_arg(args, T); + } + } +//#endif + } + + SizedParameter(std::istream& s){ +//#if size>0 + for (unsigned int i=0;i<size;i++){ + READ_STREAM(s, _p[i]); + } +#ifdef DEBUG_SERIALIZE + print(); +#endif +//#endif + } + + + virtual ~SizedParameter(){ + } + + ///Print function for testing purposes + void print() const{ + //std::cerr << "print " << size << " elements in mempool " << &memPool << " :\n"; +//#if size>0 + for (unsigned int i=0;i<size;i++){ + std::cout << " p[" << (i+1) << "]:" << _p[i]; + } +//#endif + //std::cerr << std::endl; + //std::cerr << "end print:\n"; + } + + std::ostream& writeObject(std::ostream& s){ +//#if size>0 + //std::cout << "writeObject:\n"; + for (unsigned int i=0;i<size;i++){ + WRITE_STREAM(s, _p[i]); + } +#ifdef DEBUG_SERIALIZE + print(); +#endif +//#endif + //std::cout << "end writeObject:\n"; + return s; + } + + ///Streams the parameter in XML format + /** + \param s Stream + */ + void streamStateXML(std::ostream& s) const{ + //std::cout << "streamStateXML:\n"; + s << TAG_PARAMo; +//#if size>0 + for (unsigned int i=0;i<size;i++){ + s << TAG_Pxo << i << ">" << _p[i] << TAG_Pxc << i << ">"; + } +//#endif + s << TAG_PARAMc; + //std::cout << "end streamStateXML:\n"; + } + + /* template <typename T, int size> void SizedParameter<T,size>::setP(T ip1 ...){ + T arg=ip1; + va_list args; // argument list + va_start(args, ip1); // initialize args + for (unsigned int i=0;i<size;i++){ + _p[i]=arg; + arg=va_arg(args, T); + } + }*/ + + void getP(void* op1 ...) const { + //std::cout << "getP:\n"; + if(size!=0){ +//#if size>0 + T* arg= (T*) op1; + va_list args; // argument list + va_start(args, op1); // initialize args + for (unsigned int i=0;i<size;i++){ + //std::cerr << "set Param " << i << "\n"; + *arg=_p[i]; + arg=va_arg(args, T*); + } + } +//#endif + //std::cout << "end getP:\n"; + } + + //inline T getPByIndex(unsigned int iIndex){ + // return _p[iIndex]; + //} + + void getStateHash(HashAlgo* iHash) const{ +//#if size>0 + //std::cout << "add param vals:\n"; + for (unsigned int i=0;i<size;i++){ + iHash->addValue((HashValueType)_p[i]); + //std::cout << _p[i] << ", "; + } + //std::cout << "\nend add param vals:\n"; +//#endif + } + + static void * operator new(size_t iSize){ + return memPool.pmalloc(iSize); + } + + static void operator delete(void *p, size_t iSize){ + memPool.pfree(p, iSize); + } + + void readFromStream(std::istream &is){ +//#if size>0 + for (unsigned int i=0;i<size;i++){ + is >> _p[i]; + } +//#endif + } + protected: + static MemPool<SizedParameter<T,size> > memPool; +//#if size>0 + T _p[(size==0)?1:size]; +//#endif + +}; + +template<class T,int size> MemPool<SizedParameter<T,size> > SizedParameter<T, size>::memPool(BLOCK_SIZE_PARAM); +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..803536a0cd171b30e1379c7f4e1ad99efff94f1b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.cpp @@ -0,0 +1,78 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLActionCommand.h> +#include <TMLTask.h> +#include <SimComponents.h> +//#include <CommandListener.h> + +TMLActionCommand::TMLActionCommand(ID iID, TMLTask* iTask, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){ + _type=ACT; +} + +TMLCommand* TMLActionCommand::prepareNextTransaction(){ + if (_simComp->getStopFlag()){ + _simComp->setStoppedOnAction(); + //std::cout << "sim stopped in action command " << std::endl; + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + TMLCommand* aNextCommand=getNextCommand(); + //std::cout << "Action func CALLED length: " << *_pLength << " progress:" << _progress << std::endl; + (_task->*_actionFunc)(); + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif + _task->setCurrCommand(aNextCommand); + //FOR_EACH_CMDLISTENER (*i)->commandFinished(this); +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + if (aNextCommand!=0) return aNextCommand->prepare(false); + return 0; +} + +std::string TMLActionCommand::toString() const{ + std::ostringstream outp; + outp << "Action in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..e4c7c1a92c5ca2c1ee5b6f6e06dd60fa96bbf46a --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.h @@ -0,0 +1,72 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLActionCommandH +#define TMLActionCommandH + +#include <definitions.h> +#include <TMLCommand.h> + + +///This class executes a C++ statement (probably a variable assignment or modification) defined in the scope of a TML action state. +/**The command itself is located in the corresponding TMLTask::executeStatement() method as it may access local task variables.*/ +class TMLActionCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iActionFunc Member function pointer to the action function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLActionCommand(ID iID, TMLTask* iTask, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint); + inline void execute() {} + //TMLTask* getDependentTask() const; + std::string toString() const; + inline std::string toShortString() const {return "Action";} + inline std::string getCommandStr() const {return "act";} +protected: + ///Member function pointer to the action function + ActionFuncPointer _actionFunc; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChannel.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChannel.cpp new file mode 100755 index 0000000000000000000000000000000000000000..f4117d964180688ac9d8110a939e54b655394ba3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChannel.cpp @@ -0,0 +1,131 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLChannel.h> +#include <BusMaster.h> +#include <TMLCommand.h> +#include <TMLTransaction.h> + +TMLChannel::TMLChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, Priority iPriority): _ID(iID), _name(iName), _width(iWidth), _readTask(0), _writeTask(0), _writeTrans(0), _readTrans(0),_numberOfHops(iNumberOfHops), _masters(iMasters), _slaves(iSlaves), _writeTransCurrHop(0), _readTransCurrHop(iNumberOfHops-1), _priority(iPriority), _significance(0){ +} + +TMLChannel::~TMLChannel(){ + if (_masters!=0) delete[] _masters; + if (_slaves!=0) delete[] _slaves; +} + +BusMaster* TMLChannel::getNextMaster(TMLTransaction* iTrans){ + //if (iTrans->getCommand()->getTask()==_writeTask){ + if (iTrans==_writeTrans){ + _writeTransCurrHop++; + //if (_writeTransCurrHop>0 && _masters[_writeTransCurrHop]->getBus()==_masters[_writeTransCurrHop-1]->getBus()) return 0; + if (_writeTransCurrHop>0 && (_masters[_writeTransCurrHop]->getBus()==_masters[_writeTransCurrHop-1]->getBus() || _slaves[_writeTransCurrHop-1]==0)) return 0; //NEW!!! + return _masters[_writeTransCurrHop]; + }else{ + _readTransCurrHop--; + //if (_readTransCurrHop<_numberOfHops-1 && _masters[_readTransCurrHop]->getBus()==_masters[_readTransCurrHop+1]->getBus()) return 0; + if (_readTransCurrHop<_numberOfHops-1 && _masters[_readTransCurrHop]->getBus()==_masters[_readTransCurrHop+1]->getBus()) return 0; + return _masters[_readTransCurrHop]; + } +} + +BusMaster* TMLChannel::getFirstMaster(TMLTransaction* iTrans){ + //if (iTrans->getCommand()->getTask()==_writeTask){ + //std::cout << "fima 1\n"; + if (_masters==0 || _slaves==0 || _numberOfHops==0) return 0; + //std::cout << "fima 2\n"; + if (iTrans==_writeTrans){ + //if (iTrans->getCommand()->getTask()==_writeTask){ + //std::cout << "fima 3\n"; + _writeTransCurrHop=0; + return _masters[_writeTransCurrHop]; + }else{ + //std::cout << "fima 4\n"; + if (_slaves[(_numberOfHops/2)]==0) return 0; //NEW!!! + //std::cout << "fima 5\n"; + _readTransCurrHop=_numberOfHops-1; + return _masters[_readTransCurrHop]; + } +} + +Slave* TMLChannel::getNextSlave(TMLTransaction* iTrans) const{ + //if (iTrans->getCommand()->getTask()==_writeTask){ + if (iTrans==_writeTrans){ + return _slaves[_writeTransCurrHop]; + }else{ + return _slaves[_readTransCurrHop]; + } +} + +std::ostream& TMLChannel::writeObject(std::ostream& s){ + //WRITE_STREAM(s,_writeTransCurrHop); + //WRITE_STREAM(s,_readTransCurrHop); + //if (_ID==53 && _significance==0) std::cout << "failure before write\n"; + WRITE_STREAM(s, _significance); + return s; +} +std::istream& TMLChannel::readObject(std::istream& s){ + //READ_STREAM(s,_writeTransCurrHop); + //READ_STREAM(s,_readTransCurrHop); + READ_STREAM(s, _significance); + //if (_ID==53 && _significance==0) std::cout << "failure after read\n"; + //std::cout << "read\n"; + return s; +} + +void TMLChannel::reset(){ + //std::cout << "Channel reset" << std::endl; + _writeTrans=0; + _readTrans=0; + _writeTransCurrHop=0; + _readTransCurrHop=_numberOfHops-1; + _significance=0; + //std::cout << "reset\n"; + //std::cout << "Channel reset end" << std::endl; +} + +void TMLChannel::setSignificance(TMLTask* iTask, bool iSignificance){ + //unsigned int aInput = (iTask==_writeTask)?1:2; + unsigned char aInput = (iTask==_writeTask)?1:2; + if (iSignificance) + _significance |= aInput; + else + _significance &= (~aInput); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChannel.h new file mode 100755 index 0000000000000000000000000000000000000000..9546ce40d9d5c9b396c02f308aad05527641356c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChannel.h @@ -0,0 +1,230 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLChannelH +#define TMLChannelH + +#include <definitions.h> +#include <SchedulableCommDevice.h> +#include <Slave.h> +#include <Serializable.h> +#include <ListenerSubject.h> +//#include <ChannelListener.h> +#include <GeneralListener.h> +//#include <TransactionListener.h> + +class TMLTransaction; +class TMLCommand; +class TMLTask; +class BusMaster; +class HashAlgo; + +///This class defines the basic interfaces and functionalites of a TML channel. All specific channels are derived from this base class. A channel is able to convey data and events. +class TMLChannel: public Serializable, public ListenerSubject <GeneralListener>{ +//class TMLChannel: public Serializable, public ListenerSubject <ChannelListener>, public ListenerSubject <TransactionListener> { +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iPriority Priority of the channel + */ + TMLChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, Priority iPriority); + ///Destructor + virtual ~TMLChannel(); + ///Prepares a write operation + /** + \param iTrans Poiter to the write transaction + */ + virtual void testWrite(TMLTransaction* iTrans)=0; + ///Prepares a read operation + /** + \param iTrans Pointer to the read transaction + */ + virtual void testRead(TMLTransaction* iTrans)=0; + ///Performs the write operation + virtual void write()=0; + ///Performs the read operation + virtual bool read()=0; + ///Stores a pointer to the tasks which performs read operation on the channel + /** + \param iReadTask Pointer to the task + */ + inline void setBlockedReadTask(TMLTask* iReadTask) {_readTask=iReadTask;} + ///Returns a pointer to the tasks which performs read operation on the channel + /** + \return Pointer to the task + */ + virtual TMLTask* getBlockedReadTask() const=0; + ///Stores a pointer to the tasks which performs write operation on the channel + /** + \param iWriteTask Pointer to the task + */ + inline void setBlockedWriteTask(TMLTask* iWriteTask) {_writeTask=iWriteTask;} + ///Returns a pointer to the tasks which performs write operation on the channel + /** + \return Pointer to the task + */ + virtual TMLTask* getBlockedWriteTask()const=0; + ///Returns the next communication master on which the given transaction is conveyed + /** + \param iTrans Transaction + \return Pointer to the communication master + */ + BusMaster* getNextMaster(TMLTransaction* iTrans); + ///Returns the first communication master on which the given transaction is conveyed + /** + \param iTrans Transaction + \return Pointer to the communication master + */ + BusMaster* getFirstMaster(TMLTransaction* iTrans); + ///Returns the next slave component to which the given transaction is sent + /** + \param iTrans Transaction + \return Pointer to the slave + */ + Slave* getNextSlave(TMLTransaction* iTrans) const; + //Returns the number of buses on which the channel is mapped + //\return Number of buses + //unsigned int getNumberOfHops() const; + ///Returns a string representation of the channel + /** + \return Detailed string representation + */ + virtual std::string toString() const =0; + ///Returns a short string representation of the channel + /** + \return Short string representation + */ + inline std::string toShortString() const {return _name;} + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + ///Returns the unique ID of the device + /** + \return Unique ID + */ + inline ID getID() const {return _ID;} + ///Inserts samples into the channel + /** + \param iNbOfSamples Number of samples to insert + \param iParam Parameter to insert + \return Returns true if successful + */ + inline virtual TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam) {return iNbOfSamples;} + ///Writes XML information about the component to a stream + /** + \param s Reference to an output stream + */ + inline virtual void streamStateXML(std::ostream& s) const {} + ///Returns the number of samples stored in the channel + /** + \return Content of the channel + */ + inline virtual TMLLength getContent() const {return 0;} + ///Returns a flag indicating if a channel overflow has been encoutered + /** + \return Channel overflow flag + */ + inline virtual bool getOverflow() const {return false;} + ///Returns a flag indicating if a channel underflow has been encoutered + /** + \return Channel underflow flag + */ + inline virtual bool getUnderflow() const {return false;} + ///Returns the hash value for the current task state + /** + \param iHash Hash algorithm object + */ + virtual void getStateHash(HashAlgo* iHash) const =0; + ///Returns the priority of the channel + /** + \return Hash Value + */ + inline Priority getPriority() {return _priority;} + ///Returns the width of the channel + /** + \return Channel width + */ + inline unsigned int getWidth() {return _width;} + ///Returns the width of the channel + /** + \param iTask Reference to reading or writing task + \param iSignificance Flag indicating if operations performed by this task are still reachable + */ + void setSignificance(TMLTask* iTask, bool iSignificance); + inline bool getSignificance() {return (_significance != 0);} + inline bool mappedOnBus() {return _numberOfHops!=0;} +protected: + ///ID of channel + ID _ID; + ///Name of the channel + std::string _name; + ///Channel size + unsigned int _width; + ///Pointer to the tasks which performs read operation on the channel + TMLTask* _readTask; + ///Pointer to the tasks which performs write operation on the channel + TMLTask* _writeTask; + ///Pointer to the transaction which attempts to write in the channel + TMLTransaction* _writeTrans; + ///Pointer to the transaction which attempts to read the channel + TMLTransaction* _readTrans; + ///Number of Buses/Slave devices on which the channel is mapped + unsigned int _numberOfHops; + ///List of buses on which the channel is mapped + BusMaster** _masters; + ///List of slaves on which the channel is mapped + Slave** _slaves; + ///Keeps track of the current Hop of a write Transaction + unsigned int _writeTransCurrHop; + ///Keeps track of the current Hop of a read Transaction + unsigned int _readTransCurrHop; + ///channel priority + Priority _priority; + ///Flag indicating if read or write commands for that channel are still reachable + unsigned char _significance; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..3b48c725c892a57e898adde13277f344aceef698 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.cpp @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLChoiceCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <SimComponents.h> +//#include <CommandListener.h> + +TMLChoiceCommand::TMLChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint):TMLCommand(iID, iTask, 1, iNbOfBranches, iLiveVarList, iCheckpoint), _rangeFunc(iRangeFunc) { + _type=CHO; +} + +TMLCommand* TMLChoiceCommand::getNextCommand() const{ + ParamType aMin, aMax; + //return _nextCommand[(_task->*_rangeFunc)(aMin, aMax)]; + unsigned int aNextIndex = (_task->*_rangeFunc)(aMin, aMax); + _coveredBranchMap |= (1 << aNextIndex); + return _nextCommand[aNextIndex]; +} + +TMLCommand* TMLChoiceCommand::prepareNextTransaction(){ + if (_simComp->getStopFlag()){ + _simComp->setStoppedOnAction(); + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + if (aNextCommand!=0) return aNextCommand->prepare(false); + return 0; +} + +std::string TMLChoiceCommand::toString() const{ + std::ostringstream outp; + outp << "Choice in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..21c133ba80aec5c4613353610fed026ea660ddb2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.h @@ -0,0 +1,72 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLChoiceCommandH +#define TMLChoiceCommandH + +#include <definitions.h> +#include <TMLCommand.h> + + +///This class stands for a fork in the control flow of a TML task. +class TMLChoiceCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc function returning the rage of enabled branches + \param iNbOfBranches Number of branches of the choice + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint); + inline void execute() {} + std::string toString() const; + inline std::string toShortString() const {return "Choice";} + inline std::string getCommandStr() const {return "cho";} +protected: + ///Member function pointer to the condition function returning the index of the next command + RangeFuncPointer _rangeFunc; + virtual TMLCommand* getNextCommand() const; + virtual TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..305d6e3800f4d03a71deddb0de524a71622f6f7b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLCommand.cpp @@ -0,0 +1,305 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <CPU.h> +//#include <CommandListener.h> +#include <Parameter.h> +#include <TMLChoiceCommand.h> +#include <TMLRandomChoiceCommand.h> +#include <TMLActionCommand.h> +#include <TMLNotifiedCommand.h> +#include <TMLWaitCommand.h> +#include <SimComponents.h> +#include <TMLStopCommand.h> +#include <TMLRandomCommand.h> + +std::list<TMLCommand*> TMLCommand::_instanceList; +SimComponents* TMLCommand::_simComp=0; +unsigned int TMLCommand::_branchNo=0; + +TMLCommand::TMLCommand(ID iID, TMLTask* iTask, TMLLength iLength, unsigned int iNbOfNextCmds, const char* iLiveVarList, bool iCheckpoint): _ID(iID), _length(iLength), _type(NONE), _progress(0), _currTransaction(0), _task(iTask), _nextCommand(0), /*_paramFunc(iParamFunc),*/ _nbOfNextCmds(iNbOfNextCmds), _breakpoint(0), _justStarted(true), _commandStartTime(-1), _liveVarList(iLiveVarList), _checkpoint(iCheckpoint), _execTimes(0), _coveredBranchMap(0){ + if (dynamic_cast<TMLStopCommand*>(this)==0){ + _instanceList.push_back(this); + _task->addCommand(iID, this); + if (_nbOfNextCmds>1){ + //std::cout << "** " << this->toShortString() << " has " << _nbOfNextCmds << " branches.\n"; + _branchNo+=_nbOfNextCmds; + } + + } +} + +TMLCommand::~TMLCommand(){ + //if (_currTransaction!=0) delete _currTransaction; NEW + //if (_currTransaction!=0) std::cout << "transaction not yet deleted: " << getCommandStr() << std::endl; + if (_nextCommand!=0) delete[] _nextCommand; + _instanceList.remove(this); + removeBreakpoint(); +} + +TMLCommand* TMLCommand::prepare(bool iInit){ + //Do not set _currTransaction=0 as specialized commands access the variable in the scope of the execute method (set terminated flag) + //std::cout << "Prepare command ID: " << _ID << "\n"; + if(_length==_progress){ + TMLCommand* aNextCommand; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); + if(!_simComp->getOnKnownPath()){ + //_task->refreshStateHash(_liveVarList); + if(_checkpoint){ + ID aStateID=0; + aStateID = _simComp->checkForRecurringSystemState(); + if (_currTransaction!=0) _currTransaction->setStateID(aStateID); + } + } +#endif + //std::cout << "COMMAND FINISHED!!n"; +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(_currTransaction); + if (_justStarted) NOTIFY_CMD_STARTED(this); + //if (_justStarted) NOTIFY_CMD_STARTED(_currTransaction); +#endif + _progress=0; + _currTransaction=0; //NEW!!!!!!!!!!! + _commandStartTime=-1; //NEW + _execTimes++; + //std::cerr << "Prepare command, get next command 1" << std::endl; + aNextCommand=getNextCommand(); + //std::cerr << "Prepare command, get next command 2" << std::endl; + //std::cout << "Prepare command, to next command" << std::endl; + _task->setCurrCommand(aNextCommand); + if (aNextCommand==0){ + return 0; + }else{ + //std::cout << "Prepare command, prepare next command" << std::endl; + return aNextCommand->prepare(false); + } + }else{ + if (_commandStartTime==((TMLTime)-1)){ + _commandStartTime = SchedulableDevice::getSimulatedTime(); + } + //std::cout << "Prepare next transaction TMLCmd " << _listeners.size() << std::endl; + TMLCommand* result; + if (iInit){ + //if (_currTransaction!=0) delete _currTransaction; NEW!!!!!!!!!!!!!!!!!! + if (_currTransaction==0){ + //std::cout << "currTrans==0 " << std::endl; + result = prepareNextTransaction(); //NEW!!!!!!!!!!!!!!!!!!!!!!!! + //std::cout << "end prepare " << std::endl; + }else{ + //std::cout << "currTrans!=0 " << std::endl; + result = _currTransaction->getCommand(); + //std::cout << "end get cmd " << std::endl; + } + if (_progress==0) _justStarted=true; + //result=0; ///////////NEW + }else{ + if (_progress==0){ +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_ENTERED(this); +#else +#ifdef EXPLO_ENABLED + if (dynamic_cast<IndeterminismSource*>(this)!=0) NOTIFY_CMD_ENTERED(this); + //if (dynamic_cast<TMLRandomCommand*>(this)!=0) NOTIFY_CMD_ENTERED(this); +#endif +#endif + _justStarted=true; + }else{ +#ifdef LISTENERS_ENABLED + //NOTIFY_CMD_EXECUTED(this); + NOTIFY_CMD_EXECUTED(_currTransaction); +#endif + if (_justStarted){ +#ifdef LISTENERS_ENABLED + //NOTIFY_CMD_STARTED(_currTransaction); + NOTIFY_CMD_STARTED(this); +#endif + _justStarted=false; + } + } + //std::cout << "Prepare next transaction" << std::endl; + result = prepareNextTransaction(); //NEW!!!!!!!!!!!!!!!!!!!!!!!! + } + //TMLCommand* result = prepareNextTransaction(); NEW!!!!!!!!!!!!!!!!! +/*#ifdef REGISTER_TRANS_AT_CPU + if (_currTransaction!=0 && _currTransaction->getVirtualLength()!=0){ + _task->getCPU()->registerTransaction(_currTransaction,0); + } +#endif*/ + return result; + } + return 0; +} + +TMLCommand** TMLCommand::getNextCommands(unsigned int& oNbOfCmd) const{ + //returned number is not correct for composite choice/choice commands and composite action/choice commands !!!! + oNbOfCmd=_nbOfNextCmds; + return _nextCommand; +} + +std::string TMLCommand::toString() const{ + std::ostringstream outp; + outp << _task->toString() << " len:" << _length << " progress:" << _progress << " ID:" << _ID; + return outp.str(); +} + +void TMLCommand::setBreakpoint(GeneralListener* iBreakp){ + removeBreakpoint(); + _breakpoint=iBreakp; + registerListener(iBreakp); +} + +void TMLCommand::removeBreakpoint(){ + if (_breakpoint!=0){ + removeListener(_breakpoint); + delete _breakpoint; + _breakpoint=0; + } +} + +std::ostream& TMLCommand::writeObject(std::ostream& s){ + WRITE_STREAM(s,_progress); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLCommand " << _ID << " progress: " << _progress << std::endl; +#endif +/*#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(s, _execTimes); +#endif*/ + return s; +} + +std::istream& TMLCommand::readObject(std::istream& s){ + READ_STREAM(s,_progress); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLCommand " << _ID << " progress: " << _progress << std::endl; +#endif +/*#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(s, _execTimes); +#endif*/ +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif + //std::cout << "End Read Object TMLCommand " << _ID << std::endl; + return s; +} + +void TMLCommand::reset(){ + _progress=0; + //if (_currTransaction!=0) delete _currTransaction; NEW + _currTransaction=0; + _commandStartTime=-1; + //_execTimes=0; + //_stateHashes.clear(); +} + +void TMLCommand::registerGlobalListener(GeneralListener* iListener){ + std::cout << "Global cmd listener created \n"; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + (*i)->registerListener(iListener); + } +} + +template<typename T> +void TMLCommand::registerGlobalListenerForType(GeneralListener* iListener, TMLTask* aTask){ + //std::cout << "Global cmd listener created \n"; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + if (dynamic_cast<T*>(*i)!=0 && (aTask==0 || (*i)->getTask()==aTask)) (*i)->registerListener(iListener); + } +} + +void TMLCommand::removeGlobalListener(GeneralListener* iListener){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + (*i)->removeListener(iListener); + } +} + +void TMLCommand::streamStateXML(std::ostream& s){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + s << TAG_CMDo << " id=\"" << (*i)->_ID << "\">" << TAG_EXECTIMESo << (*i)->_execTimes << TAG_EXECTIMESc << TAG_CMDc << "\n"; + } +} + +TMLCommand* TMLCommand::getCommandByID(ID iID){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + if ((*i)->_ID == iID) return *i; + } + return 0; +} + +unsigned int TMLCommand::getCmdCoverage(){ + unsigned int aCoveredCmds=0; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + if ((*i)->_execTimes>0) aCoveredCmds++; //else std::cout << "Not covered: " << (*i)->toShortString() << "\n"; + } + //std::cout << "Total no of commands: " << _instanceList.size() << "\n"; + return aCoveredCmds * 100 / _instanceList.size(); +} + +unsigned int TMLCommand::getBranchCoverage(){ + unsigned int aCoveredBranchNo=0; + //std::cout << "Total branch no: " << _branchNo << "\n"; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + //if ((*i)->_nbOfNextCmds>1) std::cout << "** " << (*i)->toShortString() << " ID " << (*i)->_ID << " has " << (*i)->_nbOfNextCmds << " branches, covered map : " << (*i)->_coveredBranchMap << "\n"; + long unsigned int aCoveredBranchMap = (*i)->_coveredBranchMap; + while (aCoveredBranchMap>0){ + aCoveredBranchNo++; + aCoveredBranchMap >>=1; + } + } + return (_branchNo==0)? 100: aCoveredBranchNo * 100 / _branchNo; +} + +void TMLCommand::clearCoverageVars(){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + (*i)->_execTimes=0; + (*i)->_coveredBranchMap=0; + } +} + +template void TMLCommand::registerGlobalListenerForType<IndeterminismSource>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLChoiceCommand>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLActionCommand>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLNotifiedCommand>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLWaitCommand>(GeneralListener* iListener, TMLTask* aTask); + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..e8d7b8eee90070bb3508aaf01523b935c5384e2c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLCommand.h @@ -0,0 +1,281 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLCommandH +#define TMLCommandH + +#include <definitions.h> +#include <Serializable.h> +#include <ListenerSubject.h> +#include <GeneralListener.h> +#include <TMLTransaction.h> + +class TMLTask; +class TMLChannel; +class Comment; +class SimComponents; +class HashAlgo; + +///This class defines the basic interfaces and functionalites of a TML command. All specific commands are derived from this base class. +class TMLCommand: public Serializable, public ListenerSubject <GeneralListener>{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLength Virtual length of the command + \param iNbOfNextCmds Number of next commands + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLCommand(ID iID, TMLTask* iTask, TMLLength iLength, unsigned int iNbOfNextCmds, const char* iLiveVarList, bool iCheckpoint); + ///Destructor + virtual ~TMLCommand(); + ///Initializes the command and passes the control flow to the prepare() method of the next command if necessary + /**This function calls prepareNextCommand() which is implemented by subclasses of TMLCommand + \return True if there was a transaction to prepare + \sa prepareNextTransaction() + */ + TMLCommand* prepare(bool iInit); + ///Updates the inner state of the command as well as the state of all dependent objects (channel, bus,...) + virtual void execute()=0; + ///Assigns a value to the pointer referencing the array of next commands + /** + \param iNextCommand Pointer to an array of pointers to the next commands + */ + inline void setNextCommand(TMLCommand** iNextCommand) {_nextCommand=iNextCommand;} + ///Returns a pointer to the task the command belongs to + /** + \return Pointer to the task + */ + inline TMLTask* getTask() const {return _task;} + ///Returns a pointer to the current transaction + /** + \return Pointer to the current transaction + */ + inline TMLTransaction* getCurrTransaction() const {return _currTransaction;} + ///Returns a pointer to the task which could be unblocked by the command + /** + \param iIndex Index of the task + \return Pointer to the dependent task + */ + inline virtual TMLTask* getDependentTask(unsigned int iIndex) const {return 0;} + ///Returns a pointer to the channel on which the command performs operations + /** + \param iIndex Index of the channel + \return Pointer to the channel + */ + inline virtual TMLChannel* getChannel(unsigned int iIndex) const {return 0;} + ///Returns the number of channels impacted by the command + /** + \return Number of channels + */ + inline virtual unsigned int getNbOfChannels() const {return 0;} + ///Initializes a parameter structure to the values specified by the command + /** + \param ioParam Parameter data structure + */ + inline virtual Parameter* setParams(Parameter* ioParam) {return 0;} + ///Returns a string representation of the command + /** + \return Detailed string representation + */ + virtual std::string toString() const; + ///Returns a short string representation of the command + /** + \return Short string representation + */ + virtual std::string toShortString() const =0; + ///Returns a short string representation of the command type + /** + \return Short string representation of command type + */ + virtual std::string getCommandStr() const=0; +#ifdef ADD_COMMENTS + ///Translates a comment into a readable string + /** + \param iCom Pointer to comment + \return Sring representation of the comment + */ + inline virtual std::string getCommentString(Comment* iCom) const {return "no comment available";} +#endif + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + void reset(); + ///Registers a listener at all TMLCommand instances + /** + \param iListener Pointer to the listener + */ + static void registerGlobalListener(GeneralListener* iListener); + ///Registers a listener at all TMLCommand instances of a specific type + /** + \param iListener Pointer to the listener + \param aTask Only commands of this task are taken into account, if set to 0 all tasks are considered + */ + template<typename T> static void registerGlobalListenerForType(GeneralListener* iListener, TMLTask* aTask); + ///Removes a listener at all TMLCommand instances + /** + \param iListener Pointer to the listener + */ + static void removeGlobalListener(GeneralListener* iListener); + ///Returns the unique ID of the command + /** + \return Unique ID + */ + inline ID getID() const {return _ID;} + ///Sets a new breakpoint + /** + \param iBreakp Pointer to breakpoint + */ + void setBreakpoint(GeneralListener* iBreakp); + ///Removes the breakpoint + void removeBreakpoint(); + ///Returns the progress of the command + /** + \return Progress of the command + */ + inline TMLLength getProgress() const {return _progress;} + ///Returns the progress of the command in percent + /** + \return Progress of the command in percent + */ + inline unsigned int getProgressInPercent() const {return (_length==0)? 0:_progress*100/_length;} + ///Sets the internal pointer to the simulation components + /** + \param iSimComp Pointer to simulation components + */ + inline static void setSimComponents(SimComponents* iSimComp) {_simComp=iSimComp;} + ///Returns a pointer to the next command array and the number of successors of this command + /** + \param oNbOfCmd Number of successors of this command + \return Pointer to next command array + */ + TMLCommand** getNextCommands(unsigned int& oNbOfCmd) const; + ///Returns the hash value for the current task state + /** + \return Hash Value + */ + inline unsigned long getStateHash() const {return _ID + _progress;} + ///Returns the simulation time when the command is prepared for its first transaction + /** + \return Command start time + */ + inline TMLTime getCommandStartTime() const {return (_commandStartTime==((TMLTime)-1))? 0: _commandStartTime;} + ///Returns the virtual length of the command + /** + \return Command length + */ + inline TMLLength getLength() const {return _length;} + ///Returns whether the command is considered as Checkpoint for system state comparisons + /** + \return true if command is a checkpoint + */ + bool isCheckpoint(); + static void streamStateXML(std::ostream& s); + static TMLCommand* getCommandByID(ID iID); + inline unsigned int getType() {return _type;} + ///Returns the code statement coverage of the whole model + /** + \return Statement coverage in percent + */ + static unsigned int getCmdCoverage(); + ///Returns the code branch coverage of the whole model + /** + \return Branch coverage in percent + */ + static unsigned int getBranchCoverage(); + ///Reset coverage related state variables + static void clearCoverageVars(); +protected: + ///ID of the command + ID _ID; + ///Length of the command + TMLLength _length; + ///Command type + CommandType _type; + ///Progress of the command (in execution units) + TMLLength _progress; + ///Pointer to the current transaction + TMLTransaction* _currTransaction; + ///Pointer to the task the command belongs to + TMLTask* _task; + ///Pointer to an array of pointers to the next commands + TMLCommand** _nextCommand; + ///Number of successors of this command + unsigned int _nbOfNextCmds; + ///Breakpoint + GeneralListener* _breakpoint; + ///Is true until the first transaction of a task is executed + bool _justStarted; + ///Determines the next command based on the _nextCommand array + /** + \return Pointer to the next command + */ + inline virtual TMLCommand* getNextCommand() const {return (_nextCommand==0)?0:_nextCommand[0];} + ///Special actions taken by subclasses of TMLCommand to prepare the next transaction + /** + \return True if there was a transaction to prepare + \sa prepare() + */ + virtual TMLCommand* prepareNextTransaction()=0; + ///List of pointers to all TMLCommand instances + static std::list<TMLCommand*> _instanceList; + ///Pointer to simulation components + static SimComponents* _simComp; + ///State Hash Map + //StateHashSet _stateHashes; + ///Command Start Time + TMLTime _commandStartTime; + ///Bitmap of live variables + const char* _liveVarList; + ///Checkpoint Flag + bool _checkpoint; + ///Number of executions of the command + unsigned int _execTimes; + ////Buffer for transaction to be proposed to kernel + //TMLTransaction transBuffer; + ///Number of branches in the whole DIPLODOCUS model + static unsigned int _branchNo; + ///Bitmap of covered branches of this specific command + mutable long unsigned int _coveredBranchMap; +}; + +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventBChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventBChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..b46befbdc629328a75e60746cb8db3935aef304c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventBChannel.h @@ -0,0 +1,273 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventBChannelH +#define TMLEventBChannelH + +#include <definitions.h> +#include <TMLEventSizedChannel.h> +#include <TMLCommand.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read non blocking write channel (infinite FIFO). +template <typename T, int paramNo> +class TMLEventBChannel : public TMLEventSizedChannel<T,paramNo>{ +public: + //typedef TMLEventSizedChannel<T,paramNo> SC; + + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iRequestChannel Flag indicating if channel is used by a request + \param iSourceIsFile Flag indicating if events are read from a file + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventBChannel(ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, bool iRequestChannel, bool iSourceIsFile, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventSizedChannel<T,paramNo>(iID, iName, iNumberOfHops, iMasters, iSlaves, iContent, iLossRate, iMaxNbOfLosses), _requestChannel(iRequestChannel), _sourceIsFile(iSourceIsFile),_eventFile(0) { + this->_overflow = false; + if (_sourceIsFile){ + std::cout << "try to open Event file " << this->_name.c_str() << std::endl; + //_name="./"+_name; + _eventFile = new std::ifstream(this->_name.c_str()); + readNextEvents(); + } + } + + ~TMLEventBChannel(){ + if (_eventFile!=0){ + if (_eventFile->is_open()) _eventFile->close(); + delete _eventFile; + } + } + + void testRead(TMLTransaction* iTrans){ + this->_readTrans=iTrans; + this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + this->_readTrans->setChannel(this); //NEW!!!! + this->_underflow = (this->_content==0); + } + + void write(TMLTransaction* iTrans){ +#ifdef LOSS_ENABLED + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + this->_nbOfLosses++; + }else{ +#endif + this->_content++; + if (paramNo!=0){ + //this->_paramQueue.push_back(_tmpParam); + //std::cerr << "write!\n"; + this->_tmpParam = iTrans->getCommand()->setParams(0); + this->_paramQueue.push_back(this->_tmpParam); +#ifdef STATE_HASH_ENABLED + this->_tmpParam->getStateHash(& this->_stateHash); //new in if +#endif + } + if (this->_readTrans!=0 && this->_readTrans->getVirtualLength()==0){ + this->_readTrans->setRunnableTime(iTrans->getEndTime()); + this->_readTrans->setChannel(this); + this->_readTrans->setVirtualLength(WAIT_SEND_VLEN); + } +#ifdef LOSS_ENABLED + } +#endif + #ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(iTrans); + #endif + this->_writeTrans=0; //TEST + } + + bool read(){ + if (this->_content<1){ + return false; + }else{ + this->_content--; + if (this->_content==0 && _sourceIsFile) readNextEvents(); + //std::cout << "read next" << std::endl; + //if (this->_readTrans->getCommand()->getParamFuncPointer()!=0) (this->_readTask->*(this->_readTrans->getCommand()->getParamFuncPointer()))(this->_paramQueue.front()); //NEW + if (paramNo!=0){ + //std::cout << "read! ..."; + //this->_paramQueue.front()->print(); + //std::cerr << "\n"; + this->_readTrans->getCommand()->setParams(this->_paramQueue.front()); + delete dynamic_cast<SizedParameter<T,paramNo>*>(this->_paramQueue.front()); + this->_paramQueue.pop_front(); //NEW + } + #ifdef STATE_HASH_ENABLED + //_stateHash-=this->_paramQueue.front().getStateHash(); + //this->_paramQueue.front().removeStateHash(&_stateHash); + this->_hashValid = false; + #endif + + #ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(this->_readTrans); + #endif + this->_readTrans=0; + return true; + } + } + + void cancelReadTransaction(){ + this->_readTrans=0; + } + + TMLTask* getBlockedReadTask() const{ + return this->_readTask; + } + + TMLTask* getBlockedWriteTask() const{ + return 0; + } + + std::string toString() const{ + std::ostringstream outp; + outp << this->_name << "(evtB) content:" << this->_content; + return outp.str(); + } + + bool getRequestChannel() const{ + return _requestChannel; + } + + std::ostream& writeObject(std::ostream& s){ + TMLEventSizedChannel<T,paramNo>::writeObject(s); + if (_eventFile!=0){ + //std::istream::streampos aPos=_eventFile->tellg(); + int aPos=_eventFile->tellg(); + WRITE_STREAM(s,aPos); + #ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLEventBChannel " << this->_name << " posInFile: " << _eventFile->tellg() << std::endl; + #endif + } + return s; + } + + std::istream& readObject(std::istream& s){ + //std::istream::streampos aPos; + int aPos; + TMLEventSizedChannel<T,paramNo>::readObject(s); + //std::cout << "Read Object TMLEventBChannel " << _name << std::endl; + if (_eventFile!=0){ + READ_STREAM(s,aPos); + _eventFile->seekg(aPos); + #ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLEventBChannel " << this->_name << " posInFile: " << aPos << std::endl; + #endif + + } + return s; + } + + void reset(){ + TMLEventSizedChannel<T,paramNo>::reset(); + if (_eventFile!=0){ + _eventFile->clear(); + _eventFile->seekg(0,std::ios::beg); + //std::cout << "EventB reset " << _eventFile->eof() << std::endl; + //*_eventFile >> param; + //param.print(); + readNextEvents(); + std::cout << "no of events: " << this->_content << std::endl; + } + } + + TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + this->_content=0; + this->_paramQueue.clear(); + aNbToInsert=0; + }else{ + aNbToInsert=iNbOfSamples; + this->_content+=iNbOfSamples; + for (TMLLength i=0; i<iNbOfSamples; i++) this->_paramQueue.push_back(iParam); + } + if (this->_readTrans!=0) this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + return aNbToInsert; + } + protected: + void readNextEvents(){ + //std::cout << "vv" << std::endl; + if (_eventFile->is_open()){ + unsigned int i=0; + //Parameter<ParamType> aNewParam; + Parameter* aNewParam; //NEW + while (++i<NO_EVENTS_TO_LOAD && !_eventFile->eof()){ + this->_content++; + aNewParam = new SizedParameter<T,paramNo>(); + (*_eventFile) >> aNewParam; //NEW + //aNewParam.readTxtStream(*_eventFile); + #ifdef STATE_HASH_ENABLED + //_stateHash+=aNewParam.getStateHash(); + //aNewParam.getStateHash(&_stateHash); + #endif + this->_paramQueue.push_back(aNewParam); + } + }else + std::cout << "Event file failure" << std::endl; + } + + void testWrite(TMLTransaction* iTrans){ + this->_writeTrans=iTrans; + //if (paramNo!=0){ + //_tmpParam = iTrans->getCommand()->setParams(0); + //this->_paramQueue.push_back(_tmpParam); //NEW + //#ifdef STATE_HASH_ENABLED + //_tmpParam->getStateHash(&_stateHash); + //#endif + //} + this->_writeTrans->setVirtualLength(WAIT_SEND_VLEN); + } + ///Flag indicating if channel is used by a request + bool _requestChannel; + ///Flag indicating if events are read from a file + bool _sourceIsFile; + ///File where events are stored + std::ifstream* _eventFile; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..4977e9b1515fbf512bc1442088b6c1d352eed2c6 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventChannel.h @@ -0,0 +1,85 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventChannelH +#define TMLEventChannelH + +#include <definitions.h> +#include <TMLStateChannel.h> +#include <Parameter.h> +#include <HashAlgo.h> + +class Bus; + +///This class represents the base class for all event channels. +class TMLEventChannel:public TMLStateChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Width of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves ,TMLLength iContent, unsigned int iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses): TMLStateChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iContent, iPriority, iLossRate, iMaxNbOfLosses){} + ///Cancels a pending read operation + virtual void cancelReadTransaction()=0; + ///Returns a flag indicating if the channel is used by a request + /** + \return True if channel is used by a request, false otherwise + */ + virtual void write(TMLTransaction* iTrans)=0; + void write(){ + write(this->_writeTrans); + _writeTrans=0; + } + virtual bool getRequestChannel() const {return false;} + virtual void print() const=0; + virtual Parameter* buildParameter()=0; + //virtual Parameter* buildParameter(Parameter* iCloneParam)=0; +protected: +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventFBChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventFBChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..4d08eb44643779c7162e46d297c8aee78d3bcac2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventFBChannel.h @@ -0,0 +1,183 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventFBChannelH +#define TMLEventFBChannelH + +#include <definitions.h> +#include <TMLEventSizedChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read blocking write channel (finite blocking FIFO). +template <typename T, int paramNo> +class TMLEventFBChannel:public TMLEventSizedChannel<T,paramNo>{ +public: + //typedef TMLEventSizedChannel<T,paramNo> SC; + + ///Constructor + /** + \param iID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iLength Length of the channel + \param iContent Initial content of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventFBChannel(ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength, TMLLength iContent, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventSizedChannel<T,paramNo>(iID, iName, iNumberOfHops, iMasters, iSlaves, iContent, iLossRate, iMaxNbOfLosses),_length(iLength){ + } + + void testWrite(TMLTransaction* iTrans){ + this->_writeTrans=iTrans; + //if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + this->_writeTrans->setVirtualLength((_length-this->_content>0)?WAIT_SEND_VLEN:0); + this->_overflow = (this->_content==_length); + } + + void testRead(TMLTransaction* iTrans){ + this->_readTrans=iTrans; + this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + this->_readTrans->setChannel(this); //NEW!!!! + this->_underflow = (this->_content==0); + } + + void write(TMLTransaction* iTrans){ +#ifdef LOSS_ENABLED + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + this->_nbOfLosses++; + }else{ +#endif + this->_content++; + if (paramNo!=0){ + this->_paramQueue.push_back(this->_tmpParam); //NEW +#ifdef STATE_HASH_ENABLED + this->_tmpParam->getStateHash(& this->_stateHash); //NEW in if +#endif + } + if (this->_readTrans!=0 && this->_readTrans->getVirtualLength()==0){ + //std::cout << "FB: Wake up trans in channel: " << this->_name << "\n"; + this->_readTrans->setRunnableTime(iTrans->getEndTime()); + this->_readTrans->setChannel(this); + this->_readTrans->setVirtualLength(WAIT_SEND_VLEN); + } +#ifdef LOSS_ENABLED + } +#endif + + #ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(iTrans); + #endif + this->_writeTrans=0; //TEST + } + + bool read(){ + if (this->_content<1){ + return false; + }else{ + this->_content--; + //if (this->_readTrans->getCommand()->getParamFuncPointer()!=0) (this->_readTask->*(this->_readTrans->getCommand()->getParamFuncPointer()))(this->_paramQueue.front()); //NEW + if (paramNo!=0){ + this->_readTrans->getCommand()->setParams(this->_paramQueue.front()); + delete dynamic_cast<SizedParameter<T,paramNo>*>(this->_paramQueue.front()); + this->_paramQueue.pop_front(); //NEW + } + #ifdef STATE_HASH_ENABLED + //_stateHash-=this->_paramQueue.front().getStateHash(); + //this->_paramQueue.front().removeStateHash(&_stateHash); + this->_hashValid = false; + #endif + + if (this->_writeTrans!=0 && this->_writeTrans->getVirtualLength()==0){ + this->_writeTrans->setRunnableTime(this->_readTrans->getEndTime()); + this->_writeTrans->setChannel(this); + this->_writeTrans->setVirtualLength(WAIT_SEND_VLEN); + } + #ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(this->_readTrans); + #endif + this->_readTrans=0; + return true; + } + } + + void cancelReadTransaction(){ + this->_readTrans=0; + } + + TMLTask* getBlockedReadTask() const{ + return this->_readTask; + } + + TMLTask* getBlockedWriteTask() const{ + return this->_writeTask; + } + + std::string toString() const{ + std::ostringstream outp; + outp << this->_name << "(evtFB) len:" << _length << " content:" << this->_content; + return outp.str(); + } + + TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + this->_content=0; + this->_paramQueue.clear(); + aNbToInsert=0; + }else{ + aNbToInsert=min(iNbOfSamples, _length-this->_content); + this->_content+=aNbToInsert; + for (TMLLength i=0; i<aNbToInsert; i++) this->_paramQueue.push_back(iParam); + } + if (this->_writeTrans!=0) this->_writeTrans->setVirtualLength((_length-this->_content>0)?WAIT_SEND_VLEN:0); + if (this->_readTrans!=0) this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + return aNbToInsert; + } +protected: + ///Length of the channel + TMLLength _length; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventFChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventFChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..4100f9215c653f19d1ce5efdb315b6ce6120f110 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventFChannel.h @@ -0,0 +1,176 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventFChannelH +#define TMLEventFChannelH + +#include <definitions.h> +#include <TMLEventSizedChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read non blocking write channel (finite FIFO, samples which do not fit in the channel are dropped). +template <typename T, int paramNo> +class TMLEventFChannel:public TMLEventSizedChannel<T,paramNo>{ +public: + //typedef TMLEventSizedChannel<T,paramNo> SC; + + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iLength Length of the channel + \param iContent Initial content of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventFChannel(ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength, TMLLength iContent, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventSizedChannel<T,paramNo>(iID, iName, iNumberOfHops, iMasters, iSlaves, iContent, iLossRate, iMaxNbOfLosses),_length(iLength){ + } + + void testWrite(TMLTransaction* iTrans){ + this->_writeTrans=iTrans; + //if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + this->_writeTrans->setVirtualLength(WAIT_SEND_VLEN); + this->_overflow = (this->_content==_length); + } + + void testRead(TMLTransaction* iTrans){ + this->_readTrans=iTrans; + this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + this->_readTrans->setChannel(this); //NEW!!!! + this->_underflow = (this->_content==0); + } + + void write(TMLTransaction* iTrans){ + if (this->_content<_length){ +#ifdef LOSS_ENABLED + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + this->_nbOfLosses++; + }else{ +#endif + this->_content++; + if (paramNo!=0){ + this->_paramQueue.push_back(this->_tmpParam); //NEW + #ifdef STATE_HASH_ENABLED + this->_tmpParam->getStateHash(& this->_stateHash); //new in if + #endif + } + if (this->_readTrans!=0 && this->_readTrans->getVirtualLength()==0){ + this->_readTrans->setRunnableTime(iTrans->getEndTime()); + this->_readTrans->setChannel(this); + this->_readTrans->setVirtualLength(WAIT_SEND_VLEN); + } +#ifdef LOSS_ENABLED + } +#endif + } + #ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(iTrans); + #endif + this->_writeTrans=0; //TEST + } + + bool read(){ + if (this->_content<1){ + return false; + }else{ + this->_content--; + //if (this->_readTrans->getCommand()->getParamFuncPointer()!=0) (this->_readTask->*(this->_readTrans->getCommand()->getParamFuncPointer()))(this->_paramQueue.front()); //NEW + if (paramNo!=0){ + this->_readTrans->getCommand()->setParams(this->_paramQueue.front()); + delete dynamic_cast<SizedParameter<T,paramNo>*>(this->_paramQueue.front()); + this->_paramQueue.pop_front(); //NEW + } + #ifdef STATE_HASH_ENABLED + //_stateHash-=this->_paramQueue.front().getStateHash(); + //this->_paramQueue.front().removeStateHash(&_stateHash); + this->_hashValid = false; + #endif + #ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(this->_readTrans); + #endif + this->_readTrans=0; + return true; + } + } + + void cancelReadTransaction(){ + this->_readTrans=0; + } + + TMLTask* getBlockedReadTask() const{ + return this->_readTask; + } + + TMLTask* getBlockedWriteTask() const{ + return 0; + } + + std::string toString() const{ + std::ostringstream outp; + outp << this->_name << "(evtF) len:" << _length << " content:" << this->_content; + return outp.str(); + } + + TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + this->_content=0; + this->_paramQueue.clear(); + aNbToInsert=0; + }else{ + aNbToInsert=min(iNbOfSamples, _length-this->_content); + this->_content+=aNbToInsert; + for (TMLLength i=0; i<aNbToInsert; i++) this->_paramQueue.push_back(iParam); + } + if (this->_readTrans!=0) this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + return aNbToInsert; + } +protected: + ///Length of the channel + TMLLength _length; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventSizedChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventSizedChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..cbaae60047ce77f58e5e6ef024ae6f0daa72cbff --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLEventSizedChannel.h @@ -0,0 +1,182 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventSizedChannelH +#define TMLEventSizedChannelH + +#include <definitions.h> +#include <TMLEventChannel.h> +#include <Parameter.h> +#include <HashAlgo.h> + +class Bus; + +///This class represents the base class for all event channels. +template <typename T, int paramNo> +class TMLEventSizedChannel: public TMLEventChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventSizedChannel (ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventChannel(iID, iName, 1, iNumberOfHops, iMasters, iSlaves, iContent, 0, iLossRate, iMaxNbOfLosses), _tmpParam(0), _stateHash((HashValueType)_ID, 30), _hashValid(true){ + } + + virtual ~TMLEventSizedChannel(){ + //for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i) + // delete *i; + } + + bool getRequestChannel() const{ + return false; + } + + virtual std::ostream& writeObject(std::ostream& s){ + //std::cout << "write size of channel " << _name << " :" << _content << std::endl; + TMLStateChannel::writeObject(s); +//#if paramNo>0 + + if (paramNo!=0){ + ParamQueue::iterator i; + for(i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->writeObject(s); + } + } +//#endif + //for_each( _paramQueue.begin(), _paramQueue.end(), std::bind2nd(std::bind1st(std::mem_fun(&(Parameter<ParamType>::writeObject)),s),(unsigned int)_writeTask)); + return s; + } + + virtual std::istream& readObject(std::istream& s){ + //Parameter<ParamType>* aNewParam; + TMLStateChannel::readObject(s); + //std::cout << "Read Object TMLEventChannel " << _name << std::endl; + //_paramQueue.clear(); +//#if paramNo>0 + TMLLength aParamNo; + if (paramNo!=0){ + ParamQueue::iterator i; + for(aParamNo=0; aParamNo < _content; aParamNo++){ + //aNewParam = new Parameter<ParamType>(s, (unsigned int) _writeTask); + //_paramQueue.push_back(Parameter<ParamType>(s)); + _paramQueue.push_back(new SizedParameter<T,paramNo>(s)); + } + } +//#endif + _hashValid = false; + return s; + } + + void print() const{ + for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->print(); + } + } + + virtual void reset(){ + //std::cout << "EventChannel reset" << std::endl; + ParamQueue::iterator i; + TMLStateChannel::reset(); + //#if paramNo>0 + if (paramNo!=0){ + for(i=_paramQueue.begin(); i != _paramQueue.end(); ++i) + delete dynamic_cast<SizedParameter<T,paramNo>*>(*i); + _paramQueue.clear(); + } + //#endif + _stateHash.init((HashValueType)_ID, 30); + _hashValid=true; + //std::cout << "EventChannel reset end" << std::endl; + } + + virtual void streamStateXML(std::ostream& s) const{ + s << TAG_CHANNELo << " name=\"" << _name << "\" id=\"" << _ID << "\">" << std::endl; + s << TAG_CONTENTo << _content << TAG_CONTENTc << TAG_TOWRITEo << _nbToWrite << TAG_TOWRITEc << TAG_TOREADo << _nbToRead << TAG_TOREADc << std::endl; + for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->streamStateXML(s); + s <<std::endl; + } + s << TAG_CHANNELc << std::endl; + } + + void getStateHash(HashAlgo* iHash) const{ + //TMLStateChannel::getStateHash(iHash); + //iHash->addValue(_stateHash.getHash()); + if (_significance!=0){ + //#if paramNo>0 + if (paramNo!=0){ + if (!_hashValid){ + _stateHash.init((HashValueType)_ID, 30); + for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->getStateHash(&_stateHash); + } + _hashValid = true; + } + iHash->addValue(_stateHash.getHash()); + } + //#endif + iHash->addValue(_content); + } + } + + + Parameter* buildParameter(){ + return new SizedParameter<T, paramNo>(); + } + +protected: + ///Queue for parameters + ParamQueue _paramQueue; + ///Temporary buffer for the parameters of the registered write transaction + Parameter* _tmpParam; + ///Channel State Hash + mutable HashAlgo _stateHash; + ///Flag indicating whether the current hash is up to date + mutable bool _hashValid; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..b30c33159f53e92ec6918ca8f6e458c3ecc31ae2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.cpp @@ -0,0 +1,88 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLExeciCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> + + +TMLExeciCommand::TMLExeciCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, unsigned int iExecType, TMLLength iStatLength, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _lengthFunc(iLengthFunc), _execType(iExecType){ + _length=iStatLength; + _type=EXE; +} + +void TMLExeciCommand::execute(){ + //std::cout << "execi: " << _currTransaction->toShortString() << std::endl; + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); + //std::cout << "Execi execute prepare" << std::endl; + prepare(false); +} + +TMLCommand* TMLExeciCommand::prepareNextTransaction(){ + //std::cout << _ID << " prepare execi: " << _length << std::endl; + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)(); + if (_length==0){ + //std::cout << "ExeciCommand len==0 " << std::endl; + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //std::cout << "new fails? " << _currTransaction->toString() << std::endl; + return this; +} + +std::string TMLExeciCommand::toString() const{ + std::ostringstream outp; + outp << "Execi in " << TMLCommand::toString(); + return outp.str(); +} + +std::string TMLExeciCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Execi " << _length; + return outp.str(); +} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..0b748822e8035298b4fcb2036976f59acafd8258 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.h @@ -0,0 +1,75 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLExeciCommandH +#define TMLExeciCommandH + +#include <definitions.h> +#include <TMLCommand.h> + + +///This class models the computational complexity of an algorithm +class TMLExeciCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iType Exec Type (ExecI, ExecC,...) + \param iStatLength Static length of command if applicable + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLExeciCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, unsigned int iType, TMLLength iStatLength, const char* iLiveVarList, bool iCheckpoint); + void execute(); + //TMLTask* getDependentTask() const; + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "exe";} +protected: + TMLCommand* prepareNextTransaction(); + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Type of command: EXECI, EXECC + unsigned int _execType; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7f4137a5d19250debf20895de2d1b357b79f0b7a --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.cpp @@ -0,0 +1,100 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLExeciRangeCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> + + +TMLExeciRangeCommand::TMLExeciRangeCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iType, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _rangeFunc(iRangeFunc), _minRange(0), _type(iType){ + _type=EXE; +} + +void TMLExeciRangeCommand::execute(){ + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); + prepare(false); +} + +TMLCommand* TMLExeciRangeCommand::prepareNextTransaction(){ + //std::cout << "Prepare\n"; + if (_progress==0){ + ParamType aMax; + _length = (_task->*_rangeFunc)(_minRange, aMax); + //_length = myrand(aMin, aMax); + if (_length==0){ + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //std::cout << "new fails? " << _currTransaction->toString() << std::endl; + return this; +} + +std::string TMLExeciRangeCommand::toString() const{ + std::ostringstream outp; + outp << "Execi in " << TMLCommand::toString(); + return outp.str(); +} + +std::string TMLExeciRangeCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Execi " << _length; + return outp.str(); +} + +unsigned int TMLExeciRangeCommand::getRandomRange(){ + ParamType aMax, aMin; + (_task->*_rangeFunc)(aMin, aMax); + //std::cout << "Got amin: " << aMin << " got amax: " << aMax << "\n"; + return aMax-aMin+1; +} + +void TMLExeciRangeCommand::setRandomValue(unsigned int iValue){ + //std::cout << "Set random value\n"; + //ParamType aMax, aMin; + //(_task->*_rangeFunc)(aMin, aMax); + _length= _minRange + iValue; + //_currTransaction = :: new (&transBuffer) TMLTransaction(this, _length,_task->getEndLastTransaction()); + _currTransaction = new TMLTransaction(this, _length,_task->getEndLastTransaction()); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..732af06f65243a5436c0ef50d6ac3dfd742cb586 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.h @@ -0,0 +1,76 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLExeciRangeCommandH +#define TMLExeciRangeCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <IndeterminismSource.h> + +///This class models the computational complexity of an algorithm +class TMLExeciRangeCommand:public TMLCommand, public IndeterminismSource{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc Pointer to the function returning the length range of the command + \param iType Exec Type (ExecI, ExecC,...) + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLExeciRangeCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iType, const char* iLiveVarList, bool iCheckpoint); + void execute(); + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "exe";} + unsigned int getRandomRange(); + void setRandomValue(unsigned int iValue); +protected: + TMLCommand* prepareNextTransaction(); + ///Pointer to the function returning the length of the command + RangeFuncPointer _rangeFunc; + ParamType _minRange; + ///Type of command: EXECI, EXECC + unsigned int _type; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9e12f054188adc35a81c1a275ff0d858ef07f83a --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.cpp @@ -0,0 +1,88 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLNotifiedCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLNotifiedCommand::TMLNotifiedCommand(ID iID, TMLTask* iTask,TMLEventChannel* iChannel,ParamType* iResultVar, const std::string& iResultVarDescr, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint),_channel(iChannel),_resultVar(iResultVar),_resultVarDescr(iResultVarDescr){ + _type=NOTIF; +} + +void TMLNotifiedCommand::execute(){ + *_resultVar=_channel->getContent(); + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); +#ifdef ADD_COMMENTS + _task->addComment(new Comment(_task->getEndLastTransaction(), this, *_resultVar)); +#endif + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLNotifiedCommand::prepareNextTransaction(){ + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + return this; +} + +std::string TMLNotifiedCommand::toString() const{ + std::ostringstream outp; + outp << "Notified in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLNotifiedCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Notified " << _channel->toShortString(); + return outp.str(); +} + +#ifdef ADD_COMMENTS +std::string TMLNotifiedCommand::getCommentString(Comment* iCom) const{ + std::ostringstream comment; + comment << "Notified " << _resultVarDescr << "=" << iCom->_actionCode; + return comment.str(); +} +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..5a602861e7e8dbc0c00649c8aeaffbc3af0eaaea --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h @@ -0,0 +1,81 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLNotifiedCommandH +#define TMLNotifiedCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLEventChannel.h> + +///This class models a TML command which determines the number of events queued in a channel +class TMLNotifiedCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iResultVar Pointer to the variable which has to contain the result + \param iResultVarDescr String representation of the result variable + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLNotifiedCommand(ID iID, TMLTask* iTask,TMLEventChannel* iChannel,ParamType* iResultVar,const std::string& iResultVarDescr, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel() const {return dynamic_cast<TMLChannel*>(_channel);} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "notified";} +#ifdef ADD_COMMENTS + std::string getCommentString(Comment* iCom) const; +#endif +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Index of the statement to execute (this value is passed to TMLTask::executeStatement()) + ParamType* _resultVar; + ///String representation of the result variable + std::string _resultVarDescr; + TMLCommand* prepareNextTransaction(); +}; + +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fc7fe258efbc8fb9b5dacebb49d659a81772612f --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.cpp @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLRandomChoiceCommand.h> +#include <SimComponents.h> +//#include <CommandListener.h> +#include <TMLTask.h> + +TMLRandomChoiceCommand::TMLRandomChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint):TMLChoiceCommand(iID, iTask, iRangeFunc, iNbOfBranches, iLiveVarList, iCheckpoint), _dynamicRange(0){ + _type=CHO; +} + +TMLCommand* TMLRandomChoiceCommand::prepareNextTransaction(){ + ParamType aMin, aMax; + if (_randomValue==-1){ + _randomValue = (_task->*_rangeFunc)(aMin, aMax); + //if (_ID==234) std::cout << "Random value set randomly:" << _randomValue << "\n"; + if (aMin==-1) + _dynamicRange = aMax | INT_MSB; + else + _dynamicRange = aMax+1; + } + if (_simComp->getStopFlag()){ + _simComp->setStoppedOnAction(); + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + + TMLCommand* aNextCommand=getNextCommand(); + //std::cout << _ID << " set next:" << (_randomValue+1) << "\n"; + _task->setCurrCommand(aNextCommand); + _randomValue=-1; + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + //std::cout << "TMLRandomChoiceCommand prepare Next Cmd:\n"; + if (aNextCommand!=0) return aNextCommand->prepare(false); + //else + //std::cout << "no next\n"; + return 0; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..15ce8d4e952fc9ab970055da1940b4f8fb365023 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.h @@ -0,0 +1,68 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLRandomChoiceCommandH +#define TMLRandomChoiceCommandH + +#include <TMLChoiceCommand.h> +#include <IndeterminismSource.h> + +///This class models a random fork in control flow within a TML Task +class TMLRandomChoiceCommand: public TMLChoiceCommand, public IndeterminismSource{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc function returning the rage of enabled branches + \param iNbOfBranches Number of branches of the choice + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLRandomChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint); + TMLCommand* prepareNextTransaction(); + inline unsigned int getRandomRange() {return _dynamicRange;} +protected: + ///A bitmap of enabled branches + unsigned int _dynamicRange; + inline TMLCommand* getNextCommand() const {_coveredBranchMap |= (1 << _randomValue); return _nextCommand[_randomValue];} +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b38ee6eb3ba165fdcb7a20dedc06bcde13b10820 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.cpp @@ -0,0 +1,91 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <TMLRandomCommand.h> +#include <SimComponents.h> +//#include <CommandListener.h> +#include <TMLTask.h> + +TMLRandomCommand::TMLRandomCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, ParamType* iResultVar, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _rangeFunc(iRangeFunc), _resultVar(iResultVar), _aMin(0){ + _type=RND; +} + +unsigned int TMLRandomCommand::getRandomRange(){ + ParamType aMax; + (_task->*_rangeFunc)(_aMin, aMax); + //std::cout << "Got amin: " << _aMin << " got amax: " << aMax << "\n"; + return aMax-_aMin+1; +} + +TMLCommand* TMLRandomCommand::prepareNextTransaction(){ + //std::cout << "In TMLChoice::prepare next transaction\n"; + if (_simComp->getStopFlag()){ + //std::cout << "aSimStopped=true " << std::endl; + _simComp->setStoppedOnAction(); + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + TMLCommand* aNextCommand=getNextCommand(); + if (_randomValue==(unsigned int)-1){ + ParamType aMin, aMax; + (_task->*_rangeFunc)(aMin, aMax); + *_resultVar = myrand(aMin, aMax); + }else{ + *_resultVar = _aMin + _randomValue; + _randomValue=(unsigned int)-1; + } + _task->setCurrCommand(aNextCommand); + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + //std::cout << "after notify listeners" << std::endl; + if (aNextCommand!=0) return aNextCommand->prepare(false); + return 0; +} + +std::string TMLRandomCommand::TMLRandomCommand::toString() const{ + std::ostringstream outp; + outp << "Random in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..0b7a22dacf12030c203718c14784b2f2342dbb8e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.h @@ -0,0 +1,75 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLRandomCommandH +#define TMLRandomCommandH + +#include <IndeterminismSource.h> +#include <TMLCommand.h> + +///Class modeling a random number generator within a TML Task +class TMLRandomCommand: public TMLCommand, public IndeterminismSource{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc function returning the rage of enabled branches + \param iResultVar Pointer to the variable that is assigned the random value + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLRandomCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, ParamType* iResultVar, const char* iLiveVarList, bool iCheckpoint); + void execute() {} + unsigned int getRandomRange(); + TMLCommand* prepareNextTransaction(); + std::string toString() const; + inline std::string toShortString() const {return "Random";} + inline std::string getCommandStr() const {return "rnd";} +protected: + ///Function returning the rage of enabled branches + RangeFuncPointer _rangeFunc; + ///Pointer to the variable that is assigned the random value + ParamType* _resultVar; + ///Minimum value of the range of the random variable + ParamType _aMin; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..9611d47c3fae17baed5ec73366e67e722540a30c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.cpp @@ -0,0 +1,97 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLReadCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLReadCommand::TMLReadCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_lengthFunc(iLengthFunc), _channel(iChannel){ + _length = iStatLength * _channel->getWidth(); + _type=RD; +} + +void TMLReadCommand::execute(){ + _channel->read(); + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + //std::cout << "ReadCommand progress: " << _progress << std::endl; + _task->addTransaction(_currTransaction); + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLReadCommand::prepareNextTransaction(){ + //std::cout << "ReadCommand prepare" << std::endl; + //std::cout << "length of read: "<< *_pLength << std::endl; + //if (_progress==0) _length = (_task->*_lengthFunc)(); + + //new test code + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)() * _channel->getWidth(); + if (_length==0){ + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + //std::cout << "before test read" << std::endl; + //std::cout << "--begin-- TMLReadCommand::prepareNextTransaction\n"; + _channel->testRead(_currTransaction); + //std::cout << "--end-- TMLReadCommand::prepareNextTransaction\n"; + //std::cout << "ReadCommand end prepare: " << _currTransaction->toString() << std::endl; + return this; +} + +std::string TMLReadCommand::toString() const{ + std::ostringstream outp; + outp << "Read in " << TMLCommand::toString() << " " <<_channel->toString(); + return outp.str(); +} + +std::string TMLReadCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Read " << _length << "," << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..7efa052c27dd639c8a9ae6a91662294f207cce29 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.h @@ -0,0 +1,78 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLReadCommandH +#define TMLReadCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLChannel.h> + +///This class models read operations on TML channels. +class TMLReadCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iChannel Pointer to the channel which is read + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iStatLength Static length of command if applicable + */ + TMLReadCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength=1); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return _channel;} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedWriteTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "rd";} +protected: + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Channel which is read + TMLChannel* _channel; + TMLCommand* prepareNextTransaction(); +}; + +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..59b3826601673ec6bff875a94fb5df2eb3cbae54 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.cpp @@ -0,0 +1,81 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLRequestCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLRequestCommand::TMLRequestCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint/*, Parameter* iStatParam*/): TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint), _channel(iChannel), _paramFunc(iParamFunc)/*, _statParam(iStatParam) */{ + _type=REQ; +} + +void TMLRequestCommand::execute(){ + _channel->write(_currTransaction); + //std::cout << "Dependent Task: " << _channel->getBlockedReadTask()->toString() << std::endl; + _progress+=_currTransaction->getVirtualLength(); + //std::cout << "setEndLastTrans Virtual length " << std::endl; + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLRequestCommand::prepareNextTransaction(){ + //std::cout << "prepare bext transaction testWrite prg:" << _progress << " to execute:" << (*_pLength)-_progress << std::endl; + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + _channel->testWrite(_currTransaction); + return this; +} + +std::string TMLRequestCommand::toString() const{ + std::ostringstream outp; + outp << "Request in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLRequestCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Request " << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..6613d86bf7ef39b66e598310574d54ce44b4991b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.h @@ -0,0 +1,86 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLRequestCommandH +#define TMLRequestCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <Parameter.h> +#include <TMLEventChannel.h> + +///This class models a send request operation within a TML task. +class TMLRequestCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iParamFunc Pointer to a parameter function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLRequestCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return dynamic_cast<TMLChannel*>(_channel);} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "sendReq";} + ///Sets a parameter data structure according to the parameters of the command + /** + \param ioParam Parameter data structure + */ + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFunc)(ioParam);} +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Pointer to the parameter function of the command + ParamFuncPointer _paramFunc; + /////Static parameter if applicable + //Parameter* _statParam; + /////Bitmap of live variables + //const char* _liveVarList; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..33df78f3944c92904a3784c02798e2cb521b9548 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.cpp @@ -0,0 +1,156 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLSelectCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLSelectCommand::TMLSelectCommand(ID iID, TMLTask* iTask, TMLEventChannel** iChannel, unsigned int iNumbChannels, const char* iLiveVarList, bool iCheckpoint, ParamFuncPointer* iParamFuncs):TMLCommand(iID, iTask, WAIT_SEND_VLEN, iNumbChannels, iLiveVarList, iCheckpoint), _channel(iChannel), _paramFuncs(iParamFuncs), /*_numbChannels(iNumbChannels),*/ _indexNextCommand(0) { + _type=SEL; +} + +TMLSelectCommand::~TMLSelectCommand(){ + if (_channel!=0) delete[] _channel; + if (_paramFuncs!=0){ + delete [] _paramFuncs; + } +} + +/*void TMLSelectCommand::execute(){ + unsigned int aFinalIndex=0, aLoopLimit=(_maxChannelIndex==0)?_nbOfNextCmds:_maxChannelIndex; + //i + bool aReadDone=false; + //std::cout << "LoopLimit: " << aLoopLimit << std::endl; + //for (i=0;i<aLoopLimit;i++){ + for (_indexNextCommand=0;_indexNextCommand<aLoopLimit;_indexNextCommand++){ + if (aReadDone){ + //_channel[i]->cancelReadTransaction(); + _channel[_indexNextCommand]->cancelReadTransaction(); + //std::cout << "Channel " << _channel[i]->toString() << " cancelled read transaction.\n"; + }else{ + //if (_channel[i]->read()){ + if (_channel[_indexNextCommand]->read()){ + aReadDone=true; + aFinalIndex=_indexNextCommand; + //_indexNextCommand=i; + //std::cout << "Read executed in channel " << _channel[i]->toString() << "\n"; + }else{ + //_channel[i]->cancelReadTransaction(); + _channel[_indexNextCommand]->cancelReadTransaction(); + //std::cout << "Channel " << _channel[i]->toString() << " cancelled read transaction.\n"; + } + } + } + _indexNextCommand = aFinalIndex; + _currTransaction->setChannel(_channel[_indexNextCommand]); + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); +#ifdef ADD_COMMENTS + _task->addComment(new Comment(_task->getEndLastTransaction(), this, _indexNextCommand)); +#endif + _maxChannelIndex=0; + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +}*/ + +void TMLSelectCommand::execute(){ + unsigned int aFinalIndex=0, aLoopLimit=(_maxChannelIndex==0)?_nbOfNextCmds:_maxChannelIndex; + TMLChannel* aReadChannel=_currTransaction->getChannel(); + //std::cout << "Select is executing\n"; + //bool check=false; + for (_indexNextCommand=0;_indexNextCommand<aLoopLimit;_indexNextCommand++){ + if(_channel[_indexNextCommand]==aReadChannel){ + if (!_channel[_indexNextCommand]->read()) std::cout <<"Fatal error read!!!!\n" ; + aFinalIndex=_indexNextCommand; + //check=true; + }else{ + _channel[_indexNextCommand]->cancelReadTransaction(); + } + } + //if (!check ) std::cout << "Fehler no read at all!!!!!!!!!!!!\n"; + _indexNextCommand = aFinalIndex; + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); +#ifdef ADD_COMMENTS + _task->addComment(new Comment(_task->getEndLastTransaction(), this, _indexNextCommand)); +#endif + _maxChannelIndex=0; + prepare(false); +} + +TMLCommand* TMLSelectCommand::prepareNextTransaction(){ + unsigned int i; + //std::cout << "SC: New transaction."<< std::endl; + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //std::cout << "SC: loop."<< std::endl; + for (i=0;i<_nbOfNextCmds && _maxChannelIndex==0;i++){ + //std::cout << "SC: inner."<< i<< std::endl; + _currTransaction->setVirtualLength(_length-_progress); + _channel[i]->testRead(_currTransaction); + if (_currTransaction->getVirtualLength()!=0) _maxChannelIndex=i+1; + } + //std::cout << "Max channel index:" << _maxChannelIndex << std::endl; + return this; +} + + +TMLChannel* TMLSelectCommand::getChannel(unsigned int iIndex) const{ + if (_currTransaction==0) + return _channel[_indexNextCommand]; + else + return _currTransaction->getChannel(); +} + +std::string TMLSelectCommand::toString() const{ + std::ostringstream outp; + outp << "SelectEvent in " << TMLCommand::toString() << " " << _channel[_indexNextCommand]->toString(); + return outp.str(); +} + +std::string TMLSelectCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": SelectEvent"; + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..ca2a9251f33c9d14ad0de0138dffbad8596a670e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.h @@ -0,0 +1,90 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLSelectCommandH +#define TMLSelectCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLEventChannel.h> + +///This class models the waiting operation for one amongst multiple events. +class TMLSelectCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to an array of pointers to channels conveying the desired signals + \param iNumbChannels Number of channels in the array + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iParamFunc Pointer to an array of parameter functions pointers + */ + TMLSelectCommand(ID iID, TMLTask* iTask,TMLEventChannel** iChannel, unsigned int iNumbChannels, const char* iLiveVarList, bool iCheckpoint, ParamFuncPointer* iParamFunc); + ///Destructor + ~TMLSelectCommand(); + void execute(); + TMLChannel* getChannel(unsigned int iIndex) const; + inline unsigned int getNbOfChannels() const {return _nbOfNextCmds;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel[iIndex]->getBlockedWriteTask();} + inline ParamFuncPointer getParamFuncPointer() const {return (_paramFuncs==0)?0:_paramFuncs[_indexNextCommand];} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "sel";} + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFuncs[_indexNextCommand])(ioParam);} +#ifdef ADD_COMMENTS + inline std::string getCommentString(Comment* iCom) const {return "SelectEvent result: " + _channel[iCom->_actionCode]->toShortString();} +#endif +protected: + TMLCommand* prepareNextTransaction(); + inline TMLCommand* getNextCommand() const {_coveredBranchMap |= (1 << _indexNextCommand); return _nextCommand[_indexNextCommand];} + ///Pointer to an array of pointers to channels conveying the desired signals + TMLEventChannel** _channel; + ///Pointer to an array of parameter function pointers + ParamFuncPointer* _paramFuncs; + ///Index of the next command within the _nextCommand array + unsigned int _indexNextCommand; + ///Highest index of the channels on which the TMLChannel::testRead() method has been performed. + unsigned int _maxChannelIndex; +}; + +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..00f263abb009cb98cfffaa8c34298d7010a2ebc3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.cpp @@ -0,0 +1,84 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLSendCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLSendCommand::TMLSendCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint/*, Parameter* iStatParam*/): TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint), _channel(iChannel), _paramFunc(iParamFunc)/*, _statParam(iStatParam)*/ { + _type=SND; +} + +void TMLSendCommand::execute(){ + //std::cout << "TMLSendCommand::execute()\n"; + _channel->write(); + //std::cout << "TMLSendCommand::execute() after write: " << _currTransaction << "\n"; + //std::cout << "Dependent Task: " << _channel->getBlockedReadTask()->toString() << std::endl; + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + //std::cout << "TMLSendCommand::execute() before add\n"; + _task->addTransaction(_currTransaction); + //std::cout << "TMLSendCommand::execute() after add\n"; + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLSendCommand::prepareNextTransaction(){ + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _channel->testWrite(_currTransaction); + return this; +} + +std::string TMLSendCommand::toString() const{ + std::ostringstream outp; + outp << "Send in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLSendCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Send " << _channel->toShortString(); + return outp.str(); +} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..8f3452c3a0647bd2145152eb950a130caa62c2f4 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.h @@ -0,0 +1,91 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLSendCommandH +#define TMLSendCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <Parameter.h> +#include <TMLEventChannel.h> + +///This class models a send event operation within a TML task. +class TMLSendCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iParamFunc Pointer to a parameter function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLSendCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return dynamic_cast<TMLChannel*>(_channel);} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "snd";} + /////Returns a pointer to the parameter data structure + ////** + //\return Pointer to parameter data structure + //*/ + //ParamFuncPointer getParamFuncPointer() const; + ///Sets a parameter data structure according to the parameters of the command + /** + \param ioParam Parameter data structure + */ + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFunc)(ioParam);} +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Pointer to the parameter function of the command + ParamFuncPointer _paramFunc; + /////Static parameter if applicable + //Parameter* _statParam; + ////Bitmap of live variables + //const char* _liveVarList; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b889185de86979f0ca403ead3446eff40f70d5dc --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.cpp @@ -0,0 +1,96 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLStateChannel.h> +#include <HashAlgo.h> + +TMLStateChannel::TMLStateChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, unsigned int iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses): TMLChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iPriority), _content(iContent), _nbToWrite(0), _nbToRead(0), _overflow(false), _underflow(false) +#ifdef LOSS_ENABLED +, _lossRate(iLossRate), _maxNbOfLosses(iMaxNbOfLosses*iWidth), _nbOfLosses(0), _lossRemainder(0) +#endif +{ +} + +TMLStateChannel::~TMLStateChannel(){} + +std::ostream& TMLStateChannel::writeObject(std::ostream& s){ + TMLChannel::writeObject(s); + WRITE_STREAM(s,_content); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLStateChannel " << _name << " content: " << _content << std::endl; +#endif + return s; +} + +std::istream& TMLStateChannel::readObject(std::istream& s){ + TMLChannel::readObject(s); + READ_STREAM(s,_content); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLStateChannel " << _name << " content: " << _content << std::endl; +#endif + return s; +} + +void TMLStateChannel::reset(){ + //std::cout << "StateChannel reset" << std::endl; + TMLChannel::reset(); + _content=0; + _nbToWrite=0; + _nbToRead=0; +#ifdef LOSS_ENABLED + _nbOfLosses = 0; + _lossRemainder = 0; +#endif + //std::cout << "StateChannel reset end" << std::endl; +} + +void TMLStateChannel::streamStateXML(std::ostream& s) const{ + s << TAG_CHANNELo << " name=\"" << _name << "\" id=\"" << _ID << "\">" << std::endl; + s << TAG_CONTENTo << _content << TAG_CONTENTc << TAG_TOWRITEo << _nbToWrite << TAG_TOWRITEc << TAG_TOREADo << _nbToRead << TAG_TOREADc; + s << TAG_CHANNELc << std::endl; +} + +void TMLStateChannel::getStateHash(HashAlgo* iHash) const{ + if (_significance!=0){ + //std::cout << "add channel content:\n"; + iHash->addValue(_content); + } +} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..7bf8276be84d30a903ffdcf8adc19fe48aad903d --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.h @@ -0,0 +1,100 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLStateChannelH +#define TMLStateChannelH + +#include <definitions.h> +#include <TMLChannel.h> + +class HashAlgo; +class Bus; + +///This class defines the basic interfaces and functionalites of a TML stateful channel. +class TMLStateChannel:public TMLChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLStateChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves ,TMLLength iContent, unsigned int iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses); + ///Destructor + virtual ~TMLStateChannel(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + virtual void streamStateXML(std::ostream& s) const; + inline virtual TMLLength getContent() const {return _content;} + inline bool getOverflow() const {return _overflow;} + inline bool getUnderflow() const {return _underflow;} + virtual void getStateHash(HashAlgo* iHash) const; +protected: + ///Content of the channel + TMLLength _content; + ///Number of samples the write transaction attempts to write + TMLLength _nbToWrite; + ///Number of samples the read transaction attempts to read + TMLLength _nbToRead; + ///Buffer overflow flag + mutable bool _overflow; + ///Buffer underflow flag + mutable bool _underflow; +#ifdef LOSS_ENABLED + ///Loss rate of the channel + unsigned int _lossRate; + ///Maximum number of losses + TMLLength _maxNbOfLosses; + ///Current nb of losses + TMLLength _nbOfLosses; + ///Loss Reamainder + unsigned int _lossRemainder; +#endif +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0516f48d5488227d37c9cf3caf535958fd8044e7 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.cpp @@ -0,0 +1,51 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLStopCommand.h> + +TMLStopCommand::TMLStopCommand(ID iID, TMLTask* iTask): TMLCommand(iID, iTask, 1, 0, 0, false){ + _type=STP; +} + +std::string TMLStopCommand::toString() const{ + std::ostringstream outp; + outp << "Stop in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..4071676e265487359136c07df9fcd476e9039657 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.h @@ -0,0 +1,66 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLStopCommandH +#define TMLStopCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLTask.h> + + +///This class represents a TML Stop command (denotes the end of a task) +class TMLStopCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + */ + TMLStopCommand(ID iID, TMLTask* iTask); + inline void execute() {} + std::string toString() const; + inline std::string toShortString() const {return "stp";} + inline std::string getCommandStr() const {return "stp";} +protected: + inline TMLCommand* prepareNextTransaction() {_execTimes++; _task->finished(); return 0;} +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLTask.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLTask.cpp new file mode 100755 index 0000000000000000000000000000000000000000..da6340300d039c08a7ff908a22959ffb5346bbf9 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLTask.cpp @@ -0,0 +1,390 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLTask.h> +#include <TMLCommand.h> +#include <TMLStopCommand.h> +#include <CPU.h> + +//#define RESET_SCHEDULING {_isScheduled=false;if (_noOfCPUs>1) _currentCPU=0;} + +unsigned int TMLTask::_instanceCount=1; + +TMLTask::TMLTask(ID iID, Priority iPriority, std::string iName, CPU** iCPU, unsigned int iNoOfCPUs): WorkloadSource(iPriority), _ID(iID), _name(iName), _endLastTransaction(0), _currCommand(0), _firstCommand(0), _currentCPU(0), _cpus(iCPU), _noOfCPUs(iNoOfCPUs), _comment(0), _busyCycles(0), _CPUContentionDelay(0), _noCPUTransactions(0), _justStarted(true), _myInstance(_instanceCount), /*_isScheduled(false),*/ _stateHash(0, 30) , _liveVarList(0), _hashInvalidated(true){ + for (unsigned int i=0; i< _noOfCPUs; i++) + _cpus[i]->registerTask(this); +#ifdef ADD_COMMENTS + _commentList.reserve(BLOCK_SIZE_TRANS); +#endif + _transactList.reserve(BLOCK_SIZE_TRANS); + _instanceCount++; + if (_noOfCPUs==1) _currentCPU = _cpus[0]; +} + +TMLTask::~TMLTask(){ +#ifdef ADD_COMMENTS + for(CommentList::iterator i=_commentList.begin(); i != _commentList.end(); ++i){ + delete *i; + } +#endif + if (_comment!=0) delete [] _comment; +} + +std::string TMLTask::toShortString() const{ + std::ostringstream outp; + outp << "ta" << _ID; + return outp.str(); +} + +#ifdef ADD_COMMENTS +std::string TMLTask::getNextComment(bool iInit, Comment*& oComment){ + if (iInit) _posCommentList=_commentList.begin(); + if (_posCommentList == _commentList.end()){ + //std::cout << "ret0\n"; + oComment=0; + return std::string("no more comment"); + } + //std::cout << "NON0\n"; + oComment=*_posCommentList; + _posCommentList++; + return ((oComment->_command==0)?_comment[oComment->_actionCode]:oComment->_command->getCommentString(oComment)); +} +#endif + +void TMLTask::addTransaction(TMLTransaction* iTrans){ + _transactList.push_back(iTrans); + _endLastTransaction=iTrans->getEndTime(); + _busyCycles+=iTrans->getOperationLength(); + //RESET_SCHEDULING; +#ifdef LISTENERS_ENABLED + NOTIFY_TASK_TRANS_EXECUTED(iTrans); +#endif + if (_justStarted){ +#ifdef LISTENERS_ENABLED + NOTIFY_TASK_STARTED(iTrans); +#endif + _justStarted=false; + } + if(iTrans->getChannel()==0){ + _noCPUTransactions++; + _CPUContentionDelay+=iTrans->getStartTime()-iTrans->getRunnableTime(); + } +} + +void TMLTask::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ + //std::ostringstream outp; + if (iInit){ + _posTrasactListVCD=_transactList.begin(); + _previousTransEndTime=0; + _vcdOutputState=END_TRANS; + } + if (_posTrasactListVCD == _transactList.end()){ + if (iInit || dynamic_cast<TMLStopCommand*>(_currCommand)==0){ + //outp << VCD_PREFIX << vcdValConvert(SUSPENDED) << "ta" << _ID; + new (oSigData) SignalChangeData(SUSPENDED, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(TERMINATED) << "ta" << _ID; + new (oSigData) SignalChangeData(TERMINATED, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //oNoMoreTrans=true; + //return _previousTransEndTime; + }else{ + TMLTransaction* aCurrTrans=*_posTrasactListVCD; + //oNoMoreTrans=false; + switch (_vcdOutputState){ + case END_TRANS: + if (aCurrTrans->getRunnableTime()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(RUNNABLE) << "ta" << _ID; + _vcdOutputState=START_TRANS; + new (oSigData) SignalChangeData(RUNNABLE, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(SUSPENDED) << "ta" << _ID; + new (oSigData) SignalChangeData(SUSPENDED, _previousTransEndTime, this); + if (aCurrTrans->getRunnableTime()==aCurrTrans->getStartTimeOperation()){ + _vcdOutputState=START_TRANS; + + }else{ + _vcdOutputState=BETWEEN_TRANS; + } + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case BETWEEN_TRANS: + //outp << VCD_PREFIX << vcdValConvert(RUNNABLE) << "ta" << _ID; + //oSigChange=outp.str(); + _vcdOutputState=START_TRANS; + //return aCurrTrans->getRunnableTime(); + new (oSigData) SignalChangeData(RUNNABLE, aCurrTrans->getRunnableTime(), this); + break; + case START_TRANS: + //outp << VCD_PREFIX << vcdValConvert(RUNNING) << "ta" << _ID; + //oSigChange=outp.str(); + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime); + _vcdOutputState=END_TRANS; + //return aCurrTrans->getStartTimeOperation(); + new (oSigData) SignalChangeData(RUNNING, aCurrTrans->getStartTimeOperation(), this); + break; + } + } + //return 0; +} + +std::ostream& TMLTask::writeObject(std::ostream& s){ + ID aCurrCmd; + WRITE_STREAM(s,_endLastTransaction); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " endLastTransaction: " << _endLastTransaction << std::endl; +#endif + if (_currCommand==0){ + aCurrCmd=0; + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + }else{ + aCurrCmd=_currCommand->getID(); + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + _currCommand->writeObject(s); + } +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(s, _busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif + WRITE_STREAM(s, _CPUContentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " CPUContentionDelay: " << _CPUContentionDelay << std::endl; +#endif + WRITE_STREAM(s, _noCPUTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " noCPUTransactions: " << _noCPUTransactions << std::endl; +#endif +#endif + return s; +} + +std::istream& TMLTask::readObject(std::istream& s){ + ID aCurrCmd; + //_previousTransEndTime=0; _busyCycles=0; _CPUContentionDelay=0; _noCPUTransactions=0; + READ_STREAM(s, _endLastTransaction); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " endLastTransaction: " << _endLastTransaction << std::endl; +#endif + READ_STREAM(s, aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + if (aCurrCmd==0){ + _currCommand=0; + }else{ + //std::cout << "cmd ID: " << aCurrCmd << std::endl; + _currCommand=getCommandByID(aCurrCmd); + //std::cout << "cmd adr: " << _currCommand << std::endl; + //std::cout << "before read cmd " << std::endl; + _currCommand->readObject(s); + //_currCommand->prepare(); + } + //std::cout << "End Read Object TMLTask " << _name << std::endl; +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(s, _busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif + READ_STREAM(s, _CPUContentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " CPUContentionDelay: " << _CPUContentionDelay << std::endl; +#endif + READ_STREAM(s, _noCPUTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " noCPUTransactions: " << _noCPUTransactions << std::endl; +#endif +#endif + _justStarted=false; + return s; +} + +void TMLTask::streamBenchmarks(std::ostream& s) const{ + s << TAG_TASKo << " id=\"" << _ID << "\" name=\"" << _name << "\">" << std::endl; + s << TAG_EXTIMEo << _busyCycles << TAG_EXTIMEc; + if (_noCPUTransactions!=0) s << TAG_CONTDELo << ">" << (static_cast<float>(_CPUContentionDelay)/static_cast<float>(_noCPUTransactions)) << TAG_CONTDELc; + s << TAG_TSKSTATEo; + //unsigned int aState=getState(); + switch (getState()){ + case RUNNING: + s << "running"; + break; + case RUNNABLE: + s << "runnable"; + break; + case SUSPENDED: + s << "suspended"; + break; + case TERMINATED: + s << "terminated"; + break; + case UNKNOWN: + s << "unknown"; + } + s << TAG_TSKSTATEc << TAG_TASKc << std::endl; + //std::cout << "Stream benchmarks task finished\n"; +} + +void TMLTask::reset(){ + //std::cout << "task reset" << std::endl; + _endLastTransaction=0; + if (_currCommand!=0) _currCommand->reset(); + _currCommand=_firstCommand; + if (_currCommand!=0) _currCommand->reset(); +#ifdef ADD_COMMENTS + _commentList.clear(); +#endif + _transactList.clear(); + _busyCycles=0; + _CPUContentionDelay=0; + _noCPUTransactions=0; + _justStarted=true; + _hashInvalidated=true; + //RESET_SCHEDULING; +} + +ParamType* TMLTask::getVariableByName(const std::string& iVarName ,bool& oIsId){ + if (iVarName[0]>='0' && iVarName[0]<='9'){ + oIsId=true; + return getVariableByID(StringToNum<ID>(iVarName)); + } + oIsId=false; + return _varLookUpName[iVarName.c_str()]; +} + +void TMLTask::finished(){ + _justStarted=true; +#ifdef LISTENERS_ENABLED + if (!_transactList.empty()) NOTIFY_TASK_FINISHED(_transactList.front()); +#endif +} + +unsigned int TMLTask::getState() const{ + /*if (!_transactList.empty() && _transactList.back()->getEndTime()==SchedulableDevice::getSimulatedTime()){ + return RUNNING; + }else{ + if (_currCommand==0) return TERMINATED; + if (_currCommand->getCurrTransaction()==0){ + if (dynamic_cast<TMLStopCommand*>(_currCommand)==0) + return UNKNOWN; + else + return TERMINATED; + }else{ + if (_currCommand->getCurrTransaction()->getRunnableTime()>=SchedulableDevice::getSimulatedTime()) + return SUSPENDED; + else + return RUNNABLE; + + } + }*/ + if (_currCommand==0 || _currCommand->getCurrTransaction()==0 || dynamic_cast<TMLStopCommand*>(_currCommand)!=0){ + return TERMINATED; + } else if (_currCommand->getCurrTransaction()->getVirtualLength()==0){ + return SUSPENDED; + } else if (_currentCPU->SchedulableDevice::getNextTransaction()==_currCommand->getCurrTransaction()){ + return RUNNING; + }else{ + return RUNNABLE; + } + return UNKNOWN; +} + +TMLTransaction* TMLTask::getNextTransaction(TMLTime iEndSchedule) const{ + //std::cout << "Task::getNextTransaction\n"; + return (_currCommand==0)?0:_currCommand->getCurrTransaction(); + //return (_currCommand==0 || _isScheduled)?0:_currCommand->getCurrTransaction(); +} + +/*void TMLTask::transWasScheduled(SchedulableDevice* iCPU){ + _isScheduled=true; + if (_noOfCPUs>1) _currentCPU = dynamic_cast<CPU*>(iCPU); +} + +void TMLTask::resetScheduledFlag(){ + RESET_SCHEDULING; +} + +void TMLTask::setRescheduleFlagForCores(){ + RESET_SCHEDULING; + for (unsigned int i=0; i< _noOfCPUs; i++){ + //std::cout << "in Task " << _name << " next CPU\n"; + _cpus[i]->setRescheduleFlag(); + } +}*/ + +void TMLTask::schedule2TXT(std::ostream& myfile) const{ + myfile << "========= Scheduling for device: "<< _name << " =========\n" ; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + myfile << (*i)->toShortString() << std::endl; + } +} + +void TMLTask::refreshStateHash(const char* iLiveVarList){ + //if (iLiveVarList!=0){ + //_hashInvalidated = (_liveVarList!=iLiveVarList); + _hashInvalidated = true; + _liveVarList = iLiveVarList; + //} +} + +int TMLTask::hasRunnableTrans(CPU* iCPU){ + bool aIsMappedOnCPU=false; + for (unsigned int i=0; i< _noOfCPUs; i++){ + aIsMappedOnCPU |= (_cpus[i]==iCPU); + } + if (!aIsMappedOnCPU || _currCommand==0) return 0; + TMLTransaction* aCurrTrans = _currCommand->getCurrTransaction(); + if (aCurrTrans==0 || aCurrTrans->getVirtualLength()==0) return 0; + if (aCurrTrans->getChannel()!=0 && aCurrTrans->getChannel()->mappedOnBus()) return 2; + //std::cout << "There would be: " << _currCommand->getCurrTransaction()->toString() << "\n"; + return 1; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLTask.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLTask.h new file mode 100755 index 0000000000000000000000000000000000000000..dc5e34bad9772b243290a6e27507d404787fe108 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLTask.h @@ -0,0 +1,283 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLTaskH +#define TMLTaskH + +#include <definitions.h> +#include <TMLTransaction.h> +#include <TraceableDevice.h> +#include <Serializable.h> +#include <Comment.h> +#include <MemPool.h> +#include <ListenerSubject.h> +#include <GeneralListener.h> +#include <WorkloadSource.h> +#include <HashAlgo.h> + +class TMLCommand; +class CPU; +class Comment; + +enum vcdTaskVisState + { + END_TRANS, + BETWEEN_TRANS, + START_TRANS +}; + +class TMLTask: public TraceableDevice, public ListenerSubject <GeneralListener>, public WorkloadSource{ +public: + ///Constructor + /** + \param iID ID of the Task + \param iPriority Priority of the task + \param iName Name of the task + \param iCPU Pointer to the CPUs the task is mapped onto + \param iNoOfCPUs Number of CPUs + */ + TMLTask(ID iID, Priority iPriority, std::string iName, CPU** iCPU, unsigned int iNoOfCPUs); + ///Destructor + virtual ~TMLTask(); + ///Returns the priority of the task + /** + \return Priority + */ + inline Priority getPriority() const {return _priority;} + ///Returns the end of the last scheduled transaction of the task + /** + \return End of transaction + */ + inline TMLTime getEndLastTransaction() const {return _endLastTransaction;} + ///Returns a pointer to the current command of the task + /** + \return Pointer to the current command + */ + inline TMLCommand* getCurrCommand() const {return _currCommand;} + ///Sets the pointer to the current command of the task + /** + \param iCurrCommand Pointer to the current command + */ + inline void setCurrCommand(TMLCommand* iCurrCommand){_currCommand=iCurrCommand;} + ///Return a pointer to the CPU on which the task in running + /** + \return Pointer to the CPU + */ + inline CPU* getCPU() const {return _currentCPU;} + ///Returns a string representation of the task + /** + \return Detailed string representation + */ + virtual std::string toString() const {return _name;} + ///Returns a short string representation of the Task + /** + \return Short string representation + */ + std::string toShortString() const; + ///Returns the unique ID of the task + /** + \return Unique ID + */ + inline ID getID() const {return _ID;} +#ifdef ADD_COMMENTS + ///Adds a new execution comment to the internal list + /** + \param iComment Pointer to the comment + */ + inline void addComment(Comment* iComment) {_commentList.push_back(iComment);} + ///Returns the next execution comment (pointed to by _posCommentList) + /** + \param iInit Indicates if the list iterator has to be reset to the beginning of the list + \param oComment This pointer to the comment object is returned to the callee + \return String representation of the comment + */ + std::string getNextComment(bool iInit, Comment*& oComment); +#endif + void getNextSignalChange(bool iInit, SignalChangeData* oSigData); + ///Adds a given transaction to the internal transaction list + /** + \param iTrans Pointer to the transaction + */ + void addTransaction(TMLTransaction* iTrans); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void streamBenchmarks(std::ostream& s) const; + virtual void reset(); + ///Returns a pointer to the task variable specified by its name + /** + \param iVarName Name of the task variable + \param oIsId Is set to true if an ID was passed to this function + \return Pointer to the variable + */ + ParamType* getVariableByName(const std::string& iVarName ,bool& oIsId); + ///Searches for a Command based on its ID + /** + \param iID ID of the Command + \return Pointer to the Commmand + */ + inline TMLCommand* getCommandByID(ID iID) {return _commandHash[iID];} + ///Adds a new command to the internal list + /** + \param iID ID of the command + \param iCmd Pointer to the command + */ + inline void addCommand(ID iID, TMLCommand* iCmd) {_commandHash[iID]=iCmd;} + ///Returns a pointer to the task variable specified by its ID + /** + \param iVarID ID of the task variable + \return Pointer to the variable + */ + inline ParamType* getVariableByID(ID iVarID) {return _varLookUpID[iVarID];} + inline void streamStateXML(std::ostream& s) const {streamBenchmarks(s);} + ///Returns an iterator for the internal variable ID hash table + /** + \return Const iterator for variable table + */ + inline const VariableLookUpTableID& getVariableLookUpTableID() const{return _varLookUpID;} + ///Returns an iterator for the internal variable Name hash table + /** + \return Const iterator for variable table + */ + const VariableLookUpTableName& getVariableLookUpTableName() const{return _varLookUpName;} + ///Is called when a stop command is encountered + void finished(); + ///Returns the current task state + /** + \return Task state: UNKNOWN, SUSPENDED, READY, RUNNING, TERMINATED + */ + unsigned int getState() const; + TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const; + /////Returns the hash value for the current task state + ////** + //\param iLiveVarList Bitmap of live variables + //\param iHash Hash Algorithm Object + //*/ + //virtual void getStateHash(const char* iLiveVarList, HashAlgo* iHash) const =0; + ///Returns the instance number of this task + /** + \return Instance number + */ + inline unsigned int getInstanceNo() {return _myInstance;} + ////Notifies the Task of being scheduled by a CPU + ////** + //\param iCPU CPU that has scheduled the Task + //*/ + //void transWasScheduled(SchedulableDevice* iCPU); + ////Resets the flag indicating that the Task has been scheduled + //void resetScheduledFlag(); + ////Invalidates the schedule of all cores the task is mapped onto + //void setRescheduleFlagForCores(); + ///Returns the current state hash + /** + \return Current state hash + */ + virtual HashValueType getStateHash()=0; + /////Returns whether the current task state has been encountered before + ////** + //\return Common execution flag + //*/ + //bool getCommonExecution() const; + /////Sets the common execution flag + ////** + //\param iCommonExecution Common execution flag + //*/ + //void setCommonExecution(bool iCommonExecution); + void refreshStateHash(const char* iLiveVarList); + void schedule2TXT(std::ostream& myfile) const; + int hasRunnableTrans(CPU* iCPU); +protected: + ///ID of the task + ID _ID; + ///Name of the task + std::string _name; + ///End of the last scheduled transaction of the task + TMLTime _endLastTransaction; + ///Pointer to the current command of the task + TMLCommand* _currCommand; + ///Pointer to the first command of the task + TMLCommand* _firstCommand; + ///Pointer to the CPU which currently executes the task, can be zero in case the Task is mapped onto a multicore CPU + CPU* _currentCPU; + ///Array containing all the cores the task is mapped onto + CPU** _cpus; + ///Number of cores assigned to the task + unsigned int _noOfCPUs; +#ifdef ADD_COMMENTS + ///Comment list + CommentList _commentList; + ///Actual position within comment list (used for HTML output) + CommentList::iterator _posCommentList; +#endif + ///List of scheduled transactions + TransactionList _transactList; + ///State variable for the VCD output + vcdTaskVisState _vcdOutputState; + ///Array of static comments concerning the control flow of the task + std::string* _comment; + ///Busy cycles since simulation start + TMLTime _busyCycles; + ///Sum of contention delay of CPU transactions + unsigned long _CPUContentionDelay; + ///Number of transactions which have been executed on a CPU + unsigned long _noCPUTransactions; + ///Look up table for task variables (by name) + VariableLookUpTableName _varLookUpName; + ///Look up table for task variables (by ID) + VariableLookUpTableID _varLookUpID; + ///Hash table containing commands + CommandHashTab _commandHash; + ///Is true until the first transaction of a task is executed + bool _justStarted; + ///Instace counter + static unsigned int _instanceCount; + ///Consecutive number of this task instance + unsigned int _myInstance; + ///Indicates whether this task has already been scheduled + /*bool _isScheduled; + ///Last established state Hash + HashValueType _lastStateHash; + ///Flag indicating whether the task state has been encoutered before + bool _commonExecution;*/ + HashAlgo _stateHash; + const char* _liveVarList; + bool _hashInvalidated; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f09894e557fb1bc00dadaa48c6619bf4df9342bc --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp @@ -0,0 +1,82 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLWaitCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLWaitCommand::TMLWaitCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint/*, Parameter* iStatParam*/):TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint),_channel(iChannel), _paramFunc(iParamFunc){ + _type = WAIT; +} + +void TMLWaitCommand::execute(){ + //std::cout << "execute wait " << std::endl; + _channel->read(); + //std::cout << "after ch->read " << std::endl; + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLWaitCommand::prepareNextTransaction(){ + //std::cout << "wait command length: " << _length << " progress: " << _progress << std::endl; + if (_progress==0 && _channel->getRequestChannel()) _task->finished(); + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _channel->testRead(_currTransaction); + return this; +} + +std::string TMLWaitCommand::toString() const{ + std::ostringstream outp; + outp << "Wait in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLWaitCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Wait " << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..4d42c69211f401bdb038c3e561f4a1c00d03a049 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.h @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLWaitCommandH +#define TMLWaitCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <Parameter.h> +#include <TMLEventChannel.h> + +///This class models the waiting for an event within a TML task. +class TMLWaitCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iParamFunc Pointer to a parameter function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLWaitCommand(ID iID, TMLTask* iTask,TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return dynamic_cast<TMLChannel*>(_channel);} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedWriteTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {if (_channel->getRequestChannel()) return "waitReq"; else return "wait";} + ///Sets a parameter data structure according to the parameters of the command + /** + \param ioParam Parameter data structure + */ + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFunc)(ioParam);} +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Pointer to the parameter function of the command + ParamFuncPointer _paramFunc; + TMLCommand* prepareNextTransaction(); +}; + +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..9aca09f289653d665b276543337b1ed507d0c922 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp @@ -0,0 +1,101 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLWriteCommand.h> +//#include <TMLChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLWriteCommand::TMLWriteCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _lengthFunc(iLengthFunc), _channel(iChannel){ + _length = iStatLength * _channel->getWidth(); + _type = WR; +} + +void TMLWriteCommand::execute(){ + //std::cout << "in write " << _channel << "\n"; + _channel->write(); + //std::cout << "channel not zero\n"; + //std::cout << _currTransaction->getVirtualLength() << " samples written\n"; + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); + //std::cout << "Trans written: " << _currTransaction->toString() << "\n"; + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLWriteCommand::prepareNextTransaction(){ + //std::cout << "WriteCommand prepare" << std::endl; + //if (_progress==0) _length = (_task->*_lengthFunc)(); + + //new test code + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)() * _channel->getWidth(); + if (_length==0){ + //std::cout << "WriteCommand len==0 " << std::endl; + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + //std::cout << "before test write" << std::endl; + //std::cout << "--begin-- TMLWriteCommand::prepareNextTransaction\n"; + _channel->testWrite(_currTransaction); + //std::cout << "--end-- TMLWriteCommand::prepareNextTransaction\n"; + //std::cout << "WriteCommand end prepare" << std::endl; + return this; +} + +std::string TMLWriteCommand::toString() const{ + std::ostringstream outp; + outp << "Write in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLWriteCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Write " << _length << "," << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..4de9c2bfda54e6c752928c4711d5234beed1a205 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.h @@ -0,0 +1,77 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLWriteCommandH +#define TMLWriteCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLChannel.h> + +///This class models write operations on TML channels. +class TMLWriteCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iChannel Pointer to the channel to which is written + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iStatLength Static length of command if applicable + */ + TMLWriteCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength=1); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return _channel;} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "wr";} +protected: + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Channel to which is written + TMLChannel* _channel; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..144e3905f96ab49560fa980ff9bf81c811d0c1c4 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.cpp @@ -0,0 +1,98 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLWriteMultCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLWriteMultCommand::TMLWriteMultCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel** iChannels, unsigned int iNbOfChannels, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _lengthFunc(iLengthFunc), _channels(iChannels), _nbOfChannels(iNbOfChannels){ + _length=iStatLength * _channels[0]->getWidth(); + _type = WR; +} + +void TMLWriteMultCommand::execute(){ + //std::cout << "--begin-- TMLWriteMultCommand::execute\n"; + for (unsigned int i=0; i< _nbOfChannels; i++){ + _channels[i]->write(); + } + //std::cout << "--end-- TMLWriteMultCommand::execute\n"; + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); + prepare(false); +} + +TMLCommand* TMLWriteMultCommand::prepareNextTransaction(){ + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)() * _channels[0]->getWidth(); + if (_length==0){ + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + TMLLength unitsLeft =_length-_progress; + //TMLLength minLength; + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, unitsLeft, _task->getEndLastTransaction(), _channels[0]); + _currTransaction = new TMLTransaction(this, unitsLeft, _task->getEndLastTransaction(), _channels[0]); + //_channels[0]->testWrite(_currTransaction); + //minLength=_currTransaction->getVirtualLength(); + //std::cout << "--begin-- TMLWriteMultCommand::prepareNextTransaction\n"; + for (unsigned int i=0; i< _nbOfChannels; i++){ + //_currTransaction->setVirtualLength(unitsLeft); + _channels[i]->testWrite(_currTransaction); + //minLength=min(minLength,_currTransaction->getVirtualLength()); + } + //std::cout << "--end-- TMLWriteMultCommand::prepareNextTransaction\n"; + //_currTransaction->setVirtualLength(minLength); + return this; +} + +std::string TMLWriteMultCommand::toString() const{ + std::ostringstream outp; + outp << "WriteMult in " << TMLCommand::toString() << " " << _channels[0]->toString(); + return outp.str(); +} + +std::string TMLWriteMultCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": WriteMult" << _length << "," << _channels[0]->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..723faa9de6d3e0df23257c6a71b01f93475a6a18 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLWriteMultCommandH +#define TMLWriteMultCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLChannel.h> + +///This class models write operations on several TML channels at a time. +class TMLWriteMultCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iChannels Pointer to an array of pointers to channels which may be written + \param iNbOfChannels Number of channels + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iStatLength Static length of command if applicable + */ + TMLWriteMultCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel** iChannels, unsigned int iNbOfChannels, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength=1); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return _channels[iIndex];} + inline unsigned int getNbOfChannels() const {return _nbOfChannels;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channels[iIndex]->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "wr";} +protected: + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Array of channels to which is written + TMLChannel** _channels; + ///Number of channels + unsigned int _nbOfChannels; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp new file mode 100755 index 0000000000000000000000000000000000000000..edccc4ad9674dd5dd7c0f66a310af3d92b6bc830 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp @@ -0,0 +1,166 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLbrbwChannel.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> + +TMLbrbwChannel::TMLbrbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength,TMLLength iContent, Priority iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses):TMLStateChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iWidth*iContent, iPriority, iLossRate, iMaxNbOfLosses),_length(iLength){ +} + +void TMLbrbwChannel::testWrite(TMLTransaction* iTrans){ + _nbToWrite=iTrans->getVirtualLength(); + _writeTrans=iTrans; + //std::cout << "testWrite called by " << _writeTrans->getCommand()->toShortString() << std::endl; + setTransactionLength(); + //std::cout << "TestWrite " << iLength<< " writeTrans: " << _writeTrans<< " transLen: "<< _writeTrans->getVirtualLength()<< std::endl; +} + +void TMLbrbwChannel::testRead(TMLTransaction* iTrans){ + _nbToRead=iTrans->getVirtualLength(); + _readTrans=iTrans; + setTransactionLength(); + //std::cout << "TestRead " << iLength<< " readTrans: " << _readTrans << " transLen: "<< _readTrans->getVirtualLength()<< std::endl; +} + +void TMLbrbwChannel::write(){ +#ifdef LOSS_ENABLED + if (_maxNbOfLosses > _nbOfLosses){ + TMLLength aLostBytes = _writeTrans->getVirtualLength() * _lossRate + _lossRemainder; + //std::cout << "lost bytes: " << aLostBytes << "\n"; + _lossRemainder = aLostBytes % 100; + //aLostBytes /= 100; + aLostBytes = min(aLostBytes/100, _maxNbOfLosses - _nbOfLosses); + _content += _writeTrans->getVirtualLength() - aLostBytes; + std::cout << "Bytes to write: " << _writeTrans->getVirtualLength()-aLostBytes << "\n"; + std::cout << "Bytes lost: " << aLostBytes << "\n"; + _nbOfLosses += aLostBytes; + }else{ +#endif + //std::cout << "write all " << _writeTrans->getVirtualLength() << "\n"; + _content+=_writeTrans->getVirtualLength(); +#ifdef LOSS_ENABLED + } +#endif + if (_readTrans!=0 && _readTrans->getVirtualLength()==0) _readTrans->setRunnableTime(_writeTrans->getEndTime()); + _nbToWrite=0; + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_writeTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(_writeTrans); +#endif + _writeTrans=0; + setTransactionLength(); +} + +bool TMLbrbwChannel::read(){ + if (_content<_readTrans->getVirtualLength()){ + return false; + }else{ + _content-=_readTrans->getVirtualLength(); + _nbToRead=0; + if (_writeTrans!=0 && _writeTrans->getVirtualLength()==0) _writeTrans->setRunnableTime(_readTrans->getEndTime()); + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_readTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(_readTrans); +#endif + _readTrans=0; + setTransactionLength(); + return true; + } +} + +void TMLbrbwChannel::setTransactionLength() const{ + if (_writeTrans!=0){ + if (_nbToRead==0){ + _writeTrans->setVirtualLength(min(_length-_content,_nbToWrite)); + _underflow=false; + //std::cout << _name << ": set write trans len, no read trans, len = " << _writeTrans->getVirtualLength() << std::endl; + }else{ + if (_nbToRead<=_content){ + //read could be executed right away + _writeTrans->setVirtualLength(min(_length-_content,_nbToWrite)); + _underflow=false; + }else{ + //read could wake up because of write + _writeTrans->setVirtualLength(min(_length-_content,_nbToRead-_content,_nbToWrite)); + _underflow=true; + } + //std::cout << _name << ": set write trans len, with read trans, len = " << _writeTrans->getVirtualLength() << std::endl; + } + } + if (_readTrans!=0){ + if (_nbToWrite==0){ + _readTrans->setVirtualLength(min(_content,_nbToRead)); + _overflow=false; + //std::cout << _name << ": set read trans len, no write trans, len = " << _readTrans->getVirtualLength() << std::endl; + }else{ + if (_nbToWrite<=_length-_content){ + //write could be executed right away + _readTrans->setVirtualLength(min(_content,_nbToRead)); + _overflow=false; + }else{ + //write could wakeup because of read + _readTrans->setVirtualLength(min(_content,_nbToWrite-(_length-_content),_nbToRead)); + _overflow=true; + } + //std::cout << _name << ": set read trans len, with write trans, len = " << _readTrans->getVirtualLength() << std::endl; + + } + } +} + +std::string TMLbrbwChannel::toString() const{ + std::ostringstream outp; + outp << _name << "(brbw) len:" << _length << " content:" << _content << " nbToRead:" << _nbToRead << " nbToWrite:" << _nbToWrite; + return outp.str(); +} + +TMLLength TMLbrbwChannel::insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + _content=0; + aNbToInsert=0; + }else{ + aNbToInsert=min(iNbOfSamples, _length-_content); + iNbOfSamples+=aNbToInsert; + } + setTransactionLength(); + return aNbToInsert; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.h new file mode 100755 index 0000000000000000000000000000000000000000..65256532243ab9b995bb53ab875a76185772f0e2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.h @@ -0,0 +1,84 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLbrbwChannelH +#define TMLbrbwChannelH + +#include <definitions.h> +#include <TMLStateChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read blocking write channel (finite blocking FIFO). +class TMLbrbwChannel:public TMLStateChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iLength Length of the channel + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLbrbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength, + TMLLength iContent, Priority iPriority, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0); + void testWrite(TMLTransaction* iTrans); + void testRead(TMLTransaction* iTrans); + void write(); + bool read(); + inline TMLTask* getBlockedReadTask() const {return _readTask;} + inline TMLTask* getBlockedWriteTask() const {return _writeTask;} + std::string toString() const; + virtual TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam); +protected: + ///Determines the virtual length of read and write transactions based on the state of the channel + void setTransactionLength() const; + ///Length of the channel + TMLLength _length; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bb6c09afa83157cf985a3cb39817c0909c22ba0a --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.cpp @@ -0,0 +1,151 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLbrnbwChannel.h> +#include <TMLTransaction.h> + +TMLbrnbwChannel::TMLbrnbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, Priority iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses): TMLStateChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iWidth*iContent, iPriority, iLossRate,iMaxNbOfLosses){ + _overflow=false; +} + +void TMLbrnbwChannel::testWrite(TMLTransaction* iTrans){ + _nbToWrite=iTrans->getVirtualLength(); + _writeTrans=iTrans; + setTransactionLength(); +} + +void TMLbrnbwChannel::testRead(TMLTransaction* iTrans){ + //std::cout << "brnbw test read."<< std::endl; + _nbToRead=iTrans->getVirtualLength(); + _readTrans=iTrans; + setTransactionLength(); +} + +void TMLbrnbwChannel::write(){ + std::cout << "Write in channel " << _writeTrans << "\n"; +#ifdef LOSS_ENABLED + if (_maxNbOfLosses > _nbOfLosses){ + //TMLLength aLostBytes = _writeTrans->getVirtualLength() * _lossRate + _lossRemainder; + TMLLength aLostBytes = _writeTrans->getVirtualLength() * _lossRate + _lossRemainder; + _lossRemainder = aLostBytes % 100; + //aLostBytes /= 100; + aLostBytes = min(aLostBytes/100, _maxNbOfLosses - _nbOfLosses); + _content += _writeTrans->getVirtualLength() - aLostBytes; + //std::cout << "Bytes to write: " << _writeTrans->getVirtualLength()-aLostBytes << "\n"; + //std::cout << "Bytes lost: " << aLostBytes << "\n"; + _nbOfLosses += aLostBytes; + }else{ +#endif + //std::cout << "write all " << _writeTrans->getVirtualLength() << "\n"; + _content+=_writeTrans->getVirtualLength(); +#ifdef LOSS_ENABLED + } +#endif + if (_readTrans!=0 && _readTrans->getVirtualLength()==0) _readTrans->setRunnableTime(_writeTrans->getEndTime()); + _nbToWrite=0; + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_writeTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(_writeTrans); +#endif + _writeTrans=0; + setTransactionLength(); +} + +bool TMLbrnbwChannel::read(){ + if (_content<_readTrans->getVirtualLength()){ + return false; + }else{ + _content-=_readTrans->getVirtualLength(); + _nbToRead=0; + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_readTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(_readTrans); +#endif + _readTrans=0; + setTransactionLength(); + return true; + } +} + +void TMLbrnbwChannel::setTransactionLength() const{ + if (_writeTrans!=0){ + if (_nbToRead==0){ + //_writeTrans->setVirtualLength(min(_nbToWrite,_burstSize)); + _writeTrans->setVirtualLength(_nbToWrite); + _underflow=false; + }else{ + if (_nbToRead<=_content){ + //read could be executed right away + //_writeTrans->setVirtualLength(min(_nbToWrite,_burstSize)); + _writeTrans->setVirtualLength(_nbToWrite); + _underflow=false; + }else{ + //read could wake up because of write + //_writeTrans->setVirtualLength(min(_nbToRead-_content,_nbToWrite,_burstSize)); + _writeTrans->setVirtualLength(min(_nbToRead-_content,_nbToWrite)); + _underflow=true; + } + } + } + if (_readTrans!=0){ + //_readTrans->setVirtualLength(min(_content,_nbToRead,_burstSize)); + _readTrans->setVirtualLength(min(_content,_nbToRead)); + } +} + +std::string TMLbrnbwChannel::toString() const{ + std::ostringstream outp; + outp << _name << "(brnbw) content:" << _content << " nbToRead:" << _nbToRead << " nbToWrite:" << _nbToWrite; + return outp.str(); +} + +TMLLength TMLbrnbwChannel::insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + _content=0; + aNbToInsert=0; + }else{ + _content+=iNbOfSamples; + aNbToInsert=iNbOfSamples; + } + setTransactionLength(); + return aNbToInsert; +} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..e2cd76879ac6c697623c1382f0a48456079da248 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLbrnbwChannelH +#define TMLbrnbwChannelH + +#include <definitions.h> +#include <TMLStateChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read non blocking write channel (infinite FIFO). +class TMLbrnbwChannel:public TMLStateChannel{ +public: + ///Constructor + /** + \param iID iID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLbrnbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, Priority iPriority, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0); + void testWrite(TMLTransaction* iTrans); + void testRead(TMLTransaction* iTrans); + void write(); + bool read(); + inline TMLTask* getBlockedReadTask() const {return _readTask;} + inline TMLTask* getBlockedWriteTask() const {return 0;} + std::string toString() const; + virtual TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam); +protected: + ///Determines the virtual length of read and write transactions based on the state of the channel + void setTransactionLength() const; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4b3c84202f94073af228f3dd6c99bf140b2aa6d4 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.cpp @@ -0,0 +1,89 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLnbrnbwChannel.h> +#include <TMLTransaction.h> + +TMLnbrnbwChannel::TMLnbrnbwChannel(unsigned int iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, unsigned int iPriority): TMLChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iPriority){ +} + +void TMLnbrnbwChannel::testWrite(TMLTransaction* iTrans){ + _writeTrans=iTrans; + iTrans->setVirtualLength(iTrans->getVirtualLength()); +} + +void TMLnbrnbwChannel::testRead(TMLTransaction* iTrans){ + _readTrans=iTrans; + iTrans->setVirtualLength(iTrans->getVirtualLength()); +} + +void TMLnbrnbwChannel::write(){ + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_writeTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(_writeTrans); +#endif + _writeTrans=0; +} + +bool TMLnbrnbwChannel::read(){ + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_readTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(_readTrans); +#endif + _readTrans=0; + return true; +} + +//TMLTask* TMLnbrnbwChannel::getBlockedReadTask() const{ +// return 0; +//} + +//TMLTask* TMLnbrnbwChannel::getBlockedWriteTask() const{ +// return 0; +//} + +std::string TMLnbrnbwChannel::toString() const{ + std::ostringstream outp; + outp << _name << "(nbrnbw)"; + return outp.str(); +} + +//void TMLnbrnbwChannel::getStateHash(HashAlgo* iHash) const{ +//} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..0461d3ebe90c4ba8ed2508cd80056a4b90ff154b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.h @@ -0,0 +1,76 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLnbrnbwChannelH +#define TMLnbrnbwChannelH + +#include <definitions.h> +#include <TMLChannel.h> + +class TMLCommand; +class Bus; +class HashAlgo; + +///This class models a non blocking read non blocking write channel. +class TMLnbrnbwChannel:public TMLChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iPriority Priority of the channel + */ + TMLnbrnbwChannel(unsigned int iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, unsigned int iPriority); + void testWrite(TMLTransaction* iCommand); + void testRead(TMLTransaction* iCommand); + void write(); + bool read(); + inline TMLTask* getBlockedReadTask() const {return 0;} + inline TMLTask* getBlockedWriteTask() const {return 0;} + std::string toString() const; + inline void getStateHash(HashAlgo* iHash) const {} +protected: +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bridge.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bridge.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6f32276f8a7cdae9b49d916f8f8152b276cf5405 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bridge.cpp @@ -0,0 +1,67 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <Bridge.h> +#include <SchedulableCommDevice.h> +#include <TMLChannel.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> + +Bridge::Bridge(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iBufferSize): Slave(iID, iName), _timePerCycle(iTimePerCycle), _bufferSize(iBufferSize){ +} + +void Bridge::CalcTransactionLength(TMLTransaction* iTrans) const{ +} + +//Master* Bridge::getConnectedMaster(){ +// return dynamic_cast<Master*>(this); +//} + +Bridge::~Bridge(){ +} + +void Bridge::addBusMaster(BusMaster* iMaster){ +} + +//void Bridge::schedule2HTML(std::ofstream& myfile){ +//} + +//void Bridge::schedule2TXT(std::ofstream& myfile){ +//} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bridge.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bridge.h new file mode 100644 index 0000000000000000000000000000000000000000..a3463b0f31a79822e50661bd078cbb232e23d660 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bridge.h @@ -0,0 +1,87 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef BridgeH +#define BridgeH + +#include <Slave.h> +#include <SchedulableDevice.h> +#include <definitions.h> + +class TMLTransaction; + +///Bridge component +class Bridge: public Slave{ +public: + ///Constructor + /** + \param iID ID of the bridge + \param iName Name of the bridge + \param iTimePerCycle 1/Bridge frequency + \param iBufferSize Buffer size + */ + Bridge(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iBufferSize); + ///Accounts for the delay caused by the bridge + /** + \param iTrans Pointer to the transaction to be processed + */ + void CalcTransactionLength(TMLTransaction* iTrans) const; + /////Returns a pointer to the connected master device if any + ////** + //\return Pointer to the master device + //*/ + //Master* getConnectedMaster(); + //void schedule2HTML(std::ofstream& myfile); + //void schedule2TXT(std::ofstream& myfile); + ///Adds a new bus master to the internal list + /** + \param iMaster Pointer to bus master + */ + void addBusMaster(BusMaster* iMaster); + ///Destructor + ~Bridge(); +protected: + ///1/Bridge frequency + TMLTime _timePerCycle; + ///Buffer size + unsigned int _bufferSize; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bus.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bus.cpp new file mode 100644 index 0000000000000000000000000000000000000000..870998d3fb2b1668c846b44f610c595b8b3472b5 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bus.cpp @@ -0,0 +1,304 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <Bus.h> +#include <CPU.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> +#include <TMLChannel.h> +//#include <TransactionListener.h> +#include <WorkloadSource.h> + +Bus::Bus(ID iID, std::string iName, WorkloadSource* iScheduler, TMLLength iBurstSize, unsigned int ibusWidth, TMLTime iTimePerSample, bool iChannelBasedPrio): SchedulableCommDevice(iID, iName, iScheduler, iChannelBasedPrio), _burstSize(iBurstSize), _schedulingNeeded(true), _timePerSample(iTimePerSample), _busWidth(ibusWidth){} + +Bus::~Bus(){ + //delete _scheduler; + //std::cout << _transactList.size() << " elements in List of " << _name << ", busy cycles: " << _busyCycles << std::endl; + //for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + // std::cout << (*i)->toString() << "\n"; + //} +} + +//Determines the next bus transaction to be executed (_nextTransaction) and +//computes the start time and length +void Bus::schedule(){ + //Pointer to the next transaction to be executed + _nextTransaction=0; + //Get the end time of the last scheduled transaction. _scheduler is a member + //variable and schedule a member function of different classes that mask the + //type of scheduler + TMLTime aTimeSlice = _scheduler->schedule(_endSchedule); + + _nextTransaction=_scheduler->getNextTransaction(_endSchedule); + if (_nextTransaction!=0){ + //_scheduler->transWasScheduled(); + //Sets the virtual length of the transaction (number of execution units already carried out by previous transactions) + _nextTransaction->setVirtualLength(min(_nextTransaction->getVirtualLength(), _burstSize)); + calcStartTimeLength(aTimeSlice); + } + _schedulingNeeded=false; +#ifdef DEBUG_BUS + if (_nextTransaction==0) + std::cout << "Bus:schedule: decision of BUS " << _name << ": no transaction" << std::endl; + else + std::cout << "Bus:schedule: decision of BUS " << _name << ": " << _nextTransaction->toString() << std::endl; +#endif +} + +//void Bus::registerTransaction(){ +// _schedulingNeeded=true; +// _nextTransaction=0; +//} + + +//Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions +bool Bus::addTransaction(TMLTransaction* iTransToBeAdded){ + //std::cout << "Bus add trans " << _nextTransaction << "\n"; + _endSchedule = _nextTransaction->getEndTime(); + //std::cout << "set end time to " << _endSchedule << "\n"; + //_transactList.push_back(_nextTransaction); +#ifdef TRANSLIST_ENABLED + _transactList.push_back(iTransToBeAdded); //NEW!!!!! +#endif + _busyCycles += _nextTransaction->getOperationLength(); +#ifdef DEBUG_BUS + std::cout << "Bus::addTrans: add trans at bus " << _name << ": " << _nextTransaction->toString() << std::endl; +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_TRANS_EXECUTED(_nextTransaction); +#endif + _nextTransaction = 0; + _schedulingNeeded=true; + //std::cout << "End Bus add trans\n"; + return true; +} + +//Calculates the start time and the length of the next transaction +void Bus::calcStartTimeLength(TMLTime iTimeSlice) const{ + _nextTransaction->setStartTime(max(static_cast<TMLTime>(_endSchedule)-static_cast<TMLTime>(_nextTransaction->getPenalties()),static_cast<TMLTime>(_nextTransaction->getStartTime()))); + + //if (_nextTransaction->getOperationLength()!=-1){ + if (iTimeSlice!=0){ + _nextTransaction->setVirtualLength(max(min(_nextTransaction->getVirtualLength(), iTimeSlice *_busWidth/_timePerSample),(TMLTime)1)); + } + TMLTime aLength = _nextTransaction->getVirtualLength(); + + aLength = (aLength%_busWidth == 0)? (aLength/_busWidth)*_timePerSample : (aLength/_busWidth + 1)*_timePerSample; + _nextTransaction->setLength(max(aLength, _nextTransaction->getOperationLength())); + //_nextTransaction->setLength(aLength); //TODO: this is not correct if speed of buses differ, max should be taken + + Slave* aSlave = _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + if (aSlave!=0) aSlave->CalcTransactionLength(_nextTransaction); +} + +std::string Bus::toShortString() const{ + std::ostringstream outp; + //outp << "bus" << _ID; + outp << "bus" << _name; + return outp.str(); +} + +//Writes a HTML representation of the schedule to an output file +void Bus::schedule2HTML(std::ofstream& myfile) const{ + TMLTime aCurrTime=0; + TMLTransaction* aCurrTrans; + unsigned int aBlanks,aLength,aColor; + if (_transactList.empty()) return; + myfile << "<h2><span>Scheduling for device: "<< _name <<"</span></h2>\n<table>\n<tr>"; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + aCurrTrans=*i; + //if (aCurrTrans->getVirtualLength()==0) continue; + aBlanks=aCurrTrans->getStartTimeOperation()-aCurrTime; + if (aBlanks>0){ + if (aBlanks==1) + myfile << "<td title=\"idle time\" class=\"not\"></td>\n"; + else + myfile << "<td colspan=\""<< aBlanks <<"\" title=\"idle time\" class=\"not\"></td>\n"; + } + aLength=aCurrTrans->getOperationLength(); + //aColor=(((unsigned int)(aCurrTrans->getCommand()->getTask())) & 15)+1; + aColor=aCurrTrans->getCommand()->getTask()->getInstanceNo() & 15; + if (aLength==1) + myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + else + myfile << "<td colspan=\"" << aLength << "\" title=\"" << aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + aCurrTime=aCurrTrans->getEndTime(); + } + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength++) myfile << "<th></th>"; + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength+=5) myfile << "<td colspan=\"5\" class=\"sc\">" << aLength << "</td>"; + myfile << "</tr>\n</table>\n"; +} + +//Writes a plain text representation of the schedule to an output file +void Bus::schedule2TXT(std::ofstream& myfile) const{ + myfile << "========= Scheduling for device: "<< _name << " =========\n" ; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + myfile << (*i)->toShortString() << std::endl; + } +} + +//Returns the next signal change (for vcd output) +void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ + //std::ostringstream outp; + //std::cout << _transactList.size() << " elements in List of " << _name << std::endl; + if (iInit){ + _posTrasactListVCD=_transactList.begin(); + _previousTransEndTime=0; + _vcdOutputState=INIT_BUS; + } + if (_posTrasactListVCD == _transactList.end()){ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + //oSigChange=outp.str(); + //oNoMoreTrans=true; + //return _previousTransEndTime; + new (oSigData) SignalChangeData(END_IDLE_BUS, _previousTransEndTime, this); + }else{ + TMLTransaction* aCurrTrans=*_posTrasactListVCD; + //oNoMoreTrans=false; + switch (_vcdOutputState){ + case END_READ_BUS: + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime && (*_posTrasactListVCD)->getCommand()->getTask()==(*_posTrasactListVCD)->getChannel()->getBlockedReadTask()); + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(END_WRITE_BUS) << "bus" << _ID; + _vcdOutputState=END_WRITE_BUS; + new (oSigData) SignalChangeData(END_WRITE_BUS, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + _vcdOutputState=END_IDLE_BUS; + //if (_posTrasactListVCD == _transactList.end()) oNoMoreTrans=true; + new (oSigData) SignalChangeData(END_IDLE_BUS, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case END_WRITE_BUS: + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime && (*_posTrasactListVCD)->getCommand()->getTask()==(*_posTrasactListVCD)->getChannel()->getBlockedWriteTask()); + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(END_READ_BUS) << "bus" << _ID; + _vcdOutputState=END_READ_BUS; + new (oSigData) SignalChangeData(END_READ_BUS, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + _vcdOutputState=END_IDLE_BUS; + //if (_posTrasactListVCD == _transactList.end()) oNoMoreTrans=true; + new (oSigData) SignalChangeData(END_IDLE_BUS, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case INIT_BUS: + if (aCurrTrans->getStartTimeOperation()!=0){ + _vcdOutputState=END_IDLE_BUS; + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + //oSigChange=outp.str(); + new (oSigData) SignalChangeData(END_IDLE_BUS, 0, this); + //return 0; + return; + } + case END_IDLE_BUS: + if (aCurrTrans->getCommand()->getTask()==aCurrTrans->getChannel()->getBlockedReadTask()){ + _vcdOutputState=END_READ_BUS; + new (oSigData) SignalChangeData(END_READ_BUS, aCurrTrans->getStartTimeOperation(), this); + //outp << VCD_PREFIX << vcdValConvert(END_READ_BUS) << "bus" << _ID; + }else{ + _vcdOutputState=END_WRITE_BUS; + new (oSigData) SignalChangeData(END_WRITE_BUS, aCurrTrans->getStartTimeOperation(), this); + //outp << VCD_PREFIX << vcdValConvert(END_WRITE_BUS) << "bus" << _ID; + } + //oSigChange=outp.str(); + //return aCurrTrans->getStartTimeOperation(); + break; + } + } + //return 0; +} + +//Resets a simulation component to its initial state +void Bus::reset(){ + //std::cout << "Bus reset" << std::endl; + _scheduler->reset(); + SchedulableDevice::reset(); + _nextTransaction=0; + _schedulingNeeded=true; + _transactList.clear(); //List containing all already scheduled transactions + _busyCycles=0; +} + +//Writes benchmarking data to a given stream +void Bus::streamBenchmarks(std::ostream& s) const{ + s << TAG_BUSo << " id=\"" << _ID << "\" name=\"" << _name << "\">" << std::endl; + if (_simulatedTime!=0) s << TAG_UTILo << (static_cast<float>(_busyCycles)/static_cast<float>(_simulatedTime)) << TAG_UTILc; + s << TAG_BUSc; +} + +//Deserializes the object +std::istream& Bus::readObject(std::istream &is){ + SchedulableDevice::readObject(is); + _scheduler->readObject(is); +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(is,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: Bus " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif +#endif + return is; +} + +//Serializes the object +std::ostream& Bus::writeObject(std::ostream &os){ + SchedulableDevice::writeObject(os); + _scheduler->writeObject(os); +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(os,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: Bus " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif +#endif + return os; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bus.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bus.h new file mode 100644 index 0000000000000000000000000000000000000000..8229488911b07c94e18a4ead03b54c6393010f06 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Bus.h @@ -0,0 +1,138 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef BusH +#define BusH + +#include <definitions.h> +#include <SchedulableCommDevice.h> +#include <TraceableDevice.h> + +class CPU; +class TMLTransaction; + +enum vcdBusVisState + { + END_IDLE_BUS, + END_READ_BUS, + END_WRITE_BUS, + INIT_BUS +}; + +///Simulates the bahavior of a bus shared by several master devices +class Bus: public SchedulableCommDevice, public TraceableDevice { +public: + ///Constructor + /** + \param iID ID of the bus + \param iName Name of the bus + \param iScheduler Pointer to the scheduler object + \param iBurstSize Size of an atomic bus transaction + \param ibusWidth Bus width + \param iTimePerSample Transfer time per sample + \param iChannelBasedPrio Flag indicating whether bus master based or channel based priorities are used to arbitrate the bus + */ + Bus(ID iID, std::string iName, WorkloadSource* iScheduler, TMLLength iBurstSize, unsigned int ibusWidth, TMLTime iTimePerSample, bool iChannelBasedPrio); + ///Destructor + virtual ~Bus(); + ///Add a transaction waiting for execution to the internal list + inline void registerTransaction() {_schedulingNeeded=true; _nextTransaction=0;} + ///Determines the next bus transaction to be executed + void schedule(); + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + bool addTransaction(TMLTransaction* iTransToBeAdded); + ///Returns a pointer to the transaction determined by the scheduling algorithm + /** + \return Pointer to transaction + */ + inline TMLTransaction* getNextTransaction() { + if (_schedulingNeeded) schedule(); + return _nextTransaction; + } + ///Returns the size of an atomic bus transaction + /** + \return Burst size + */ + inline TMLLength getBurstSize() const {return _burstSize;} + ///Returns a string representation of the Bus + /** + \return Detailed string representation + */ + inline std::string toString() const {return _name;} + ///Returns a short string representation of the bus + /** + \return Short string representation + */ + std::string toShortString() const; + ///Writes a HTML representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2HTML(std::ofstream& myfile) const; + ///Writes a plain text representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2TXT(std::ofstream& myfile) const; + void getNextSignalChange(bool iInit, SignalChangeData* oSigData); + virtual void streamBenchmarks(std::ostream& s) const; + virtual void reset(); + inline void streamStateXML(std::ostream& s) const {streamBenchmarks(s);} + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); +protected: + ///Calculates the start time and the length of the next transaction + /** + \param iTimeSlice Bus time slice granted by the scheduler + */ + void calcStartTimeLength(TMLTime iTimeSlice) const; + ///Size of an atomic bus transaction + TMLLength _burstSize; + ///Dirty flag of the current scheduling decision + bool _schedulingNeeded; + ///Inverse bus speed + TMLTime _timePerSample; + ///Bus width in bytes + unsigned int _busWidth; + ///State variable for the VCD output + vcdBusVisState _vcdOutputState; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/BusMaster.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/BusMaster.h new file mode 100644 index 0000000000000000000000000000000000000000..7515e32130bc89cd65ad4db5b699233ee2a141a3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/BusMaster.h @@ -0,0 +1,261 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef BusMasterH +#define BusMasterH + +#include <definitions.h> +#include <WorkloadSource.h> +#include <TMLTransaction.h> +#include <SchedulableDevice.h> +#include <TMLChannel.h> +class TMLTransaction; +class SchedulableCommDevice; + +///Class serving as interface between CPUs and buses (more precisely bus schedulers) +class BusMaster: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the bus master + \param iPriority Priority of the bus master + \param iNbOfBuses Number of buses(bus channels) the master is connected to + \param iBusArray Pointer to the buses(bus channels) the master is connected to + */ + BusMaster(const std::string& iName, Priority iPriority, unsigned int iNbOfBuses, SchedulableCommDevice** iBusArray): WorkloadSource(iPriority), _name(iName), _nbOfBuses(iNbOfBuses), _busArray(iBusArray), _busSortArray(0), _nextTransaction(0), _nextBus(iBusArray[0]), /*_lastSimTime(-1),*/ _contentionDelay(0), _noTransactions(0), _channelBasedPrioEnabled(false), _channelBasedPrio(0){ + _busSortArray=new SchedulableCommDevice*[_nbOfBuses]; + for (unsigned int i=0; i <_nbOfBuses; i++) _busSortArray[i]=_busArray[i]; + _channelBasedPrioEnabled = _busArray[0]->ChannelBasedPrio(); + } + + ///Destructor + ~BusMaster(){ + std::cout << _name << ": Bus Master deleted\n"; + delete[] _busArray; + delete[] _busSortArray; + } + + void reset(){ + _nextTransaction=0; + //_lastSimTime=-1; + _nextBus=_busArray[0]; + _contentionDelay=0; + _noTransactions=0; + } + + void registerTransaction(TMLTransaction* iTrans){ + if (iTrans!=_nextTransaction){ + //std::cout << _name << ": registerTransaction" << std::endl; + for (unsigned int i=0; i <_nbOfBuses; i++) _busArray[i]->registerTransaction(); + _nextTransaction=iTrans; + if (_channelBasedPrioEnabled && iTrans!=0){ + _channelBasedPrio=iTrans->getChannel()->getPriority(); + } + } + } + + TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const{ + if (_nextTransaction==0) return 0; + for (unsigned int i=0; i <_nbOfBuses; i++){ + //std::cout << "Raw version allowed\n"; + if ((*(_busArray[i])).SchedulableDevice::getNextTransaction()==_nextTransaction){ + //std::cout << _name << "trans already scheduled by: " << _busArray[i]->toString() << "\n"; + return 0; + } + } + return _nextTransaction; + } + + void addTransaction(TMLTransaction* iTransToBeAdded){ + //std::cout << _name << ": add Trans\n"; + //std::cout << _name << ": trans added on Bus: " << _nextBus->toString() << std::endl; + _nextBus->addTransaction(iTransToBeAdded); + _nextTransaction=0; + //std::cout << _name << ": end add" << std::endl; + } + + ///Indicates whether bus access has been granted + /** + \return Returns true if access has been granted + */ + bool accessGranted(){ + //std::cout << _name << ":access granted " << "\n"; + if (_nextTransaction==0){ + //std::cout << _name << ":branch no trans" << "\n"; + return false; + } + if (_nbOfBuses==1) { + //std::cout << _name << ": branch 1 bus\n"; + //bool test = _nextTransaction==_busArray[0]->getNextTransaction(); + return (_nextTransaction==_busArray[0]->getNextTransaction()); + //return test; + } + sortBusList(); + //_transWasScheduled=false; + //std::cout << "Bus scheduling initiated by: " << _name << "\n"; + for (unsigned int i=0; i <_nbOfBuses; i++){ + if (_busSortArray[i]->getNextTransaction()==_nextTransaction){ + _nextBus=_busSortArray[i]; + //std::cout << _name << ":access granted end true, bus: "<< _nextBus->toString() << "\n"; + return true; + } + } + //std::cout << _name << ":access granted end false" << "\n"; + return false; + } + + ///Returns the pointer to the bus the master is connected to + /** + \return Pointer to bus + */ + SchedulableCommDevice* getBus(){ + return _busArray[0]; + } + + /*void transWasScheduled(){ + _transWasScheduled=true; + _addTransCheck=_addTransFlag; + _lastSimTime = SchedulableDevice::getSimulatedTime(); + }*/ + + ///Updates the bus contention statistics whenever a new bus transaction is executed + /** + \param iContentionDelay Contention delay of the transaction + */ + void addBusContention(unsigned long iContentionDelay){ + _contentionDelay+=iContentionDelay; + _noTransactions++; + } + + ///Writes benchmarking data to a given stream + /** + \param s Reference to an output stream + */ + void streamBenchmarks(std::ostream& s) const{ + if (_noTransactions!=0) + s << TAG_CONTDELo << " busID=\"" << _busArray[0]->getID()<< "\" busName=\"" << _busArray[0]->toString() << "\">" << (static_cast<float>(_contentionDelay)/static_cast<float>(_noTransactions)) << TAG_CONTDELc << std::endl; + } + + std::string toString() const{ + return _name; + } + + Priority getPriority() const{ + return (_channelBasedPrioEnabled)?_channelBasedPrio: _priority; + } + + std::istream& readObject(std::istream &is){ + WorkloadSource::readObject(is); +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(is,_contentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: BusMaster " << _name << " contentionDelay: " << _contentionDelay << std::endl; +#endif + READ_STREAM(is,_noTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: BusMaster " << _name << " noTransactions: " << _noTransactions << std::endl; +#endif +#endif + return is; + } + std::ostream& writeObject(std::ostream &os){ + WorkloadSource::writeObject(os); +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(os,_contentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: BusMaster " << _name << " contentionDelay: " << _contentionDelay << std::endl; +#endif + WRITE_STREAM(os,_noTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: BusMaster " << _name << " noTransactions: " << _noTransactions << std::endl; +#endif +#endif + return os; + } + +protected: + ///Sorts the bus list by ascending finish times of the last scheduled transaction + void sortBusList(){ + //std::cout << _name << ": sort result: "; + unsigned int aBound = _nbOfBuses; + bool aSwapped; + do{ + aSwapped=false; + aBound--; + for(unsigned int i=0; i<aBound; i++){ + if (_busSortArray[i]->getEndSchedule() > _busSortArray[i+1]->getEndSchedule()){ + SchedulableCommDevice* aTmp = _busSortArray[i]; + _busSortArray[i] = _busSortArray[i+1]; + _busSortArray[i+1] = aTmp; + aSwapped= true; + } + } + }while (aSwapped); + /*for(unsigned int i=0; i<_nbOfBuses; i++){ + std::cout << ", " << _busSortArray[i]->toString(); + } + std::cout << " " << _name << ": end sort" << std::endl;*/ + } + + ///Name + std::string _name; + ///Number of connected channels + unsigned int _nbOfBuses; + ///Pointer to the bus the master is connected to + SchedulableCommDevice** _busArray; + ///Array containing a sorted array of bus pointers (criterion: schedule end time) + SchedulableCommDevice** _busSortArray; + ///Transaction + TMLTransaction* _nextTransaction; + ///Next bus pointer + SchedulableCommDevice* _nextBus; + ////Flag indicating at what simulation time _nextTransaction was scheduled + //mutable TMLTime _lastSimTime; + ///Sum of the contention delay of all registered transactions + unsigned long _contentionDelay; + ///Number of registered transactions + unsigned long _noTransactions; + ///Flag indicating whether channel based priorities apply + bool _channelBasedPrioEnabled; + ///Channel based priority if applicable + Priority _channelBasedPrio; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/CPU.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/CPU.h new file mode 100755 index 0000000000000000000000000000000000000000..c0093c9964d0fb71a8ac8960c1602a19caf72e94 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/CPU.h @@ -0,0 +1,172 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef CPUH +#define CPUH + +#include <definitions.h> +#include <SchedulableDevice.h> +#include <SchedulableCommDevice.h> +#include <TraceableDevice.h> +#include <BusMaster.h> +#include <WorkloadSource.h> +#include <TMLTask.h> +#include <TMLCommand.h> + +class TMLTask; +class TMLTransaction; +class Bus; + +enum vcdCPUVisState + { + END_IDLE_CPU, + END_PENALTY_CPU, + END_TASK_CPU +}; + +///Represents the base class for CPUs +class CPU: public SchedulableDevice, public TraceableDevice{ +public: + ///Constructor + /** + \param iID ID of the device + \param iName Name of the device + \param iScheduler Pointer to the scheduler object + */ + CPU(ID iID, std::string iName, WorkloadSource* iScheduler): SchedulableDevice(iID, iName, iScheduler), _lastTransaction(0)/*,_schedulingNeeded(false)*/{ + } + ///Destructor + virtual ~CPU(){ + } + ///Stores a new task in the internal task list + /** + \param iTask Pointer to the task to add + */ + virtual void registerTask(TMLTask* iTask){ + _taskList.push_back(iTask); + if (_scheduler!=0) _scheduler->addWorkloadSource(iTask); + } + ///Truncates the next transaction at time iTime + /** + \param iTime Indicates at what time the transaction should be truncated + \return Returns true if scheduling of device has been performed + */ + virtual void truncateAndAddNextTransAt(TMLTime iTime)=0; + //virtual TMLTime truncateNextTransAt(TMLTime iTime)=0; + ///Adds a new bus master to the internal list + /** + \param iMaster Pointer to bus master + */ + virtual void addBusMaster(BusMaster* iMaster){ + _busMasterList.push_back(iMaster); + } + virtual void reset(){ + SchedulableDevice::reset(); + _lastTransaction=0; + //_schedulingNeeded=false; + } + virtual std::string toString() const =0; + virtual std::istream& readObject(std::istream &is){ + SchedulableDevice::readObject(is); + return is; + } + virtual std::ostream& writeObject(std::ostream &os){ + SchedulableDevice::writeObject(os); + return os; + } + ///Invalidate schedule of CPU + /*void setRescheduleFlag(){ + _schedulingNeeded=true; + //std::cout <<" CPU " << _name << " forwards to scheduler\n"; + _scheduler->resetScheduledFlag(); + }*/ + + ///Truncates current transaction if schedule is invalid + /** + \param iTime Truncation time + */ + /*void truncateIfNecessary(TMLTime iTime){ + if(_schedulingNeeded && getNextTransaction()!=0){ + //std::cout << "truncateIfNecessary for CPU " << _name << "\n"; + _schedulingNeeded=false; + truncateAndAddNextTransAt(iTime); + //std::cout << "truncateIfNecessary end\n"; + } + }*/ + + ///Reschedules CPU if schedule is invalid + /*void rescheduleIfNecessary(){ + if(_schedulingNeeded){ + //std::cout << "rescheduleIfNecessary for CPU " << _name << "\n"; + _schedulingNeeded=false; + schedule(); + //std::cout << "rescheduleIfNecessary end\n"; + } + }*/ + + /*void truncateAndRescheduleIfNecessary(TMLTime iTime){ commented out + std::cout << "truncateAndRescheduleIfNecessary for CPU " << _name << " started\n"; + if(_schedulingNeeded){ + _schedulingNeeded=false; + //if(_nextTransaction==0) + //std::cout << "shouldn't be raw >\n"; + if(getNextTransaction()==0){ + //std::cout << "shouldn't be raw <\n"; + schedule(); + }else + + std::cout << "truncateAndRescheduleIfNecessary " << _name << " scheduled\n"; + }else + std::cout << "truncateAndRescheduleIfNecessary " << _name << " no scheduling needed\n"; + std::cout << "Current Trans " << _name << ": "; + if (_nextTransaction==0) std::cout << "0\n"; else std::cout << _nextTransaction->toString() << "\n"; + }*/ +protected: + ///List of all tasks running on the CPU + TaskList _taskList; + ///Pointer to the last transaction which has been executed + TMLTransaction* _lastTransaction; + ///List of bus masters + BusMasterList _busMasterList; + ///Dirty flag of the current scheduling decision + //bool _schedulingNeeded; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Memory.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Memory.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e1de258548aa14987f54cc22643d255e36697078 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Memory.cpp @@ -0,0 +1,54 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <Memory.h> + +Memory::Memory(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iDataSize): Slave(iID, iName), _timePerCycle(iTimePerCycle), _dataSize(iDataSize){ +} + +void Memory::CalcTransactionLength(TMLTransaction* iTrans) const{ +} + +Master* Memory::getConnectedMaster(){ + return 0; +} + +Memory::~Memory(){ +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Memory.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Memory.h new file mode 100644 index 0000000000000000000000000000000000000000..1a0255706163ffcf0cae8bc1514fe7e549c871ba --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Memory.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MemoryH +#define MemoryH + +class TMLTransaction; + +#include <Slave.h> +#include <definitions.h> + +///Memory component +class Memory: public Slave{ +public: + ///Constructor + /** + \param iID ID of the Memory + \param iName Name of the Memory + \param iTimePerCycle 1/Memory frequency + \param iDataSize Width of a data word + */ + Memory(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iDataSize); + ///Accounts for the delay caused by the memory + /** + \param iTrans Pointer to the transaction to be processed + */ + void CalcTransactionLength(TMLTransaction* iTrans) const; + ///Returns a pointer to the connected master device if any + /** + \return Pointer to the master device + */ + Master* getConnectedMaster(); + ///Destructor + ~Memory(); + +protected: + ///1/Memory frequency + TMLTime _timePerCycle; + ///Width of a data word + unsigned int _dataSize; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9a4afc33c350fadad1e47e9ab9073ad99a215662 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.cpp @@ -0,0 +1,116 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<PrioScheduler.h> +#include <TMLTransaction.h> + +PrioScheduler::PrioScheduler(const std::string& iName, Priority iPrio): WorkloadSource(iPrio), _name(iName), _nextTransaction(0) /*,_lastSourceIndex(0)*/{ +} + +PrioScheduler::PrioScheduler(const std::string& iName, Priority iPrio, WorkloadSource** aSourceArray, unsigned int iNbOfSources): WorkloadSource(iPrio, aSourceArray, iNbOfSources), _name(iName), _nextTransaction(0), _lastSource(0) { +} + +TMLTime PrioScheduler::schedule(TMLTime iEndSchedule){ + TaskList::iterator i; + TMLTransaction *aMarkerPast=0, *aMarkerFuture=0,*aTempTrans; + Priority aHighestPrioPast=-1; + TMLTime aTransTimeFuture=-1,aRunnableTime; + WorkloadSource *aSourcePast=0, *aSourceFuture=0; //NEW + //std::cout << "Prio Scheduler " << _name << ":\n"; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + (*i)->schedule(iEndSchedule); + //std::cout << _name << " schedules, before getCurrTransaction " << std::endl; + aTempTrans=(*i)->getNextTransaction(iEndSchedule); + //std::cout << "after getCurrTransaction " << std::endl; + if (aTempTrans!=0 && aTempTrans->getVirtualLength()!=0){ + //std::cout << "Found on " << (*i)->toString() << ": " << aTempTrans->toString() << "\n"; + aRunnableTime=aTempTrans->getRunnableTime(); + if (aRunnableTime<=iEndSchedule){ + //Past + if ((*i)->getPriority()<aHighestPrioPast){ + aHighestPrioPast=(*i)->getPriority(); + aMarkerPast=aTempTrans; + aSourcePast=*i; //NEW + } + }else{ + //Future + if(aRunnableTime<aTransTimeFuture){ + aTransTimeFuture=aRunnableTime; + aMarkerFuture=aTempTrans; + aSourceFuture=*i; //NEW + } + + } + } + //else std::cout << "Found on " << (*i)->toString() << " nothing\n"; + } + if (aMarkerPast==0){ + _nextTransaction=aMarkerFuture; + _lastSource=aSourceFuture; //NEW + }else{ + _nextTransaction=aMarkerPast; + _lastSource=aSourcePast; //NEW + } + /*if (_nextTransaction==0) + std::cout << "Scheduler " << _name << " hasn't found anything.\n"; + else + std::cout << "Scheduler " << _name << " schedules " << _nextTransaction->toString() << "\n";*/ + return 0; +} + +//TMLTransaction* PrioScheduler::getNextTransaction(TMLTime iEndSchedule) const{ +// return _nextTransaction; +//} + +//std::string PrioScheduler::toString() const{ +// return _name; +//} + +PrioScheduler::~PrioScheduler(){ + std::cout << _name << ": Scheduler deleted\n"; +} + +void PrioScheduler::reset(){ + WorkloadSource::reset(); + _nextTransaction=0; +} + +//void PrioScheduler::transWasScheduled(SchedulableDevice* iDevice){ +// if (_lastSource!=0) _lastSource->transWasScheduled(iDevice); +//} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.h new file mode 100644 index 0000000000000000000000000000000000000000..09225e69f4e5dbba2b5271531f8c4b86534d59ff --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.h @@ -0,0 +1,77 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef PrioSchedulerH +#define PrioSchedulerH +#include <WorkloadSource.h> + +class TMLTransaction; + +///Fixed priority based scheduler +class PrioScheduler: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + */ + PrioScheduler(const std::string& iName, Priority iPrio); + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + PrioScheduler(const std::string& iName, Priority iPrio, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + ~PrioScheduler(); + TMLTime schedule(TMLTime iEndSchedule); + inline TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const {return _nextTransaction;} + inline std::string toString() const {return _name;} + void reset(); + //void transWasScheduled(SchedulableDevice* iDevice); +protected: + ///Name of the scheduler + std::string _name; + ///Next transaction to be executed + TMLTransaction* _nextTransaction; + ///Last workload source to which ressource access was granted + WorkloadSource* _lastSource; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..97648940e57213aa7ce3dae7200b434b5dcba537 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.cpp @@ -0,0 +1,203 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <RRPrioScheduler.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> + +RRPrioScheduler::RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize): WorkloadSource(iPrio), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +RRPrioScheduler::RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources): WorkloadSource(iPrio, aSourceArray, iNbOfSources), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +TMLTime RRPrioScheduler::schedule(TMLTime iEndSchedule){ + TaskList::iterator i; + //std::cout << _name << ": Schedule called \n"; + TMLTransaction *anOldTransaction=_nextTransaction, *aTempTrans; + TMLTime aLowestRunnableTimeFuture=-1,aRunnableTime, aLowestRunnableTimePast=-1; + WorkloadSource *aSourcePast=0, *aSourceFuture=0; + //, *aScheduledSource=0; + bool aSameTaskFound=false; + if (_lastSource!=0){ + //aScheduledSource=_lastSource; + _lastSource->schedule(iEndSchedule); + if (_lastSource->getNextTransaction(iEndSchedule)!=0 && _lastSource->getNextTransaction(iEndSchedule)->getVirtualLength()!=0){ + //if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() + _minSliceSize){ + if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getOperationLength() + _minSliceSize){ + std::cout << "Select same task, remaining: " << _timeSlice - anOldTransaction->getOperationLength() << "\n"; + aSourcePast=_lastSource; + aSameTaskFound=true; + } + } + } + if (!aSameTaskFound){ + //std::cout << _name << ": Second if\n"; + Priority aHighestPrioPast=-1; + + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + //std::cout << "Loop\n"; + //if (*i!=aScheduledSource) + (*i)->schedule(iEndSchedule); + //std::cout << _name << " schedules, before getCurrTransaction " << std::endl; + aTempTrans=(*i)->getNextTransaction(iEndSchedule); + //std::cout << "after getCurrTransaction " << std::endl; + + //if ((*i)->getPriority()<aHighestPrioPast){ + + if (aTempTrans!=0 && aTempTrans->getVirtualLength()!=0){ + aRunnableTime=aTempTrans->getRunnableTime(); + if (aRunnableTime<=iEndSchedule){ + //Past + if ((*i)->getPriority()<aHighestPrioPast || ((*i)->getPriority()==aHighestPrioPast && aRunnableTime<aLowestRunnableTimePast)){ + aHighestPrioPast=(*i)->getPriority(); + aLowestRunnableTimePast=aRunnableTime; + aSourcePast=*i; + } + }else{ + //Future + if(aRunnableTime<aLowestRunnableTimeFuture){ + aLowestRunnableTimeFuture=aRunnableTime; + aSourceFuture=*i; + } + + } + } + } + } + if (aSourcePast==0){ + _nextTransaction=(aSourceFuture==0)? 0 : aSourceFuture->getNextTransaction(iEndSchedule); + _lastSource=aSourceFuture; + }else{ + _nextTransaction=aSourcePast->getNextTransaction(iEndSchedule); + _lastSource=aSourcePast; + } + if (aSameTaskFound){ + //std::cout << _name << ": Same source found " << _lastSource->toString() << "\n"; + //if (_nextTransaction!=anOldTransaction){ + if (_nextTransaction!=anOldTransaction && anOldTransaction!=0){ + //std::cout << _name << ": Elapsed time increased by " << anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() << "\n"; + //_elapsedTime += anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength(); + _elapsedTime += anOldTransaction->getOperationLength(); + } + //std::cout << "Not crashed\n" ; + }else{ + //if (_lastSource==0) + //std::cout << _name << ": No source found\n"; + //else + //std::cout << _name << ": New source found " << _lastSource->toString() << "\n"; + _elapsedTime=0; + } + //if (_nextTransaction!=0){ + // _nextTransaction->setLength(min(_nextTransaction->getOperationLength(), _timeSlice-_elapsedTime)); + //} + //std::cout << "End schedule\n" ; + return _timeSlice-_elapsedTime; +} + +//TMLTransaction* RRPrioScheduler::getNextTransaction(TMLTime iEndSchedule) const{ +// return _nextTransaction; +//} + +void RRPrioScheduler::reset(){ + WorkloadSource::reset(); + _nextTransaction=0; + _elapsedTime=0; + _lastSource=0; +} + +//std::string RRPrioScheduler::toString() const{ +// return _name; +//} + +RRPrioScheduler::~RRPrioScheduler(){ + std::cout << _name << ": Scheduler deleted\n"; +} + +std::istream& RRPrioScheduler::readObject(std::istream &is){ + WorkloadSource::readObject(is); + READ_STREAM(is,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + READ_STREAM(is, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + if (aLastSourceIndex==-1){ + _lastSource=0; + }else{ + WorkloadList::iterator i=_workloadList.begin(); + std::advance(i, aLastSourceIndex); + _lastSource=*i; + } + return is; +} + +std::ostream& RRPrioScheduler::writeObject(std::ostream &os){ + WorkloadSource::writeObject(os); + WRITE_STREAM(os,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + if (_lastSource==0){ + aLastSourceIndex=-1; + }else{ + aLastSourceIndex=0; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + if (*i==_lastSource) + break; + else + aLastSourceIndex++; + } + } + WRITE_STREAM(os, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + return os; +} + +//void RRScheduler::transWasScheduled(SchedulableDevice* iDevice){ +// if (_lastSource!=0) _lastSource->transWasScheduled(iDevice); +//} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.h new file mode 100644 index 0000000000000000000000000000000000000000..5df23c3f6ae34d9c9d553c85326e8fb364122a2c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.h @@ -0,0 +1,92 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef RRPrioSchedulerH +#define RRPrioSchedulerH +#include <WorkloadSource.h> + +class TMLTransaction; + +///Round Robin Priotity based scheduler +class RRPrioScheduler: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + */ + RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice); + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + ///Destructor + ~RRPrioScheduler(); + TMLTime schedule(TMLTime iEndSchedule); + inline TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const {return _nextTransaction;} + void reset(); + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); + inline std::string toString() const {return _name;} + //void transWasScheduled(SchedulableDevice* iDevice); +protected: + ///Name of the scheduler + std::string _name; + ///Next transaction to be executed + TMLTransaction* _nextTransaction; + ///Time slice which is granted to ressources + TMLTime _timeSlice; + ///Minimum size of a time slice + TMLTime _minSliceSize; + ///Consumed portion of a time slice + TMLTime _elapsedTime; + ///Last workload source to which ressource access was granted + WorkloadSource* _lastSource; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRScheduler.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRScheduler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e6a025c019ec2fd523aba1dbc3a071189ef46bd4 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRScheduler.cpp @@ -0,0 +1,197 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<RRScheduler.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> + +RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize): WorkloadSource(iPrio), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources): WorkloadSource(iPrio, aSourceArray, iNbOfSources), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +TMLTime RRScheduler::schedule(TMLTime iEndSchedule){ + TaskList::iterator i; + //std::cout << _name << ": Schedule called \n"; + TMLTransaction *anOldTransaction=_nextTransaction, *aTempTrans; + TMLTime aLowestRunnableTimeFuture=-1,aRunnableTime, aLowestRunnableTimePast=-1; + WorkloadSource *aSourcePast=0, *aSourceFuture=0; + //, *aScheduledSource=0; + bool aSameTaskFound=false; + if (_lastSource!=0){ + //aScheduledSource=_lastSource; + _lastSource->schedule(iEndSchedule); + if (_lastSource->getNextTransaction(iEndSchedule)!=0 && _lastSource->getNextTransaction(iEndSchedule)->getVirtualLength()!=0){ + //if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() + _minSliceSize){ + if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getOperationLength() + _minSliceSize){ + //std::cout << "Select same task, remaining: " << _timeSlice - anOldTransaction->getOperationLength() << "\n"; + aSourcePast=_lastSource; + aSameTaskFound=true; + } + } + } + if (!aSameTaskFound){ + //std::cout << _name << ": Second if\n"; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + //std::cout << "Loop\n"; + //if (*i!=aScheduledSource) + (*i)->schedule(iEndSchedule); + //std::cout << _name << " schedules, before getCurrTransaction " << std::endl; + aTempTrans=(*i)->getNextTransaction(iEndSchedule); + //std::cout << "after getCurrTransaction " << std::endl; + if (aTempTrans!=0 && aTempTrans->getVirtualLength()!=0){ + aRunnableTime=aTempTrans->getRunnableTime(); + if (aRunnableTime<=iEndSchedule){ + //Past + if (aRunnableTime<aLowestRunnableTimePast){ + aLowestRunnableTimePast=aRunnableTime; + aSourcePast=*i; + } + }else{ + //Future + if(aRunnableTime<aLowestRunnableTimeFuture){ + aLowestRunnableTimeFuture=aRunnableTime; + aSourceFuture=*i; + } + + } + } + } + } + if (aSourcePast==0){ + _nextTransaction=(aSourceFuture==0)? 0 : aSourceFuture->getNextTransaction(iEndSchedule); + _lastSource=aSourceFuture; + }else{ + _nextTransaction=aSourcePast->getNextTransaction(iEndSchedule); + _lastSource=aSourcePast; + } + if (aSameTaskFound){ + //std::cout << _name << ": Same source found " << _lastSource->toString() << "\n"; + //if (_nextTransaction!=anOldTransaction){ + if (_nextTransaction!=anOldTransaction && anOldTransaction!=0){ + //std::cout << _name << ": Elapsed time increased by " << anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() << "\n"; + //_elapsedTime += anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength(); + _elapsedTime += anOldTransaction->getOperationLength(); + } + //std::cout << "Not crashed\n" ; + }else{ + //if (_lastSource==0) + //std::cout << _name << ": No source found\n"; + //else + //std::cout << _name << ": New source found " << _lastSource->toString() << "\n"; + _elapsedTime=0; + } + //if (_nextTransaction!=0){ + // _nextTransaction->setLength(min(_nextTransaction->getOperationLength(), _timeSlice-_elapsedTime)); + //} + //std::cout << "End schedule\n" ; + return _timeSlice-_elapsedTime; +} + +//TMLTransaction* RRScheduler::getNextTransaction(TMLTime iEndSchedule) const{ +// return _nextTransaction; +//} + +void RRScheduler::reset(){ + WorkloadSource::reset(); + _nextTransaction=0; + _elapsedTime=0; + _lastSource=0; +} + +//std::string RRScheduler::toString() const{ +// return _name; +//} + +RRScheduler::~RRScheduler(){ + std::cout << _name << ": Scheduler deleted\n"; +} + +std::istream& RRScheduler::readObject(std::istream &is){ + WorkloadSource::readObject(is); + READ_STREAM(is,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + READ_STREAM(is, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + if (aLastSourceIndex==-1){ + _lastSource=0; + }else{ + WorkloadList::iterator i=_workloadList.begin(); + std::advance(i, aLastSourceIndex); + _lastSource=*i; + } + return is; +} + +std::ostream& RRScheduler::writeObject(std::ostream &os){ + WorkloadSource::writeObject(os); + WRITE_STREAM(os,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + if (_lastSource==0){ + aLastSourceIndex=-1; + }else{ + aLastSourceIndex=0; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + if (*i==_lastSource) + break; + else + aLastSourceIndex++; + } + } + WRITE_STREAM(os, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + return os; +} + +//void RRScheduler::transWasScheduled(SchedulableDevice* iDevice){ +// if (_lastSource!=0) _lastSource->transWasScheduled(iDevice); +//} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRScheduler.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRScheduler.h new file mode 100644 index 0000000000000000000000000000000000000000..1291fd2d42f2260ed81f7d998b36c576f3c2a17b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/RRScheduler.h @@ -0,0 +1,92 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef RRSchedulerH +#define RRSchedulerH +#include <WorkloadSource.h> + +class TMLTransaction; + +///Round Robin scheduler +class RRScheduler: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + */ + RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice); + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + ///Destructor + ~RRScheduler(); + TMLTime schedule(TMLTime iEndSchedule); + inline TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const {return _nextTransaction;} + void reset(); + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); + inline std::string toString() const {return _name;} + //void transWasScheduled(SchedulableDevice* iDevice); +protected: + ///Name of the scheduler + std::string _name; + ///Next transaction to be executed + TMLTransaction* _nextTransaction; + ///Time slice which is granted to ressources + TMLTime _timeSlice; + ///Minimum size of a time slice + TMLTime _minSliceSize; + ///Consumed portion of a time slice + TMLTime _elapsedTime; + ///Last workload source to which ressource access was granted + WorkloadSource* _lastSource; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SchedulableCommDevice.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SchedulableCommDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..79ef73a9c7a6b67e13fde6ab4d758f61982f8a65 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SchedulableCommDevice.h @@ -0,0 +1,76 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SchedulableCommDeviceH +#define SchedulableCommDeviceH + +#include <SchedulableDevice.h> + +class TMLTransaction; + +///Base class for communication devices which perform a scheduling +class SchedulableCommDevice: public SchedulableDevice{ +public: + ///Constructor + /** + \param iID ID of the device + \param iName Name of the device + \param iScheduler Pointer to the scheduler object + \param iChannelBasedPrio Flag indicating whether bus master based or channel based priorities are used to arbitrate the bus + */ + SchedulableCommDevice(ID iID, std::string iName, WorkloadSource* iScheduler,bool iChannelBasedPrio): SchedulableDevice(iID, iName, iScheduler), _channelBasedPrio(iChannelBasedPrio){} + ///Returns the size of an atomic bus transaction + /** + \return Size of an atomic bus transaction + */ + virtual TMLLength getBurstSize() const=0; + /////Truncates a transaction so that it does not exceed the burst size of the communication device + //virtual void truncateToBurst(TMLTransaction* iTrans) const=0; + ///Signals the component that a new transaction has become available and thus rescheduling is needed + virtual void registerTransaction()=0; + bool ChannelBasedPrio(){return _channelBasedPrio;} + ///Destructor + virtual ~SchedulableCommDevice(){} +protected: + ///Flag indicating whether bus master based or channel based priorities are used to arbitrate the bus + bool _channelBasedPrio; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SchedulableDevice.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SchedulableDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..aa633e26d4583a9799c2d0ad82c9377738b6e198 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SchedulableDevice.h @@ -0,0 +1,204 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SchedulableDeviceH +#define SchedulableDeviceH + +#include <definitions.h> +#include <Serializable.h> +#include <ListenerSubject.h> +#include <WorkloadSource.h> + +class Master; +class TMLTransaction; +//class TransactionListener; +class GeneralListener; + +///Base class for devices which perform a scheduling +//class SchedulableDevice: public Serializable, public ListenerSubject <TransactionListener> { +class SchedulableDevice: public Serializable, public ListenerSubject <GeneralListener> { +public: + ///Constructor + /** + \param iID ID of the device + \param iName Name of the device + \param iScheduler Pointer to the scheduler object + */ + SchedulableDevice(ID iID, std::string iName, WorkloadSource* iScheduler):_ID(iID), _name(iName), _endSchedule(0), _scheduler(iScheduler), _nextTransaction(0), _deleteScheduler(true), _busyCycles(0), _static_consumPerCycle (15), _dynamic_consumPerCycle (35) { + _transactList.reserve(BLOCK_SIZE_TRANS); + } + ///Determines the next transaction to be executed + virtual void schedule()=0; + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + virtual bool addTransaction(TMLTransaction* iTransToBeAdded)=0; + ///Returns a pointer to the transaction determined by the scheduling algorithm + /** + \return Pointer to transaction + */ + //virtual TMLTransaction* getNextTransaction()=0; + virtual TMLTransaction* getNextTransaction(){ + //std::cout << "Raw version of getNextTransaction " << _nextTransaction << "\n"; + return _nextTransaction; + } + ///Writes a HTML representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + virtual void schedule2HTML(std::ofstream& myfile) const =0; + ///Writes a plain text representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + virtual void schedule2TXT(std::ofstream& myfile) const =0; + virtual std::string toString() const =0; + virtual std::istream& readObject(std::istream &is){ + READ_STREAM(is,_endSchedule); + //_simulatedTime=max(_simulatedTime,_endSchedule); ???????????? +#ifdef DEBUG_SERIALIZE + std::cout << "Read: Schedulable Device " << _name << ": " << _endSchedule << std::endl; +#endif + return is; + } + virtual std::ostream& writeObject(std::ostream &os){ + WRITE_STREAM(os,_endSchedule); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: Schedulable Device " << _name << ": " << _endSchedule << std::endl; +#endif + return os; + } + virtual void reset(){ + _endSchedule=0; + _simulatedTime=0; + } + ///Returns the number of simulated clock cycles + /** + \return Number of simulated clock cycles + */ + static TMLTime getSimulatedTime() {return _simulatedTime;} + ///Sets the number of simulated clock cycles + /** + \param iSimulatedTime Number of simulated clock cycles + */ + static void setSimulatedTime(TMLTime iSimulatedTime) { + //if (iSimulatedTime<_simulatedTime) std::cout << "FAILURE SIMULATION TIME!!!!!!!!!!\n"; + _simulatedTime=iSimulatedTime; + } + ///Returns the unique ID of the device + /** + \return Unique ID + */ + ID getID() const {return _ID;} + ///Destructor + virtual ~SchedulableDevice(){ + if (_scheduler!=0 && _deleteScheduler) delete _scheduler; + } + ///Returns the end time of the last scheduled transaction of the device + /** + \return End time of the last scheduled transaction + */ + TMLTime getEndSchedule(){return _endSchedule;} + ///Sets the scheduler object + /** + \param iScheduler Pointer to the scheduler object + \param iDelScheduler Determines whether the scheduler is destroyed upon destruction of the device + */ + void setScheduler(WorkloadSource* iScheduler, bool iDelScheduler=true){ _scheduler=iScheduler; _deleteScheduler=iDelScheduler;} + ///Returns a pointer to the scheduler object + /** + \return Pointer to the scheduler object + */ + WorkloadSource* getScheduler(){ return _scheduler;} + ///Returns the scheduled transaction one after another + /** + \param iInit If init is true, the methods starts from the first transaction + \return Pointer to the next transaction + */ + TMLTransaction* getTransactions1By1(bool iInit){ + if (iInit) _posTrasactListGraph=_transactList.begin(); + if (_posTrasactListGraph == _transactList.end()) return 0; + TMLTransaction* aTrans = *_posTrasactListGraph; + _posTrasactListGraph++; + return aTrans; + } + + void addRawTransaction(TMLTransaction* iTrans){ + _transactList.push_back(iTrans); + } + + TMLTime getBusyCycles(){ + return _busyCycles; + } + + static TMLTime getOverallTransNo(){ + return _overallTransNo; + } + + static TMLTime getOverallTransSize(){ + return _overallTransSize; + } + +protected: + ///Unique ID of the device + ID _ID; + ///Name of the device + std::string _name; + ///Class variable holding the simulation time + static TMLTime _simulatedTime; + ///End time of the last scheduled transaction + TMLTime _endSchedule; + ///Scheduler + WorkloadSource* _scheduler; + ///List containing all already scheduled transactions + TransactionList _transactList; + ///Pointer to the next transaction to be executed + TMLTransaction* _nextTransaction; + ///State variable for consecutive Transaction output + TransactionList::iterator _posTrasactListGraph; + ///Flag indicating whether the scheduler has to be deleted when the device is deleted + bool _deleteScheduler; + ///Busy cycles since simulation start + TMLTime _busyCycles; + unsigned int _static_consumPerCycle; + unsigned int _dynamic_consumPerCycle; + static TMLTime _overallTransNo; + static TMLTime _overallTransSize; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9274461cd843c187718a17b4ce87d8a6e84a8cf8 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp @@ -0,0 +1,521 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <SingleCoreCPU.h> +#include <TMLTask.h> +#include <TMLCommand.h> +#include <TMLTransaction.h> +#include <Bus.h> +#include <Slave.h> +#include <TMLChannel.h> +//#include <TransactionListener.h> + +SingleCoreCPU::SingleCoreCPU(ID iID, std::string iName, WorkloadSource* iScheduler, TMLTime iTimePerCycle, unsigned int iCyclesPerExeci, unsigned int iCyclesPerExecc, unsigned int iPipelineSize, unsigned int iTaskSwitchingCycles, unsigned int iBranchingMissrate, unsigned int iChangeIdleModeCycles, unsigned int iCyclesBeforeIdle, unsigned int ibyteDataSize): CPU(iID, iName, iScheduler), /*_lastTransaction(0),*/ _masterNextTransaction(0), _timePerCycle(iTimePerCycle) +#ifdef PENALTIES_ENABLED +, _pipelineSize(iPipelineSize), _taskSwitchingCycles(iTaskSwitchingCycles),_brachingMissrate(iBranchingMissrate) +, _changeIdleModeCycles(iChangeIdleModeCycles), _cyclesBeforeIdle(iCyclesBeforeIdle) +#endif +, _cyclesPerExeci(iCyclesPerExeci) /*, _busyCycles(0)*/ +#ifdef PENALTIES_ENABLED +, _timePerExeci(_cyclesPerExeci * _timePerCycle * (_pipelineSize * _brachingMissrate + 100 - _brachingMissrate) /100.0) +,_taskSwitchingTime(_taskSwitchingCycles*_timePerCycle) +, _timeBeforeIdle(_cyclesBeforeIdle*_timePerCycle) +, _changeIdleModeTime(_changeIdleModeCycles*_timePerCycle) +#else +, _timePerExeci(_cyclesPerExeci*_timePerCycle) +#endif +//, _pipelineSizeTimesExeci(_pipelineSize * _timePerExeci) +//,_missrateTimesPipelinesize(_brachingMissrate*_pipelineSize) +{ + //std::cout << "Time per EXECIiiiiiiiiiiiiiiiiiiiiii: " << _timePerExeci << "\n"; + //_transactList.reserve(BLOCK_SIZE); +} + +SingleCoreCPU::~SingleCoreCPU(){ + std::cout << _transactList.size() << " elements in List of " << _name << ", busy cycles: " << _busyCycles << std::endl; + std::cout << " consumption value " << ((_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle)<< std::endl; + + //delete _scheduler; +} + +TMLTransaction* SingleCoreCPU::getNextTransaction(){ +#ifdef BUS_ENABLED + if (_masterNextTransaction==0 || _nextTransaction==0){ + return _nextTransaction; + }else{ +#ifdef DEBUG_CPU + std::cout << "CPU:getNT: " << _name << " has bus transaction on master " << _masterNextTransaction->toString() << std::endl; +#endif + //std::cout << "CRASH Trans:" << _nextTransaction->toString() << std::endl << "Channel: " << _nextTransaction->getChannel() << "\n"; + BusMaster* aTempMaster = getMasterForBus(_nextTransaction->getChannel()->getFirstMaster(_nextTransaction)); + //std::cout << "1 aTempMaster: " << aTempMaster << std::endl; + bool aResult = aTempMaster->accessGranted(); + //std::cout << "2" << std::endl; + while (aResult && aTempMaster!=_masterNextTransaction){ + //std::cout << "3" << std::endl; + aTempMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + //std::cout << "4" << std::endl; + aResult = aTempMaster->accessGranted(); + //std::cout << "5" << std::endl; + } + return (aResult)?_nextTransaction:0; + } +#else + return _nextTransaction; +#endif +} + +void SingleCoreCPU::calcStartTimeLength(TMLTime iTimeSlice){ +#ifdef DEBUG_CPU + std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; +#endif +#ifdef BUS_ENABLED + //std::cout << "get channel " << std::endl; + TMLChannel* aChannel=_nextTransaction->getCommand()->getChannel(0); + //std::cout << "after get channel " << std::endl; + if(aChannel==0){ + //std::cout << "no channel " << std::endl; + _masterNextTransaction=0; + }else{ + //std::cout << "get bus " << std::endl; + _masterNextTransaction= getMasterForBus(aChannel->getFirstMaster(_nextTransaction)); + //std::cout << "after get first bus " << std::endl; + if (_masterNextTransaction!=0){ + //std::cout << "before register transaction at bus " << std::endl; + _masterNextTransaction->registerTransaction(_nextTransaction); + //std::cout << "Transaction registered at bus " << std::endl; + } + } +#endif + //round to full cycles!!! + TMLTime aStartTime = max(_endSchedule,_nextTransaction->getRunnableTime()); + TMLTime aReminder = aStartTime % _timePerCycle; + if (aReminder!=0) aStartTime+=_timePerCycle - aReminder; + _nextTransaction->setStartTime(aStartTime); + +#ifdef BUS_ENABLED + if (_masterNextTransaction==0){ +#endif + //calculate length of transaction + //if (_nextTransaction->getOperationLength()!=-1){ + if (iTimeSlice!=0){ + _nextTransaction->setVirtualLength(max(min(_nextTransaction->getVirtualLength(), (TMLLength)(iTimeSlice /_timePerExeci)), (TMLTime)1)); + } + _nextTransaction->setLength(_nextTransaction->getVirtualLength()*_timePerExeci); + +#ifdef BUS_ENABLED + } +#endif +#ifdef PENALTIES_ENABLED + if (_lastTransaction==0 || _lastTransaction->getCommand()->getTask()!=_nextTransaction->getCommand()->getTask()){ + _nextTransaction->setTaskSwitchingPenalty(_taskSwitchingTime); + } + + if ((_nextTransaction->getStartTime()-_endSchedule) >=_timeBeforeIdle){ + _nextTransaction->setIdlePenalty(_changeIdleModeTime); + } +#endif +} + +void SingleCoreCPU::truncateAndAddNextTransAt(TMLTime iTime){ + //std::cout << "CPU:schedule BEGIN " << _name << "+++++++++++++++++++++++++++++++++\n"; + //return truncateNextTransAt(iTime); + //not a problem if scheduling does not take place at time when transaction is actually truncated, tested + //std::cout << "CPU:truncateAndAddNextTransAt " << _name << "time: +++++++++++++++++++++" << iTime << "\n"; + TMLTime aTimeSlice = _scheduler->schedule(iTime); + //_schedulingNeeded=false; 05/05/11 + TMLTransaction* aNewTransaction =_scheduler->getNextTransaction(iTime); + //std::cout << "before if\n"; + + //_scheduler->transWasScheduled(this); //NEW was in if before 05/05/11 + + if (aNewTransaction!=_nextTransaction){ + //std::cout << "in if\n"; + if (truncateNextTransAt(iTime)!=0) addTransaction(0); + //if (_nextTransaction!=0 && truncateNextTransAt(iTime)!=0) addTransaction(); //NEW!!!! + if (_nextTransaction!=0 && _masterNextTransaction!=0) _masterNextTransaction->registerTransaction(0); + _nextTransaction = aNewTransaction; + if (_nextTransaction!=0) calcStartTimeLength(aTimeSlice); + } + //std::cout << "CPU:schedule END " << _name << "+++++++++++++++++++++++++++++++++\n"; +} + +TMLTime SingleCoreCPU::truncateNextTransAt(TMLTime iTime){ + if (_masterNextTransaction==0){ +#ifdef PENALTIES_ENABLED + if (iTime < _nextTransaction->getStartTime()) return 0; + TMLTime aNewDuration = iTime - _nextTransaction->getStartTime(); + TMLTime aStaticPenalty = _nextTransaction->getIdlePenalty() + _nextTransaction->getTaskSwitchingPenalty(); + if (aNewDuration<=aStaticPenalty){ + _nextTransaction->setLength(_timePerExeci); + _nextTransaction->setVirtualLength(1); +#ifdef DEBUG_CPU + std::cout << "CPU:truncateNTA: transaction truncated\n"; +#endif + }else{ + aNewDuration-=aStaticPenalty; + _nextTransaction->setVirtualLength(max((TMLTime)(aNewDuration /_timePerExeci),(TMLTime)1)); + _nextTransaction->setLength(_nextTransaction->getVirtualLength() *_timePerExeci); + } +#else + if (iTime <= _nextTransaction->getStartTime()) return 0; //before: <= + TMLTime aNewDuration = iTime - _nextTransaction->getStartTime(); + _nextTransaction->setVirtualLength(max((TMLTime)(aNewDuration /_timePerExeci), (TMLTime)1)); + _nextTransaction->setLength(_nextTransaction->getVirtualLength() *_timePerExeci); +#endif +#ifdef DEBUG_CPU + std::cout << "aNewDuration: " << aNewDuration << std::endl; + std::cout << "CPU:truncateNTA: ### cut transaction at " << _nextTransaction->getVirtualLength() << std::endl; +#endif + } + return _nextTransaction->getOverallLength(); +} + +bool SingleCoreCPU::addTransaction(TMLTransaction* iTransToBeAdded){ + bool aFinish; + //TMLTransaction* aTransCopy=0; + if (_masterNextTransaction==0){ + aFinish=true; +#ifdef DEBUG_CPU + std::cout << _name << "CPU:addT: non bus transaction added" << std::endl; +#endif + }else{ +#ifdef DEBUG_CPU + std::cout << _name << "CPU:addT: handling bus transaction" << std::endl; +#endif + //Slave* aLastSlave=_nextTransaction->getChannel()->getNextSlave(_nextTransaction); + BusMaster* aFollowingMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + if (aFollowingMaster==0){ + //std::cout << "1\n"; + aFinish=true; + //aTransCopy = new TMLTransaction(*_nextTransaction); + //_nextTransaction = aTransCopy; + BusMaster* aTempMaster = getMasterForBus(_nextTransaction->getChannel()->getFirstMaster(_nextTransaction)); + //std::cout << "2\n"; + Slave* aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + //std::cout << "3\n"; + aTempMaster->addBusContention(_nextTransaction->getStartTime()-max(_endSchedule,_nextTransaction->getRunnableTime())); + while (aTempMaster!=0){ + //std::cout << "3a\n"; + aTempMaster->addTransaction(_nextTransaction); + //std::cout << "3b\n"; + //if (aTempSlave!=0) aTempSlave->addTransaction(_nextTransaction); + if (aTempSlave!=0) aTempSlave->addTransaction(_nextTransaction); //NEW + //std::cout << "4\n"; + aTempMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + //std::cout << "5\n"; + aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + } + //std::cout << "6\n"; + }else{ + //std::cout << _name << " bus transaction next round" << std::endl; + _masterNextTransaction=aFollowingMaster; + //std::cout << "7\n"; + _masterNextTransaction->registerTransaction(_nextTransaction); + aFinish=false; + } + //std::cout << "8\n"; + } + if (aFinish){ +#ifdef DEBUG_CPU + std::cout << "CPU:addt: " << _name << " finalizing transaction " << _nextTransaction->toString() << std::endl; +#endif + //_nextTransaction->getCommand()->execute(); //NEW!!!! + _endSchedule=_nextTransaction->getEndTime(); + //std::cout << "set end schedule CPU: " << _endSchedule << "\n"; + _simulatedTime=max(_simulatedTime,_endSchedule); + _overallTransNo++; //NEW!!!!!!!! + _overallTransSize+=_nextTransaction->getOperationLength(); //NEW!!!!!!!! + //std::cout << "lets crash execute\n"; + _nextTransaction->getCommand()->execute(); //NEW!!!! + //std::cout << "not crashed\n"; +#ifdef TRANSLIST_ENABLED + _transactList.push_back(_nextTransaction); +#endif + _lastTransaction=_nextTransaction; + _busyCycles+=_nextTransaction->getOverallLength(); +#ifdef LISTENERS_ENABLED + NOTIFY_TRANS_EXECUTED(_nextTransaction); +#endif + _nextTransaction=0; + //std::cout << "this is not the reason\n"; + return true; + }else return false; +} + +void SingleCoreCPU::schedule(){ + //std::cout <<"Hello\n"; + //std::cout << "CPU:schedule BEGIN " << _name << "+++++++++++++++++++++++++++++++++\n"; + TMLTime aTimeSlice = _scheduler->schedule(_endSchedule); + //_schedulingNeeded=false; 05/05/11 + //std::cout << "1\n"; + TMLTransaction* aOldTransaction = _nextTransaction; + _nextTransaction=_scheduler->getNextTransaction(_endSchedule); + //std::cout << "2\n"; + + //_scheduler->transWasScheduled(this); //NEW 05/05/11 + + //if (aOldTransaction!=0){ + if (aOldTransaction!=0 && aOldTransaction!=_nextTransaction){ //NEW + //std::cout << "3\n"; + //aOldTransaction->getCommand()->getTask()->resetScheduledFlag(); TO BE OMITTED???????????????????????????????? + //std::cout << "4\n"; + //if (aOldTransaction!=_nextTransaction && _masterNextTransaction!=0) _masterNextTransaction->registerTransaction(0); + if (_masterNextTransaction!=0) _masterNextTransaction->registerTransaction(0); + } + //std::cout << "5\n"; + if (_nextTransaction!=0 && aOldTransaction != _nextTransaction) calcStartTimeLength(aTimeSlice); + //std::cout << "CPU:schedule END " << _name << "+++++++++++++++++++++++++++++++++\n"; +} + +//std::string SingleCoreCPU::toString() const{ +// return _name; +//} + +std::string SingleCoreCPU::toShortString() const{ + std::ostringstream outp; + outp << "cpu" << _ID; + return outp.str(); +} + +void SingleCoreCPU::schedule2HTML(std::ofstream& myfile) const{ + TMLTime aCurrTime=0; + TMLTransaction* aCurrTrans; + unsigned int aBlanks,aLength,aColor; + std::string aCommentString; + //if (_transactList.empty()) return; + myfile << "<h2><span>Scheduling for device: "<< _name <<"</span></h2>\n<table>\n<tr>"; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + aCurrTrans=*i; + //if (aCurrTrans->getVirtualLength()==0) continue; + aBlanks=aCurrTrans->getStartTime()-aCurrTime; + if (aBlanks>0){ + if (aBlanks==1) + myfile << "<td title=\"idle time\" class=\"not\"></td>\n"; + else + myfile << "<td colspan=\""<< aBlanks <<"\" title=\"idle time\" class=\"not\"></td>\n"; + } + aLength=aCurrTrans->getPenalties(); + if (aLength!=0){ + if (aLength==1){ + //myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t15\"></td>\n"; + //myfile << "<td title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n"; + myfile << "<td title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << "\" class=\"t15\"></td>\n"; + }else{ + //myfile << "<td colspan=\"" << aLength << "\" title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n"; + myfile << "<td colspan=\"" << aLength << "\" title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << "\" class=\"t15\"></td>\n"; + } + } + aLength=aCurrTrans->getOperationLength(); + aColor=aCurrTrans->getCommand()->getTask()->getInstanceNo() & 15; + if (aLength==1) + myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + else + myfile << "<td colspan=\"" << aLength << "\" title=\"" << aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + + + aCurrTime=aCurrTrans->getEndTime(); + //std::cout << "end time: " << aCurrTrans->getEndTime() << std::endl; + } + //std::cout << "acurrTime: " << aCurrTime << std::endl; + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength++) myfile << "<th></th>"; + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength+=5) myfile << "<td colspan=\"5\" class=\"sc\">" << aLength << "</td>"; + myfile << "</tr>\n</table>\n<table>\n<tr>"; + for(TaskList::const_iterator j=_taskList.begin(); j != _taskList.end(); ++j){ + aColor=(*j)->getInstanceNo() & 15; + myfile << "<td class=\"t"<< aColor <<"\"></td><td>"<< (*j)->toString() << "</td><td class=\"space\"></td>\n"; + } + myfile << "</tr>"; +#ifdef ADD_COMMENTS + bool aMoreComments=true, aInit=true; + Comment* aComment; + while(aMoreComments){ + aMoreComments=false; + myfile << "<tr>"; + for(TaskList::const_iterator j=_taskList.begin(); j != _taskList.end(); ++j){ + aCommentString = (*j)->getNextComment(aInit, aComment); + if (aComment==0){ + myfile << "<td></td><td></td><td class=\"space\"></td>"; + }else{ + replaceAll(aCommentString,"<","<"); + replaceAll(aCommentString,">",">"); + aMoreComments=true; + myfile << "<td>" << aComment->_time << "</td><td><pre>" << aCommentString << "</pre></td><td class=\"space\"></td>"; + } + } + aInit=false; + myfile << "</tr>\n"; + } +#endif + myfile << "</table>\n"; +} + +void SingleCoreCPU::schedule2TXT(std::ofstream& myfile) const{ + myfile << "========= Scheduling for device: "<< _name << " =========\n" ; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + myfile << (*i)->toShortString() << std::endl; + } +} + +//TMLTime SingleCoreCPU::getNextSignalChange(bool iInit, std::string& oSigChange, bool& oNoMoreTrans){ +void SingleCoreCPU::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ + //new (oSigData) SignalChangeData(RUNNING, aCurrTrans->getStartTimeOperation(), this); + //std::ostringstream outp; + //oNoMoreTrans=false; + if (iInit){ + _posTrasactListVCD=_transactList.begin(); + _previousTransEndTime=0; + _vcdOutputState=END_IDLE_CPU; + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTime()!=0){ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_CPU) << "cpu" << _ID; + //oSigChange=outp.str(); + new (oSigData) SignalChangeData(END_IDLE_CPU, 0, this); + //return 0 + return; + } + } + if (_posTrasactListVCD == _transactList.end()){ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_CPU) << "cpu" << _ID; + //oSigChange=outp.str(); + //oNoMoreTrans=true; + //return _previousTransEndTime; + new (oSigData) SignalChangeData(END_IDLE_CPU, _previousTransEndTime, this); + }else{ + TMLTransaction* aCurrTrans=*_posTrasactListVCD; + switch (_vcdOutputState){ + case END_TASK_CPU: + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime); + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTime()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(END_PENALTY_CPU) << "cpu" << _ID; + _vcdOutputState=END_PENALTY_CPU; + new (oSigData) SignalChangeData(END_PENALTY_CPU, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_CPU) << "cpu" << _ID; + _vcdOutputState=END_IDLE_CPU; + //if (_posTrasactListVCD == _transactList.end()) oNoMoreTrans=true; + new (oSigData) SignalChangeData(END_IDLE_CPU, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case END_PENALTY_CPU: + //outp << VCD_PREFIX << vcdValConvert(END_TASK_CPU) << "cpu" << _ID; + //oSigChange=outp.str(); + _vcdOutputState=END_TASK_CPU; + //return aCurrTrans->getStartTimeOperation(); + new (oSigData) SignalChangeData(END_TASK_CPU, aCurrTrans->getStartTimeOperation(), this); + break; + case END_IDLE_CPU: + if (aCurrTrans->getPenalties()==0){ + //outp << VCD_PREFIX << vcdValConvert(END_TASK_CPU) << "cpu" << _ID; + _vcdOutputState=END_TASK_CPU; + new (oSigData) SignalChangeData(END_TASK_CPU, aCurrTrans->getStartTime(), this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_PENALTY_CPU) << "cpu" << _ID; + _vcdOutputState=END_PENALTY_CPU; + new (oSigData) SignalChangeData(END_PENALTY_CPU, aCurrTrans->getStartTime(), this); + } + //oSigChange=outp.str(); + //return aCurrTrans->getStartTime(); + break; + } + } + //return 0; +} + +void SingleCoreCPU::reset(){ + CPU::reset(); + _scheduler->reset(); + _transactList.clear(); + _nextTransaction=0; + _lastTransaction=0; + _masterNextTransaction=0; + _busyCycles=0; +} + +void SingleCoreCPU::streamBenchmarks(std::ostream& s) const{ + s << TAG_CPUo << " id=\"" << _ID << "\" name=\"" << _name << "\">" << std::endl; + if (_simulatedTime!=0) s << TAG_UTILo << (static_cast<float>(_busyCycles)/static_cast<float>(_simulatedTime)) << TAG_UTILc; + s << TAG_ENERGYo << ( (_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle) << TAG_ENERGYc; + std::cout<< "power consumption "<< ((_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle)<< std::endl; + for(BusMasterList::const_iterator i=_busMasterList.begin(); i != _busMasterList.end(); ++i) (*i)->streamBenchmarks(s); + + s << TAG_CPUc; +} + +BusMaster* SingleCoreCPU::getMasterForBus(BusMaster* iDummy){ + if (iDummy!=0){ + SchedulableCommDevice* aBus = iDummy->getBus(); + for(BusMasterList::iterator i=_busMasterList.begin(); i != _busMasterList.end(); ++i){ + if ((*i)->getBus()==aBus) return *i; + } + std::cout << "cry!!!!!!!!!!!!! no bus master found\n"; + exit(1); + } + return 0; +} + +std::istream& SingleCoreCPU::readObject(std::istream &is){ + CPU::readObject(is); + _scheduler->readObject(is); +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(is,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: CPU " << _name << " busy cycles: " << _busyCycles << std::endl; +#endif +#endif + return is; +} +std::ostream& SingleCoreCPU::writeObject(std::ostream &os){ + CPU::writeObject(os); + _scheduler->writeObject(os); +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(os,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: CPU " << _name << " busy cycles: " << _busyCycles << std::endl; +#endif +#endif + return os; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.h new file mode 100644 index 0000000000000000000000000000000000000000..ee6c40f3039d861919d4970231e6280515565903 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.h @@ -0,0 +1,167 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SingleCoreCPUH +#define SingleCoreCPUH + +#include <definitions.h> +#include <SchedulableDevice.h> +#include <SchedulableCommDevice.h> +#include <TraceableDevice.h> +#include <BusMaster.h> +#include <CPU.h> + +class TMLTask; +class TMLTransaction; +class Bus; + +/*enum vcdCPUVisState + { + END_IDLE_CPU, + END_PENALTY_CPU, + END_TASK_CPU +};*/ + +///Simulates the bahavior of a CPU and an operating system +class SingleCoreCPU: public CPU{ +public: + ///Constructor + /** + \param iID ID of the CPU + \param iName Name of the CPU + \param iScheduler Pointer to the scheduler object + \param iTimePerCycle 1/Processor frequency + \param iCyclesPerExeci Cycles needed to execute one EXECI unit + \param iCyclesPerExecc Cycles needed to execute one EXECC unit + \param iPipelineSize Pipeline size + \param iTaskSwitchingCycles Task switching penalty in cycles + \param iBranchingMissrate Branching prediction miss rate in % + \param iChangeIdleModeCycles Cycles needed to switch into indle mode + \param iCyclesBeforeIdle Idle cycles which elapse before entering idle mode + \param ibyteDataSize Machine word length + */ + SingleCoreCPU(ID iID, std::string iName, WorkloadSource* iScheduler, TMLTime iTimePerCycle, unsigned int iCyclesPerExeci, unsigned int iCyclesPerExecc, unsigned int iPipelineSize, unsigned int iTaskSwitchingCycles, unsigned int iBranchingMissrate, unsigned int iChangeIdleModeCycles, unsigned int iCyclesBeforeIdle, unsigned int ibyteDataSize); + ///Destructor + virtual ~SingleCoreCPU(); + ///Determines the next CPU transaction to be executed + virtual void schedule(); + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + virtual bool addTransaction(TMLTransaction* iTransToBeAdded); + ///Returns a pointer to the transaction determined by the scheduling algorithm + /** + \return Pointer to transaction + */ + TMLTransaction* getNextTransaction(); + void truncateAndAddNextTransAt(TMLTime iTime); + ///Returns a string representation of the CPU + /** + \return Detailed string representation + */ + inline std::string toString() const {return _name;} + ///Returns a short string representation of the transaction + /** + \return Short string representation + */ + std::string toShortString() const; + ///Writes a HTML representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2HTML(std::ofstream& myfile) const; + void getNextSignalChange(bool iInit, SignalChangeData* oSigData); + ///Writes a plain text representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2TXT(std::ofstream& myfile) const; + virtual void streamBenchmarks(std::ostream& s) const; + virtual void reset(); + inline void streamStateXML(std::ostream& s) const {streamBenchmarks(s);} + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); +protected: + ///Truncates the next transaction at time iTime + /** + \param iTime Indicates at what time the transaction should be truncated + */ + TMLTime truncateNextTransAt(TMLTime iTime); + ///Calculates the start time and the length of the next transaction + /** + \param iTimeSlice CPU Time slice granted by the scheduler + */ + void calcStartTimeLength(TMLTime iTimeSlice); + ///Determines the correct bus master of this CPU connected to the same bus as bus master iDummy + /** + \param iDummy Dummy Bus Master + */ + BusMaster* getMasterForBus(BusMaster* iDummy); + ///Pointer to the bus which will be accessed by the next transaction + BusMaster* _masterNextTransaction; + ///1/Processor frequency + TMLTime _timePerCycle; +#ifdef PENALTIES_ENABLED + ///Pipeline size + unsigned int _pipelineSize; + ///Task switching penalty in cycles + unsigned int _taskSwitchingCycles; + ///Branching prediction miss rate + unsigned int _brachingMissrate; + ///Cycles needed to switch to idle mode + unsigned int _changeIdleModeCycles; + ///Idle cycles which elapse before entering idle mode + unsigned int _cyclesBeforeIdle; +#endif + ///Cycles needed to execute one execi unit + unsigned int _cyclesPerExeci; + ///Time needed to execute one execi unit + float _timePerExeci; +#ifdef PENALTIES_ENABLED + ///Task switching penalty in time units + TMLTime _taskSwitchingTime; + ///Idle time which elapses before entering idle mode + TMLTime _timeBeforeIdle; + ///Time needed to switch into idle mode + TMLTime _changeIdleModeTime; +#endif + ///State variable for the VCD output + vcdCPUVisState _vcdOutputState; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Slave.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Slave.h new file mode 100644 index 0000000000000000000000000000000000000000..46d08bacaa904e070653997ce7ba70a65bdf41f8 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/Slave.h @@ -0,0 +1,102 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SlaveH +#define SlaveH + +#include <definitions.h> +#include <ListenerSubject.h> +//#include <TransactionListener.h> +#include <GeneralListener.h> + +class Master; +class TMLTransaction; + +///Base class for Bus slaves +class Slave: public ListenerSubject <GeneralListener> { +//class Slave: public ListenerSubject <TransactionListener> { +public: + ///Constructor + Slave(ID iID, std::string iName):_name(iName), _ID(iID) {} + ///Destructor + virtual ~Slave(){} + ///Calculates the time it takes to process the transaction within the slave node + /** + \param iTrans Pointer to the transaction to process + */ + virtual void CalcTransactionLength(TMLTransaction* iTrans) const =0; + /////Returns a pointer to the connected master device if any + ////** + //\return Pointer to the master device + ////*/ + //virtual Master* getConnectedMaster()=0; + std::string toString() {return _name;} + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + virtual void addTransaction(TMLTransaction* iTrans){ +/* virtual void addTransaction(TMLTransaction* iTrans) + { + if (dynamic_cast <TLMWriteCommand*> (iTrans->getCommand())==0) + _nWrite++; + else + _nRead++; + } + */ + //FOR_EACH_TRANSLISTENER (static_cast<TransactionListener*>(*i))->transExecuted(iTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_TRANS_EXECUTED(iTrans); +#endif + + + //std::cout << "******************Priiiiiiiiiiiiiint\n"; + } + + + ///Returns the unique ID of the Slave + /** + \return Unique ID + */ + ID getID() const {return _ID;} +protected: + ///Name of the slave + std::string _name; + ID _ID; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/TraceableDevice.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/TraceableDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..d43f039597562f003654f7bcd7daf16199e83a67 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/TraceableDevice.h @@ -0,0 +1,86 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TraceableDeviceH +#define TraceableDeviceH + +class TMLTransaction; + +///Base class for devices which perform a scheduling +class TraceableDevice{ +public: + TraceableDevice(): _previousTransEndTime(0) {} + ///Returns a string representation of the task + /** + \return Detailed string representation + */ + virtual std::string toString() const =0; + ///Returns a short string representation of the device + /** + \return Short string representation + */ + virtual std::string toShortString() const =0; + ///Returns the next signal change (for vcd output) + /** + \param iInit Indicates if the list iterator has to be reset to the beginning of the list + \param oSigData Pointer to a SignalChangeData object characterizing the nature of the signal change + \return Point in time when the signal changes + */ + virtual void getNextSignalChange(bool iInit, SignalChangeData* oSigData)=0; + ///Writes benchmarking data to a given stream + /** + \param s Reference to an output stream + */ + virtual void streamBenchmarks(std::ostream& s) const =0; + ///Writes XML information about the component to a stream + /** + \param s Reference to an output stream + */ + virtual void streamStateXML(std::ostream& s) const=0; + ///Destructor + virtual ~TraceableDevice(){} +protected: + ///Actual position within transaction list (used for vcd output) + TransactionList::iterator _posTrasactListVCD; + ///EndTime of the transaction before _posTransactList (used for vcd output) + TMLTime _previousTransEndTime; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f52d76e65b8633caa974a7e4b3c48db65eac2c58 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.cpp @@ -0,0 +1,49 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <WorkloadSource.h> +#include <TMLTask.h> + +WorkloadSource::~WorkloadSource(){ + if (_srcArraySpecified){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) + if (dynamic_cast<TMLTask*>(*i)==0) delete (*i); + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.h new file mode 100644 index 0000000000000000000000000000000000000000..9857e43c85851472f3c40a0184648a0251b73d31 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.h @@ -0,0 +1,125 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef WorkloadSourceH +#define WorkloadSourceH +#include <definitions.h> +#include <Serializable.h> + +class TMLTransaction; +class Master; +class TMLTask; +class SchedulableDevice; + +///Base class for components providing workload like tasks and schedulers +class WorkloadSource: public Serializable{ +public: + ///Constructor + /** + \param iPriority Priority of the workload source + */ + WorkloadSource(Priority iPriority): _priority(iPriority), _srcArraySpecified(false) {} + ///Constructor + /** + \param iPriority Priority of the scheduler + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + WorkloadSource(Priority iPriority, WorkloadSource** aSourceArray, unsigned int iNbOfSources): _priority(iPriority), _srcArraySpecified(true){ + for (unsigned int i=0;i<iNbOfSources;i++){ + addWorkloadSource(aSourceArray[i]); + std::cout << "Workload source added " << aSourceArray[i]->toString() << "\n"; + } + delete[] aSourceArray; + } + ///Destruktor + virtual ~WorkloadSource(); + ///Returns the next transaction to be executed by the ressource + /** + \return Pointer to the transaction to be executed + */ + virtual TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const=0; + ///Returns the priority of the workload source + /** + \return Priority of the workload source + */ + virtual inline Priority getPriority() const{return _priority;} + ///Add a source which provides transactions to the scheduler + /** + \param iSource Pointer to workload source + */ + inline void addWorkloadSource(WorkloadSource* iSource){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) + if (*i==iSource) return; + _workloadList.push_back(iSource); + } + ///Perform scheduling + /** + \param iEndSchedule Current time of the ressource + \return Time slice granted by the scheduler + */ + virtual TMLTime schedule(TMLTime iEndSchedule){return 0;} + virtual void reset(){for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->reset();} + virtual std::istream& readObject(std::istream &is){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->readObject(is); + return is; + } + virtual std::ostream& writeObject(std::ostream &os){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->writeObject(os); + return os; + } + virtual std::string toString() const =0; + ///Signals that the last scheduled transaction has been selected by the given device + /** + \param iDevice Pointer to the device + */ + /*virtual void transWasScheduled(SchedulableDevice* iDevice) {} + ///Signals that the last scheduled transaction is not selected by the device any more + virtual void resetScheduledFlag(){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->resetScheduledFlag(); + }*/ +protected: + ///List of sources which provide transactions to the scheduler + WorkloadList _workloadList; + ///Priority of the workload source + Priority _priority; + ///Indicates whether sources contained in workload list have to be deleted + bool _srcArraySpecified; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/definitions.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/definitions.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fe149d1f1c6a2d711dac57646b6265e40bb22978 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/definitions.cpp @@ -0,0 +1,136 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <definitions.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> +#include <Bus.h> +#include <CPU.h> +#include <SchedulableDevice.h> +#include <ListenersSimCmd.h> +#include <BusMaster.h> +#include <SeqConstraint.h> +#include <LogConstraint.h> +#include <sys/types.h> +#include <unistd.h> +//#include <MemPool.h> +//#include <Parameter.h> + +TMLTime SchedulableDevice::_simulatedTime=0; +TMLTime SchedulableDevice::_overallTransNo=0; +TMLTime SchedulableDevice::_overallTransSize=0; +ID TMLTransaction::_ID=1; + +const unsigned int SeqConstraint::_transTableSeq[12]={0,20,0,0,16,16,10,32,32,32,11,32}; +const unsigned int LogConstraint::_transTableLog[20]={0, 20, 52, 0, 16, 16, 10, 32, 32, 32, 11, 32, 48, 10, 48, 64, 64, 11, 64, 64}; +//template<class T,int size> MemPool<SizedParameter<T,size> > SizedParameter<T, size>::memPool(BLOCK_SIZE_PARAM); + +int myrand(int n1, int n2){ + static bool firstTime = true; + if(firstTime){ + srand(time(NULL)); + firstTime = false; + } + n2++; + int r = (n1 + (int)(((float)(n2 - n1))*rand()/(RAND_MAX + 1.0))); + //std::cout << "random number: " << r << std::endl; + //return (n1 + (int)(((float)(n2 - n1))*rand()/(RAND_MAX + 1.0))); + return r; + //return n1 + rand()/(RAND_MAX/(n2-n1+1)); +} + +long getTimeDiff(struct timeval& begin, struct timeval& end){ + return end.tv_usec-begin.tv_usec+(end.tv_sec-begin.tv_sec)*1000000; +} + + +/*bool greaterRunnableTime::operator()(TMLTransaction const* p1, TMLTransaction const* p2){ + return p1->getRunnableTime() > p2->getRunnableTime(); +} + +bool greaterPrio::operator()(TMLTransaction const* p1, TMLTransaction const* p2){ + return p1->getCommand()->getTask()->getPriority() > p2->getCommand()->getTask()->getPriority(); +}*/ + +bool greaterStartTime::operator()(TMLTransaction const* p1, TMLTransaction const* p2){ + return p1->getStartTime() > p2->getStartTime(); +} + +void replaceAll(std::string& ioHTML, std::string iSearch, std::string iReplace){ + unsigned int aPos=0; + while (aPos< ioHTML.length() && (aPos= ioHTML.find(iSearch,aPos))!=std::string::npos){ + ioHTML.replace(aPos++,iSearch.length(),iReplace); + } +} + +//std::string vcdValConvert(unsigned int iVal){ +// if(iVal==1 || iVal==2) return "1"; else return "0"; +//} + +std::string vcdTimeConvert(TMLTime iVal){ + std::string iResult; + do{ + if (iVal & 1) iResult="1" + iResult; else iResult="0" + iResult; + iVal >>= 1; + }while(iVal); + return iResult; +} + +int getexename(char* buf, size_t size){ + char linkname[64]; /* /proc/<pid>/exe */ + pid_t pid; + int ret; + pid = getpid(); + if (snprintf(linkname, sizeof(linkname), "/proc/%i/exe", pid) < 0) return -1; + ret = readlink(linkname, buf, size); + if (ret == -1 || ret>=size) return -1; + buf[ret] = 0; + return ret; +} + +unsigned int getEnabledBranchNo(int iNo, int iMask){ + unsigned int retIndex=0; + while (iMask!=0 && iNo!=0){ + if ((iMask & 1)!=0) iNo--; + iMask >>= 1; retIndex++; + } + return retIndex-1; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/definitions.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/definitions.h new file mode 100644 index 0000000000000000000000000000000000000000..173608a1fc2b18aca1d55b5430eae1f50a9b255e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/definitions.h @@ -0,0 +1,484 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef definitionsH +#define definitionsH + + +#include <list> +#include <vector> +#include <string> +#include <string.h> +#include <iostream> +#include <sstream> +#include <fstream> +#include <map> +#include <set> +#include <deque> +#include <algorithm> +#include <stdarg.h> +#include <functional> +#include <queue> +#include <vector> +#include <sys/time.h> +#include <netdb.h> +#include <arpa/inet.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <pthread.h> +#include <dlfcn.h> +#include <stdlib.h> +#include <sys/times.h> +#include <sys/time.h> +#include <sys/resource.h> +#include <unistd.h> + +#define WRITE_STREAM(s,v) s.write((char*) &v,sizeof(v)); +//std::cout << sizeof(v) << " bytes written" << std::endl; +#define READ_STREAM(s,v) s.read((char*) &v,sizeof(v)); +//std::cout << sizeof(v) << " bytes read" << std::endl; + +using std::min; +using std::max; + +#undef DEBUG_KERNEL +#undef DEBUG_CPU +#undef DEBUG_BUS +#undef DEBUG_SERIALIZE + +//enables mapping of DIPLODOCUS channels onto buses +#define BUS_ENABLED +//cost of a send/wait command +#define WAIT_SEND_VLEN 1 +//activate tis flag to take penalties (energy mode, branch prediction, context switch) into account +#undef PENALTIES_ENABLED +//enables the state hash feature +#undef STATE_HASH_ENABLED +//enables listerns for interactive simulation, switch off for fast simulation in command line mode +#define LISTENERS_ENABLED +//enables listeners needed for coverage enhanced simulation +#define EXPLO_ENABLED +//ebrdds are not supported any more +#undef EBRDD_ENABLED +//enables the output of a reachability graph for coverage enhanced simulation +#define EXPLOGRAPH_ENABLED +//enable recording of transactions +#define TRANSLIST_ENABLED +//enable lossy channels +#define LOSS_ENABLED +//enables comments on actions/choices in HTML output +#undef ADD_COMMENTS +//enable this flag to restore benchmark variables correctly in coverage enhanced simulation +#define SAVE_BENCHMARK_VARS + +//Clock scale for VCD output +#define CLOCK_INC 20 +//size of memory chunk for transaction allocation +#define BLOCK_SIZE_TRANS 8000000 +//size of memory chunk for parameter allocation +#define BLOCK_SIZE_PARAM 5000 +//size of memory chunk for comment allocation +#define BLOCK_SIZE_COMMENT 100 +//size of memory chunks for parameter allocation +#define PARAMETER_BLOCK_SIZE 1000 +//Number of events to be loaded at once from a file if content of event channel is associated to a file +#define NO_EVENTS_TO_LOAD 10 + + +//port on which the server +#define PORT "3490" +#define BACKLOG 10 + +//Task VCD output +#define UNKNOWN 4 +#define TERMINATED 3 +#define RUNNING 2 +#define RUNNABLE 1 +#define SUSPENDED 0 + +#define INT_MSB (1 << (sizeof(unsigned int)*8-1)) + +//XML Tags +#define TAG_HEADER "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>" +#define TAG_STARTo "<siminfo>" +#define TAG_STARTc "</siminfo>" +#define TAG_ERRNOo "<error>" +#define TAG_ERRNOc "</error>" +#define TAG_MSGo "<msg>" +#define TAG_MSGc "</msg>" +#define TAG_TIMEo "<simtime>" +#define TAG_TIMEc "</simtime>" +#define TAG_SIMDURo "<simdur>" +#define TAG_SIMDURc "</simdur>" +#define TAG_CYCLESo "<simcycles>" +#define TAG_CYCLESc "</simcycles>" +#define TAG_TASKo "<task" +#define TAG_TASKc "</task>" +#define TAG_TSKSTATEo "<tskstate>" +#define TAG_TSKSTATEc "</tskstate>" +#define TAG_VARo "<var" +#define TAG_VARc "</var>" +#define TAG_STATUSo "<status>" +#define TAG_STATUSc "</status>" +#define TAG_REASONo "<brkreason>" +#define TAG_REASONc "</brkreason>" +#define TAG_GLOBALo "<global>" +#define TAG_GLOBALc "</global>" +#define TAG_CURRCMDo "<currcmd" +#define TAG_CURRCMDc "</currcmd>" +#define TAG_CMDo "<cmd" +#define TAG_CMDc "</cmd>" +#define TAG_EXECTIMESo "<exectimes>" +#define TAG_EXECTIMESc "</exectimes>" +#define TAG_STARTTIMEo "<starttime>" +#define TAG_STARTTIMEc "</starttime>" +#define TAG_FINISHTIMEo "<finishtime>" +#define TAG_FINISHTIMEc "</finishtime>" +#define TAG_STARTTIMETRANSo "<transstarttime>" +#define TAG_STARTTIMETRANSc "</transstarttime>" +#define TAG_FINISHTIMETRANSo "<transfinishtime>" +#define TAG_FINISHTIMETRANSc "</transfinishtime>" +#define TAG_BREAKCMDo "<breakcmd" +#define TAG_BREAKCMDc "</breakcmd>" +#define TAG_NEXTCMDo "<nextcmd>" +#define TAG_NEXTCMDc "</nextcmd>" +#define TAG_HASHo "<hashval>" +#define TAG_HASHc "</hashval>" +#define TAG_BRANCHo "<branch>" +#define TAG_BRANCHc "</branch>" +#define TAG_REPLYo "<replyto>" +#define TAG_REPLYc "</replyto>" +#define TAG_EXTIMEo "<extime>" +#define TAG_EXTIMEc "</extime>" +#define TAG_CONTDELo "<contdel" +#define TAG_CONTDELc "</contdel>" + +#define TAG_BUSo "<bus" +#define TAG_BUSc "</bus>" +#define TAG_CHANNELo "<channel" +#define TAG_CHANNELc "</channel>" +#define TAG_TOWRITEo "<towrite>" +#define TAG_TOWRITEc "</towrite>" +#define TAG_TOREADo "<toread>" +#define TAG_TOREADc "</toread>" +#define TAG_CONTENTo "<content>" +#define TAG_CONTENTc "</content>" +#define TAG_PARAMo "<param>" +#define TAG_PARAMc "</param>" +#define TAG_Pxo "<e" +#define TAG_Pxc "</e" + +#define TAG_UTILo "<util>" +#define TAG_UTILc "</util>" +#define TAG_CPUo "<cpu" +#define TAG_CPUc "</cpu>" +#define TAG_PROGRESSo "<progr>" +#define TAG_PROGRESSc "</progr>" +#define TAG_CURRTASKo "<currtask>" +#define TAG_CURRTASKc "</currtask>" +#define TAG_ENERGYo "<energy>" +#define TAG_ENERGYc "</energy>" + + +class TMLTask; +class TMLTransaction; +class TMLCommand; +class CPU; +class SchedulableCommDevice; +class SchedulableDevice; +class Parameter; +class TraceableDevice; +class Master; +class Serializable; +class TMLChannel; +class Slave; +class Comment; +class WorkloadSource; +class BusMaster; +class GeneralListener; +class EBRDD; +class EBRDDCommand; +class SignalConstraint; + +///Datatype used for time measurements +typedef unsigned long long TMLTime; +///Datatype used to indicate the virtual length of commands (execution units, data units) +typedef unsigned long long TMLLength; +///Priorities +typedef unsigned int Priority; +///IDs +typedef unsigned int ID; +///Datatype used by the CPU to store pointers to associated tasks +typedef std::list<TMLTask*> TaskList; +///Datatype used by CPU and bus to store already scheduled transactions +typedef std::vector<TMLTransaction*> TransactionList; +///Datatype holding pointer to CPUs, used by SimComponents and simulation kernel +typedef std::list<CPU*> CPUList; +///Datatype holding pointer to CPUs and Bridges, used by simulation kernel for scheduling +typedef std::list<SchedulableDevice*> SchedulingList; +///Datatype holding references to buses, used by SimComponents and simulation kernel +typedef std::list<SchedulableCommDevice*> BusList; +///Datatype holding references to CPUs, buses, Tasks and channels, used by serialization functions +typedef std::list<Serializable*> SerializableList; +///Datatype used in SimComponents to store slave objects +typedef std::list<Slave*> SlaveList; +///Datatype used in SimComponents to store channel objects +typedef std::list<TMLChannel*> ChannelList; +///Datatype used in SimComponents to store TEPE listeners +typedef std::list<GeneralListener*> TEPEListenerList; +///Datatype used in TEPEs to Point to a function to be notified upon a signal occurrence +typedef void (SignalConstraint::*NtfSigFuncPointer) (bool iSigState); +///Datatype used in TEPE SignalConstraints to store a list of right constraints to be notified upon a signal occurrence +typedef std::list<std::pair<SignalConstraint*, NtfSigFuncPointer> > SignalNotificationList; + +///Type of a TMLCommand +typedef enum {NONE=(1), EXE=(1<<1), RD=(1<<2), WR=(1<<3), SEL=(1<<4), SND=(1<<5), REQ=(1<<6), WAIT=(1<<7), NOTIF=(1<<8), ACT=(1<<9), CHO=(1<<10), RND=(1<<11), STP=(1<<12)} CommandType; +///TEPE Tristate Signal Type +typedef enum {UNDEF, FALSE, TRUE} Tristate; +///DIPLODOCUS event type +typedef enum {SIM_START=(1), SIM_END=(1<<1), TIME_ADV=(1<<2), TASK_START=(1<<3), TASK_END=(1<<4), CMD_RUNNABLE=(1<<5), CMD_START=(1<<6), CMD_END=(1<<7), TRANS_EXEC=(1<<8)} EventType; + +///Datatype used in Tasks to store comments concerning the task execution +typedef std::vector<Comment*> CommentList; +///Datatype used in Tasks in order to associate a command with an ID +typedef std::map<ID, TMLCommand*> CommandHashTab; + +///Datatype for event parameters +typedef int ParamType; +///Datatype used in EventChannels to store parameters of events +typedef std::deque<Parameter* > ParamQueue; +///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) +typedef unsigned int (TMLTask::*CondFuncPointer) (); +///Type of member function pointer used to indicate a function encapsulating an action (for TMLActionCommand) +typedef void (TMLTask::*ActionFuncPointer) (); +///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) +typedef TMLTime (TMLTask::*LengthFuncPointer) (); +///Type of pointer to indicate a function encapsulating a TEPE condition +typedef bool (*EqFuncPointer)(ParamType**); +///Type of pointer to indicate a function encapsulating a TEPE setting +typedef ParamType (*SettingFuncPointer)(ParamType**); +///Type of pointer to indicate a function returning the random rage of a command +typedef unsigned int (TMLTask::*RangeFuncPointer) (ParamType& oMin, ParamType& oMax); +///Type of member function pointer used to indicate a function encapsulating parameter manipulation (for TMLWaitCommand, TMLSendCommand) +typedef Parameter* (TMLTask::*ParamFuncPointer) (Parameter* ioParam); +///Breakpoint condition function pointer (points to condition function in shared library) +typedef bool (*BreakCondFunc)(TMLTask*); +///Datatype holding references to TraceableDevices (for VCD output) +typedef std::list<TraceableDevice*> TraceableDeviceList; +///Datatype used by the Simulator to keep track of all breakpoints +typedef std::set<TMLCommand*> BreakpointSet; +///Command queue used by server +typedef std::deque<std::string*> CommandQueue; +///Workload list used by Workload sources +typedef std::list<WorkloadSource*> WorkloadList; +///List of bus masters used by CPUs +typedef std::list<BusMaster*> BusMasterList; +///Type used for hash values of system states +typedef uint32_t HashValueType; +///Set used by Commands to store encountered state hash values +typedef std::map<HashValueType,ID> StateHashSet; + +#ifdef EBRDD_ENABLED +///Datatype used in SimComponents to store EBRDD objects +typedef std::list<EBRDD*> EBRDDList; +///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) +typedef int (EBRDD::*EBRDDFuncPointer) (); +///Datatype used in EBRDD Tasks in order to associate a command with an ID +typedef std::map<ID, EBRDDCommand*> CommandHashTabEBRDD; +#endif + +struct ltstr{ + bool operator()(const char* s1, const char* s2) const{ + return strcmp(s1, s2) < 0; + } +}; +///Datatype which associates a variable name with the coresponding pointer to that variable, used for look-up table of tasks +typedef std::map<const char*, ParamType*, ltstr> VariableLookUpTableName; +///Datatype which associates a variable ID with the coresponding pointer to that variable, used for look-up table of tasks +typedef std::map<ID, ParamType*> VariableLookUpTableID; + + +///Minimum of three values +/** +\param a Value 1 +\param b Value 2 +\param c Value 3 +\return Minimum +*/ +template<typename T> +inline const T& min(const T& a, const T& b, const T& c){ + const T& tmin=min(a,b); + return (tmin<c)?tmin:c; +} + +///Minimum of four values +/** +\param a Value 1 +\param b Value 2 +\param c Value 3 +\param d Value 4 +\return Minimum +*/ +template<typename T> +inline const T& min(const T& a, const T& b, const T& c, const T& d){ + const T& tmin=min(a,b,c); + return (tmin<d)?tmin:d; +} + +template<typename T> +inline T StringToNum(const std::string& iStr){ + T aResult(0); + std::istringstream myStream(iStr); + myStream>>aResult; + return aResult; +} + +///The function writes its arguments to an array which has been allocated dynamically. +/** +\param noArgs Number of arguments +\param arg1 An arbitrary number of arguments can follow here +\return Pointer to the array +*/ +template<typename T> +T* array(unsigned int noArgs, T arg1 ...){ + T arg=arg1; + T* newArray; + unsigned int i; + va_list args; // argument list + va_start(args, arg1); // initialize args + newArray=new T[noArgs]; + for (i=0;i<noArgs;i++){ + newArray[i]=arg; + arg=va_arg(args, T); + } + va_end(args); // clean up args + return newArray; +} + +//template<class T> Pool<Parameter<T> > Parameter<T>::memPool; + +///Datatype which encapsulates singnal changes, used for VCD output +class SignalChangeData{ +public: + ///Constructor + /** + \param iSigChange String representation of the signal change in VCD format + \param iTime Time when the change occurred + \param iDevice Pointer to the device the signal belongs to + */ + //SignalChangeData( std::string& iSigChange, TMLTime iTime, TraceableDevice* iDevice):_sigChange(iSigChange),_time(iTime),_device(iDevice){ + //} + SignalChangeData(unsigned int iSigChange, TMLTime iTime, TraceableDevice* iDevice):_sigChange(iSigChange),_time(iTime),_device(iDevice){ + //std::cout << _sigChange << " " << _time << " " << _device << " " << " constructor***\n"; + } + SignalChangeData():_sigChange(0),_time(0),_device(0){ + } + ///String representation of the signal change in VCD format + //std::string _sigChange; + unsigned int _sigChange; + ///Time when the change occurred + TMLTime _time; + ///Pointer to the device the signal belongs to + TraceableDevice* _device; +}; + +///Function object for the comparison of the runnable time of two transaction +/*struct greaterRunnableTime{ + bool operator()(TMLTransaction const* p1, TMLTransaction const* p2); +}; + +///Function object for the comparison of the priority of two transaction +struct greaterPrio{ + bool operator()(TMLTransaction const* p1, TMLTransaction const* p2); +};*/ + +///Function object for the comparison of the start time of two transaction +struct greaterStartTime{ + bool operator()(TMLTransaction const* p1, TMLTransaction const* p2); +}; + +namespace std{ + ///Specialization of std::greater for SignalChangeData pointers + template<> struct greater<SignalChangeData*>{ + inline bool operator()(SignalChangeData const* p1, SignalChangeData const* p2){ + return p1->_time > p2->_time; + } + }; +}; + +///Priority queue for SignalChangeData objects, keeps track of the temporal ordering of signal changes (for VCD output) +typedef std::priority_queue<SignalChangeData*, std::vector<SignalChangeData*>, std::greater<SignalChangeData*> > SignalChangeQueue; +////Priority queue for not yet processed transactions, runnableTime being less than the end of the last scheduled transaction of the device +//typedef std::priority_queue<TMLTransaction*, std::vector<TMLTransaction*>, greaterPrio > PastTransactionQueue; +////Priority queue for not yet processed transactions, runnableTime being greater than the end of the last scheduled transaction of the device +//typedef std::priority_queue<TMLTransaction*, std::vector<TMLTransaction*>, greaterRunnableTime > FutureTransactionQueue; +///Priority queue holding Transactions for the graph output +typedef std::priority_queue<TMLTransaction*, std::vector<TMLTransaction*>, greaterStartTime > GraphTransactionQueue; +//typedef std::map<SchedulableCommDevice*, FutureTransactionQueue*> BridgeTransactionListHash; + +///Calculates random numbers between n1 and n2 (both inclusive) +/** + \param n1 Lower bound + \param n2 Upper bound + \return Random number +*/ +int myrand(int n1, int n2); + +///Calculates the difference between to timeval structures +/** + \param begin Time 1 + \param end Time 2 + \return Time difference in usec (Time2 - Time1) +*/ +long getTimeDiff(struct timeval& begin, struct timeval& end); + +///Replaces all occurrences of iSearch in ioHTML by iReplace +/** + \param ioHTML String in which the replacements shall be made + \param iSearch String to search for + \param iReplace String which is filled in +*/ +void replaceAll(std::string& ioHTML, std::string iSearch, std::string iReplace); +inline std::string vcdValConvert(unsigned int iVal) {if(iVal==1 || iVal==2) return "1"; else return "0";} +std::string vcdTimeConvert(TMLTime iVal); +int getexename(char* buf, size_t size); +unsigned int getEnabledBranchNo(int iNo, int iMask); +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.cpp new file mode 100755 index 0000000000000000000000000000000000000000..6edc1f869629ae993e127dc096e017d4db6e83fe --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.cpp @@ -0,0 +1,146 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDD.h> +#include <EBRDDCommand.h> +#include <EBRDDStopCommand.h> + +EBRDD::EBRDD(unsigned int iID, std::string iName): _ID(iID), _name(iName), _currCommand(0), _firstCommand(0){ +} + +EBRDD::~EBRDD(){ +} + +EBRDDCommand* EBRDD::getCurrCommand() const{ + return _currCommand; +} + +void EBRDD::setCurrCommand(EBRDDCommand* iCurrCommand){ + //std::cout << _name << "currentcommand: " << iCurrCommand->toString() << std::endl; + _currCommand=iCurrCommand; +} + + +std::string EBRDD::toString() const{ + return _name; +} + +std::string EBRDD::toShortString() const{ + std::ostringstream outp; + outp << "ta" << _ID; + return outp.str(); +} + +unsigned int EBRDD::getID() const{ + return _ID; +} + +std::ostream& EBRDD::writeObject(std::ostream& s){ + unsigned int aCurrCmd; + if (_currCommand==0){ + aCurrCmd=0; + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EBRDD " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + }else{ + aCurrCmd=_currCommand->getID(); + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EBRDD " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + _currCommand->writeObject(s); + } + return s; +} + +std::istream& EBRDD::readObject(std::istream& s){ + unsigned int aCurrCmd; + READ_STREAM(s, aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EBRDD " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + if (aCurrCmd==0){ + _currCommand=0; + }else{ + _currCommand=getCommandByID(aCurrCmd); + _currCommand->readObject(s); + } + return s; +} + +void EBRDD::reset(){ + //std::cout << "task reset" << std::endl; + if (_currCommand!=0) _currCommand->reset(); + _currCommand=_firstCommand; + //if (_currCommand!=0) _currCommand->reset(); +} + +/*ParamType* EBRDD::getVariableByName(std::string& iVarName ,bool& oIsId){ + if (iVarName[0]>='0' && iVarName[0]<='9'){ + oIsId=true; + return getVariableByID(StringToNum<unsigned int>(iVarName)); + } + oIsId=false; + return _varLookUpName[iVarName.c_str()]; +}*/ + +//ParamType* EBRDD::getVariableByID(unsigned int iVarID){ +// return _varLookUpID[iVarID]; +//} + +void EBRDD::addCommand(unsigned int iID, EBRDDCommand* iCmd){ + _commandHash[iID]=iCmd; +} + +EBRDDCommand* EBRDD::getCommandByID(unsigned int iID){ + return _commandHash[iID]; +} + +//VariableLookUpTableID::const_iterator EBRDD::getVariableIteratorID(bool iEnd) const{ +// return (iEnd)?_varLookUpID.end():_varLookUpID.begin(); +//} + +//VariableLookUpTableName::const_iterator EBRDD::getVariableIteratorName(bool iEnd) const{ +// return (iEnd)?_varLookUpName.end():_varLookUpName.begin(); +//} + +void EBRDD::finished(){ +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.h new file mode 100755 index 0000000000000000000000000000000000000000..d45434cddfedd92b1a8949790a29660d8566371c --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.h @@ -0,0 +1,145 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDH +#define EBRDDH + +#include <definitions.h> +#include <Serializable.h> + +class EBRDDCommand; + +///Base class for Event Based Requirement Description Diagrams +class EBRDD: public Serializable{ +public: + ///Constructor + /** + \param iID ID of the EBRDD + \param iName Name of the EBRDD + */ + EBRDD(unsigned int iID, std::string iName); + ///Destructor + virtual ~EBRDD(); + ///Returns a pointer to the current command of the EBRDD + /** + \return Pointer to the current command + */ + EBRDDCommand* getCurrCommand() const; + ///Sets the pointer to the current command of the EBRDD + /** + \param iCurrCommand Pointer to the current command + */ + void setCurrCommand(EBRDDCommand* iCurrCommand); + ///Returns a string representation of the EBRDD + /** + \return Detailed string representation + */ + virtual std::string toString() const; + ///Returns a short string representation of the EBRDD + /** + \return Short string representation + */ + std::string toShortString() const; + ///Returns the unique ID of the EBRDD + /** + \return Unique ID + */ + unsigned int getID() const; + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + /////Returns a pointer to the EBRDD variable specified by its name + ////** + //\param iVarName Name of the EBRDD variable + //\param oIsId Is set to true if an ID was passed to this function + //\return Pointer to the variable + //*/ + //ParamType* getVariableByName(std::string& iVarName ,bool& oIsId); + ///Searches for a Command based on its ID + /** + \param iID ID of the Command + \return Pointer to the Commmand + */ + EBRDDCommand* getCommandByID(unsigned int iID); + ///Adds a new command to the internal list + /** + \param iID ID of the command + \param iCmd Pointer to the command + */ + void addCommand(unsigned int iID, EBRDDCommand* iCmd); + /////Returns a pointer to the EBRDD variable specified by its ID + ////** + //\param iVarID ID of the EBRDD variable + //\return Pointer to the variable + //*/ + //ParamType* getVariableByID(unsigned int iVarID); + /////Returns an iterator for the internal variable ID hash table + ////** + //\param iEnd true for iterator pointing to the end of the table, false for iterator pointing to the first element + //\return Const iterator for variable table + //*/ + //VariableLookUpTableID::const_iterator getVariableIteratorID(bool iEnd) const; + /////Returns an iterator for the internal variable Name hash table + ////** + //\param iEnd true for iterator pointing to the end of the table, false for iterator pointing to the first element + //\return Const iterator for variable table + //*/ + //VariableLookUpTableName::const_iterator getVariableIteratorName(bool iEnd) const; + ///Is called when a stop command is encountered + void finished(); + //TMLTransaction* getNextTransaction() const; +protected: + ///ID of the EBRDD + unsigned int _ID; + ///Name of the EBRDD + std::string _name; + ///Pointer to the current command of the EBRDD + EBRDDCommand* _currCommand; + ///Pointer to the first command of the EBRDD + EBRDDCommand* _firstCommand; + ///Look up table for EBRDD variables (by name) + VariableLookUpTableName _varLookUpName; + /////Look up table for EBRDD variables (by ID) + //VariableLookUpTableID _varLookUpID; + ///Hash table containing commands + CommandHashTabEBRDD _commandHash; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..9c4163aaac3069e77ca6841c4075828ddd8b51de --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.cpp @@ -0,0 +1,60 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDActionCommand.h> +#include <EBRDD.h> + +EBRDDActionCommand::EBRDDActionCommand(ID iID, EBRDD* iEBRDD, EBRDDFuncPointer iEBRDDFunc): EBRDDCommand(iID, iEBRDD),_ebrddFunc(iEBRDDFunc){ +} + +EBRDDCommand* EBRDDActionCommand::prepare(){ + //std::cout << "action prepare begin\n"; + (_ebrdd->*_ebrddFunc)(); + if (_nextCommand[0]!=0) return _nextCommand[0]->prepare(); + //std::cout << "action prepare end\n"; + return 0; +} + + +std::string EBRDDActionCommand::toString() const{ + std::ostringstream outp; + outp << "EBRDDAction in " << EBRDDCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..d4d649e90cbea331efffa1f880e0aef0dc38c8cc --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.h @@ -0,0 +1,65 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDActionCommandH +#define EBRDDActionCommandH + +#include <definitions.h> +#include <EBRDDCommand.h> + + +///This class executes a C++ statement (probably a variable assignment or modification) defined in the scope of a EBRDD action state. +class EBRDDActionCommand: public EBRDDCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iEBRDD Pointer to the EBRDD the command belongs to + \param iEBRDDFunc Member function pointer to the action function + */ + EBRDDActionCommand(ID iID, EBRDD* iEBRDD, EBRDDFuncPointer iEBRDDFunc); + EBRDDCommand* prepare(); + std::string toString() const; +protected: + ///Member function pointer to the action function + EBRDDFuncPointer _ebrddFunc; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..3fbe3d79198525afb7ceb411fe6a7040019b8188 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.cpp @@ -0,0 +1,65 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDChoiceCommand.h> +#include <EBRDD.h> + +EBRDDChoiceCommand::EBRDDChoiceCommand(unsigned int iID, EBRDD* iEBRDD, EBRDDFuncPointer iCondFunc):EBRDDCommand(iID, iEBRDD), _condFunc(iCondFunc){ +} + +EBRDDCommand* EBRDDChoiceCommand::prepare(){ + unsigned int aNextCmd; + //std::cout << "choice prepare begin\n"; + aNextCmd=(_ebrdd->*_condFunc)(); + //std::cout << "Next CmdIndex: " << aNextCmd << std::endl; + if (_nextCommand[aNextCmd]!=0){ + EBRDDCommand* xx = _nextCommand[aNextCmd]->prepare(); + //std::cout << "choice prepare end\n"; + return xx; + } + //std::cout << "ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; + return 0; +} + +std::string EBRDDChoiceCommand::toString() const{ + std::ostringstream outp; + outp << "Choice in " << EBRDDCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..ea4d6dcac832f4decf1e14940e3dc3ba6975a9af --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.h @@ -0,0 +1,65 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDChoiceCommandH +#define EBRDDChoiceCommandH + +#include <definitions.h> +#include <EBRDDCommand.h> + + +///This class stands for a fork in the control flow of a EBRDD task. +class EBRDDChoiceCommand:public EBRDDCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iEBRDD Pointer to the EBRDD the command belongs to + \param iCondFunc Member function pointer to the condition function returning the index of the next command + */ + EBRDDChoiceCommand(unsigned int iID, EBRDD* iEBRDD, EBRDDFuncPointer iCondFunc); + EBRDDCommand* prepare(); + std::string toString() const; +protected: + ///Member function pointer to the condition function returning the index of the next command + EBRDDFuncPointer _condFunc; +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..091a0d3c13479c4257267c29b02df4062489f381 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.cpp @@ -0,0 +1,96 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDCommand.h> +#include <EBRDD.h> +//#include <SimComponents.h> + +//SimComponents* TMLCommand::_simComp=0; + +EBRDDCommand::EBRDDCommand(ID iID, EBRDD* iEBRDD): _ID(iID), _ebrdd(iEBRDD), _nextCommand(0){ + _ebrdd->addCommand(iID, this); +} + +EBRDDCommand::~EBRDDCommand(){ + if (_nextCommand!=0) delete[] _nextCommand; +} + +EBRDD* EBRDDCommand::getEBRDD() const{ + return _ebrdd; +} + +void EBRDDCommand::setNextCommand(EBRDDCommand** iNextCommand){ + _nextCommand=iNextCommand; +} + +//EBRDDCommand* EBRDDCommand::getNextCommand() const{ +// return (_nextCommand==0)?0:_nextCommand[0]; +//} + +//EBRDDCommand** EBRDDCommand::getNextCommands(unsigned int& oNbOfCmd) const{ + //returned number is not correct for composite choice/choice commands and composite action/choice commands !!!! +// oNbOfCmd=_nbOfNextCmds; +// return _nextCommand; +//} + +std::string EBRDDCommand::toString() const{ + std::ostringstream outp; + outp << _ebrdd->toString(); + return outp.str(); +} + +std::ostream& EBRDDCommand::writeObject(std::ostream& s){ + return s; +} + +std::istream& EBRDDCommand::readObject(std::istream& s){ + return s; +} + +void EBRDDCommand::reset(){ +} + +ID EBRDDCommand::getID() const{ + return _ID; +} + +//void TMLCommand::setSimComponents(SimComponents* iSimComp){ +// _simComp=iSimComp; +//} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..f831ba559b33d46a147904db2ee2de11a392132b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.h @@ -0,0 +1,111 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDCommandH +#define EBRDDCommandH + +#include <definitions.h> +#include <Serializable.h> + +class EBRDD; + +///This class defines the basic interfaces and functionalites of a EBRDD command. All specific EBRDD commands are derived from this base class. +class EBRDDCommand: public Serializable { +public: + ///Constructor + /** + \param iID ID of the command + \param iEBRDD Pointer to the EBRDD the command belongs to + */ + EBRDDCommand(ID iID, EBRDD* iEBRDD); + ///Destructor + virtual ~EBRDDCommand(); + ///Initializes the command and passes the control flow to the prepare() method of the next command if necessary + /** + \return The EBRDD command which is currently active + */ + virtual EBRDDCommand* prepare()=0; + ///Assigns a value to the pointer referencing the array of next commands + /** + \param iNextCommand Pointer to an array of pointers to the next commands + */ + void setNextCommand(EBRDDCommand** iNextCommand); + ///Returns a pointer to the EBRDD the command belongs to + /** + \return Pointer to the EBRDD + */ + EBRDD* getEBRDD() const; + ///Returns a string representation of the command + /** + \return Detailed string representation + */ + virtual std::string toString() const; + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + ///Returns the unique ID of the command + /** + \return Unique ID + */ + ID getID() const; + ////Sets the internal pointer to the simulation components + ////** + //\param iSimComp Pointer to simulation components + //*/ + //static void setSimComponents(SimComponents* iSimComp); + /////Returns a pointer to the next command array and the number of successors of this command + ////** + //\param oNbOfCmd Number of successors of this command + //\return Pointer to next command array + //*/ + //EBRDDCommand** getNextCommands(unsigned int& oNbOfCmd) const; +protected: + ///ID of the command + ID _ID; + ///Pointer to the EBRDD the command belongs to + EBRDD* _ebrdd; + ///Pointer to an array of pointers to the next commands + EBRDDCommand** _nextCommand; + /////Number of successors of this command + //unsigned int _nbOfNextCmds; +}; + +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eb697db0c6be3f18c2e080b4e6dcc23a08b85c03 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.cpp @@ -0,0 +1,58 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDStopCommand.h> +#include <EBRDD.h> + +EBRDDStopCommand::EBRDDStopCommand(ID iID, EBRDD* iEBRDD): EBRDDCommand(iID, iEBRDD){ +} + +EBRDDCommand* EBRDDStopCommand::prepare(){ + _ebrdd->finished(); + return 0; +} + +std::string EBRDDStopCommand::toString() const{ + std::ostringstream outp; + outp << "Stop in " << EBRDDCommand::toString(); + return outp.str(); +} + + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..e7d34d09f42c2d7680739385896e2c8fa9fa246f --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.h @@ -0,0 +1,62 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDStopCommandH +#define EBRDDStopCommandH + +#include <definitions.h> +#include <EBRDDCommand.h> + + +///This command denotes the end of an EBRDD +class EBRDDStopCommand:public EBRDDCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + */ + EBRDDStopCommand(ID iID, EBRDD* iTask); + EBRDDCommand* prepare(); + std::string toString() const; +protected: +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERB.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERB.cpp new file mode 100644 index 0000000000000000000000000000000000000000..67a59aff5690fd9afa7b9d06ee56aade221504bc --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERB.cpp @@ -0,0 +1,286 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ERB.h> +#include <SimComponents.h> +#include <SchedulableDevice.h> +#include <SchedulableCommDevice.h> +#include <Slave.h> +#include <TMLTask.h> +#include <NotifyIF.h> +#include <TMLChannel.h> +#include <ERC.h> +#include <Simulator.h> +#include <EBRDD.h> + +//#define NOTIFY_ANCESTOR {_nbOfNotific++; _ancestorNode->notifyEvent(_ID);} + +SimComponents* ERB::_simComp=0; +char* ERB::_evtString[] ={ + "transExecuted", "commandEntered", + "commandStarted", "commandExecuted", + "commandFinished", "taskStarted", + "taskFinished", "readTrans", + "writeTrans", "simulationStarted", + "simulationStopped" +}; + +ERB::ERB(ERC* iContainer, NotifyIF* iAncestorNode, bool iNegated, const std::string& iName, ID iEvtID, unsigned int iSourceClass, unsigned int* iArrayOfSources, unsigned int iNbOfSources, EBRDDFuncPointer iEbrddFunc, const std::string& iCondString): EventIF(iAncestorNode, iNegated), _container(iContainer), _name(iName), _evtID(iEvtID), _sourceClass(iSourceClass), _arrayOfSources(iArrayOfSources), _nbOfSources(iNbOfSources), _ebrddFunc(iEbrddFunc), _condString(iCondString){ +} + +ERB::~ERB(){ + if (_arrayOfSources!=0) delete[] _arrayOfSources; +} + +void ERB::timeTick(TMLTime iNewTime){ + //std::cout << "TimeTick ERB: " << iNewTime << std::endl; +} + +void ERB::notifyAncestor(ID iEvtSourceID){ + //std::cout << "* evt in " << _name << " t:" << SchedulableDevice::getSimulatedTime() << " n:" << _evtString[_evtID] << " src: " << _simComp->getCmpNameByID(iEvtSourceID) << "\n"; + _nbOfNotific++; + if (_ebrddFunc!=0 && !(_container->getEBRDD()->*_ebrddFunc)()){ + //Alert!!! + std::cout << "ALERT!\n"; + std::ostringstream aOut; + aOut << MSG_EBRDDCONVIOLATED << ": " << _condString << " in " << _container->getEBRDD()->toString(); + _simComp->setStopFlag(true, aOut.str()); + } + _ancestorNode->notifyEvent(_ID); + //std::cout << "end ERB event notified: " << _name << "\n"; +} + +void ERB::activate(){ + //std::cout << "activate event: " << _name << "\n"; + _active=true; +} + +void ERB::prepare(){ + switch (_sourceClass){ + //CPU + case 0:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableDevice* aCPU = _simComp->getCPUByID(_arrayOfSources[i]); + if (aCPU!=0) aCPU->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Bus + case 1:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableCommDevice* aBus = _simComp->getBusByID(_arrayOfSources[i]); + if (aBus!=0) aBus->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Mem: + case 2: + //Bridge + case 3:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + Slave* aSlave = _simComp->getSlaveByID(_arrayOfSources[i]); + if (aSlave!=0) aSlave->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Channel + case 4:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLChannel* aChannel = _simComp->getChannelByID(_arrayOfSources[i]); + if (aChannel!=0) aChannel->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Task + case 5:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLTask* aTask = _simComp->getTaskByID(_arrayOfSources[i]); + if (aTask!=0) aTask->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //HWA + case 6: + break; + //kernel + case 7: + _simComp->getSimulator()->registerListener(this); + break; + } + //std::cout << "end activate event: " << _name << "\n"; +} + +void ERB::deactivate(){ + //std::cout << "deactivate event: " << _name << "\n"; + _active=false; +} + +/*void ERB::reset(){ + EventIF::reset(); + switch (_sourceClass){ + //CPU + case 0:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableDevice* aCPU = _simComp->getCPUByID(_arrayOfSources[i]); + if (aCPU!=0) aCPU->removeListener(this); + } + break; + } + //Bus + case 1:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableCommDevice* aBus = _simComp->getBusByID(_arrayOfSources[i]); + if (aBus!=0) aBus->removeListener(this); + } + break; + } + //Mem: + case 2: + //Bridge + case 3:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + Slave* aSlave = _simComp->getSlaveByID(_arrayOfSources[i]); + if (aSlave!=0) aSlave->removeListener(this); + } + break; + } + //Channel + case 4:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLChannel* aChannel = _simComp->getChannelByID(_arrayOfSources[i]); + if (aChannel!=0) aChannel->removeListener(this); + } + break; + } + //Task + case 5:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLTask* aTask = _simComp->getTaskByID(_arrayOfSources[i]); + if (aTask!=0) aTask->removeListener(this); + } + break; + } + //HWA + case 6: + break; + //kernel + case 7: + _simComp->getSimulator()->removeListener(this); + break; + //std::cout << "end deactivate event: " << _name << "\n"; + } +}*/ + +//void ERB::transExecuted(TMLTransaction* iTrans){ +void ERB::transExecuted(TMLTransaction* iTrans, ID iID){ + //std::cout << "transExecuted notified: " << _name << "\n"; + if (_evtID==0 && _active) notifyAncestor(iID); +} + +void ERB::commandEntered(TMLCommand* iComm, ID iID){ + //std::cout << "commandEntered notified: " << _name << "\n"; + if (_evtID==1 && _active) notifyAncestor(iID); +} + +void ERB::commandStarted(TMLCommand* iComm, ID iID){ + //std::cout << "commandStarted notified: " << _name << "\n"; + if (_evtID==2 && _active) notifyAncestor(iID); +} + +void ERB::commandExecuted(TMLCommand* iComm,ID iID){ + //std::cout << "commandExecuted: " << _name << "\n"; + if (_evtID==3 && _active) notifyAncestor(iID); +} + +void ERB::commandFinished(TMLCommand* iComm, ID iID){ + //std::cout << "commandFinished notified: " << _name << "\n"; + if (_evtID==4 && _active) notifyAncestor(iID); +} + +void ERB::taskStarted(TMLTransaction* iTrans,ID iID){ + //std::cout << "taskStarted notified: " << _name << "\n"; + if (_evtID==5 && _active) notifyAncestor(iID); +} + +void ERB::taskFinished(TMLTransaction* iTrans, ID iID){ + //std::cout << "taskFinished notified: " << _name << "\n"; + if (_evtID==6 && _active) notifyAncestor(iID); +} + +void ERB::readTrans(TMLTransaction* iTrans, ID iID){ + //std::cout << "readTrans notified: " << _name << "\n"; + if (_evtID==7 && _active) notifyAncestor(iID); +} + +void ERB::writeTrans(TMLTransaction* iTrans, ID iID){ + //std::cout << "writeTrans notified: " << _name << "\n"; + if (_evtID==8 && _active) notifyAncestor(iID); +} + +void ERB::simulationStarted(){ + //std::cout << "simStarted notified: " << _name << "\n"; + if (_evtID==9 && _active) notifyAncestor(-1); +} + +void ERB::simulationStopped(){ + //std::cout << "simStopped notified: " << _name << "\n"; + if (_evtID==10 && _active) notifyAncestor(-1); +} + +void ERB::setSimComponents(SimComponents* iSimComp){ + _simComp=iSimComp; +} + +std::ostream& ERB::writeObject(std::ostream& s){ + EventIF::writeObject(s); + return s; +} + +std::istream& ERB::readObject(std::istream& s){ + EventIF::readObject(s); + std::cout << "readObject " << _name << ": " << _active << "\n"; + if (_active) activate(); + return s; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERB.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERB.h new file mode 100644 index 0000000000000000000000000000000000000000..e728f9617227a7870abe1bdf498333f76f2b639a --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERB.h @@ -0,0 +1,125 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ERBH +#define ERBH + +#include <EventIF.h> +#include <ChannelListener.h> +#include <CommandListener.h> +#include <KernelListener.h> +#include <TaskListener.h> +#include <TransactionListener.h> + +#define MSG_EBRDDCONVIOLATED "EBRDD condition has been violated" + +class SimComponents; +class ERC; + +///Event Reaction Blocks are leaf nodes of an Event Tree within an ERC +class ERB: public EventIF, public ChannelListener, public CommandListener, public KernelListener, public TaskListener, public TransactionListener{ +public: + ///Constructor + /** + \param iContainer Pointer to subordinate ERC + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iName Name of the ERB + \param iEvtID ID of event to be received + \param iSourceClass Category of then event source (CPU, Bus, Slave, ...) + \param iArrayOfSources Array of event sources + \param iNbOfSources Number of event sources + \param iEbrddFunc Member function pointer to EBRDD function + \param iCondString ERB Condition in string format + */ + ERB(ERC* iContainer, NotifyIF* iAncestorNode, bool iNegated, const std::string& iName, ID iEvtID, unsigned int iSourceClass, unsigned int* iArrayOfSources, unsigned int iNbOfSources, EBRDDFuncPointer iEbrddFunc, const std::string& iCondString); + ///Destructor + virtual ~ERB(); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); + void prepare(); + //void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + void transExecuted(TMLTransaction* iTrans, ID iID); + void commandEntered(TMLCommand* iComm, ID iID); + void commandStarted(TMLCommand* iComm, ID iID); + void commandExecuted(TMLCommand* iComm, ID iID); + void commandFinished(TMLCommand* iComm, ID iID); + void taskStarted(TMLTransaction* iTrans, ID iID); + void taskFinished(TMLTransaction* iTrans, ID iID); + void readTrans(TMLTransaction* iTrans, ID iID); + void writeTrans(TMLTransaction* iTrans, ID iID); + void simulationStarted(); + void simulationStopped(); + ///Sets the class variable pointing to the simulation objects + /** + \param iSimComp Pointer to the simulation components + */ + static void setSimComponents(SimComponents* iSimComp); +protected: + ///Pointer to subordinate ERC + ERC* _container; + ///Name of ERB + std::string _name; + ///ID of event to be received + ID _evtID; + ///Category of then event source (CPU, Bus, Slave, ...) + unsigned int _sourceClass; + ///Array of event sources + unsigned int* _arrayOfSources; + ///Number of event sources + unsigned int _nbOfSources; + ///Pointer to simulation components + static SimComponents* _simComp; + ///Class variable holding strinf representations of events + static char* _evtString[]; + ///Member function pointer to EBRDD function + EBRDDFuncPointer _ebrddFunc; + ///ERB Condition in string format + std::string _condString; + ///Signals event to ancestor node + /** + \param iEvtSourceID ID of event source + */ + void notifyAncestor(ID iEvtSourceID); +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERC.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERC.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ed6ebbb16d7d86f6fbbd71512a4989e91db16de8 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERC.cpp @@ -0,0 +1,124 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ERC.h> +#include <EventIF.h> +#include <EBRDD.h> +#include <Simulator.h> +#include <SimComponents.h> + +SimComponents* ERC::_simComp=0; + +ERC::ERC(ID iID, EBRDD* iEBRDD): NotifyIF(1), EBRDDCommand(iID, iEBRDD), _ebrdd(iEBRDD), _wasPrepared(false), _once(true) { +} + +void ERC::notifyEvent(ID iID){ + //std::cout << "***** Container " << _ID << " notified *****\n"; + _wasPrepared=false; + //_simComp->getSimulator()->removeListener(this); ///////////////////NEW!!!!!!!!!!!! + //_eventArray[0]->deactivate(); + NotifyIF::reset(); + if (_nextCommand[0]!=0) _nextCommand[0]->prepare(); + //std::cout << "end notify event\n"; +} +void ERC::notifyAbort(ID iID){ + _wasPrepared=false; + _simComp->getSimulator()->removeListener(this); + std::cout << "***** Container aborted " << _ID << " *****\n"; + //if (!_simComp->getStopFlag()){ + std::ostringstream aOut; + aOut << MSG_EBRDDSEQVIOLATED << ": " << _ebrdd->toString(); + _simComp->setStopFlag(true, aOut.str()); + //} +} + +void ERC::reset(){ + //std::cout << "***** ERC reset " << _ID << " *****\n"; + _wasPrepared=false; + _eventArray[0]->deactivate(); + NotifyIF::reset(); +} + +EBRDD* ERC::getEBRDD(){ + return _ebrdd; +} + +void ERC::timeAdvances(TMLTime iCurrTime){ + //std::cout << "Time anvances ERC: " << iCurrTime << std::endl; + _eventArray[0]->timeTick(iCurrTime); +} + +EBRDDCommand* ERC::prepare(){ + if (!_wasPrepared){ + _wasPrepared=true; + //std::cout << "***** Container " << _ID << " prepared *****\n"; + //_simComp->getSimulator()->registerListener(this); ///////////////////NEW!!!!!!!!!!!! + _ebrdd->setCurrCommand(this); + //std::cout << "In prepare ERC\n"; + if (_once){ + _eventArray[0]->prepare(); //NEW!!!!!!!!!!!!!!!!!!!!!!! + _once=false; + } + _eventArray[0]->activate(); + //std::cout << "end prepare ERC\n"; + } + return this; +} + +std::string ERC::toString() const{ + std::ostringstream outp; + outp << "ERC in " << EBRDDCommand::toString(); + return outp.str(); +} + +void ERC::setSimComponents(SimComponents* iSimComp){ + _simComp=iSimComp; +} + +std::ostream& ERC::writeObject(std::ostream& s){ + _eventArray[0]->writeObject(s); + return s; +} + +std::istream& ERC::readObject(std::istream& s){ + _wasPrepared=true; + _eventArray[0]->readObject(s); + return s; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERC.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERC.h new file mode 100644 index 0000000000000000000000000000000000000000..88313950e797359af0fb1abb7f5a77f53c92144a --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ERC.h @@ -0,0 +1,88 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ERCH +#define ERCH + +#include <NotifyIF.h> +#include <EBRDDCommand.h> +#include <KernelListener.h> + +#define MSG_EBRDDSEQVIOLATED "EBRDD sequence has been violated" + +class SimComponents; + +///EBRDD Command Event Reception Container +class ERC: public NotifyIF, public EBRDDCommand, public KernelListener{ +public: + ///Constructor + /** + \param iID ID of the ERC + \param iEBRDD Pointer to the subordinate EBRDD + */ + ERC(ID iID, EBRDD* iEBRDD); + void notifyEvent(ID iID); + void notifyAbort(ID iID); + ///Returns a pointer to the subordinate EBRDD + /** + \return Pointer to EBRDD + */ + EBRDD* getEBRDD(); + void timeAdvances(TMLTime iCurrTime); + EBRDDCommand* prepare(); + std::string toString() const; + ///Sets the class variable pointing to the simulation objects + /** + \param iSimComp Pointer to the simulation components + */ + static void setSimComponents(SimComponents* iSimComp); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); +protected: + ///Pointer to subordiate EBRDD + EBRDD* _ebrdd; + ///Pointer to simulation components + static SimComponents* _simComp; + ///Indicates whether the ERC has already been prepared + bool _wasPrepared; + bool _once; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ESO.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ESO.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c33894ecf0b841c4c533c34d1a29902287a4b478 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ESO.cpp @@ -0,0 +1,509 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ESO.h> +#include <SchedulableDevice.h> + +//std::cout << "Abort: " << _ID << "\n"; +#define NOTIFY_ABORT {_aborted=true; _ancestorNode->notifyAbort(_ID);} +//std::cout << "Notify: " << _ID << "\n"; +#define NOTIFY_EVENT {_nbOfNotific++; _ancestorNode->notifyEvent(_ID);} +//omit _nbOfNotific>0 +#define RETURN_IF_TERMINATED if (_nbOfNotific>0 || _aborted ) return; +#define RETURN_IF_NO_TIMEOUT if (_timeOut==0 || !_active) return; +#define RETURN_IF_ACTIVE if (_active) return; + +//************************************************************************ +ESOConjunction::ESOConjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _oncePerEvent(iOncePerEvent){ +} + +void ESOConjunction::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated() || (_oncePerEvent && _eventArray[iID]->getNbOfNotific()>1)){ + NOTIFY_ABORT; + //std::cout << "Abort Conjuction (negated or too much): " << _ID << "\n"; + }else{ + //all non negated events received? + for (unsigned int i=0; i<_nbOfEvents; i++){ + //std::cout << i << "\n"; + if (!_eventArray[i]->notified() && !_eventArray[i]->getNegated()) return; + } + NOTIFY_EVENT; + //std::cout << "Notify Conjuction: " << _ID << "\n"; + } +} + +void ESOConjunction::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated()){ + //all events negated and aborted? + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_eventArray[i]->getNegated() || !_eventArray[i]->getAborted()) return; + } + NOTIFY_EVENT; + //std::cout << "Notify Conjuction: " << _ID << "\n"; + }else{ + NOTIFY_ABORT; + //std::cout << "Abort Conjuction (abort received): " << _ID << "\n"; + } +} + +void ESOConjunction::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + //all events negated? + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_eventArray[i]->getNegated()){ + NOTIFY_ABORT; + return; + } + } + //if all events are negated + NOTIFY_EVENT; + } +} + +void ESOConjunction::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESOConjunction::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + + +//************************************************************************ +ESODisjunction::ESODisjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut){ +} + +void ESODisjunction::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated()){ + //test if all norm events are aborted, all neg events notified + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((!_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()) || (_eventArray[i]->getNegated() && !_eventArray[i]->notified())) return; + } + NOTIFY_ABORT; + }else{ + NOTIFY_EVENT; + } +} + +void ESODisjunction::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated()){ + NOTIFY_EVENT; + }else{ + //test if all norm events are aborted, all neg events notified + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((!_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()) || (_eventArray[i]->getNegated() && !_eventArray[i]->notified())) return; + } + NOTIFY_ABORT; + } +} + +void ESODisjunction::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + for (unsigned int i=0; i<_nbOfEvents; i++){ + //was negated event not received? + if (_eventArray[i]->getNegated() && !_eventArray[i]->notified()){ + NOTIFY_EVENT; + return; + } + } + NOTIFY_ABORT; + } +} + +void ESODisjunction::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESODisjunction::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + + +//************************************************************************ +ESOSequence::ESOSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _nextEvtToWaitFor(-1), _lastEvtToWaitFor(0){ +} + +void ESOSequence::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (iID==_nextEvtToWaitFor){ + if (searchForNextEvt()==-1) NOTIFY_EVENT; + }else{ + NOTIFY_ABORT; + } + +} + +void ESOSequence::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + if (iID==_nextEvtToWaitFor){ + NOTIFY_ABORT; + }else{ + if(_nextEvtToWaitFor==_nbOfEvents){ + //Only negated and aborted events at the end of the list? + for(unsigned int i=_nextEvtToWaitFor-1; i>=0 && _eventArray[i]->getNegated(); i--){ + if (!_eventArray[i]->getAborted()) return; + } + NOTIFY_EVENT; + } + } +} + +void ESOSequence::timeTick(TMLTime iNewTime){ + //std::cout << "check time tick0\n"; + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + //if (_active) + // std::cout << "check time tick1 true" << "\n"; + //else + // std::cout << "check time tick1 false" << "\n"; + RETURN_IF_NO_TIMEOUT; + //std::cout << "check time tick2\n"; + if (iNewTime>=_timeOut + _startTime){ + if(_nextEvtToWaitFor==_nbOfEvents){ + NOTIFY_EVENT; + }else{ + NOTIFY_ABORT; + } + } +} + +void ESOSequence::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + searchForNextEvt(); +} + +void ESOSequence::reset(){ + //std::cout << "Sequence reset\n"; + ESOIF::reset(); + _nextEvtToWaitFor=-1; + _lastEvtToWaitFor=0; +} + +std::ostream& ESOSequence::writeObject(std::ostream& s){ + ESOIF::writeObject(s); + WRITE_STREAM(s, _nextEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOSequence nextEvtToWaitFor: " << _nextEvtToWaitFor << std::endl; +#endif + WRITE_STREAM(s, _lastEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOSequence lastEvtToWaitFor: " << _lastEvtToWaitFor << std::endl; +#endif + return s; +} + +std::istream& ESOSequence::readObject(std::istream& s){ + ESOIF::readObject(s); + READ_STREAM(s, _nextEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOSequence nextEvtToWaitFor: " << _nextEvtToWaitFor << std::endl; +#endif + READ_STREAM(s, _lastEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOSequence lastEvtToWaitFor: " << _lastEvtToWaitFor << std::endl; +#endif + return s; +} + +void ESOSequence::deactivate(){ + _active=false; + //reset(); + if (_nextEvtToWaitFor!=-1){ + for (unsigned int i=_lastEvtToWaitFor; i< std::min(_nextEvtToWaitFor+1, _nbOfEvents); i++){ + _eventArray[i]->deactivate(); + //std::cout << "[end] deactivate event: " << i << "\n"; + } + } +} + +int ESOSequence::searchForNextEvt(){ + deactivate(); + _nextEvtToWaitFor++; + if (_nextEvtToWaitFor>=_nbOfEvents) return -1; + unsigned int aNextPos; + for (aNextPos=_nextEvtToWaitFor; aNextPos<_nbOfEvents; aNextPos++){ + _eventArray[aNextPos]->activate(); + //std::cout << "activate event: " << aNextPos << "\n"; + if (!_eventArray[aNextPos]->getNegated()) break; + } + _lastEvtToWaitFor=_nextEvtToWaitFor; + _nextEvtToWaitFor=aNextPos; + //std::cout << "next event to wait for: " << _nextEvtToWaitFor << "\n"; + return 0; +} + + +//************************************************************************ +ESOSSequence::ESOSSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): ESOSequence(iAncestorNode, iNegated, iNbOfEvents, iTimeOut){ +} + +void ESOSSequence::activate(){ + //std::cout << "activate SSeq1\n"; + RETURN_IF_ACTIVE; + //std::cout << "activate SSeq2\n"; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } + searchForNextEvt(); +} + +void ESOSSequence::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + +int ESOSSequence::searchForNextEvt(){ + _nextEvtToWaitFor++; + if (_nextEvtToWaitFor>=_nbOfEvents) return -1; + unsigned int aNextPos; + for (aNextPos=_nextEvtToWaitFor; aNextPos<_nbOfEvents; aNextPos++){ + if (!_eventArray[aNextPos]->getNegated()) break; + } + _lastEvtToWaitFor=_nextEvtToWaitFor; + _nextEvtToWaitFor=aNextPos; + //std::cout << "next event to wait for: " << _nextEvtToWaitFor << "\n"; + return 0; +} + + +//************************************************************************ +ESOAtMost::ESOAtMost(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _oncePerEvent(iOncePerEvent), _n(iN){} + +void ESOAtMost::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_oncePerEvent && _eventArray[iID]->getNbOfNotific()>1){ + NOTIFY_ABORT; + return; + } + checkEvents(); +} + +void ESOAtMost::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + //std::cout << "At most received abort " << _ID << "\n"; + checkEvents(); +} + +void ESOAtMost::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && !_eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())) aReceivedEvents++; + if (aReceivedEvents>_n){ + NOTIFY_ABORT; + return; + } + + } + NOTIFY_EVENT; + } +} + +void ESOAtMost::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESOAtMost::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + +void ESOAtMost::checkEvents(){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && _eventArray[i]->getAborted()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())){ + if (_oncePerEvent || _eventArray[i]->getNegated()) + aReceivedEvents++; + else + aReceivedEvents+=_eventArray[i]->getNbOfNotific(); + } + // aReceivedEvents++; + if (aReceivedEvents>_n){ + NOTIFY_ABORT; + //std::cout << "Abort at most " << _ID << "\n"; + return; + } + } + unsigned int aPossibleEvents=_nbOfEvents; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_oncePerEvent && !_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()){ + //std::cout << "Return from notify at most " << _ID << "\n"; + return; //NEW + } + if ((_eventArray[i]->getNegated() && _eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->getAborted())) aPossibleEvents--; + if (aPossibleEvents <=_n){ + //std::cout << "Notify at most " << _ID << "\n"; + NOTIFY_EVENT; + return; + } + } +} + + +//************************************************************************ +ESOAtLeast::ESOAtLeast(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _oncePerEvent(iOncePerEvent), _n(iN){} + +void ESOAtLeast::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_oncePerEvent && _eventArray[iID]->getNbOfNotific()>1){ + NOTIFY_ABORT; + return; + } + checkEvents(); +} + +void ESOAtLeast::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + checkEvents(); +} + +void ESOAtLeast::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && !_eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())) aReceivedEvents++; + if (aReceivedEvents==_n){ + NOTIFY_EVENT; + return; + } + + } + NOTIFY_ABORT; + } +} + +void ESOAtLeast::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESOAtLeast::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + + +void ESOAtLeast::checkEvents(){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && _eventArray[i]->getAborted()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())){ + if (_oncePerEvent || _eventArray[i]->getNegated()) + aReceivedEvents++; + else + aReceivedEvents+=_eventArray[i]->getNbOfNotific(); + } + if (aReceivedEvents==_n){ + NOTIFY_EVENT; + return; + } + } + unsigned int aPossibleEvents=_nbOfEvents; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_oncePerEvent && !_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()) return; + if ((_eventArray[i]->getNegated() && _eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->getAborted())) aPossibleEvents--; + if (aPossibleEvents <_n){ + NOTIFY_ABORT; + //std::cout << "Abort at least " << _ID << "\n"; + return; + } + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ESO.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ESO.h new file mode 100644 index 0000000000000000000000000000000000000000..fa59e8d3610bd2f0555ce39d297748126f2fbe48 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/ESO.h @@ -0,0 +1,259 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ESOH +#define ESOH + +#include <NotifyIF.h> +#include <EventIF.h> + + +//************************************************************************ +///Base class for Event Sequencing operators +class ESOIF: public EventIF, public NotifyIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESOIF(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): EventIF(iAncestorNode, iNegated), NotifyIF(iNbOfEvents), _timeOut(iTimeOut), _startTime(0){} + virtual void reset(){ + EventIF::reset(); + NotifyIF::reset(); + } + virtual std::ostream& writeObject(std::ostream& s){ + EventIF::writeObject(s); + WRITE_STREAM(s, _timeOut); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOIF timeOut: " << _timeOut << std::endl; +#endif + WRITE_STREAM(s, _startTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOIF startTime: " << _startTime << std::endl; +#endif + NotifyIF::writeObject(s); + return s; + } + virtual std::istream& readObject(std::istream& s){ + EventIF::readObject(s); + READ_STREAM(s, _timeOut); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOIF timeOut: " << _timeOut << std::endl; +#endif + READ_STREAM(s, _startTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOIF startTime: " << _startTime << std::endl; +#endif + NotifyIF::readObject(s); + return s; + } + virtual void timeTick(TMLTime iNewTime){ + //std::cout << "TimeTick ESO: " << iNewTime << std::endl; + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->timeTick(iNewTime); + } + } + void prepare(){ + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->prepare(); + } + } +protected: + ///Time out value + TMLTime _timeOut; + ///Time of operator activation + TMLTime _startTime; +}; + + +//************************************************************************ +///Conjunction ESO +class ESOConjunction: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + \param iOncePerEvent Indicates whether each event should only be received once + */ + ESOConjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +protected: + ///Indicates whether each event should only be received once + bool _oncePerEvent; +}; + + +//************************************************************************ +///Disjunction ESO +class ESODisjunction: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESODisjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +}; + + +//************************************************************************ +///Sequence ESO +class ESOSequence: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESOSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + virtual void activate(); + virtual void deactivate(); + void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); +protected: + ///Next event in sequence to be received + unsigned int _nextEvtToWaitFor; + ///Last event in sequence which was received + unsigned int _lastEvtToWaitFor; + ///Determine next event to be received + virtual int searchForNextEvt(); +}; + + +//************************************************************************ +///Strict sequence ESO +class ESOSSequence: public ESOSequence{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESOSSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut); + void activate(); + void deactivate(); +protected: + int searchForNextEvt(); +}; + + +//************************************************************************ +///At most ESO +class ESOAtMost: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + \param iOncePerEvent Indicates whether each event should only be received once + \param iN At most iN events should be received + */ + ESOAtMost(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +protected: + ///Indicates whether each event should only be received once + bool _oncePerEvent; + ///At most n events should be received + unsigned int _n; + ///Checks if operator is completed or if it should be aborted + void checkEvents(); +}; + + +//************************************************************************ +///At least ESO +class ESOAtLeast: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + \param iOncePerEvent Indicates whether each event should only be received once + \param iN At least iN events should be received + */ + ESOAtLeast(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +protected: + ///Indicates whether each event should only be received once + bool _oncePerEvent; + ///At least n events should be received + unsigned int _n; + ///Checks if operator is completed or if it should be aborted + void checkEvents(); +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.cpp new file mode 100644 index 0000000000000000000000000000000000000000..790bde777029a477f3a785bb7c34bf663457b473 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.cpp @@ -0,0 +1,113 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EventIF.h> +#include <NotifyIF.h> +#include <ERB.h> + +EventIF::EventIF(NotifyIF* iAncestorNode, bool iNegated):_ancestorNode(iAncestorNode), _negated(iNegated), _nbOfNotific(0), _aborted(false), _active(false){ + iAncestorNode->registerEvent(this); +} + +void EventIF::setEventID(ID iID){ + _ID=iID; + //std::cout << "setEventID: " << _ID << "\n"; +} + +bool EventIF::notified(){ + //std::cout << _ID << " notified?: " << (_nbOfNotific!=0) << "\n"; + return _nbOfNotific!=0; +} + +unsigned int EventIF::getNbOfNotific(){ + //std::cout << "Number of notifications: " << _nbOfNotific << "\n"; + return _nbOfNotific; +} + +bool EventIF::getNegated(){ + return _negated; +} + +void EventIF::reset(){ + //std::cout << "Reset leaf\n"; + _nbOfNotific=0; + _aborted=false; + _active=false; + //std::cout << "End Reset leaf\n"; +} + +std::ostream& EventIF::writeObject(std::ostream& s){ + WRITE_STREAM(s, _nbOfNotific); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EventIF nbOfNotific: " << _nbOfNotific << std::endl; +#endif + WRITE_STREAM(s, _aborted); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EventIF aborted: " << _aborted << std::endl; +#endif + WRITE_STREAM(s, _active); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EventIF active: " << _active << std::endl; +#endif + return s; +} + +std::istream& EventIF::readObject(std::istream& s){ + READ_STREAM(s, _nbOfNotific); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EventIF nbOfNotific: " << _nbOfNotific << std::endl; +#endif + READ_STREAM(s, _aborted); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EventIF aborted: " << _aborted << std::endl; +#endif + READ_STREAM(s, _active); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EventIF active: " << _active << std::endl; +#endif + return s; +} + +bool EventIF::getAborted(){ + return _aborted; +} + +EventIF::~EventIF(){ +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.h new file mode 100644 index 0000000000000000000000000000000000000000..edbd76d280bf1ad24381a811c2f92ad7982775bd --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.h @@ -0,0 +1,113 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EventIFH +#define EventIFH + +#include <definitions.h> +#include <Serializable.h> + +class NotifyIF; + +///Interface class for top down node configuration within event trees of ERCs +class EventIF: public Serializable{ +public: + ///Constructor + /** + \param iAncestorNode + \param iNegated + */ + EventIF(NotifyIF* iAncestorNode, bool iNegated); + ///Set event ID of this event source + /** + \param iID ID of the node + */ + void setEventID(ID iID); + ///Returns whether the event source has already generated an event + /** + \return Returns true if event has already been notified + */ + bool notified(); + ///Returns the number of notifications of this event source + /** + \return Number of notifications + */ + unsigned int getNbOfNotific(); + ///Returns whether this event source is negated + /** + \return Returns true if this source is negated + */ + bool getNegated(); + virtual void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + ///Called to notify an advancement of simulation time + /** + \param iNewTime New simulation time + */ + virtual void timeTick(TMLTime iNewTime)=0; + ///Activates the node + virtual void activate()=0; + ///Deactivates the node + virtual void deactivate()=0; + ///Prepares the node + virtual void prepare()=0; + ///Returns whether this event cannot be raised any more + /** + \return true if even was aborted + */ + bool getAborted(); + ///Destructor + virtual ~EventIF(); +protected: + ///Ancestor node to notify upon event reception + NotifyIF* _ancestorNode; + ///Negated flag + bool _negated; + ///ID of the node + ID _ID; + ///Number of event notifications + unsigned int _nbOfNotific; + ///Aborted flag + bool _aborted; + ///Active flag + bool _active; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b44a9832395dee6aaff58843024a81b2b770cc97 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.cpp @@ -0,0 +1,78 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<NotifyIF.h> +#include<EventIF.h> +#include<iostream> + +NotifyIF::NotifyIF(unsigned int iNbOfEvents):_nextID(0), _nbOfEvents(iNbOfEvents){ + _eventArray = new EventIF*[iNbOfEvents]; + for (unsigned int i=0; i<_nbOfEvents; i++) + _eventArray[i]=0; +} + +void NotifyIF::reset(){ + //if (_nextID!= _nbOfEvents) std::cout << "******** Somethings strange\n"; + for (unsigned int i=0; i<_nbOfEvents; i++){ + //std::cout << "reset " << i << " "<< _eventArray[i] << std::endl; + _eventArray[i]->reset(); + //std::cout << "after " << std::endl; + } +} + +std::ostream& NotifyIF::writeObject(std::ostream& s){ + for (unsigned int i=0; i<_nbOfEvents; i++) _eventArray[i]->writeObject(s); + return s; +} + +std::istream& NotifyIF::readObject(std::istream& s){ + for (unsigned int i=0; i<_nbOfEvents; i++) _eventArray[i]->readObject(s); + return s; +} + +void NotifyIF::registerEvent(EventIF* iEvent){ + _eventArray[_nextID]=iEvent; + iEvent->setEventID(_nextID); + ++_nextID; +} + +NotifyIF::~NotifyIF(){ + delete[] _eventArray; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.h new file mode 100644 index 0000000000000000000000000000000000000000..6cb8b737c15ee418a291031d97c716c17f2ff0fb --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.h @@ -0,0 +1,85 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef NotifyIFH +#define NotifyIFH + +#include<definitions.h> +#include<Serializable.h> + +class EventIF; + +///Interface class for bottom up event notification within event trees of ERCs +class NotifyIF: public Serializable{ +public: + ///Constructor + /** + \param iNbOfEvents Number of descendants in the event tree + */ + NotifyIF(unsigned int iNbOfEvents); + ///Called by event source to signal an event + /** + \param iID ID of the event + */ + virtual void notifyEvent(ID iID)=0; + ///Called by event source to signal that an event cannot be received any more + /** + \param iID ID of the event + */ + virtual void notifyAbort(ID iID)=0; + virtual void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + ///Registers a new event source (descendant in the event tree) + /** + \param iEvent Pointer to the event source + */ + void registerEvent(EventIF* iEvent); + ///Destructor + virtual ~NotifyIF(); +protected: + ///ID of the node + ID _nextID; + ///Number of descendants within the event tree + unsigned int _nbOfEvents; + ///Array of descendants within the event tree + EventIF** _eventArray; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/GeneralListener.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/GeneralListener.h new file mode 100644 index 0000000000000000000000000000000000000000..9f07cde6ca4bc306d5a78164839829d16d261540 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/GeneralListener.h @@ -0,0 +1,142 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef GeneralListenerH +#define GeneralListenerH + +#define NOTIFY_SIM_STARTED() {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->simulationStarted(); this->listenersUnLock();}} +#define NOTIFY_SIM_STOPPED() {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->simulationStopped(); this->listenersUnLock();}} +#define NOTIFY_TIME_ADVANCES(iTime) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->timeAdvances(iTime); this->listenersUnLock();}} +#define NOTIFY_TASK_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->transExecuted(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_TASK_FINISHED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->taskFinished(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_TASK_STARTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->taskStarted(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->transExecuted(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_CMD_ENTERED(iComm) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->commandEntered(iComm,this->_ID); this->listenersUnLock();}} + + +#define NOTIFY_CMD_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock();for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->transExecuted(iTrans,this->_ID); this->listenersUnLock();}} + +#define NOTIFY_CMD_FINISHED(iComm) {if (!this->_listeners.empty()){this->listenersLock();for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->commandFinished(iComm,this->_ID); this->listenersUnLock();}} + +#define NOTIFY_CMD_STARTED(iComm) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->commandStarted(iComm,this->_ID); this->listenersUnLock();}} + +#define NOTIFY_WRITE_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) {(*i)->transExecuted(iTrans,this->_ID);} this->listenersUnLock();}} +#define NOTIFY_READ_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) {(*i)->transExecuted(iTrans,this->_ID);} this->listenersUnLock();}} +#define NOTIFY_EVALUATE() {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) {(*i)->evaluate();} this->listenersUnLock();}} + +///Encapsulates events associated with transactions +class GeneralListener{ +public: + ///Gets called when a the simulation is started + virtual void simulationStarted(){} + ///Gets called when a the simulation is stopped + virtual void simulationStopped(){} + ///Gets called when simulation time advances + /** + \param iCurrTime Current simulation time + */ + virtual void timeAdvances(TMLTime iCurrTime){} + + ///Gets called when a task executes its first transaction + /** + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + virtual void taskStarted(TMLTransaction* iTrans, ID iID){} + ///Gets called when a task executes its last transaction + /** + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + virtual void taskFinished(TMLTransaction* iTrans, ID iID){} + ///Destructor + ///Gets called when a transaction is executed + /** + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + virtual void transExecuted(TMLTransaction* iTrans, ID iID){} + + + ///Gets called when a command is entered the first time + /** + \param iComm Pointer to the command + \param iID ID of the event source + */ + virtual void commandEntered(TMLCommand* iComm, ID iID){} + //Gets called when a transaction of the command is executed + /* + \param iComm Pointer to the command + \param iID ID of the event source + */ + //virtual void commandExecuted(TMLCommand* iComm, ID iID){} + ///Gets called when a the last transaction of the command is executed + /** + \param iComm Pointer to the command + \param iID ID of the event source + */ + virtual void commandFinished(TMLCommand* iComm, ID iID){} + ///Gets called when a the first transaction of the command is executed + /** + \param iComm Pointer to the command + \param iID ID of the event source + */ + virtual void commandStarted(TMLCommand* iComm, ID iID){} + + + //Gets called when a read transaction is executed + /* + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + //virtual void readTrans(TMLTransaction* iTrans, ID iID){} + //Gets called when a write transaction is executed + /* + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + //virtual void writeTrans(TMLTransaction* iTrans, ID iID){} + ///Event triggering the evaluation of TEPE constraints + virtual void evaluate(){} + ///Destructor + virtual ~GeneralListener(){} +protected: +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenerSubject.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenerSubject.h new file mode 100644 index 0000000000000000000000000000000000000000..a13f02fef93a1070afcb785d3b0fbb1adee976eb --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenerSubject.h @@ -0,0 +1,107 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ListenerSubjectH +#define ListenerSubjectH + +///Base class for listener subjects +template <typename T> +class ListenerSubject{ +public: + ///Constructor + ListenerSubject():_locked(false){} + ///Registers a new listener + /** + \param iListener Pointer to the listener + */ + void registerListener(T* iListener){ + if (_locked) + _adding.push_back(iListener); + else + _listeners.push_back(iListener); + } + ///Removes a listener from the internal list + /** + \param iListener Pointer to the listener + */ + void removeListener(T* iListener){ + if (_locked) + _deletion.push_back(iListener); + else + _listeners.remove(iListener); + } + + ///Lock list of listeners + void listenersLock(){ + _locked=true; + } + + ///Unlock and update list of listeners + void listenersUnLock(){ + _locked=false; + for(typename std::list<T*>::iterator i=_deletion.begin(); i != _deletion.end(); ++i){ + _listeners.remove(*i); + } + for(typename std::list<T*>::iterator i=_adding.begin(); i != _adding.end(); ++i) { + _listeners.push_back(*i); + } + _deletion.clear(); + _adding.clear(); + } + + ///Destructor + virtual ~ListenerSubject(){ + //listenersUnLock(); + //for(typename std::list<T*>::iterator i=_listeners.begin(); i != _listeners.end(); ++i) { + // delete (*i); + //} + } +protected: + ///List of listeners + std::list<T*> _listeners; +private: + ///Listeners locked flag + bool _locked; + ///List of listeners scheduled for deletion + std::list<T*> _deletion; + ///List of listeners scheduled for adding + std::list<T*> _adding; +}; +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9688c52f0757d3f61f259fbc98a3a0c156f70e54 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp @@ -0,0 +1,606 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ListenersSimCmd.h> +#include <SimComponents.h> +#include <SchedulableDevice.h> +#include <TMLCommand.h> +#include <TMLRandomChoiceCommand.h> +#include <TMLActionCommand.h> +#include <TMLNotifiedCommand.h> +#include <TMLWaitCommand.h> +#include <TMLTask.h> +#include <CPU.h> +#define COND_SOURCE_FILE_NAME "newlib.c" +#define COND_OBJ_FILE_NAME "newlib.o" + +ID CondBreakpoint::_freeID=0; +bool Breakpoint::_enabled=true; +bool CondBreakpoint::_enabled=true; + + +//************************************************************************ +RunXTransactions::RunXTransactions(SimComponents* iSimComp, unsigned int iTransToExecute):_simComp(iSimComp), _count(0), _transToExecute(iTransToExecute){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->registerListener(this); +} + +RunXTransactions::~RunXTransactions(){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->removeListener(this); +} + +void RunXTransactions::transExecuted(TMLTransaction* iTrans, ID iID){ + _count++; + if (_count>=_transToExecute){ + std::ostringstream aOut; + aOut << MSG_RUNXTRANSACTIONS << ": " << _transToExecute; + _simComp->setStopFlag(true, aOut.str()); + //return true; + } + //return false; +} +void RunXTransactions::setTransToExecute(unsigned int iTransToExecute){ + _transToExecute=iTransToExecute; +} + + +//************************************************************************ +Breakpoint::Breakpoint(SimComponents* iSimComp):_simComp(iSimComp){ +} + +void Breakpoint::commandEntered(TMLCommand* iComm, ID iID){ + if (_enabled){ + _simComp->setStopFlag(true, MSG_BREAKPOINT); + //return true; + } + //return false; +} + +void Breakpoint::setEnabled(bool iEnabled){ + _enabled=iEnabled; +} + + +//************************************************************************ +CondBreakpoint::CondBreakpoint(SimComponents* iSimComp, std::string iCond, TMLTask* iTask):_simComp(iSimComp), _condText(iCond), _condFunc(0), _dlHandle(0), _task(iTask), _cSourceFileCreated(false), _objectFileCreated(false), _libFileCreated(false){ + _ID=_freeID++; + FILE* in; + std::ofstream myfile (COND_SOURCE_FILE_NAME); + char aExeName[256]; + int len = getexename(aExeName, sizeof(aExeName)); + if (len==-1) return; + aExeName[len-6]=0; + //strcat(aExeName, "/src_simulator"); + std::cout << "ExeName: " << aExeName << std::endl; + if (myfile.is_open()){ + _cSourceFileCreated=true; + std::ostringstream aCmd; + myfile << "#include <" << iTask->toString() << ".h>\n"; + //for(VariableLookUpTableName::const_iterator i=iTask->getVariableIteratorName(false); i !=iTask->getVariableIteratorName(true); ++i){ + for(VariableLookUpTableName::const_iterator i=iTask->getVariableLookUpTableName().begin(); i !=iTask->getVariableLookUpTableName().end(); ++i){ + myfile << "#define " << *(i->first) << " _castTask_->" << *(i->first) << "\n"; + } + myfile << "class TMLTask;\n\n"; + myfile << "extern \"C\" bool condFunc(TMLTask* _ioTask_){\n"; + myfile << " " << iTask->toString() << "* _castTask_ = dynamic_cast<" << iTask->toString() << "*>(" << "_ioTask_" << ");\n"; + myfile << " return (" << iCond << ");\n"; + myfile << "}\n"; + myfile.close(); + aCmd << "g++ -c -fPIC -Wall " << COND_SOURCE_FILE_NAME << " -I" << aExeName << " -I" << aExeName << "/src_simulator"; + //in = popen("g++ -c -fPIC -Wall newlib.c -I. -I./src_simulator", "r"); + in = popen(aCmd.str().c_str(), "r"); + if (pclose(in)!=0){ + std::cout << "Compiler error!\n"; + return; + } + _objectFileCreated=true; + aCmd.str(""); + aCmd << "g++ -shared -Wl,-soname," << "lib" << _ID << ".so.1" << " -o " << "lib" << _ID << ".so.1.0.1 " << COND_OBJ_FILE_NAME; + //in = popen("g++ -shared -Wl,-soname,l.so.1 -o l.so.1.0.1 newlib.o", "r"); + in = popen(aCmd.str().c_str(), "r"); + if (pclose(in)!=0){ + std::cout << "Compiler error!\n"; + return; + } + _libFileCreated=true; + }else{ + std::cout << "Error when creating C condition source file.\n"; + return; + } + std::ostringstream aCmd; + aCmd << "lib" << _ID << ".so.1.0.1"; + _dlHandle = dlopen(aCmd.str().c_str(), RTLD_LAZY); + if (!_dlHandle){ + std::cout << "Error " << dlerror() << " occurred when opening shared library.\n"; + return; + } + _condFunc = (BreakCondFunc) dlsym( _dlHandle, "condFunc"); + if (dlerror() != NULL) { + std::cout << "Error when getting function handle\n"; + return; + } + //Take task into account, to register at every command + TMLCommand::registerGlobalListenerForType<TMLChoiceCommand>(this, iTask); + TMLCommand::registerGlobalListenerForType<TMLActionCommand>(this, iTask); + TMLCommand::registerGlobalListenerForType<TMLNotifiedCommand>(this, iTask); + TMLCommand::registerGlobalListenerForType<TMLWaitCommand>(this, iTask); +} + +void CondBreakpoint::commandFinished(TMLCommand* iComm, ID iID){ + if (_enabled && _condFunc!=0){ + if ((*_condFunc)(_task)){ + std::ostringstream aOut; + aOut << MSG_CONDBREAKPOINT << ": " << _condText; + _simComp->setStopFlag(true, aOut.str()); + std::cout << "Stop simulation due to condition\n"; + //return true; + } + } + //return false; +} + +void CondBreakpoint::setEnabled(bool iEnabled){ + _enabled=iEnabled; +} + +bool CondBreakpoint::conditionValid() const{ + return (_condFunc!=0); +} + +CondBreakpoint::~CondBreakpoint(){ + TMLCommand::removeGlobalListener(this); + if (_dlHandle!=0) dlclose(_dlHandle); + if (_cSourceFileCreated) remove(COND_SOURCE_FILE_NAME); + if (_objectFileCreated) remove(COND_OBJ_FILE_NAME); + if (_libFileCreated){ + std::ostringstream aFileName; + aFileName << "lib" << _ID << ".so.1.0.1"; + remove(aFileName.str().c_str()); + } +} + + +//************************************************************************ +RunTillNextRandomChoice::RunTillNextRandomChoice(SimComponents* iSimComp):_simComp(iSimComp), _enabled(false){ + TMLCommand::registerGlobalListenerForType<IndeterminismSource>(this,0); +} + +void RunTillNextRandomChoice::commandEntered(TMLCommand* iComm, ID iID){ + IndeterminismSource* aChoice=dynamic_cast<IndeterminismSource*>(iComm); + if (_enabled && aChoice!=0 ){ + _simComp->setStopFlag(true, MSG_RANDOMCHOICE); + //return true; + } + //return false; +} + +void RunTillNextRandomChoice::setEnabled(bool iEnabled){ + _enabled=iEnabled; +} + + +//************************************************************************ +RunXCommands::RunXCommands(SimComponents* iSimComp, unsigned int iCommandsToExecute):_simComp(iSimComp), _count(0), _commandsToExecute(iCommandsToExecute){ + TMLCommand::registerGlobalListener(this); +} + +RunXCommands::~RunXCommands(){ + TMLCommand::removeGlobalListener(this); +} + +void RunXCommands::commandFinished(TMLCommand* iComm, ID iID){ + _count++; + if (_count>=_commandsToExecute){ + std::ostringstream aOut; + aOut << MSG_RUNXCOMMANDS << ": " << _commandsToExecute; + _simComp->setStopFlag(true, aOut.str()); + std::cout << "x commands stopped sim\n"; + //return true; + } + //return false; +} + +void RunXCommands::setCmdsToExecute(unsigned int iCommandsToExecute){ + _commandsToExecute=iCommandsToExecute; +} + + +//************************************************************************ +RunXTimeUnits::RunXTimeUnits(SimComponents* iSimComp, TMLTime iEndTime):_simComp(iSimComp), _endTime(iEndTime){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->registerListener(this); +} + +RunXTimeUnits::~RunXTimeUnits(){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->removeListener(this); +} + +void RunXTimeUnits::transExecuted(TMLTransaction* iTrans, ID iID){ + if (SchedulableDevice::getSimulatedTime()>=_endTime){ + _simComp->setStopFlag(true, MSG_RUNXTIMEUNITS); + //return true; + } + //return false; +} + +void RunXTimeUnits::setEndTime(TMLTime iEndTime){ + _endTime=iEndTime; +} + + +//************************************************************************ +RunTillTransOnDevice::RunTillTransOnDevice(SimComponents* iSimComp, ListenerSubject <GeneralListener> * iSubject):_simComp(iSimComp), _subject(iSubject) { + _subject->registerListener(this); +} +RunTillTransOnDevice::~RunTillTransOnDevice(){ + _subject->removeListener(this); +} + +void RunTillTransOnDevice::transExecuted(TMLTransaction* iTrans, ID iID){ + _simComp->setStopFlag(true, MSG_TRANSONDEVICE); + //return true; +} + + +//************************************************************************ +RunTillTransOnTask::RunTillTransOnTask(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject):_simComp(iSimComp), _subject(iSubject) { + _subject->registerListener(this); +} + +RunTillTransOnTask::~RunTillTransOnTask(){ + _subject->removeListener(this); +} + +void RunTillTransOnTask::transExecuted(TMLTransaction* iTrans, ID iID){ + _simComp->setStopFlag(true, MSG_TRANSONTASK); + //return true; +} + + +//************************************************************************ +RunTillTransOnChannel::RunTillTransOnChannel(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject):_simComp(iSimComp), _subject(iSubject) { + _subject->registerListener(this); +} + +RunTillTransOnChannel::~RunTillTransOnChannel(){ + _subject->removeListener(this); +} + +void RunTillTransOnChannel::transExecuted(TMLTransaction* iTrans, ID iID){ + _simComp->setStopFlag(true, MSG_TRANSONCHANNEL); + //return true; +} + +//************************************************************************ +//{SIM_START, SIM_END, TIME_ADV, TASK_START, TASK_END, CMD_RUNNABLE, CMD_START, CMD_END, TRANS_EXEC} EventType; +TEPESigListener::TEPESigListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, unsigned int iEvtBitmap, unsigned int iTransTypeBitmap, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator): _subjectIDs(iSubjectIDs), _nbOfSubjectIDs(iNbOfSubjectIDs), _evtBitmap(iEvtBitmap), _transTypeBitmap(iTransTypeBitmap), _nbOfSignals(inbOfSignals), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _sigNotified(false), _simComp(iSimComp), _simulator(iSimulator){ + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->registerListener(this); + } + _simulator->registerListener(this); +} + +TEPESigListener::~TEPESigListener(){ + std::cerr << "Delete Sig\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->removeListener(this); + } + /*for (unsigned int i=0; i<_nbOfSignals; i++){ + std::cout << "loop\n"; + if (dynamic_cast<PropertyConstraint*>(_notifConstr[i])==0){ + delete _notifConstr[i]; + std::cout << "Delete done II\n"; + } + }*/ + _simulator->removeListener(this); + delete [] _subjectIDs; + delete [] _notifConstr; + delete [] _notifFunc; + std::cerr << "End Delete Sig\n"; +} + +void TEPESigListener::simulationStarted(){ + //(_notifConstr->*_notifFunc)((_evtBitmap & SIM_START)!=0); + bool aNotified = (_evtBitmap & SIM_START)!=0; + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(aNotified); +} + +void TEPESigListener::simulationStopped(){ + //(_notifConstr->*_notifFunc)((_evtBitmap & SIM_END)!=0); + bool aNotified = (_evtBitmap & SIM_END)!=0; + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(aNotified); +} + +void TEPESigListener::timeAdvances(TMLTime iCurrTime){ + /*if(_sigNotified){ + (_notifConstr->*_notifFunc)(true); + _sigNotified=false; + }else{ + (_notifConstr->*_notifFunc)(false); + }*/ + //if (_sigNotified) std::cout << "Signal notified!!!\n"; + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(_sigNotified); + _sigNotified=false; +} + +void TEPESigListener::taskStarted(TMLTransaction* iTrans, ID iID){ + if ((_evtBitmap & TASK_START)!=0 && (iTrans->getCommand()->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::taskFinished(TMLTransaction* iTrans, ID iID){ + if ((_evtBitmap & TASK_END)!=0 && (iTrans->getCommand()->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::transExecuted(TMLTransaction* iTrans, ID iID){ + if ((_evtBitmap & TRANS_EXEC)!=0 && (iTrans->getCommand()->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::commandEntered(TMLCommand* iComm, ID iID){ + if ((_evtBitmap & CMD_RUNNABLE)!=0 && (iComm->getType()& _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::commandFinished(TMLCommand* iComm, ID iID){ +//void TEPESigListener::commandFinished(TMLTransaction* iTrans, ID iID){ + //std::cout << "cmd finished!!!\n"; + //std::cout << "cmd_end: " << (1<<CMD_END) << "\n"; + //std::cout << "_evtBitmap: " << _evtBitmap << "\n"; + std::cout << "command finished...\n"; + if ((_evtBitmap & CMD_END)!=0 && ( iComm->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + }else + std::cout << "but not taken into account\n"; +} + +void TEPESigListener::commandStarted(TMLCommand* iComm, ID iID){ + if ((_evtBitmap & CMD_START)!=0 && (iComm->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + + +//*********************************************************************** +TEPEFloatingSigListener::TEPEFloatingSigListener(ListenerSubject<GeneralListener>* iSimulator, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, unsigned int iNbOfStartNodes, PropertyConstraint** iStartNodes): _simulator(iSimulator), _nbOfSignals(inbOfSignals), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _nbOfStartNodes(iNbOfStartNodes), _startNodes(iStartNodes){ + _simulator->registerListener(this); +} + +TEPEFloatingSigListener::~TEPEFloatingSigListener(){ + std::cerr << "Delete Floating\n"; + _simulator->removeListener(this); + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + delete _startNodes[i]; + } + delete [] _notifConstr; + delete [] _notifFunc; + delete [] _startNodes; + std::cerr << "End Delete Floating\n"; +} +void TEPEFloatingSigListener::timeAdvances(TMLTime iCurrTime){ + std::cout << "New simulation time: " << iCurrTime << "\n"; + for (unsigned int i=0; i<_nbOfSignals; i++){ + (_notifConstr[i]->*_notifFunc[i])(false); + } + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->notifyEnable(0); + } +} + +void TEPEFloatingSigListener::simulationStarted(){ + for (unsigned int i=0; i<_nbOfSignals; i++){ + (_notifConstr[i]->*_notifFunc[i])(false); + } + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->notifyEnable(2); + } +} + +void TEPEFloatingSigListener::simulationStopped(){ + for (unsigned int i=0; i<_nbOfSignals; i++){ + (_notifConstr[i]->*_notifFunc[i])(false); + } + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->notifyEnable(1); + } + //for (unsigned int i=0; i<_nbOfStartNodes; i++) + // std::cout << "Eval Prop " << i << ": " << _startNodes[i]->evalProp() << "\n"; +} + +void TEPEFloatingSigListener::evaluate(){ + for (unsigned int i=0; i<_nbOfStartNodes; i++) + std::cout << "Eval Prop " << i << ": " << _startNodes[i]->evalProp() << "\n"; +} + +std::ostream& TEPEFloatingSigListener::writeObject(std::ostream& s){ + std::cout << "TEPEFloatingSigListener::writeObject\n"; + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->writeObject(s); + } + return s; +} + +std::istream& TEPEFloatingSigListener::readObject(std::istream& s){ + std::cout << "TEPEFloatingSigListener::readObject\n"; + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->readObject(s); + } + return s; +} + +void TEPEFloatingSigListener::reset(){ + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->reset(); + } +} + + +//*********************************************************************** +TEPEEquationListener::TEPEEquationListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, EqFuncPointer iEqFunc, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator) + : _subjectIDs(iSubjectIDs), _nbOfSubjectIDs(iNbOfSubjectIDs), _var(iVar), _eqFunc(iEqFunc), _eqResult(true), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _sigNotified(false), _simComp(iSimComp), _simulator(iSimulator){ + //std::cerr << "before func\n"; + //std::cerr << "before loop\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + //std::cerr << "next id: " << _subjectIDs[i] << "\n"; + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->registerListener(this); + } + _simulator->registerListener(this); +} + +TEPEEquationListener::~TEPEEquationListener(){ + std::cerr << "Delete Eq\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->removeListener(this); + } + _simulator->removeListener(this); + delete [] _subjectIDs; + delete [] _var; + std::cerr << "End Delete Eq\n"; +} + +void TEPEEquationListener::commandFinished(TMLCommand* iComm, ID iID){ + //if several alternations of variables arise at the same time only last value is taken into account + //_sigNotified = (_eqResult != _eqFunc(_var)); + _sigNotified = true; + std::cout << "Check equation result: " << _sigNotified << "\n"; +} + +void TEPEEquationListener::timeAdvances(TMLTime iCurrTime){ + if(_sigNotified){ + _sigNotified=false; + bool aNewEqResult = _eqFunc(_var); + (_notifConstr->*_notifFunc)(_eqResult != aNewEqResult); + _eqResult = aNewEqResult; + }else{ + (_notifConstr->*_notifFunc)(false); + } +} + +void TEPEEquationListener::simulationStarted(){ + //(_notifConstr->*_notifFunc)(false); + bool aNewEqResult = _eqFunc(_var); + (_notifConstr->*_notifFunc)(_eqResult !=aNewEqResult); + _eqResult = aNewEqResult; +} + +void TEPEEquationListener::simulationStopped(){ + (_notifConstr->*_notifFunc)(false); +} + + +//*********************************************************************** +TEPESettingListener::TEPESettingListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, SettingFuncPointer iSetFunc, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator): _subjectIDs(iSubjectIDs), _nbOfSubjectIDs(iNbOfSubjectIDs), _var(iVar), _setFunc(iSetFunc), _nbOfSignals(inbOfSignals), _setResult( _setFunc(_var)), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _sigNotified(false), _simComp(iSimComp), _simulator(iSimulator){ + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + //std::cerr << "next id: " << _subjectIDs[i] << "\n"; + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->registerListener(this); + } + _simulator->registerListener(this); +} + +TEPESettingListener::~TEPESettingListener(){ + std::cerr << "Delete Setting\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->removeListener(this); + } + _simulator->removeListener(this); + delete [] _subjectIDs; + delete [] _var; + delete [] _notifConstr; + delete [] _notifFunc; + std::cerr << "End Delete Setting\n"; +} + +void TEPESettingListener::commandFinished(TMLCommand* iComm, ID iID){ + /*if (_eqResult != _eqFunc(_var)){ + _eqResult = !_eqResult; + (_notifConstr->*_notifFunc)(true); + _sigNotified=true; + }*/ + //if several alternations of variables at the same time only last one is taken into account + _sigNotified=true; + //std::cout << "Check setting result: " << _setNewResult << "\n"; +} + +void TEPESettingListener::timeAdvances(TMLTime iCurrTime){ + bool aSigNotification; + if (_sigNotified){ + ParamType aNewSetResult = _setFunc(_var); + _sigNotified=false; + aSigNotification = (_setResult != aNewSetResult); + _setResult = aNewSetResult; + }else{ + aSigNotification=false; + } + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(aSigNotification); +} + +void TEPESettingListener::simulationStarted(){ + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(false); +} + +void TEPESettingListener::simulationStopped(){ + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(false); +} + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.h new file mode 100644 index 0000000000000000000000000000000000000000..07ba5f3c8f5de270b5a542ccd4b619d3b38afeb5 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.h @@ -0,0 +1,491 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ListenersSimCmdH +#define ListenersSimCmdH + +#include <definitions.h> +//#include <TransactionListener.h> +//#include <CommandListener.h> +#include <GeneralListener.h> +#include <ListenerSubject.h> +//#include <TransactionAbstr.h> +//#include <CommandAbstr.h> +//#include <TaskAbstr.h> +//#include <CPUAbstr.h> +//#include <ChannelAbstr.h> +#include <SignalConstraint.h> +#include <PropertyConstraint.h> + +#define MSG_RUNXTRANSACTIONS "Transactions executed" +#define MSG_BREAKPOINT "Breakpoint reached" +#define MSG_CONDBREAKPOINT "Conditional breakpoint reached" +#define MSG_RANDOMCHOICE "Random choice operator reached" +#define MSG_RUNXCOMMANDS "Commands executed" +#define MSG_RUNXTIMEUNITS "Time units elapsed" +#define MSG_TRANSONDEVICE "Transaction on device encountered" +#define MSG_TRANSONTASK "Transaction of task encountered" +#define MSG_TRANSONCHANNEL "Transaction on channel encountered" +#define MSG_CONSTRAINTBLOCK "Constraint not fulfilled" + + +class SimComponents; + +//************************************************************************ +///Listener which stops the simulation after a given number of transactions +class RunXTransactions: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iTransToExecute Number of transactions to execute + */ + RunXTransactions(SimComponents* iSimComp, unsigned int iTransToExecute); + ///Destructor + virtual ~RunXTransactions(); + void transExecuted(TMLTransaction* iTrans, ID iID); + ///Sets the number of transactions to execute + /** + \param iTransToExecute Number of transactions to execute + */ + void setTransToExecute(unsigned int iTransToExecute); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Number of transactions to execute + unsigned int _count, _transToExecute; + +}; + + +//************************************************************************ +///Listener establishing a breakpoint +class Breakpoint: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + */ + Breakpoint(SimComponents* iSimComp); + void commandEntered(TMLCommand* iComm, ID iID); + ///Enable/disable all breakpoints + /** + \param iEnabled true=enable, false=disable + */ + static void setEnabled(bool iEnabled); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Breakpoints enabled flag + static bool _enabled; +}; + + +//************************************************************************ +///Breakpoint based on a condition +class CondBreakpoint: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iCond String containing the condition + \param iTask Task for which the condition is evaluated + */ + CondBreakpoint(SimComponents* iSimComp, std::string iCond, TMLTask* iTask); + ///Destructor + ~CondBreakpoint(); + void commandFinished(TMLCommand* iComm, ID iID); + ///Enable/disable all conditional breakpoints + /** + \param iEnabled true=enable, false=disable + */ + static void setEnabled(bool iEnabled); + ///Checks whether the condition could be compiled + /** + \return True if compilation was successful + */ + bool conditionValid() const; +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Breakpoints enabled flag + static bool _enabled; + ///Condition string + std::string _condText; + ///Pointer to funtion in shared library which contains the breakpoint condition + BreakCondFunc _condFunc; + ///Handle of shared library + void * _dlHandle; + ///ID of the breakpoint + ID _ID; + ///Task for which the condition is evaluated + TMLTask* _task; + ///Keeps track of the IDs already in use + static ID _freeID; + ///Flag indicating that the C source file has been created + bool _cSourceFileCreated; + ///Flag indicating that the object file has been created + bool _objectFileCreated; + ///Flag indicating that the library file has been created + bool _libFileCreated; +}; + + +//************************************************************************ +///Listener which stops the simulation as soon as a random choice command is encountered +class RunTillNextRandomChoice: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + */ + RunTillNextRandomChoice(SimComponents* iSimComp); + void commandEntered(TMLCommand* iComm, ID iID); + ///Enable/disable the Listener + /** + \param iEnabled true=enable, false=disable + */ + void setEnabled(bool iEnabled); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Listener enabled flag + bool _enabled; +}; + + +//************************************************************************ +///Listener which stops the simulation after a given number of commands +class RunXCommands: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iCommandsToExecute Number of commands to execute + */ + RunXCommands(SimComponents* iSimComp, unsigned int iCommandsToExecute); + ///Destructor + virtual ~RunXCommands(); + void commandFinished(TMLCommand* iComm, ID iID); + ///Sets the number of commands to execute + /** + \param iCommandsToExecute Number of commands to execute + */ + void setCmdsToExecute(unsigned int iCommandsToExecute); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Command counter + unsigned int _count; + ///Number of commands to execute + unsigned int _commandsToExecute; + +}; + + +//************************************************************************ +///Listener which stops the simulation at a given time +class RunXTimeUnits: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iEndTime End time + */ + RunXTimeUnits(SimComponents* iSimComp, TMLTime iEndTime); + ///Destructor + virtual ~RunXTimeUnits(); + void transExecuted(TMLTransaction* iTrans, ID iID); + ///Sets the end time of the simulation + /** + \param iEndTime End time of the simulation + */ + void setEndTime(TMLTime iEndTime); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///End time of the simulation + TMLTime _endTime; + +}; + + +//************************************************************************ +///Listener which stops the simulation as soon as a transaction is executed on a given device +class RunTillTransOnDevice: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iSubject Device to listen on + */ + RunTillTransOnDevice(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject); + ///Destructor + virtual ~RunTillTransOnDevice(); + void transExecuted(TMLTransaction* iTrans, ID iID); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Device to listen on + ListenerSubject <GeneralListener> * _subject; +}; + + +//************************************************************************ +///Listener which stops the simulation as soon as a given task executes a transaction +class RunTillTransOnTask: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iSubject Task to listen on + */ + RunTillTransOnTask(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject); + ///Destructor + virtual ~RunTillTransOnTask(); + void transExecuted(TMLTransaction* iTrans, ID iID); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Task to listen on + ListenerSubject <GeneralListener> * _subject; +}; + + +//************************************************************************ +///Listener which stops the simulation as soon data is conveyed on a given channel +class RunTillTransOnChannel: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iSubject Channel to listen on + */ + RunTillTransOnChannel(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject); + ///Destructor + virtual ~RunTillTransOnChannel(); + void transExecuted(TMLTransaction* iTrans, ID iID); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Channel to listen on + ListenerSubject <GeneralListener> * _subject; +}; + +//************************************************************************ +///Listener for generating signals to be evaluated by TEPE constraints +class TEPESigListener: public GeneralListener{ +public: + ///Constructor + /** + \param iSubjectIDs IDs of event sources to be taken into account + \param iNbOfSubjectIDs Number of event sources + \param iEvtBitmap Bitmap of event types to be taken into account + \param iTransTypeBitmap Bitmap of tranaction types to be taken into account + \param inbOfSignals Number of signals to be driven + \param iNotifConstr Pointer to constraints the signals belong to + \param iNotifFunc Notification function of constraints + \param iSimComp Pointer to SimComponents object + \param iSimulator Pointer to simulator as event source + */ + TEPESigListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, unsigned int iEvtBitmap, unsigned int iTransTypeBitmap, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator); + ~TEPESigListener(); + void simulationStarted(); + void simulationStopped(); + void timeAdvances(TMLTime iCurrTime); + void taskStarted(TMLTransaction* iTrans, ID iID); + void taskFinished(TMLTransaction* iTrans, ID iID); + void transExecuted(TMLTransaction* iTrans, ID iID); + void commandEntered(TMLCommand* iComm, ID iID); + void commandFinished(TMLCommand* iComm, ID iID); + void commandStarted(TMLCommand* iComm, ID iID); + void readTrans(TMLTransaction* iTrans, ID iID); + void writeTrans(TMLTransaction* iTrans, ID iID); +protected: + ///IDs of event sources to be taken into account + ID* _subjectIDs; + ///Number of event sources + unsigned int _nbOfSubjectIDs; + ///Bitmap of event types to be taken into account + unsigned int _evtBitmap; + ///Bitmap of tranaction types to be taken into account + unsigned int _transTypeBitmap; + ///Number of signals to be driven + unsigned int _nbOfSignals; + ///Pointer to constraints the signals belong to + SignalConstraint** _notifConstr; + ///Dedicated notification function of constraints + NtfSigFuncPointer* _notifFunc; + ///Flag indicating whether the signal was notified + bool _sigNotified; + ///Pointer to SimComponents object + SimComponents* _simComp; + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; + +}; + +//************************************************************************ +///Listener for generating signals for floating inputs of TEPE constraints +class TEPEFloatingSigListener: public GeneralListener, public Serializable{ +public: + ///Constructor + /** + \param iSimulator Pointer to simulator as event source + \param inbOfSignals Number of signals to be driven + \param iNotifConstr Pointer to constraints the signals belong to + \param iNotifFunc Notification function of constraints + \param iNbOfStartNodes Number of TEPE constraints whose property output is not connected to any other constraint + \param iStartNodes TEPE constraints whose property output is not connected to any other constraint + */ + TEPEFloatingSigListener(ListenerSubject<GeneralListener>* iSimulator, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, unsigned int iNbOfStartNodes, PropertyConstraint** iStartNodes); + ~TEPEFloatingSigListener(); + void timeAdvances(TMLTime iCurrTime); + void simulationStarted(); + void simulationStopped(); + void evaluate(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); + void reset(); +protected: + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; + ///Number of signals to be driven + unsigned int _nbOfSignals; + ///Pointer to constraints the signals belong to + SignalConstraint** _notifConstr; + ///Notification function of constraints + NtfSigFuncPointer* _notifFunc; + ///Number of TEPE constraints whose property output is not connected to any other constraint + unsigned int _nbOfStartNodes; + ///TEPE constraints whose property output is not connected to any other constraint + PropertyConstraint** _startNodes; +}; + +//************************************************************************ +///Listener for generating signals indicating the a TEPE equation has to be reevaluated +class TEPEEquationListener: public GeneralListener{ +public: + ///Constructor + /** + \param iSubjectIDs IDs of event sources to be taken into account (TML commands that modify significant variables) + \param iNbOfSubjectIDs Number of event sources + \param iVar Task Variables referred to in the equation + \param iEqFunc Evaluation function for the equation + \param iNotifConstr Pointer to the equation constraint + \param iNotifFunc Notification function of the equation constraint + \param iSimComp Pointer to SimComponents object + \param iSimulator Pointer to simulator as event source + */ + TEPEEquationListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, EqFuncPointer iEqFunc, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator); + ~TEPEEquationListener(); + void commandFinished(TMLCommand* iComm, ID iID); + void timeAdvances(TMLTime iCurrTime); + void simulationStarted(); + void simulationStopped(); +protected: + ///IDs of event sources to be taken into account (TML commands that modify significant variables) + ID* _subjectIDs; + ///Number of event sources + unsigned int _nbOfSubjectIDs; + ///Task Variables referred to in the equation + ParamType** _var; + ///Evaluation function for the equation + EqFuncPointer _eqFunc; + ///Result of the equation + bool _eqResult; + ///Pointer to the equation constraint + SignalConstraint* _notifConstr; + ///Notification function of the equation constraint + NtfSigFuncPointer _notifFunc; + ///Flag indicating whether the signal was notified + bool _sigNotified; + ///Pointer to SimComponents object + SimComponents* _simComp; + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; +}; + +//************************************************************************ +///Listener for generating signals indicating the a TEPE equation has to be reevaluated +class TEPESettingListener: public GeneralListener{ +public: + ///Constructor + /** + \param iSubjectIDs IDs of event sources to be taken into account (TML commands that modify significant variables) + \param iNbOfSubjectIDs Number of event sources + \param iVar Task Variables referred to in the setting + \param iSetFunc Evaluation function for the setting + \param inbOfSignals Number of signals to be driven + \param iNotifConstr Pointer to the setting constraints + \param iNotifFunc Notification function of setting constraint + \param iSimComp Pointer to SimComponents object + \param iSimulator Pointer to simulator as event source + */ + TEPESettingListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, SettingFuncPointer iSetFunc, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator); + ~TEPESettingListener(); + void commandFinished(TMLCommand* iComm, ID iID); + void timeAdvances(TMLTime iCurrTime); + void simulationStarted(); + void simulationStopped(); +protected: + ///IDs of event sources to be taken into account (TML commands that modify significant variables) + ID* _subjectIDs; + ///Number of event sources + unsigned int _nbOfSubjectIDs; + ///Task Variables referred to in the setting + ParamType** _var; + ///Evaluation function for the setting + SettingFuncPointer _setFunc; + ///Number of signals to be driven + unsigned int _nbOfSignals; + ///Result of the setting + ParamType _setResult; + ///Pointer to the setting constraints + SignalConstraint** _notifConstr; + ///Notification function of setting constraint + NtfSigFuncPointer* _notifFunc; + ///Flag indicating whether the signal was notified + bool _sigNotified; + ///Pointer to SimComponents object + SimComponents* _simComp; + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/main.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/main.h new file mode 100644 index 0000000000000000000000000000000000000000..821abb1443b83ce887bee6f03f7a965b6ca7ac3e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/main.h @@ -0,0 +1,95 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MainH +#define MainH + +void *SimThreadFunc( void *ptr ){ + Simulator* mySim = static_cast<Simulator*>(ptr); + mySim->run(); + pthread_exit(NULL); +} + +void *ServThreadFunc( void *ptr ){ + ServerIF* myServer = static_cast<ServerIF*>(ptr); + myServer->run(); + pthread_exit(NULL); +} + +//********** MAIN NEW SIMULATOR ********** + +int main(int len, char ** args) { + struct timeval begin, end; + SimServSyncInfo mySync; + gettimeofday(&begin,NULL); + mySync._simComponents = new CurrentComponents(); + Simulator mySim(&mySync); + //mySync._simComponents = new CurrentComponents(&mySim); + mySync._simComponents->setSimulator(&mySim); + //mySim.init(); + mySync._simComponents->generateTEPEs(); + TMLCommand::setSimComponents(mySync._simComponents); +#ifdef EBRDD_ENABLED + ERB::setSimComponents(mySync._simComponents); + ERC::setSimComponents(mySync._simComponents); +#endif + //ESO::setSimComponents(mySync._simComponents); + gettimeofday(&end,NULL); + std::cout << "The preparation took " << getTimeDiff(begin,end) << "usec.\n"; + ServerIF* myServer = mySim.run(len, args); + if (myServer!=0){ + //Server myServer(&mySync); + myServer->setSimSyncInfo(&mySync); + mySync._simulator=&mySim; + mySync._server=myServer; + pthread_t aThreadSim, aThreadServ; + int aRetVal; + aRetVal = pthread_create(&aThreadSim, NULL, SimThreadFunc, static_cast<void*>(&mySim)); + aRetVal = pthread_create(&aThreadServ, NULL, ServThreadFunc, static_cast<void*>(myServer)); + pthread_join(aThreadSim, NULL); + pthread_join(aThreadServ, NULL); + pthread_exit(NULL); + delete myServer; + } + delete mySync._simComponents; + std::cout << "Terminate\n"; + return 0; +} +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Server.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Server.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d21a10fb4e172ebecbbf72ea0d73610b4eafe0b2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Server.cpp @@ -0,0 +1,222 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<Server.h> +#include<Simulator.h> +#include<SimServSyncInfo.h> +#include<unistd.h> + +Server::Server():_socketClient(-1){ + pthread_mutex_init(&_replyMutex, NULL); +} + +int Server::run(){ + int aSocketServer=0; // listen on aSocketServer, client connection on _socketClient + struct addrinfo aHints; //aHints for getaddrinfo + struct addrinfo *aServerInfo; //information about the server, created by getaddrinfo + struct sockaddr_storage aClientAddrInfo;// connector's address information + int aRetVal; //return value for getaddrinfo + + memset(&aHints, 0, sizeof aHints); + aHints.ai_family = AF_UNSPEC; + aHints.ai_socktype = SOCK_STREAM; + aHints.ai_flags = AI_PASSIVE; // use my IP + + //get address information about server: getaddrinfo(hostname, port, hints, result) + if ((aRetVal = getaddrinfo(NULL, PORT, &aHints, &aServerInfo)) != 0) { + std::cerr << "getaddrinfo: " << gai_strerror(aRetVal) << std::endl; + return 1; + } + + // loop through all the results and bind to the first we can + bool bound=false; + struct addrinfo *p; + for(p = aServerInfo; p != NULL && !bound; p = p->ai_next) { + //get the file descriptor: socket(IPdomain, typeOfConnection, protocol) + if ((aSocketServer = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { + perror("server: socket"); + }else{ + //set socket options: setsockopt(socket, level, optname, optval, optlen) + int yes=1; + if (setsockopt(aSocketServer, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { + perror("setsockopt"); + return 1; + } + //bind socket to a specific port of the server: bind(filedescriptor, address data structure, addresslen) + if (bind(aSocketServer, p->ai_addr, p->ai_addrlen) == -1) { + close(aSocketServer); + perror("server: bind"); + }else + bound=true; + } + } + + if (p == NULL){ + std::cerr << "server: failed to bind\n"; + return 1; + } + + freeaddrinfo(aServerInfo); + + do{ + //causes the socket to listen to incoming connections: listen(filedescriptor, number of connections) + if (listen(aSocketServer, BACKLOG) == -1) { + perror("listen"); + return 1; + } + + std::cout << "server: waiting for connections...\n"; + socklen_t aAddrInfoSize= sizeof(struct sockaddr_storage); + while((_socketClient = accept(aSocketServer, (struct sockaddr *)&aClientAddrInfo, &aAddrInfoSize))==-1) { // main accept loop + //accept a connection: accept(filedescriptor, pointer to address information of caller, size of address information) + perror("accept"); + } + char* aMsg="You are connected to the simulation server. Please enter a command:\0"; + if (send(_socketClient, aMsg, strlen(aMsg), 0) == -1) perror("send"); + int aNumberOfBytes=0, aStringPos=0, aReturnPos; + char s[INET6_ADDRSTRLEN]; + inet_ntop(aClientAddrInfo.ss_family, get_in_addr((struct sockaddr *)&aClientAddrInfo), s, sizeof s); + std::cout << "server: got connection from " << s << std::endl; + char aTmpBuffer[BUFFER_SIZE]; + //aTmpBuffer[0]='\0'; + while(!_syncInfo->_terminate){ + //std::cout << "server critical I" << std::endl; + aReturnPos=getPositionOf(aTmpBuffer, '\n', aStringPos, aNumberOfBytes); + //std::cout << "server critical II" << std::endl; + if (aReturnPos==-1){ + int unreadBytes=aNumberOfBytes-aStringPos; + if (unreadBytes>0){ + //std::cout << "server critical IIIa" << std::endl; + memmove(aTmpBuffer, &aTmpBuffer[aStringPos], unreadBytes); + }else{ + //std::cout << "server critical IIIb" << std::endl; + aStringPos=aNumberOfBytes; + } + //std::cout << "server critical IV aNumberOfBytes:" << aNumberOfBytes << " aStringPos" << aStringPos << std::endl; + //char testBuffer[BUFFER_SIZE]; + aNumberOfBytes=recv(_socketClient, &aTmpBuffer[aNumberOfBytes-aStringPos], static_cast<size_t>(BUFFER_SIZE-1-(aNumberOfBytes-aStringPos)), 0); + //int startPos=aNumberOfBytes-aStringPos; + //size_t size= static_cast<size_t>(BUFFER_SIZE-1-startPos); + //aNumberOfBytes=recv(_socketClient, testBuffer, size, 0); + //std::cout << "VInter" << std::endl; + //memcpy(&aTmpBuffer[startPos], testBuffer, aNumberOfBytes); + //std::cout << "Va" << std::endl; + if (aNumberOfBytes<1){ + std::cout << "Broken connection detected, error code: " << aNumberOfBytes << std::endl; + _socketClient=-1; + break; + } + //std::cout << "Vb" << std::endl; + if (unreadBytes>0) aNumberOfBytes+=unreadBytes; + //aNumberOfBytes++; + aStringPos=0; + aReturnPos=getPositionOf(aTmpBuffer, '\n', aStringPos, aNumberOfBytes); + //std::cout << "server critical VI" << std::endl; + if (aReturnPos==-1){ + aReturnPos=aNumberOfBytes-1; + aTmpBuffer[aNumberOfBytes]='\0'; + } + } + //std::cout << "server critical VII" << std::endl; + //if (aNumberOfBytes < 1){ + + //perror("receive"); + //}else{ + if (strlen(&aTmpBuffer[aStringPos])>0){ + std::cout << "Command received: " << &aTmpBuffer[aStringPos] << std::endl; + std::string* aCmdString = new std::string(&aTmpBuffer[aStringPos]); + //std::cout << "Cmd as string: " << *aCmdString << std::endl; + //if (!_syncInfo->_simulator->execAsyncCmd(&aTmpBuffer[aStringPos])){ + if (_syncInfo->_simulator->execAsyncCmd(*aCmdString)){ + delete aCmdString; + }else{ + //std::cout << "Before push:"; + //std::cout << *aCmdString << std::endl; + //_syncInfo->pushCommand(new std::string(&aTmpBuffer[aStringPos])); + _syncInfo->pushCommand(aCmdString); + //std::cout << "After push" << std::endl; + //if (pthread_mutex_trylock(&_syncInfo->_mutexProduce)==0){ + // memmove(_syncInfo->_command,&aTmpBuffer[aStringPos], aReturnPos-aStringPos+1); + // pthread_mutex_unlock(&_syncInfo->_mutexConsume); + //}else{ + if (_syncInfo->_simulator->isBusy()) _syncInfo->_simulator->sendStatus(); + //} + } + } + //} + aStringPos=aReturnPos+1; + } + }while (!_syncInfo->_terminate); + std::cout << "Server loop terminated" << std::endl; + //sendReply("Terminate simulator\n"); + int aSocketClient=_socketClient; + pthread_mutex_lock(&_replyMutex); + _socketClient=-1; + pthread_mutex_unlock(&_replyMutex); + close(aSocketClient); + std::cout << "Socket client closed" << std::endl; + close(aSocketServer); + std::cout << "Socket server closed" << std::endl; + return 0; +} + +int Server::getPositionOf(char* iBuffer, char searchCh, int iStart, int iLength){ + for (int i=iStart;i<iLength;i++){ + if (iBuffer[i]==searchCh){ + iBuffer[i]='\0'; + return i; + } + } + return -1; +} + +void* Server::get_in_addr(struct sockaddr *sa) const{ + if (sa->sa_family == AF_INET) { + return &(reinterpret_cast<struct sockaddr_in*>(sa)->sin_addr); + } + return &(reinterpret_cast<struct sockaddr_in6*>(sa)->sin6_addr); +} + +void Server::sendReply(std::string iReplyStr){ + pthread_mutex_lock(&_replyMutex); + if (_socketClient!=-1){ + if (send(_socketClient, iReplyStr.c_str(), iReplyStr.length(), 0) == -1) perror("send"); + } + pthread_mutex_unlock(&_replyMutex); +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Server.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Server.h new file mode 100644 index 0000000000000000000000000000000000000000..f8927916043597b56fc7376ee61e86e0ecb927a0 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Server.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ServerH +#define ServerH + +#include <definitions.h> +#include <ServerIF.h> + +class Simulator; +class SimServSyncInfo; + +///Class encapsulating TCP server capabilities +class Server: public ServerIF{ +public: + ///Constructor + Server(); + ///Run the server + int run(); + void sendReply(std::string iReplyStr); +protected: + ///Returns position of character in string and and replaces it with 0 + /** + \param iBuffer Pointer to buffer + \param searchCh Character to search for + \param iStart Start Index + \param iLength String length + \return Index of character + */ + int getPositionOf(char* iBuffer, char searchCh, int iStart, int iLength); + ///Determines the IP adress of the client + void* get_in_addr(struct sockaddr *sa) const; + ///pointer to synchronization structure + int _socketClient; + ///Mutex protecting the reply function of the Server + pthread_mutex_t _replyMutex; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerExplore.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerExplore.cpp new file mode 100644 index 0000000000000000000000000000000000000000..664f6d2668a0fd223ea90f2e6800e13f2b46bf23 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerExplore.cpp @@ -0,0 +1,87 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<ServerExplore.h> +#include<SimServSyncInfo.h> +#include<Simulator.h> +#include<SimComponents.h> +#include<TMLChoiceCommand.h> + +ServerExplore::ServerExplore(){ + for (int i=0; i<RECUR_DEPTH; i++) leafsForLevel[i]=0; +} + +int ServerExplore::run(){ + _syncInfo->_simComponents->setBreakpointOnChoiceCmds(); + exploreTree(0); +} + +void ServerExplore::exploreTree(unsigned int iDepth){ + bool aSimTerminated=false; + TMLChoiceCommand* aChoiceCmd; + std::stringstream aBuffer; + if (iDepth==RECUR_DEPTH){ + std::ostringstream aFileName; + aFileName << "canc" << iDepth << "." << leafsForLevel[iDepth]++; + std::string aFileStr(aFileName.str()); + _syncInfo->_simulator->schedule2TXT(aFileStr); + }else{ + do{ + aSimTerminated=_syncInfo->_simulator->runToNextBreakpoint(); + aChoiceCmd=_syncInfo->_simComponents->getCurrentChoiceCmd(); + }while (!aSimTerminated && aChoiceCmd==0); + if (aSimTerminated){ + std::ostringstream aFileName; + aFileName << "term" << iDepth << "." << leafsForLevel[iDepth]++; + std::string aFileStr(aFileName.str()); + _syncInfo->_simulator->schedule2TXT(aFileStr); + }else{ + _syncInfo->_simComponents->writeObject(aBuffer); + for (unsigned int aBranch=0;aBranch<aChoiceCmd->getNumberOfBranches();aBranch++){ + aChoiceCmd->setPreferredBranch(aBranch); + exploreTree(iDepth+1); + _syncInfo->_simComponents->readObject(aBuffer); + } + } + } +} + +void ServerExplore::sendReply(std::string iReplyStr){ + //std::cout << iReplyStr; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerExplore.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerExplore.h new file mode 100644 index 0000000000000000000000000000000000000000..f0fafbff564d153ab8de4921b2bdbc6cc35789b0 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerExplore.h @@ -0,0 +1,61 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ServerExploreH +#define ServerExploreH + +#include <definitions.h> +#include <ServerIF.h> +#define RECUR_DEPTH 20 + +class Simulator; +class SimServSyncInfo; + +///Server which allows for exploring several branches of control flow +class ServerExplore: public ServerIF{ +public: + ///Constructor + ServerExplore(); + int run(); + void sendReply(std::string iReplyStr); +protected: + void exploreTree(unsigned int iDepth); + unsigned int leafsForLevel[RECUR_DEPTH]; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerIF.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerIF.cpp new file mode 100644 index 0000000000000000000000000000000000000000..25d082880cb9d3872012d9eb6564692b1ca98396 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerIF.cpp @@ -0,0 +1,56 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<ServerIF.h> +#include<definitions.h> +#include<Simulator.h> +#include<SimServSyncInfo.h> + +void ServerIF::setSimSyncInfo(SimServSyncInfo* iSyncInfo){ + _syncInfo=iSyncInfo; +} + +void ServerIF::executeCmd(char* iCmd){ + std::string aCmdString(iCmd); + std::cout << "Command received: " << iCmd << std::endl; + if (!_syncInfo->_simulator->execAsyncCmd(aCmdString)){ + _syncInfo->pushCommand(new std::string(iCmd)); + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerIF.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerIF.h new file mode 100644 index 0000000000000000000000000000000000000000..40f086db6ee5ebaf8da03b9da6e510695869d997 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerIF.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ServerIFH +#define ServerIFH + +#include <definitions.h> + +class SimServSyncInfo; + +///This class represents the basic Interface for Server subclasses +class ServerIF{ +public: + ///Destructor + virtual ~ServerIF(){} + ///Run the server + virtual int run()=0; + ///Send a reply to the client + /** + \param iReplyStr String to send + */ + virtual void sendReply(std::string iReplyStr)=0; + ///Set pointer to synchronization information structure + /** + \param iSyncInfo Pointer to synchronization information structure + */ + void setSimSyncInfo(SimServSyncInfo* iSyncInfo); +protected: + ///pointer to synchronization structure + SimServSyncInfo* _syncInfo; + ///Invokes the simulator to execute a command, method is blocking + /** + \param iCmd Pointer to a string containing a command + */ + void executeCmd(char* iCmd); +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerLocal.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerLocal.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b1bf9a6de0f30a9f971a3c0024a33897da6263b2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerLocal.cpp @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<ServerLocal.h> +#include<SimServSyncInfo.h> + +ServerLocal::ServerLocal(std::string& iCmdFile):_cmdFile(iCmdFile){ + //pthread_mutex_init(&_replyMutex, NULL); +} + +int ServerLocal::run(){ + std::ifstream aCmdFileH(_cmdFile.c_str()); + char aCmd[BUFFER_SIZE]; + int aNumberOfBytes; + if (aCmdFileH.is_open()){ + std::cout << "Reading command file " << aCmdFileH << std::endl; + while(!(_syncInfo->_terminate || aCmdFileH.eof())) { + aCmdFileH.getline(aCmd,BUFFER_SIZE-1); + aNumberOfBytes=strlen(aCmd); + if (aNumberOfBytes>0){ + aCmd[aNumberOfBytes]='\0'; + executeCmd(aCmd); + } + } + std::cout << "Server loop terminated" << std::endl; + aCmdFileH.close(); + std::cout << "Command file closed" << std::endl; + }else{ + char aEnd[]="0\0"; + std::cout << "Command file could not be opened" << std::endl; + executeCmd(aEnd); + } + return 0; +} + +void ServerLocal::sendReply(std::string iReplyStr){ + //std::cout << iReplyStr; +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerLocal.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerLocal.h new file mode 100644 index 0000000000000000000000000000000000000000..af7f3c7df83b97fce4820230ac9694c56053f69d --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/ServerLocal.h @@ -0,0 +1,62 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ServerLocalH +#define ServerLocalH + +#include <definitions.h> +#include <ServerIF.h> + +class Simulator; +class SimServSyncInfo; + +///Server which reads in a command file and executes all contained commands +class ServerLocal: public ServerIF{ +public: + ///Constructor + /** + \param iCmdFile Reference to the file containing the simulation commands + */ + ServerLocal(std::string& iCmdFile); + int run(); + void sendReply(std::string iReplyStr); +protected: + std::string _cmdFile; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimComponents.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimComponents.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bffbb98df377a3e7badd54147aa20195796dd36e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimComponents.cpp @@ -0,0 +1,472 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <SimComponents.h> +#include <TraceableDevice.h> +#include <TMLTransaction.h> +#include <TMLTask.h> +#include <CPU.h> +#include <TMLChannel.h> +#include <TMLEventChannel.h> +//#include <TMLEventBChannel.h> +#include <Slave.h> +#include <Memory.h> +#include <Bridge.h> +#include <IndeterminismSource.h> +#include <ListenersSimCmd.h> +#include <Simulator.h> +#ifdef EBRDD_ENABLED +#include <EBRDD.h> +#endif + +SimComponents::SimComponents(int iHashValue /*, Simulator* iSimulator*/): _simulator(0), _stopFlag(false), _hashValue(iHashValue), _stoppedOnAction(false), _systemHash(), _knownStateReached(0), _onKnownPath(false) { +} + +SimComponents::~SimComponents(){ + //std::cerr << "b1\n"; + for(TEPEListenerList::iterator i=_tepeListenerList.begin(); i != _tepeListenerList.end(); ++i){ + //std::cerr << "b...\n"; + delete (*i); + //std::cerr << "after b...\n"; + } + //std::cerr << "b2\n"; + for(SerializableList::iterator i=_serList.begin(); i != _serList.end(); ++i){ + delete (*i); + } + for(SlaveList::iterator i=_slList.begin(); i != _slList.end(); ++i){ + delete (*i); + } +#ifdef EBRDD_ENABLED + for(EBRDDList::iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + delete (*i); + } +#endif + //_myfile.close(); +} + +void SimComponents::addTask(TMLTask* iTask){ + _vcdList.push_back(dynamic_cast<TraceableDevice*>(iTask)); + //_serList.push_back(dynamic_cast<Serializable*>(iTask)); + _taskList.push_back(iTask); + //std::cout << iTask->toString() << std::endl; +} + +void SimComponents::addChannel(TMLChannel* iChan){ + _serList.push_back(dynamic_cast<Serializable*>(iChan)); + _channelList.push_back(iChan); +} + +void SimComponents::addEvent(TMLEventChannel* iEvt){ + _serList.push_back(dynamic_cast<Serializable*>(iEvt)); + _channelList.push_back(iEvt); +} + +void SimComponents::addRequest(TMLEventChannel* iReq){ + _serList.push_back(dynamic_cast<Serializable*>(iReq)); + _channelList.push_back(iReq); +} + +void SimComponents::addCPU(CPU* iCPU){ + //TraceableDevice* a = dynamic_cast<TraceableDevice*> (iCPU); + //std::cout << "CPU added: " << iCPU << " " << iCPU->toString() << " " << iCPU->toShortString() << std::endl; + //std::cout << "TraceableDevice added: " << a << " " << a->toString() << " " << a->toShortString() << std::endl; + //_cpuList.push_back(dynamic_cast<SchedulableDevice*>(iCPU)); + _cpuList.push_back(iCPU); + _vcdList.push_back(dynamic_cast<TraceableDevice*>(iCPU)); + _serList.push_back(dynamic_cast<Serializable*>(iCPU)); +} + +void SimComponents::addBus(SchedulableCommDevice* iBus){ + _busList.push_back(iBus); + _vcdList.push_back(dynamic_cast<TraceableDevice*>(iBus)); + _serList.push_back(dynamic_cast<Serializable*>(iBus)); +} + +void SimComponents::addBridge(Bridge* iBridge){ + _slList.push_back(dynamic_cast<Slave*>(iBridge)); +} + +void SimComponents::addMem(Memory* iMem){ + _slList.push_back(dynamic_cast<Slave*>(iMem)); +} + +#ifdef EBRDD_ENABLED +void SimComponents::addEBRDD(EBRDD* iEBRDD){ + _ebrddList.push_back(iEBRDD); +} +#endif + +void SimComponents::addTEPEListener(GeneralListener* iTEPEListener){ + //std::cout << "before add\n"; + _tepeListenerList.push_back(iTEPEListener); + //std::cout << "after add\n"; +} + +void SimComponents::setTEPEEntryPoint(TEPEFloatingSigListener* iTEPEEntryPoint){ + _serList.push_back(dynamic_cast<Serializable*>(iTEPEEntryPoint)); +} + +void SimComponents::streamBenchmarks(std::ostream& s) const{ + s << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl; + for (TraceableDeviceList::const_iterator i=_vcdList.begin(); i!= _vcdList.end(); ++i){ + (*i)->streamBenchmarks(s); + s << std::endl; + } + s << TAG_SIMDURo << _simulator->getSimDuration() << TAG_SIMDURc << TAG_GLOBALc << TAG_STARTc << std::endl; +} + +std::ostream& SimComponents::writeObject(std::ostream& s){ +#ifdef DEBUG_SERIALIZE + std::cout << "WRITE ----------------------------------------------------\n"; +#endif + for(SerializableList::const_iterator i=_serList.begin(); i != _serList.end(); ++i){ + (*i)->writeObject(s); + } +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + (*i)->writeObject(s); + } +#endif + TMLTime aSimulatedTime = SchedulableDevice::getSimulatedTime(); + WRITE_STREAM(s, aSimulatedTime); + WRITE_STREAM(s, _onKnownPath); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: SimComponents simulatedTime: " << aSimulatedTime << std::endl; + std::cout << "----------------------------------------------------\n"; +#endif + return s; +} + +std::istream& SimComponents::readObject(std::istream& s){ +#ifdef DEBUG_SERIALIZE + std::cout << "READ ----------------------------------------------------\n"; +#endif + for(SerializableList::const_iterator i=_serList.begin(); i != _serList.end(); ++i){ + //std::cout << "SimComponents --> next Device" << std::endl; + (*i)->readObject(s); + } +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + (*i)->readObject(s); + } +#endif + TMLTime aSimulatedTime; + READ_STREAM(s, aSimulatedTime); + SchedulableDevice::setSimulatedTime(aSimulatedTime); + READ_STREAM(s, _onKnownPath); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: SimComponents simulatedTime: " << aSimulatedTime << std::endl; + std::cout << "----------------------------------------------------\n"; +#endif + return s; +} + +void SimComponents::reset(){ + //std::cout << "SimComponents:reset" << std::endl; + for(SerializableList::const_iterator i=_serList.begin(); i != _serList.end(); ++i){ + //std::cout << "loop reset before" << std::endl; + (*i)->reset(); + //std::cout << "loop reset after" << std::endl; + } + TMLTransaction::reset(); +#ifdef ADD_COMMENTS + Comment::reset(); +#endif +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + (*i)->reset(); + } +#endif + //std::cout << "----------------------------------------------- RESET\n"; + _knownStateReached = false; +} + +void SimComponents::resetStateHash(){ + _systemHashTable.clear(); + TMLTransaction::resetID(); + _onKnownPath=false; + TMLCommand::clearCoverageVars(); +} + +SchedulableDevice* SimComponents::getCPUByName(const std::string& iCPU) const{ + if (iCPU[0]>='0' && iCPU[0]<='9') return getCPUByID(StringToNum<ID>(iCPU)); + for(CPUList::const_iterator i=_cpuList.begin(); i != _cpuList.end(); ++i){ + if ((*i)->toString()==iCPU) return (*i); + } + return NULL; +} + +TMLTask* SimComponents::getTaskByName(const std::string& iTask) const{ + if (iTask[0]>='0' && iTask[0]<='9') return getTaskByID(StringToNum<ID>(iTask)); + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + if ((*i)->toString()==iTask) return (*i); + } + std::cerr << "aborting, task " << iTask << " does not exist\n"; + return NULL; +} + +SchedulableCommDevice* SimComponents::getBusByName(const std::string& iBus) const{ + if (iBus[0]>='0' && iBus[0]<='9') return getBusByID(StringToNum<ID>(iBus)); + for(BusList::const_iterator i=_busList.begin(); i != _busList.end(); ++i){ + if ((*i)->toString()==iBus) return (*i); + } + return NULL; +} + +Slave* SimComponents::getSlaveByName(const std::string& iSlave) const{ + if (iSlave[0]>='0' && iSlave[0]<='9') return getSlaveByID(StringToNum<ID>(iSlave)); + for(SlaveList::const_iterator i=_slList.begin(); i != _slList.end(); ++i){ + if ((*i)->toString()==iSlave) return (*i); + } + return NULL; +} + +TMLChannel* SimComponents::getChannelByName(const std::string& iChannel) const{ + if (iChannel[0]>='0' && iChannel[0]<='9') return getChannelByID(StringToNum<ID>(iChannel)); + for(ChannelList::const_iterator i=_channelList.begin(); i != _channelList.end(); ++i){ + if ((*i)->toShortString()==iChannel) return (*i); + } + return NULL; +} + +SchedulableDevice* SimComponents::getCPUByID(ID iID) const{ + //std::cerr << "getCPUByID " << iID << "\n"; + //CPUList::const_iterator i=_cpuList.begin(); + //std::cerr << "getCPUByID after i=_cpuList.begin()" << iID << "\n"; + for(CPUList::const_iterator i=_cpuList.begin(); i != _cpuList.end(); ++i){ + //std::cout << "CPU x\n"; + if ((*i)->getID()==iID) return (*i); + } + //std::cout << "End CPU\n"; + return NULL; +} + +TMLTask* SimComponents::getTaskByID(ID iID) const{ + std::cout << "Task " << iID << "\n"; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +SchedulableCommDevice* SimComponents::getBusByID(ID iID) const{ + for(BusList::const_iterator i=_busList.begin(); i != _busList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +Slave* SimComponents::getSlaveByID(ID iID) const{ + for(SlaveList::const_iterator i=_slList.begin(); i != _slList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +TMLChannel* SimComponents::getChannelByID(ID iID) const{ + for(ChannelList::const_iterator i=_channelList.begin(); i != _channelList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +/*TMLChoiceCommand* SimComponents::getCurrentChoiceCmd(){ + TMLChoiceCommand* aResult; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aResult = dynamic_cast<TMLChoiceCommand*>((*i)->getCurrCommand()); + if (aResult!=0) return aResult; + } + return 0; +}*/ + +IndeterminismSource* SimComponents::getCurrentRandomCmd(){ + IndeterminismSource* aResult; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aResult = dynamic_cast<IndeterminismSource*>((*i)->getCurrCommand()); + if (aResult!=0) return aResult; + } + return 0; +} + + +std::string SimComponents::getCmpNameByID(ID iID){ + SchedulableDevice* aSched = getCPUByID(iID); + if (aSched!=0) return aSched->toString(); + TMLTask* aTask = getTaskByID(iID); + if (aTask!=0) return aTask->toString(); + SchedulableCommDevice* aBus = getBusByID(iID); + if (aBus!=0) return aBus->toString(); + Slave* aSlave = getSlaveByID(iID); + if (aSlave!=0) return aSlave->toString(); + TMLChannel* aChan = getChannelByID(iID); + if (aChan!=0) return aChan->toShortString(); + return std::string("unknown"); +} + +//ListenerSubject <TransactionListener>* SimComponents::getListenerByID(ID iID){ +ListenerSubject <GeneralListener>* SimComponents::getListenerByID(ID iID){ + //std::cerr << "Hello 1\n"; + ListenerSubject <GeneralListener>* aListener = getCPUByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 2\n"; + aListener = TMLCommand::getCommandByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 3\n"; + aListener = getTaskByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 4\n"; + aListener = getBusByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 5\n"; + aListener = getSlaveByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 6\n"; + return getChannelByID(iID); +} + +/*void SimComponents::setBreakpointOnChoiceCmds(){ + TMLChoiceCommand* aResult; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aResult = dynamic_cast<TMLChoiceCommand*>((*i)->getCurrCommand()); + if (aResult!=0) aResult->setBreakpoint(new Breakpoint(this)); + } +}*/ + +void SimComponents::setStopFlag(bool iStopFlag, const std::string& iStopReason){ + _stopFlag=iStopFlag; + if (iStopFlag){ + _stopReason+= " " + iStopReason; + }else{ + _stopReason=""; + _stoppedOnAction=false; + //std::cout << "_stoppedOnAction=false\n"; + } +} + +ID SimComponents::checkForRecurringSystemState(){ + //std::cout << "Recurring Sys State\n"; + _systemHash.init((HashValueType)0xabcd, _taskList.size()); + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + //std::cout << "add Task Hash " << (*i)->toString() << "\n"; + _systemHash.addValue((*i)->getStateHash()); + TMLCommand* aCurrCmd = (*i)->getCurrCommand(); + if (aCurrCmd!=0){ + //std::cout << "add curr cmd and progress Task " << (*i)->toString() << "\n"; + //_systemHash.addValue((HashValueType)aCurrCmd); + _systemHash.addValue((HashValueType)aCurrCmd->getID()); + //std::cout << "cmd ID: " << aCurrCmd->getID() << "\n"; + //_systemHash.addValue((HashValueType)(aCurrCmd->getLength()-aCurrCmd->getProgress())); + _systemHash.addValue((HashValueType)(aCurrCmd->getProgress())); + } + } + //std::cout << " *** New channel list: ***\n"; + for(ChannelList::const_iterator i=_channelList.begin(); i != _channelList.end(); ++i){ + //std::cout << "add channel " << (*i)->toString() << "\n"; + (*i)->getStateHash(&_systemHash); + /*if ((*i)->getSignificance()) std::cout << (*i)->toShortString() << " has sig. content: " << (*i)->getContent() << "\n"; + else + std::cout << (*i)->toShortString() << " is not significant in 2nd step!!!!!!!!!!!!!!\n";*/ + } + //std::cout << "-> Hash Value: " << _systemHash.getHash() << "\n"; + ID aRetVal; + std::pair<StateHashSet::const_iterator,bool> aRes = _systemHashTable.insert(std::pair<HashValueType,ID>(_systemHash.getHash(),TMLTransaction::getID())); + if (aRes.second){ + aRetVal=TMLTransaction::getID(); + TMLTransaction::incID(); + //std::cout << "*** Added as " << aRetVal << "***\n"; + //std::cout << "STATE CREATED "<< TMLTransaction::getID() << " +++++++++++++++++++++++++++++\n"; + _knownStateReached = 0; + if (_onKnownPath) std::cout << "YOU SHOULD NOT SEE THIS\n"; + }else{ + _onKnownPath=true; + setStopFlag(true, "Recurring system state"); //to be restablished!!!!!!!!!!!! + //std::cout << "KNOWN STATE REACHED "<< aRes.first->second << " ***************************\n"; + _knownStateReached= aRes.first->second; + aRetVal = aRes.first->second; + //std::cout << "*** Merged with " << aRetVal << "***\n"; + } + //return _knownStateReached; + return aRetVal; +} + +void SimComponents::showTaskStates(){ + static int iCount=0; + static ParamType *aDatalen, *aStandard; + static SchedulableDevice *aFEP, *aDeint, *aChDec; + if (iCount==0){ + bool oIsID; + aDatalen = getTaskByName("PacketManagerDesign__PacketGenerator")->getVariableByName("datalen", oIsID); + aStandard = getTaskByName("PacketManagerDesign__PacketGenerator")->getVariableByName("standard", oIsID); + aFEP = getCPUByName("FEP_0"); + aDeint = getCPUByName("Deinterleaver_0"); + aChDec = getCPUByName("ChannelDecoder_0"); + } + + /*std::cout<< "***** NEW entry " << iCount++ << " Sim Time " << SchedulableDevice::getSimulatedTime() << " *****\n"; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + std::cout << "State of " << (*i)->toString() << ": " ; + if ((*i)->getCurrCommand()==0 || (*i)->getCurrCommand()->getCurrTransaction()==0){ + std::cout << "has no transaction\n"; + }else{ + if ((*i)->getCurrCommand()->getCurrTransaction()->getVirtualLength()==0) + std::cout << "has NOT runnable transaction\n"; + else + std::cout << "has runnable transaction: " << (*i)->getCurrCommand()->getCurrTransaction()->toString() << "\n"; + } + } + for(BusList::const_iterator i=_busList.begin(); i != _busList.end(); ++i){ + TMLTransaction* nextBusTrans = dynamic_cast<SchedulableDevice*>(*i)->getNextTransaction(); + if (nextBusTrans!=0){ + std::cout << "Bus " << (*i)->toString() << " has next trans: " << nextBusTrans->toString() << "\n"; + } + }*/ + std::cout << *aDatalen << "," << *aStandard << "," << SchedulableDevice::getSimulatedTime() << "," << + aFEP->getBusyCycles() << "," << aDeint->getBusyCycles() << "," << aChDec->getBusyCycles() << "\n"; + +} + +bool SimComponents::couldCPUBeIdle(CPU* iCPU){ + int aRunFlag =0; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aRunFlag |= (*i)->hasRunnableTrans(iCPU); + if ((aRunFlag & 2)!=0) return true; + } + return ((aRunFlag & 1)==0); +} \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimComponents.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimComponents.h new file mode 100644 index 0000000000000000000000000000000000000000..47c969b7e2e91b325c5c527973a9114450c62248 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimComponents.h @@ -0,0 +1,331 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SimComponentsH +#define SimComponentsH + +#include <definitions.h> +#include <Serializable.h> +#include <HashAlgo.h> +#include <ListenerSubject.h> + +class TMLEventChannel; +class TMLEventChannel; +class Bridge; +class Memory; +class Simulator; +class IndeterminismSource; +class GeneralListener; +class PropertyConstraint; +class TEPEFloatingSigListener; +#ifdef EBRDD_ENABLED +class EBRDD; +#endif + +///Class encapsulating architecture and application objects +class SimComponents: public Serializable{ +public: + ///Constructor + /** + \param iHashValue Hash Value for application and architecture + */ + SimComponents(int iHashValue); + ///Destructor + virtual ~SimComponents(); + ///Add a task + /** + \param iTask Pointer to task + */ + void addTask(TMLTask* iTask); + ///Add a channel + /** + \param iChan Pointer to channel + */ + void addChannel(TMLChannel* iChan); + ///Add an event + /** + \param iEvt Pointer to event + */ + void addEvent(TMLEventChannel* iEvt); + ///Add a request + /** + \param iReq Pointer to request + */ + void addRequest(TMLEventChannel* iReq); + ///Add a CPU + /** + \param iCPU Pointer to CPU + */ + void addCPU(CPU* iCPU); + ///Add a bus + /** + \param iBus Pointer to bus + */ + void addBus(SchedulableCommDevice* iBus); + ///Add a bridge + /** + \param iBridge Pointer to bridge + */ + void addBridge(Bridge* iBridge); + ///Add a memory + /** + \param iMem Pointer to memory + */ + void addMem(Memory* iMem); +#ifdef EBRDD_ENABLED + ///Add an EBRDD + /** + \param iEBRDD Pointer to EBRDD + */ + void addEBRDD(EBRDD* iEBRDD); +#endif + ///Add a TEPE event listener + /** + \param iTEPEListener Pointer to TEPEListener + */ + void addTEPEListener(GeneralListener* iTEPEListener); + ///Sets the TEPE root constraint + /** + \param iTEPEEntryPoint Pointer to TEPEFloatingSigListener + */ + void setTEPEEntryPoint(TEPEFloatingSigListener* iTEPEEntryPoint); + ///Calls streamBenchmarks of all traceable devices contained in vcdList + /** + param s Reference to output stream object + */ + void streamBenchmarks(std::ostream& s) const; + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); + ///Resets all serializable entities to their initial state + void reset(); + ///Searches for a CPU based on its name + /** + \param iCPU Name of the CPU + \return Pointer to that CPU + */ + SchedulableDevice* getCPUByName(const std::string& iCPU) const; + ///Searches for a Task based on its name + /** + \param iTask Name of the Task + \return Pointer to that Task + */ + TMLTask* getTaskByName(const std::string& iTask) const; + ///Searches for a Bus based on its name + /** + \param iBus Name of the Bus + \return Pointer to that Bus + */ + SchedulableCommDevice* getBusByName(const std::string& iBus) const; + ///Searches for a Slave based on its name + /** + \param iSlave Name of the Slave + \return Pointer to that Slave + */ + Slave* getSlaveByName(const std::string& iSlave) const; + ///Searches for a Channel based on its name + /** + \param iChannel Name of the Channel + \return Pointer to that Channel + */ + TMLChannel* getChannelByName(const std::string& iChannel) const; + ///Searches for a CPU based on its name + /** + \param iID ID of the CPU + \return Pointer to that CPU + */ + SchedulableDevice* getCPUByID(ID iID) const; + ///Searches for a Task based on its name + /** + \param iID ID of the Task + \return Pointer to that Task + */ + TMLTask* getTaskByID(ID iID) const; + ///Searches for a Bus based on its name + /** + \param iID ID of the Bus + \return Pointer to that Bus + */ + SchedulableCommDevice* getBusByID(ID iID) const; + ///Searches for a Slave based on its name + /** + \param iID ID of the Slave + \return Pointer to that Slave + */ + Slave* getSlaveByID(ID iID) const; + ///Searches for a Channel based on its name + /** + \param iID ID of the Channel + \return Pointer to that Channel + */ + TMLChannel* getChannelByID(ID iID) const; + ///Returns an iterator for the internal CPU list + /** + \return Const iterator for CPU list + */ + inline const CPUList& getCPUList() const{return _cpuList;} + ///Returns an iterator for the internal bus list + /** + \return Const iterator for bus list + */ + inline const BusList& getBusList() const{return _busList;} + ///Returns an iterator for the internal VCD list + /** + \return Const iterator for VCD list + */ + inline const TraceableDeviceList& getVCDList() const{return _vcdList;} + ///Returns the state of the stop flag + /** + \return Stop flag + */ + inline bool getStopFlag() const {return _stopFlag;} + ///Sets the value of the stop flag + /** + \param iStopFlag Stop flag + \param iStopReason Reason why the simulation stopped + */ + void setStopFlag(bool iStopFlag, const std::string& iStopReason); + ///Returns whether the simulation stopped on an Action command + /** + \return Flag indicating if the simulation stopped on an Action command + */ + inline bool getStoppedOnAction(){return _stoppedOnAction;} + ///Sets the flag indicating that the simulation stopped on an Action command + inline void setStoppedOnAction(){_stoppedOnAction=true; /*std::cout << "_stoppedOnAction=true\n";*/} + ///If a task has a choice command as current command, a pointer to it is returned + /** + \return Pointer if choice command was found, null otherwise + */ + IndeterminismSource* getCurrentRandomCmd(); + ///Returns a hash value for the current application and architecture + /** + \return Hash value + */ + inline int getHashValue() {return _hashValue;} + ///Returns an iterator for the internal task list + /** + \return Const iterator for task list + */ + inline const TaskList& getTaskList() const{return _taskList;} +#ifdef EBRDD_ENABLED + ///Returns an iterator for the internal EBRDD list + /** + \return Const iterator for EBRDD list + */ + inline const EBRDDList& getEBRDDList() const{return _ebrddList;} +#endif + ///Returns the reason why the simulation stopped + /** + \return Reason why the simulation stopped + */ + inline std::string getStopReason(){return _stopReason;} + ///Returns a pointer to the simulator + /** + \return Pointer to simulator + */ + inline Simulator* getSimulator(){return _simulator;} + ///Sets a reference to the simulator + /** + \param iSim Pointer to simulator + */ + inline void setSimulator(Simulator* iSim){_simulator=iSim;} + ///Returns the name of the component with the indicated ID + /** + \param iID Component ID + */ + std::string getCmpNameByID(ID iID); + ///Halts the simulation if the current system state has been encountered before + ID checkForRecurringSystemState(); + ///Checks if a known system state was reached + /** + \return Flag indicating whether a known state has been encountered + */ + inline ID wasKnownStateReached() const {return _knownStateReached;} + //inline ID wasKnownStateReached() const {return 0;} + ///Resets the global system hash + void resetStateHash(); + inline bool getOnKnownPath(){ + _knownStateReached=0; + return _onKnownPath; + } + ListenerSubject<GeneralListener>* getListenerByID(ID iID); + virtual void generateTEPEs()=0; + void showTaskStates(); + bool couldCPUBeIdle(CPU* iCPU); +protected: + ///Pointer to simulator + Simulator* _simulator; + ///List holding CPUs + CPUList _cpuList; + ///List holding schedulable communication devices + BusList _busList; + ///List holding traceable devices + TraceableDeviceList _vcdList; + ///List holding serializable devices + SerializableList _serList; + ///List holding bridges and memories + SlaveList _slList; + ///List holding tasks + TaskList _taskList; + ///List holding channels + ChannelList _channelList; + ///TEPE listener listener + TEPEListenerList _tepeListenerList; +#ifdef EBRDD_ENABLED + ///List holding EBRDDs + EBRDDList _ebrddList; +#endif + ///Flag indicating whether the simulation must be stopped + bool _stopFlag; + ///Hash Value for application and architecture + int _hashValue; + ///Reason why the simulation stopped + std::string _stopReason; + ///Flag indicating whether a task has an action command pending + bool _stoppedOnAction; + ///System wide state hash + StateHashSet _systemHashTable; + ///System Hash + HashAlgo _systemHash; + ///Flag indicating whether a known state has been encountered + ID _knownStateReached; + bool _onKnownPath; +}; +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimServSyncInfo.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimServSyncInfo.h new file mode 100644 index 0000000000000000000000000000000000000000..987bdc394d090275fe7ad3d1c169727756b97586 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/SimServSyncInfo.h @@ -0,0 +1,126 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SimServSyncInfoH +#define SimServSyncInfoH + +#include <definitions.h> + +#define BUFFER_SIZE 1000 +class CurrentComponents; +class Simulator; +class ServerIF; +class SimComponents; + +///Synchronizes server and simulator +class SimServSyncInfo{ +public: + ///Pointer to simulator + Simulator* _simulator; + ///Pointer to server + ServerIF* _server; + ///Pointe simulation components + SimComponents* _simComponents; + ///Simulation terminate flag + bool _terminate; + + ///Constructor + SimServSyncInfo():_simulator(0), _server(0), _simComponents(0), _terminate(false), _popGotStuck(false){ + pthread_mutex_init(&_mutexCmdAvailable, NULL); + pthread_mutex_init(&_mutexListProtect, NULL); + pthread_mutex_lock(&_mutexCmdAvailable); + } + + ///Destructor + ~SimServSyncInfo(){ + for(CommandQueue::iterator i=_cmdQueue.begin(); i != _cmdQueue.end(); ++i){ + delete (*i); + } + } + + ///Push command on command queue + /** + \param iCmd Command + */ + void pushCommand(std::string* iCmd){ + //std::cout << "Value to write: " << *iCmd << std::endl; + pthread_mutex_lock(&_mutexListProtect); + //std::cout << "Before push_back" << *iCmd << std::endl; + _cmdQueue.push_back(iCmd); + if (_popGotStuck){ + _popGotStuck=false; + pthread_mutex_unlock(&_mutexCmdAvailable); + } + pthread_mutex_unlock(&_mutexListProtect); + //std::cout << "End write" << std::endl; + } + + ///Pop command from command queue + /** + \return Command + */ + std::string* popCommand(){ + pthread_mutex_lock(&_mutexListProtect); + if (_cmdQueue.empty()){ + _popGotStuck=true; + pthread_mutex_unlock(&_mutexListProtect); + pthread_mutex_lock(&_mutexCmdAvailable); + pthread_mutex_lock(&_mutexListProtect); + } + std::string* aCmdTmp=_cmdQueue.front(); + //std::cout << "Read value: " << *aCmdTmp << std::endl; + _cmdQueue.pop_front(); + //std::cout << "After pop" << std::endl; + pthread_mutex_unlock(&_mutexListProtect); + //std::cout << "End read" << std::endl; + return aCmdTmp; + } + +protected: + ///Mutex for mutual exclusion of list access + pthread_mutex_t _mutexListProtect; + ///Mutex preventing read access to empty command queue + pthread_mutex_t _mutexCmdAvailable; + ///Command queue + CommandQueue _cmdQueue; + ///Flag indicating that the server is waiting for new commands + bool _popGotStuck; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Simulator.cpp b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Simulator.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f833796e547e49ef719d0df31c2752924496bb51 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Simulator.cpp @@ -0,0 +1,1527 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <Simulator.h> +//#include <Server.h> +//#include <ServerLocal.h> +#include <SimServSyncInfo.h> +#include <TMLCommand.h> +#include <TMLTransaction.h> +#include <SimComponents.h> +#include <IndeterminismSource.h> +#include <CPU.h> +#include <TMLTask.h> +#include <TMLChannel.h> +#include <ServerIF.h> +#include <Server.h> +#include <ServerLocal.h> +#include <TMLEventChannel.h> +#ifdef EBRDD_ENABLED +#include <EBRDD.h> +#include <EBRDDCommand.h> +#include <ERC.h> +#endif + + +Simulator::Simulator(SimServSyncInfo* iSyncInfo):_syncInfo(iSyncInfo), _simComp(_syncInfo->_simComponents), _busy(false), _simTerm(false), _randChoiceBreak(_syncInfo->_simComponents), _wasReset(true), _longRunTime(0), _shortRunTime(-1), _replyToServer(true), _branchCoverage(60), _commandCoverage(100), _terminateExplore(false), _simDuration(0){ +} + +Simulator::~Simulator(){ + //if (_currCmdListener!=0) delete _currCmdListener; + //if (_randChoiceBreak!=0) delete _randChoiceBreak; +} + +TMLTransaction* Simulator::getTransLowestEndTime(SchedulableDevice*& oResultDevice) const{ + //int tmp=0; + TMLTransaction *aMarker=0, *aTempTrans; + TMLTime aLowestTime=-1; + SchedulableDevice* aTempDevice; + //static unsigned int aTransitionNo=0; +#ifdef DEBUG_KERNEL + std::cout << "kernel:getTLET: before loop" << std::endl; +#endif + //for(SchedulingList::const_iterator i=_simComp->_cpuList.begin(); i != _simComp->_cpuList.end(); ++i){ + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + aTempDevice=*i; + aTempTrans=aTempDevice->getNextTransaction(); + if (aTempTrans!=0 && aTempTrans->getVirtualLength()>0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:getTLET: transaction found on " << aTempDevice->toString() << ": " << aTempTrans->toString() << std::endl; +#endif + //tmp++; + if (aTempTrans->getEndTime() < aLowestTime){ + aMarker=aTempTrans; + aLowestTime=aTempTrans->getEndTime(); + oResultDevice=aTempDevice; + } + } +//#ifdef DEBUG_KERNEL + else { + /*if (!_simComp->couldCPUBeIdle(*i)){ + std::cout << "kernel:getTLET: no transaction found on " << aTempDevice->toString() << std::endl; + std::cout << "Cry !!!!!!!!"; + //exit(1); + }*/ + } +//#endif + } + //if (tmp==1) std::cout << "trans only on one CPU " << oResultDevice->toString() << "\n"; + return aMarker; +} + +ID Simulator::schedule2GraphDOT(std::ostream& iDOTFile, std::ostream& iAUTFile, ID iStartState, unsigned int& oTransCounter) const{ + CPUList::iterator i; + //std::cout << "entry graph output\n"; + GraphTransactionQueue aQueue; + TMLTransaction* aTrans, *aTopElement; + ID aStartState=iStartState, aEndState=0; + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + aTrans = (*i)->getTransactions1By1(true); + if (aTrans!=0) aQueue.push(aTrans); + } + //std::ostringstream aOutp; + while (!aQueue.empty()){ + CPU* aCPU; + aTopElement = aQueue.top(); + aCPU = aTopElement->getCommand()->getTask()->getCPU(); + aEndState = aTopElement->getStateID(); + if (aEndState==0){ + aEndState=TMLTransaction::getID(); + TMLTransaction::incID(); + } + //13 -> 17 [label = "i(CPU0__test1__TMLTask_1__wro__test1__ch<4 ,4>)"]; + oTransCounter++; + iDOTFile << aStartState << " -> " << aEndState << " [label = \"i(" << aCPU->toString() << "__" << aTopElement->getCommand()->getTask()->toString() << "__" << aTopElement->getCommand()->getCommandStr(); + if (aTopElement->getChannel()!=0){ + iDOTFile << "__" << aTopElement->getChannel()->toShortString(); + } + iDOTFile << "<" << aTopElement->getVirtualLength() << ">)\"]\n"; + //(20,"i(CPU0__test1__TMLTask_1__wr__test1__ch<4 ,4>)", 24) + iAUTFile << "(" << aStartState << "," << "\"i(" << aCPU->toString() << "__" << aTopElement->getCommand()->getTask()->toString() << "__" << aTopElement->getCommand()->getCommandStr(); + if (aTopElement->getChannel()!=0){ + iAUTFile << "__" << aTopElement->getChannel()->toShortString(); + } + iAUTFile << "<" << aTopElement->getVirtualLength() << ">)\"," << aEndState <<")\n"; + aStartState = aEndState; + aQueue.pop(); + aTrans = aCPU->getTransactions1By1(false); + if (aTrans!=0) aQueue.push(aTrans); + } + //std::cout << "exit graph output\n"; + return aStartState; +} + + +void Simulator::schedule2Graph(std::string& iTraceFileName) const{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + CPUList::iterator i; + GraphTransactionQueue aQueue; + TMLTransaction* aTrans, *aTopElement; + unsigned int aTransitionNo=0; + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + aTrans = (*i)->getTransactions1By1(true); + if (aTrans!=0) aQueue.push(aTrans); + } + std::ostringstream aOutp; + while (!aQueue.empty()){ + //std::ostringstream aTempStr; + CPU* aCPU; + aTopElement = aQueue.top(); + aCPU = aTopElement->getCommand()->getTask()->getCPU(); + for (TMLLength a=0; a < aTopElement->getVirtualLength(); a++){ + aOutp << "(" << aTransitionNo << ",\"i(" << aCPU->toString() << "__" << aTopElement->getCommand()->getTask()->toString() << "__" << aTopElement->getCommand()->getCommandStr(); + if (aTopElement->getChannel()!=0){ + aOutp << "__" << aTopElement->getChannel()->toShortString(); + //if (dynamic_cast<TMLEventChannel*>(aTopElement->getChannel())==0) aOutp << "<" << aTopElement->getVirtualLength() << ", " << ">"; + } + aOutp << ")\"," << ++aTransitionNo << ")\n"; + + //aOutp << aTempStr.str() << ++aTransitionNo << ")\n"; + } + //myfile << aTempStr.str(); + aQueue.pop(); + aTrans = aCPU->getTransactions1By1(false); + if (aTrans!=0) aQueue.push(aTrans); + } + myfile << "des (0, " << aTransitionNo+1 << ", " << aTransitionNo+2 << ")\n"; + myfile << aOutp.str() << "(" << aTransitionNo << ",\"i(exit)\", " << aTransitionNo+1 << ")\n"; + myfile.close(); + } + else + std::cout << "Unable to open Graph output file" << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The Graph output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; +} + +void Simulator::schedule2TXT(std::string& iTraceFileName) const{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + (*i)->schedule2TXT(myfile); + } + //for(BusList::const_iterator j=_simComp->getBusIterator(false); j != _simComp->getBusIterator(true); ++j){ + for(BusList::const_iterator j=_simComp->getBusList().begin(); j != _simComp->getBusList().end(); ++j){ + (*j)->schedule2TXT(myfile); + } + myfile.close(); + } + else + std::cout << "Unable to open text output file." << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The text output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; +} + +void Simulator::schedule2HTML(std::string& iTraceFileName) const{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + myfile << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; + myfile << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"schedstyle.css\" />\n<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\" />\n<title>Scheduling</title>\n</head>\n<body>\n"; + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + (*i)->schedule2HTML(myfile); + } + //for(BusList::const_iterator j=_simComp->getBusIterator(false); j != _simComp->getBusIterator(true); ++j){ + for(BusList::const_iterator j=_simComp->getBusList().begin(); j != _simComp->getBusList().end(); ++j){ + (*j)->schedule2HTML(myfile); + } + //for_each(iCPUlist.begin(), iCPUlist.end(),std::bind2nd(std::mem_fun(&CPU::schedule2HTML),myfile)); + myfile << "</body>\n</html>\n"; + myfile.close(); + } + else + std::cout << "Unable to open HTML output file." << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The HTML output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; +} + +void Simulator::schedule2VCD(std::string& iTraceFileName) const{ + time_t aRawtime; + struct tm * aTimeinfo; + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + time(&aRawtime); + aTimeinfo=localtime(&aRawtime); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + //std::cout << "File is open" << std::endl; + SignalChangeQueue aQueue; + std::string aSigString; + //bool aNoMoreTrans; + //TraceableDevice* actDevice; + TMLTime aCurrTime=-1; + SignalChangeData* aTopElement; + TMLTime aNextClockEvent=0; + myfile << "$date\n" << asctime(aTimeinfo) << "$end\n\n$version\nDaniel's TML simulator\n$end\n\n"; + myfile << "$timescale\n1 ns\n$end\n\n$scope module Simulation $end\n"; + //std::cout << "Before 1st loop" << std::endl; + //for (TraceableDeviceList::const_iterator i=_simComp->getVCDIterator(false); i!= _simComp->getVCDIterator(true); ++i){ + for (TraceableDeviceList::const_iterator i=_simComp->getVCDList().begin(); i!= _simComp->getVCDList().end(); ++i){ + //TraceableDevice* a=*i; +// a->streamBenchmarks(std::cout); +// a->toString(); + //std::cout << "in 1st loop " << a << std::endl; + //std::cout << "device: " << (*i)->toString() << std::endl; + //myfile << "$var integer 3 " << (*i)->toShortString() << " " << (*i)->toString() << " $end\n"; + myfile << "$var wire 1 " << (*i)->toShortString() << " " << (*i)->toString() << " $end\n"; + //std::cout << "get next signal change" << std::endl; + //aTime = (*i)->getNextSignalChange(true, aSigString, aNoMoreTrans); + aTopElement = new SignalChangeData(); + (*i)->getNextSignalChange(true, aTopElement); + aQueue.push(aTopElement); + //std::cout << "push" << std::endl; + //aQueue.push(new SignalChangeData(aSigString, aTime, (aNoMoreTrans)?0:(*i))); + } + myfile << "$var integer 32 clk Clock $end\n"; + myfile << "$upscope $end\n$enddefinitions $end\n\n"; + //std::cout << "Before 2nd loop" << std::endl; + while (!aQueue.empty()){ + aTopElement=aQueue.top(); + while (aNextClockEvent < aTopElement->_time){ + myfile << "#" << aNextClockEvent << "\nr" << aNextClockEvent << " clk\n"; + aNextClockEvent+=CLOCK_INC; + } + if (aCurrTime!=aTopElement->_time){ + aCurrTime=aTopElement->_time; + myfile << "#" << aCurrTime << "\n"; + } + if (aNextClockEvent == aTopElement->_time){ + myfile << "b" << vcdTimeConvert(aNextClockEvent) << " clk\n"; + aNextClockEvent+=CLOCK_INC; + } + //myfile << aTopElement->_sigChange << "\n"; + myfile << vcdValConvert(aTopElement->_sigChange) << aTopElement->_device->toShortString() << "\n"; + aQueue.pop(); + TMLTime aTime = aTopElement->_time; + aTopElement->_device->getNextSignalChange(false, aTopElement); + if (aTopElement->_time == aTime) + delete aTopElement; + else + aQueue.push(aTopElement); + //actDevice=aTopElement->_device; + //if (actDevice!=0) aTime = actDevice->getNextSignalChange(false, aSigString, aNoMoreTrans); + //delete aTopElement; + //aQueue.pop(); + //if (actDevice!=0) aQueue.push(new SignalChangeData(aSigString, aTime, (aNoMoreTrans)?0:actDevice)); + } + myfile << "#" << aCurrTime+1 << "\n"; + std::cout << "Simulated cycles: " << aCurrTime << std::endl; + //for (TraceableDeviceList::const_iterator i=_simComp->getVCDIterator(false); i!= _simComp->getVCDIterator(true); ++i){ + for (TraceableDeviceList::const_iterator i=_simComp->getVCDList().begin(); i!= _simComp->getVCDList().end(); ++i){ + //myfile << VCD_PREFIX << "100 " << (*i)->toShortString() << "\n"; + myfile << "0" << (*i)->toShortString() << "\n"; + //std::cout << "Utilization of component " << (*i)->toString() << ": " << ((float)(*i)->getBusyCycles()) / ((float)aCurrTime) << std::endl; + } + + myfile.close(); + } + else + std::cout << "Unable to open VCD output file." << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The VCD output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; + +} + +bool Simulator::channelImpactsCommand(TMLChannel* iCh, TMLCommand* iCmd){ + unsigned int nbOfChannels = iCmd->getNbOfChannels(); + for (unsigned int i=0; i<nbOfChannels; i++) + if (iCh==iCmd->getChannel(i)) return true; + return false; +} + +bool Simulator::simulate(TMLTransaction*& oLastTrans){ + TMLTransaction* depTransaction,*depCPUnextTrans,*transLET; + TMLCommand* commandLET,*depCommand,*depCPUnextCommand; + TMLTask* depTask; + SchedulableDevice* cpuLET; + CPU* depCPU; +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: first schedule" << std::endl; +#endif + _simComp->setStopFlag(false,""); + //std::cout << "before loop " << std::endl; + //for(TaskList::const_iterator i=_simComp->getTaskIterator(false); i!=_simComp->getTaskIterator(true);i++){ + for(TaskList::const_iterator i=_simComp->getTaskList().begin(); i!=_simComp->getTaskList().end();i++){ + //std::cout << "loop it " << (*i)->toString() << std::endl; + if ((*i)->getCurrCommand()!=0) (*i)->getCurrCommand()->prepare(true); + //std::cout << "loop it end" << (*i)->toString() << std::endl; + } + //std::cout << "after loop1" << std::endl; +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_simComp->getEBRDDIterator(false); i!=_simComp->getEBRDDIterator(true);i++){ + if ((*i)->getCurrCommand()!=0) (*i)->getCurrCommand()->prepare(); + } +#endif + //std::cout << "after loop2" << std::endl; + //for_each(_simComp->getCPUIterator(false), _simComp->getCPUIterator(true),std::mem_fun(&CPU::setRescheduleFlag)); + //for_each(_simComp->getCPUIterator(false), _simComp->getCPUIterator(true),std::mem_fun(&CPU::schedule)); + for_each(_simComp->getCPUList().begin(), _simComp->getCPUList().end(),std::mem_fun(&CPU::schedule)); + //std::cout << "after schedule" << std::endl; + transLET=getTransLowestEndTime(cpuLET); + //std::cout << "after getTLET" << std::endl; +#ifdef LISTENERS_ENABLED + if (_wasReset) NOTIFY_SIM_STARTED(); + _wasReset=false; +#endif + while (transLET!=0 && !_simComp->getStopFlag()){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: scheduling decision: " << transLET->toString() << std::endl; +#endif + commandLET=transLET->getCommand(); +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: add trans " << commandLET->toString() << std::endl; +#endif + if (cpuLET->addTransaction(0)){ + unsigned int nbOfChannels = commandLET->getNbOfChannels(); + //bool aRescheduleCoresFlag=false; + for (unsigned int i=0;i<nbOfChannels; i++){ + if ((depTask=commandLET->getDependentTask(i))==0) continue; + //if (depTask!=0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent Task found" << std::endl; +#endif + depCPU=depTask->getCPU(); + //std::cout << "CPU this task : " << cpuLET->toString(); + //if (depCPU==0) std::cout << " CPU dep task " << depTask->toString() << ": 0\n"; else std::cout << " CPU dep task: "<< depTask->toString() << " " << depCPU->toString() << std::endl; + if (depCPU!=cpuLET){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: Tasks running on different CPUs" << std::endl; +#endif + depCommand=depTask->getCurrCommand(); + //if (depCommand!=0 && (dynamic_cast<TMLSelectCommand*>(depCommand)!=0 || channelImpactsCommand(commandLET->getChannel(i), depCommand))){ + if (depCommand!=0 && channelImpactsCommand(commandLET->getChannel(i), depCommand)) { //RIGHT one + +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: commands are accessing the same channel" << std::endl; +#endif + depTransaction=depCommand->getCurrTransaction(); + if (depTransaction!=0 && depTransaction->getVirtualLength()!=0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent task has a current transaction and is not blocked any more" << std::endl; +#endif + /* if (depCPU==0){ + aRescheduleCoresFlag=true; +//#ifdef DEBUG_KERNEL + std::cout << "Multi Core scheduling procedure\n"; +//#endif + depTask->setRescheduleFlagForCores(); + continue; + }*/ + //std::cout << "Let's crash!!!!!!!!\n"; + depCPUnextTrans=depCPU->getNextTransaction(); + //std::cout << "Not crahed!!!!!!!!\n"; + if (depCPUnextTrans!=0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: transaction scheduled on dependent CPU" << std::endl; +#endif + depCPUnextCommand=depCPUnextTrans->getCommand(); + if (depCPUnextCommand->getTask()!=depTask){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent task not yet scheduled on dependent CPU" << std::endl; +#endif + + depCPU->truncateAndAddNextTransAt(transLET->getEndTime()); +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent transaction truncated" << std::endl; +#endif + } + }else{ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: schedule dependent CPU " << depCPU->toString() << std::endl; +#endif + depCPU->schedule(); + } + } + } + } + } +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: invoke schedule on executing CPU" << std::endl; +#endif + /*if (aRescheduleCoresFlag){ + for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + if (*i!=cpuLET) (*i)->truncateIfNecessary(transLET->getEndTime()); + } + for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + if (*i!=cpuLET) (*i)->rescheduleIfNecessary(); + } + }*/ + cpuLET->schedule(); +#ifdef LISTENERS_ENABLED + NOTIFY_TIME_ADVANCES(transLET->getEndTime()); +#endif + } + oLastTrans=transLET; + //std::cout << "kernel:simulate: getTransLowestEndTime" << std::endl; + transLET=getTransLowestEndTime(cpuLET); + //_syncInfo->_server->sendReply("Sleep once again\n"); + //sleep(1); + } + + bool aSimCompleted = (transLET==0 && !_simComp->getStoppedOnAction()); + + if (aSimCompleted){ +#ifdef LISTENERS_ENABLED + NOTIFY_SIM_STOPPED(); + NOTIFY_EVALUATE(); +#endif + _longRunTime = max(_longRunTime, SchedulableDevice::getSimulatedTime()); + _shortRunTime = min(_shortRunTime, SchedulableDevice::getSimulatedTime()); + //_simComp->showTaskStates(); + } + return (aSimCompleted); +} + +const std::string Simulator::getArgs(const std::string& iComp, const std::string& iDefault, int iLen, char** iArgs){ + int aPosition=0; + while (aPosition < iLen){ + if (iComp.compare(iArgs[aPosition])==0){ + if (aPosition+1 < iLen && iArgs[aPosition+1][0]!='-'){ + return std::string(iArgs[aPosition+1]); + }else + return iDefault; + } + aPosition++; + } + return std::string(""); +} + +void Simulator::printHelp(){ + std::cout << "\n************************** Command line arguments *************************\n" + "-gpath specify path for graph output\n" + "-server launch simulator in server mode\n" + "-file read simulation commands from file\n" + "-help display this help text\n" + "-ohtml ofile simulate and write traces to ofile in html format\n" + "-otxt ofile simulate and write traces to ofile in text format\n" + "-ovcd ofile simulate and write traces to ofile in vcd format\n" + "-ograph ofile simulate and write traces to ofile in aut format\n" + "-explo generate the reachability graph \n" + "-cmd \'c1 p1 p2;c2\' execute commands c1 with parameters p1 and p2 and c2\n" + "-oxml ofile xml reply is written to ofile, in case the -cmd option is used\n" + "***************************************************************************\n\n"; +} + +void Simulator::run(){ + std::string* aNewCmd; + std::cout << "Running in server mode.\n"; + while (!_syncInfo->_terminate){ + //pthread_mutex_lock (&_syncInfo->_mutexConsume); + //std::cout << "Simulator Waiting for cmd\n"; + aNewCmd=_syncInfo->popCommand(); + //decodeCommand(_syncInfo->_command); + //std::cout << "Let's crash.\n"; + decodeCommand(*aNewCmd); + //std::cout << "Returned from decode.\n"; + //std::cout << "Before delete.\n"; + delete aNewCmd; + //pthread_mutex_unlock (&_syncInfo->_mutexProduce); + } + std::cout << "Simulator loop terminated." << std::endl; +} + +ServerIF* Simulator::run(int iLen, char ** iArgs){ + std::string aArgString; + std::cout << "Starting up...\n"; + _graphOutPath = getArgs("-gpath", "", iLen, iArgs); + if (_graphOutPath.length()>0 && _graphOutPath[_graphOutPath.length()-1]!='/') + _graphOutPath+="/"; + aArgString =getArgs("-server", "server", iLen, iArgs); + if (!aArgString.empty()) return new Server(); + aArgString =getArgs("-file", "file", iLen, iArgs); + if (!aArgString.empty()) return new ServerLocal(aArgString); + aArgString =getArgs("-explo", "file", iLen, iArgs); + std::cout << "Just analyzed explo 1->" + aArgString + "<-\n"; + if (!aArgString.empty()) decodeCommand("1 7 100 100"); + std::cout << "Just analyzed explo 2\n"; + //if (!aArgString.empty()) return new ServerExplore(); + std::cout << "Running in command line mode.\n"; + _replyToServer = false; + aArgString =getArgs("-help", "help", iLen, iArgs); + if (aArgString.empty()){ + //aArgString =getArgs("-explo", "explo", iLen, iArgs); + aArgString =getArgs("-cmd", "1 0", iLen, iArgs); + if (aArgString.empty()){ + TMLTransaction* oLastTrans; + simulate(oLastTrans); + aArgString=getArgs("-ohtml", "scheduling.html", iLen, iArgs); + if (!aArgString.empty()) schedule2HTML(aArgString); + aArgString=getArgs("-otxt", "scheduling.txt", iLen, iArgs); + if (!aArgString.empty()) schedule2TXT(aArgString); + aArgString=getArgs("-ovcd", "scheduling.vcd", iLen, iArgs); + if (!aArgString.empty()) schedule2VCD(aArgString); + aArgString=getArgs("-ograph", "scheduling.aut", iLen, iArgs); + if (!aArgString.empty()) schedule2Graph(aArgString); + _simComp->streamBenchmarks(std::cout); + std::cout << "Simulated time: " << SchedulableDevice::getSimulatedTime() << " time units.\n"; + }else{ + std::ofstream aXmlOutFile; + std::string aXmlFileName = getArgs("-oxml", "reply.xml", iLen, iArgs); + if (aXmlFileName.empty()) aXmlOutFile.open("/dev/null"); else aXmlOutFile.open(aXmlFileName.c_str()); + if (aXmlOutFile.is_open()){ + std::string aNextCmd; + std::istringstream iss(aArgString+";"); + getline(iss, aNextCmd, ';'); + while (!(iss.eof() || aNextCmd.empty())){ + std::cout << "next cmd to execute: \"" << aNextCmd << "\"\n"; + decodeCommand(aNextCmd, aXmlOutFile); + getline(iss, aNextCmd, ';'); + } + aXmlOutFile.close(); + }else + std::cout << "XML output file could not be opened, aborting.\n"; + } + rusage res; + getrusage(RUSAGE_SELF, &res); + //std::cerr << res.ru_utime.tv_sec << "," << res.ru_utime.tv_usec << "," << res.ru_stime.tv_sec << "," << res.ru_stime.tv_usec << "\n"; + double aRunTime = ((double)((res.ru_utime.tv_sec + res.ru_stime.tv_sec) *1000000 + res.ru_utime.tv_usec + res.ru_stime.tv_usec))/1000000; + std::cerr << "trans/sec: " << ((double)SchedulableDevice::getOverallTransNo())/aRunTime << "\n"; + std::cerr << "cycles/trans: " << ((double)SchedulableDevice::getOverallTransSize())/((double)SchedulableDevice::getOverallTransNo()) << "\n"; + std::cerr << "Trans size: " << SchedulableDevice::getOverallTransSize() << " trans no: " << SchedulableDevice::getOverallTransNo() << "\n"; + std::cerr << "Statement coverage of application: " << TMLCommand::getCmdCoverage() << "%\n"; + std::cerr << "Branch coverage of application: " << TMLCommand::getBranchCoverage() << "%\n"; + }else{ + printHelp(); + } + //clock_t tick =sysconf(_SC_CLK_TCK); + //tms test; + //times(&test); + //std::cout << "user time: " << test.tms_utime << " system time: " << test.tms_stime + test.tms_cstime << " tick: " << tick << "\n"; + return 0; +} + +void Simulator::decodeCommand(std::string iCmd, std::ostream& iXmlOutStream){ + //std::cout << "Not crashed. I: " << iCmd << std::endl; + //std::cout << iCmd << std::endl; + unsigned int aCmd, aParam1, aParam2, anErrorCode=0; + //std::string anIssuedCmd(iCmd); + std::istringstream aInpStream(iCmd); + //std::cout << "Not crashed. II\n"; + std::ostringstream aGlobMsg, anEntityMsg, anAckMsg; + std::string aStrParam; + //bool aSimTerminated=false; + //std::cout << "Not crashed. III\n"; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + _simComp->setStopFlag(false,""); + //anEntityMsg.str(""); + aGlobMsg << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl /*<< TAG_REPLYo << anIssuedCmd << TAG_REPLYc << std::endl*/; + aInpStream >> aCmd; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + //std::cout << "Decoding command:" << iCmd << std::endl; + switch (aCmd){ + case 0: //Quit simulation + std::cout << "QUIT SIMULATION" << std::endl; + break; + case 1:{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + _busy=true; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + anAckMsg << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << /*TAG_REPLYo << anIssuedCmd << TAG_REPLYc << std::endl<< */ TAG_MSGo << "Command received" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl << TAG_STATUSo << SIM_BUSY << TAG_STATUSc << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + if (_replyToServer) { + if (_syncInfo != NULL) + if (_syncInfo->_server != NULL) + _syncInfo->_server->sendReply(anAckMsg.str()); + } + aInpStream >> aParam1; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + TMLTransaction* oLastTrans; + switch (aParam1){ + case 0: //Run to next breakpoint + std::cout << "Run to next breakpoint." << std::endl; + aGlobMsg << TAG_MSGo << "Run to next breakpoint" << TAG_MSGc << std::endl; + _simTerm=runToNextBreakpoint(oLastTrans); + std::cout << "End Run to next breakpoint." << std::endl; + break; + case 1: //Run up to trans x + std::cout << "Run to transaction x." << std::endl; + aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + anErrorCode=1; + std::cout << "End Run to transaction x." << std::endl; + break; + case 2: //Run x transactions + std::cout << "Run x transactions." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXTransactions(_simComp,aParam2); + aGlobMsg << TAG_MSGo << "Created listener run " << aParam2 << " transactions" << TAG_MSGc << std::endl; + _simTerm=runXTransactions(aParam2, oLastTrans); + std::cout << "Run x transactions." << std::endl; + break; + case 3: //Run up to command x + std::cout << "Run to command x." << std::endl; + aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + anErrorCode=1; + std::cout << "End Run to command x." << std::endl; + break; + case 4: //Run x commands + std::cout << "Run x commands." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXCommands(_simComp,aParam2); + aGlobMsg << TAG_MSGo << "Created listener run " << aParam2 << " commands" << TAG_MSGc << std::endl; + _simTerm=runXCommands(aParam2, oLastTrans); + std::cout << "End Run x commands." << std::endl; + break; + case 5: //Run up to time x + std::cout << "Run to time x." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXTimeUnits(_simComp,aParam2); + aGlobMsg << TAG_MSGo << "Created listener run to time " << aParam2 << TAG_MSGc << std::endl; + _simTerm=runTillTimeX(aParam2, oLastTrans); + std::cout << "End Run to time x." << std::endl; + break; + case 6: //Run for x time units + std::cout << "Run for x time units." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXTimeUnits(_simComp,aParam2+SchedulableDevice::getSimulatedTime()); + aGlobMsg << TAG_MSGo << "Created listener run " << aParam2 << " time units" << TAG_MSGc << std::endl; + _simTerm=runXTimeUnits(aParam2, oLastTrans); + std::cout << "End Run for x time units." << std::endl; + break; + case 7: {//Explore Tree + //for (int i=0; i<RECUR_DEPTH; i++) leafsForLevel[i]=0; + std::cout << "Explore tree." << std::endl; + _commandCoverage=100; _branchCoverage=100; + aInpStream >> _commandCoverage; + aInpStream >> _branchCoverage; + std::stringstream aPath; + aPath << _graphOutPath << "tree.dot"; + std::ofstream myDOTfile (aPath.str().c_str()); + aPath.str(""); + aPath << _graphOutPath << "tree.aut.tmp"; + std::ofstream myAUTfile (aPath.str().c_str()); + aPath.str(""); + //std::ofstream myfile2 ("tree.txt"); + if (myDOTfile.is_open() && myAUTfile.is_open()){ +//#ifdef DOT_GRAPH_ENABLED + myDOTfile << "digraph BCG {\nsize = \"7, 10.5\";\ncenter = TRUE;\nnode [shape = circle];\n0 [peripheries = 2];\n"; +//#endif + unsigned int aTransCounter=0; + _terminateExplore=false; + exploreTree(0, 0, myDOTfile, myAUTfile, aTransCounter); +//#ifdef DOT_GRAPH_ENABLED + myDOTfile << "}\n"; + //system ("mv tree tree.dot"); + myDOTfile.close(); +//#else + myAUTfile.close(); + aPath.str(""); + aPath << _graphOutPath << "header"; + std::ofstream myTMPfile (aPath.str().c_str()); + if (myTMPfile.is_open()){ + //des (0, 29, 27) + myTMPfile << "des(0," << aTransCounter << "," << TMLTransaction::getID() << ")\n"; + myTMPfile.close(); + //system ("cat header tree.aut.tmp > tree.aut"); + //system ("rm header tree.aut.tmp"); + aPath.str(""); + aPath << "cat " << _graphOutPath << "header " << _graphOutPath << "tree.aut.tmp > " << _graphOutPath << "tree.aut"; + system(aPath.str().c_str()); + aPath.str(""); + aPath << "rm " << _graphOutPath << "header " << _graphOutPath << "tree.aut.tmp"; + system(aPath.str().c_str()); + } +//#endif + //myfile2.close(); + } + aGlobMsg << TAG_MSGo << "Tree was explored" << TAG_MSGc << std::endl; + _simTerm=true; + //aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + //anErrorCode=1; + std::cout << "** Longest runtime: " << _longRunTime << ", shortest runtime: " << _shortRunTime << " **\n"; + std::cout << "End Explore tree." << std::endl; + break; + } + case 8:{//Run to next transfer on bus x + std::cout << "Run to next transfer on bus x." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getBusByName(aStrParam)); + SchedulableCommDevice* aBus=_simComp->getBusByName(aStrParam); + if (aBus!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on Bus " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToBusTrans(aBus, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run to next transfer on bus x." << std::endl; + break; + } + case 9:{//Run until CPU x executes + std::cout << "Run until CPU x executes." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getCPUByName(aStrParam)); + SchedulableDevice* aCPU=_simComp->getCPUByName(aStrParam); + if (aCPU!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on CPU " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToCPUTrans(aCPU, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until CPU x executes." << std::endl; + break; + } + case 10:{//Run until Task x executes + std::cout << "Run until Task x executes." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getTaskByName(aStrParam)); + TMLTask* aTask=_simComp->getTaskByName(aStrParam); + if (aTask!=0){ + aGlobMsg << TAG_MSGo << "Created listener on Task " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToTaskTrans(aTask, oLastTrans); + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until Task x executes." << std::endl; + break; + } + case 11:{//Run until Mem x is accessed + std::cout << "Run until Mem x is accessed." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getSlaveByName(aStrParam)); + Slave* aSlave=_simComp->getSlaveByName(aStrParam); + if (aSlave!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on Slave " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToSlaveTrans(aSlave, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until Mem x is accessed." << std::endl; + break; + } + case 12:{//Run until operation on channel x is performed + std::cout << "Run until operation on channel x is performed." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getChannelByName(aStrParam)); + TMLChannel* aChannel=_simComp->getChannelByName(aStrParam); + if (aChannel!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on Channel " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToChannelTrans(aChannel, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until operation on channel x is performed." << std::endl; + break; + } + case 13:{//Run to next random choice command + std::cout << "Run to next random command." << std::endl; + _simTerm=runToNextRandomCommand(oLastTrans); + std::cout << "End Run to next random choice command." << std::endl; + break; + } + case 14:{//Run until condition is satisfied + std::cout << "Run until condition is satisfied." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask=_simComp->getTaskByName(aStrParam); + if (aTask!=0){ + bool aSuccess, aTerminated; + aInpStream >> aStrParam; + aTerminated = runUntilCondition(aStrParam, aTask, oLastTrans, aSuccess); + if (aSuccess){ + _simTerm=aTerminated; + aGlobMsg << TAG_MSGo << "Created listeners for condition " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CONDERR << TAG_MSGc << std::endl; + anErrorCode=5; + } + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until condition is satisfied." << std::endl; + break; + } + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + } + gettimeofday(&aEnd,NULL); + _simDuration += getTimeDiff(aBegin,aEnd); + aGlobMsg << TAG_SIMDURo << _simDuration << TAG_SIMDURc << std::endl; + //std::cout << "Before sim\n"; + if (anErrorCode==0){ + //aGlobMsg << TAG_CURRTASKo << oLastTrans->getCommand()->getTask()->getID() << TAG_CURRTASKc; + //simulate(); + //aGlobMsg << + std::cout << "Simulated time: " << SchedulableDevice::getSimulatedTime() << " time units.\n"; + } + _busy=false; + break; + } + case 2: //reset + std::cout << "Simulator reset." << std::endl; + _wasReset=true; + _simComp->reset(); + _simComp->resetStateHash(); + _simTerm=false; + _simDuration=0; + aGlobMsg << TAG_MSGo << "Simulator reset" << TAG_MSGc << std::endl; + std::cout << "End Simulator reset." << std::endl; + break; + case 3:{//Print variable x + std::cout << "Print variable x." << std::endl; + aInpStream >> aStrParam; + if (aStrParam=="all"){ + //for(TaskList::const_iterator i=_simComp->getTaskIterator(false); i !=_simComp->getTaskIterator(true); ++i){ + for(TaskList::const_iterator i=_simComp->getTaskList().begin(); i !=_simComp->getTaskList().end(); ++i){ + printVariablesOfTask(*i, anEntityMsg); + } + }else{ + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + //std::cout << "Task " << aStrParam << " exists" << std::endl; + aInpStream >> aStrParam; + if (aStrParam=="all"){ + printVariablesOfTask(aTask, anEntityMsg); + }else{ + //std::cout << "Check if Var *" << aStrParam << "* exists" << std::endl; + //std::cout << "Len: " << aStrParam.length() << std::endl; + bool aIsId; + ParamType* aParam=aTask->getVariableByName(aStrParam, aIsId); + if (aParam!=0){ + aGlobMsg << TAG_MSGo << "Variable values" << TAG_MSGc << std::endl; + anEntityMsg << TAG_TASKo << " id=\"" << aTask-> getID() << "\" name=\"" << aTask->toString() << "\">" << TAG_VARo; + if (aIsId) anEntityMsg << " id=\""; else anEntityMsg << " name=\""; + anEntityMsg << aStrParam << "\">" << *aParam << TAG_VARc << TAG_TASKc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + } + } + std::cout << "End Print variable x." << std::endl; + break; + } + case 4:{//Print information about simulation element x + //bool aFailure=false; + std::cout << "Print information about simulation element x." << std::endl; + aInpStream >> aParam1; + aInpStream >> aStrParam; + anErrorCode=0; + switch (aParam1){ + case 0: {//CPU + TraceableDevice* aDevice = dynamic_cast<TraceableDevice*>(_simComp->getCPUByName(aStrParam)); + if (aDevice!=0) aDevice->streamStateXML(anEntityMsg); else anErrorCode=2; + break; + } + case 1: {//Bus + TraceableDevice* aDevice = dynamic_cast<TraceableDevice*>(_simComp->getBusByName(aStrParam)); + if (aDevice!=0) aDevice->streamStateXML(anEntityMsg); else anErrorCode=2; + break; + } + case 2: //Mem + case 3: //Bridge + anErrorCode=1; + break; + case 4:{ //Channel + TMLChannel* aDevice = _simComp->getChannelByName(aStrParam); + if (aDevice!=0){ + std::cout << "get Channel info" << std::endl; + aDevice->streamStateXML(anEntityMsg); + }else anErrorCode=2; + break; + } + case 5: {//Task + TraceableDevice* aDevice = dynamic_cast<TraceableDevice*>(_simComp->getTaskByName(aStrParam)); + if (aDevice!=0) aDevice->streamStateXML(anEntityMsg); else anErrorCode=2; + break; + } + default:anErrorCode=3; + } + switch(anErrorCode){ + case 0: + aGlobMsg << TAG_MSGo << "Component information" << TAG_MSGc << std::endl; + break; + case 1: + aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + break; + case 2: + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + break; + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + break; + } + std::cout << "End Print information about simulation element x." << std::endl; + break; + } + case 5:{//Set variable x to value y + std::cout << "Set variable x to value y." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aStrParam; + bool aIsId; + ParamType* aParam=aTask->getVariableByName(aStrParam, aIsId); + if (aParam!=0){ + aInpStream >> *aParam; + aGlobMsg << TAG_MSGo << "Set variable " << aStrParam << " to " << *aParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Set variable x to value y." << std::endl; + break; + } + case 6:{ //Write x samples/events to channel y + std::cout << "Write x samples/events to channel y." << std::endl; + //aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + //anErrorCode=1; + aInpStream >> aStrParam; + TMLChannel* aChannel = _simComp->getChannelByName(aStrParam); + if (aChannel==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aParam1; + TMLEventChannel* anEventChannel = dynamic_cast<TMLEventChannel*>(aChannel); + if (anEventChannel==0){ + //aChannel->insertSamples(aParam1, anInsertParam); + aChannel->insertSamples(aParam1, 0); + }else{ + //Parameter<ParamType> anInsertParam((dynamic_cast<TMLEventChannel*>(aChannel))->getParamNo()); + Parameter* anInsertParam = anEventChannel->buildParameter(); + aInpStream >> anInsertParam; + //aChannel->insertSamples(aParam1, anInsertParam); + aChannel->insertSamples(aParam1, anInsertParam); + } + aGlobMsg << TAG_MSGo << "Write data/event to channel." << TAG_MSGc << std::endl; + } + std::cout << "End Write x samples/events to channel y." << std::endl; + break; + } + case 7: //Save trace in file x + std::cout << "Save trace in file x." << std::endl; + aInpStream >> aParam1; + aInpStream >>aStrParam; + switch (aParam1){ + case 0: //VCD + aGlobMsg << TAG_MSGo << "Schedule output in VCD format" << TAG_MSGc << std::endl; + schedule2VCD(aStrParam); + break; + case 1: //HTML + aGlobMsg << TAG_MSGo << "Schedule output in HTML format" << TAG_MSGc << std::endl; + schedule2HTML(aStrParam); + break; + case 2: //TXT + aGlobMsg << TAG_MSGo << "Schedule output in TXT format" << TAG_MSGc << std::endl; + schedule2TXT(aStrParam); + break; + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + } + std::cout << "End Save trace in file x." << std::endl; + break; + case 8:{ //Save simulation state in file x + std::cout << "Save simulation state in file x." << std::endl; + aInpStream >> aStrParam; + std::ofstream aFile (aStrParam.c_str()); + if (aFile.is_open()){ + _simComp->writeObject(aFile); + aGlobMsg << TAG_MSGo << "Simulation state saved in file " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_FILEERR << aStrParam << TAG_MSGc << std::endl; + anErrorCode=4; + } + std::cout << "End Save simulation state in file x." << std::endl; + break; + } + case 9:{//Restore simulation state from file x + std::cout << "Restore simulation state from file x." << std::endl; + aInpStream >> aStrParam; + std::ifstream aFile(aStrParam.c_str()); + if (aFile.is_open()){ + _simTerm=false; + _simComp->reset(); + _simComp->readObject(aFile); + aGlobMsg << TAG_MSGo << "Simulation state restored from file " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_FILEERR << aStrParam << TAG_MSGc << std::endl; + anErrorCode=4; + } + std::cout << "End Restore simulation state from file x." << std::endl; + break; + } + case 10:{ //Save benchmarks in file x + std::cout << "Save benchmarks in file x." << std::endl; + aInpStream >> aParam1; + switch (aParam1){ + case 0: _simComp->streamBenchmarks(std::cout); + aGlobMsg << TAG_MSGo << "Benchmarks written to screen " << TAG_MSGc << std::endl; + break; + case 1:{ + aInpStream >> aStrParam; + std::ofstream aFile (aStrParam.c_str()); + if (aFile.is_open()){ + _simComp->streamBenchmarks(aFile); + aGlobMsg << TAG_MSGo << "Benchmarks written to file " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_FILEERR << aStrParam << TAG_MSGc << std::endl; + anErrorCode=4; + } + break; + } + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + } + std::cout << "End Save benchmarks in file x." << std::endl; + break; + } + case 11:{//Set breakpoint in task x, command y + std::cout << "Set breakpoint in task x, command y." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aParam2; + TMLCommand* aCommand=aTask->getCommandByID(aParam2); + if (aCommand!=0){ + aCommand->setBreakpoint(new Breakpoint(_simComp)); + _breakpoints.insert(aCommand); + aGlobMsg << TAG_MSGo << "Breakpoint was created" << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Set breakpoint in task x, command y." << std::endl; + break; + } + case 12:{//Choose branch + std::cout << "Choose branch." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aParam1; + //TMLChoiceCommand* aChoiceCmd=dynamic_cast<TMLChoiceCommand*>(aTask->getCommandByID(aParam1)); + IndeterminismSource* aRandomCmd=dynamic_cast<IndeterminismSource*>(aTask->getCommandByID(aParam1)); + if (aRandomCmd!=0){ + aInpStream >> aParam2; + //aChoiceCmd->setPreferredBranch(aParam2); + aRandomCmd->setRandomValue(aParam2); + aGlobMsg << TAG_MSGo << "Preferred branch was set" << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Choose branch." << std::endl; + break; + } + case 16:{//Delete breakpoint in task x, command y + std::cout << "Delete breakpoint in task x, command y." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + + aInpStream >> aParam2; + TMLCommand* aCommand=aTask->getCommandByID(aParam2); + if (aCommand!=0){ + aCommand->removeBreakpoint(); + _breakpoints.erase(aCommand); + aGlobMsg << TAG_MSGo << "Breakpoint was removed" << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Delete breakpoint in task x, command y." << std::endl; + break; + } + case 17:{//Get number of branches of current cmd + std::cout << "Get number of branches of current cmd." << std::endl; + IndeterminismSource* aRandomCmd =_simComp->getCurrentRandomCmd(); + if (aRandomCmd==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + unsigned int aNbNextCmds; + aNbNextCmds = aRandomCmd->getRandomRange(); + TMLCommand* aCmd = dynamic_cast<TMLCommand*>(aRandomCmd); + anEntityMsg << TAG_TASKo << " id=\"" << aCmd->getTask()-> getID() << "\" name=\"" << aCmd->getTask()->toString() << "\">" << TAG_CURRCMDo << " id=\"" << aCmd->getID() << "\">" << TAG_BRANCHo << aNbNextCmds << TAG_BRANCHc << "\">" << TAG_CURRCMDc << TAG_TASKc << std::endl; + aGlobMsg << TAG_MSGo << "Current choice command" << TAG_MSGc << std::endl; + } + std::cout << "End Get number of branches of current cmd." << std::endl; + break; + } + case 18:{//Get breakpoint list + std::cout << "Get breakpoint list." << std::endl; + for(BreakpointSet::iterator i=_breakpoints.begin(); i != _breakpoints.end(); ++i){ + anEntityMsg << TAG_TASKo << " id=\"" << (*i)->getTask()->getID() << "\" name=\"" << (*i)->getTask()->toString() << "\">" << TAG_BREAKCMDo << " id=\"" << (*i)->getID() << "\">" << TAG_BREAKCMDc << TAG_TASKc << std::endl; + } + aGlobMsg << TAG_MSGo << "Breakpoint List" << TAG_MSGc << std::endl; + std::cout << "End Get breakpoint list." << std::endl; + break; + } + case 19://Get Hash Value + std::cout << "Get Hash Value." << std::endl; + aGlobMsg << TAG_HASHo << _simComp->getHashValue() << TAG_HASHc << TAG_MSGo << "Hash Value Notification" << TAG_MSGc << std::endl; + std::cout << "End Get Hash Value." << std::endl; + break; + case 20://Enable Breakpoints + std::cout << "Enable Breakpoints." << std::endl; + aInpStream >> aParam1; + if (aParam1==0){ + aGlobMsg << TAG_MSGo << "Breakpoints are disabled." << TAG_MSGc << std::endl; + Breakpoint::setEnabled(false); + }else{ + aGlobMsg << TAG_MSGo << "Breakpoints are enabled." << TAG_MSGc << std::endl; + Breakpoint::setEnabled(true); + } + std::cout << "End Enable Breakpoints." << std::endl; + break; + case 21://Get execution statistics of commands + std::cout << "Get execution statistics of commands." << std::endl; + TMLCommand::streamStateXML(aGlobMsg); + std::cout << "End Get execution statistics of commands." << std::endl; + break; + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + + } + aGlobMsg << TAG_ERRNOo << anErrorCode << TAG_ERRNOc << std::endl; + //if (aSimTerminated) aGlobMsg << SIM_TERM; else aGlobMsg << SIM_READY; + writeSimState(aGlobMsg); + aGlobMsg << std::endl << TAG_GLOBALc << std::endl << anEntityMsg.str() << TAG_STARTc << std::endl; + //std::cout << "Before reply." << std::endl; + if (_replyToServer) + if (_syncInfo->_server != NULL) + _syncInfo->_server->sendReply(aGlobMsg.str()); else iXmlOutStream << aGlobMsg.str() << "\n"; + //std::cout << "End of command decode procedure." << std::endl; + //std::cout << "Command: " << aCmd << " Param1: " << aParam1 << " Param2: " << aParam2 << std::endl; +} + +void Simulator::printVariablesOfTask(TMLTask* iTask, std::ostream& ioMessage){ + //if (iTask->getVariableIteratorID(false)==iTask->getVariableIteratorID(true)) return; + if (iTask->getVariableLookUpTableID().size()>0){ + ioMessage << TAG_TASKo << " id=\"" << iTask-> getID() << "\" name=\"" << iTask->toString() << "\">" << std::endl; + //for(VariableLookUpTableID::const_iterator i=iTask->getVariableIteratorID(false); i !=iTask->getVariableIteratorID(true); ++i){ + for(VariableLookUpTableID::const_iterator i=iTask->getVariableLookUpTableID().begin(); i !=iTask->getVariableLookUpTableID().end(); ++i){ + ioMessage << TAG_VARo << " id=\"" << i->first << "\">" << *(i->second) << TAG_VARc << std::endl; + } + ioMessage << TAG_TASKc << std::endl; + } +} + +bool Simulator::runToNextBreakpoint(TMLTransaction*& oLastTrans){ + //TestListener myListener(_simComp); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->registerListener(&myListener); + //_simComp->getChannelByName("DIPLODOCUSDesign__evt")->registerListener(&myListener); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->getCommandByID(17)->registerListener(&myListener); + bool erg=simulate(oLastTrans); + //return simulate(oLastTrans); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->removeListener(&myListener); + //_simComp->getChannelByName("DIPLODOCUSDesign__evt")->removeListener(&myListener); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->getCommandByID(17)->removeListener(&myListener); + return erg; +} + +bool Simulator::runXTransactions(unsigned int iTrans, TMLTransaction*& oLastTrans){ + RunXTransactions aListener(_simComp, iTrans); + return simulate(oLastTrans); +} + +bool Simulator::runXCommands(unsigned int iCmds, TMLTransaction*& oLastTrans){ + RunXCommands aListener(_simComp,iCmds); + bool test=simulate(oLastTrans); + if (test) std::cout << "Simulate returned end" << std::endl; + return test; +} + +bool Simulator::runTillTimeX(TMLTime iTime, TMLTransaction*& oLastTrans){ + RunXTimeUnits aListener(_simComp,iTime); + return simulate(oLastTrans); +} + +bool Simulator::runXTimeUnits(TMLTime iTime, TMLTransaction*& oLastTrans){ + RunXTimeUnits aListener(_simComp,iTime+SchedulableDevice::getSimulatedTime()); + return simulate(oLastTrans); +} + +bool Simulator::runToBusTrans(SchedulableCommDevice* iBus, TMLTransaction*& oLastTrans){ + //ListenerSubject <TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (iBus); + ListenerSubject <GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iBus); + RunTillTransOnDevice aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToCPUTrans(SchedulableDevice* iCPU, TMLTransaction*& oLastTrans){ + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (iCPU); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iCPU); + RunTillTransOnDevice aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToTaskTrans(TMLTask* iTask, TMLTransaction*& oLastTrans){ + //ListenerSubject<TaskListener>* aSubject= static_cast<ListenerSubject<TaskListener>* > (iTask); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iTask); + RunTillTransOnTask aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToSlaveTrans(Slave* iSlave, TMLTransaction*& oLastTrans){ + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (iSlave); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iSlave); + RunTillTransOnDevice aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToChannelTrans(TMLChannel* iChannel, TMLTransaction*& oLastTrans){ + //ListenerSubject<ChannelListener>* aSubject= static_cast<ListenerSubject<ChannelListener>* > (iChannel); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iChannel); + RunTillTransOnChannel aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToNextRandomCommand(TMLTransaction*& oLastTrans){ + _randChoiceBreak.setEnabled(true); + //_randChoiceBreak->setEnabled(true); + bool aSimTerminated=simulate(oLastTrans); + _randChoiceBreak.setEnabled(false); + //_randChoiceBreak->setEnabled(false); + return aSimTerminated; +} + +bool Simulator::runUntilCondition(std::string& iCond, TMLTask* iTask, TMLTransaction*& oLastTrans, bool& oSuccess){ + CondBreakpoint aListener(_simComp, iCond, iTask); + oSuccess=aListener.conditionValid(); + //return simulate(oLastTrans); + //aListener.commandEntered(0); + if (oSuccess) return simulate(oLastTrans); else return false; +} + +void Simulator::exploreTree(unsigned int iDepth, ID iPrevID, std::ofstream& iDOTFile, std::ofstream& iAUTFile, unsigned int& oTransCounter){ + TMLTransaction* aLastTrans; + //if (iDepth<RECUR_DEPTH){ + ID aLastID; + bool aSimTerminated=false; + IndeterminismSource* aRandomCmd; + do{ + aSimTerminated=runToNextRandomCommand(aLastTrans); + aRandomCmd = _simComp->getCurrentRandomCmd(); + }while (!aSimTerminated && aRandomCmd==0 && _simComp->wasKnownStateReached()==0); +#ifdef EXPLOGRAPH_ENABLED + aLastID = schedule2GraphDOT(iDOTFile, iAUTFile, iPrevID,oTransCounter); +#endif + if(aSimTerminated){ + oTransCounter++; +//#ifdef DOT_GRAPH_ENABLED + iDOTFile << aLastID << " -> " << TMLTransaction::getID() << " [label = \"i(allCPUsTerminated<" << SchedulableDevice::getSimulatedTime() << ">)\"]\n"; +//#else + //(21,"i(allCPUsTerminated)", 25) + iAUTFile << "(" << aLastID << "," << "\"i(allCPUsTerminated<" << SchedulableDevice::getSimulatedTime() << ">)\"," << TMLTransaction::getID() << ")\n"; +//#endif + TMLTransaction::incID(); + + if(_commandCoverage <= TMLCommand::getCmdCoverage() && _branchCoverage <= TMLCommand::getBranchCoverage()){ + _simComp->setStopFlag(true, MSG_COVREACHED); + _terminateExplore=true; + //_syncInfo->_terminate=true; + } + }else if (_simComp->wasKnownStateReached()==0){ + if(aRandomCmd==0){ + std::cout << "We should never get here\n"; + }else{ + unsigned int aNbNextCmds; + std::stringstream aStreamBuffer; + std::string aStringBuffer; + aNbNextCmds = aRandomCmd->getRandomRange(); + //std::cout << "Simulation " << iPrevID << "_" << aMyID << "continued " << aNbNextCmds << std::endl; + _simComp->writeObject(aStreamBuffer); + aStringBuffer=aStreamBuffer.str(); + if ((aNbNextCmds & INT_MSB)==0){ + //for (unsigned int aBranch=0; aBranch<aNbNextCmds && !_syncInfo->_terminate; aBranch++){ + for (unsigned int aBranch=0; aBranch<aNbNextCmds && !_terminateExplore; aBranch++){ + _simComp->reset(); + aStreamBuffer.str(aStringBuffer); + //std::cout << "Read 1 in exploreTree\n"; + _simComp->readObject(aStreamBuffer); + aRandomCmd->setRandomValue(aBranch); + exploreTree(iDepth+1, aLastID, iDOTFile, iAUTFile, oTransCounter); + } + }else{ + unsigned int aBranch=0; + aNbNextCmds ^= INT_MSB; + //while (aNbNextCmds!=0 && !_syncInfo->_terminate){ + while (aNbNextCmds!=0 && !_terminateExplore){ + if ((aNbNextCmds & 1)!=0){ + _simComp->reset(); + aStreamBuffer.str(aStringBuffer); + //std::cout << "Read 2 in exploreTree\n"; + _simComp->readObject(aStreamBuffer); + aRandomCmd->setRandomValue(aBranch); + exploreTree(iDepth+1, aLastID, iDOTFile, iAUTFile, oTransCounter); + } + aBranch++; aNbNextCmds >>=1; + } + } + } + //}else{ + //iFile << "Simulation " << iPrevID << "_" << aMyID << " encountered known state " << aCurrState << std::endl; + //13 -> 17 [label = "i(CPU0__test1__TMLTask_1__wro__test1__ch<4 ,4>)"]; + //iFile << aLastID << " -> " << aLastID << " [label = \"i\"]\n"; + + /*ID aNewID = TMLTransaction::getID(); + TMLTransaction::incID(); + iFile << aLastID << " -> " << aNewID << " [label = \"option\"]\n"; + std::stringstream aStreamBuffer; + std::string aStringBuffer; + _simComp->writeObject(aStreamBuffer); + aStringBuffer=aStreamBuffer.str(); + _simComp->reset(); + aStreamBuffer.str(aStringBuffer); + _simComp->readObject(aStreamBuffer);*/ + //exploreTree(iDepth, aNewID, iFile/*, iFile2*/); + } + //} +} + +bool Simulator::execAsyncCmd(const std::string& iCmd){ + unsigned int aCmd; + std::istringstream aInpStream(iCmd); + std::string aStrParam; + aInpStream >> aCmd; + std::ostringstream aMessage; + switch (aCmd){ + case 0: //Quit simulation + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << "Simulator terminated" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl << TAG_STATUSo << SIM_BUSY << TAG_STATUSc << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); + _simComp->setStopFlag(true, MSG_SIMSTOPPED); + _syncInfo->_terminate=true; + return false; + case 13://get current time + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_TIMEo << SchedulableDevice::getSimulatedTime() << TAG_TIMEc << std::endl << TAG_MSGo << "Simulation time" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + //if (_busy) aMessage << SIM_BUSY; else aMessage << SIM_READY; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); + break; + case 14:{//get actual command, thread safeness, be careful! + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl; + aInpStream >> aStrParam; + if (aStrParam=="all"){ + //for(TaskList::const_iterator i=_simComp->getTaskIterator(false); i !=_simComp->getTaskIterator(true); ++i){ + for(TaskList::const_iterator i=_simComp->getTaskList().begin(); i !=_simComp->getTaskList().end(); ++i){ + printCommandsOfTask(*i, aMessage); + } + aMessage << TAG_GLOBALo << std::endl << TAG_MSGo << "Current command" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + }else{ + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl; + if (aTask!=0){ + printCommandsOfTask(aTask, aMessage); + aMessage << TAG_GLOBALo << std::endl << TAG_MSGo << "Current command" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + }else{ + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << TAG_ERRNOo << 2; + } + } + //if (_busy) aMessage << SIM_BUSY; else aMessage << SIM_READY; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + std::cout << aMessage.str(); + _syncInfo->_server->sendReply(aMessage.str()); + break; + } + case 15://pause simulation + _simComp->setStopFlag(true, MSG_SIMPAUSED); + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << "Simulation stopped" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); + break; + default: + return false; + } + return true; +} + +void Simulator::printCommandsOfTask(TMLTask* iTask, std::ostream& ioMessage){ + ioMessage << TAG_TASKo << " id=\"" << iTask-> getID() << "\" name=\"" << iTask->toString() << "\">" << TAG_CURRCMDo << " id=\""; + TMLCommand* currCommand=iTask->getCurrCommand(); + //if (iTask->getCurrCommand()==0) + if (currCommand==0){ + ioMessage << 0 << "\">"; + }else{ + ioMessage << currCommand->getID() << "\">" << TAG_PROGRESSo << currCommand->getProgressInPercent() << TAG_PROGRESSc; + ioMessage << TAG_STARTTIMEo << currCommand->getCommandStartTime() << TAG_STARTTIMEc; + TMLTransaction* currTrans = currCommand->getCurrTransaction(); + if (currTrans==0 || currTrans->getOverallLength()==0 || currTrans->getVirtualLength()==0){ + ioMessage << TAG_FINISHTIMEo << "-1" << TAG_FINISHTIMEc; + ioMessage << TAG_FINISHTIMETRANSo << "-1" << TAG_FINISHTIMETRANSc; + ioMessage << TAG_STARTTIMETRANSo << "-1" << TAG_STARTTIMETRANSc; + }else{ + ioMessage << TAG_FINISHTIMEo << (currTrans->getEndTime() + currTrans->getOverallLength()*(currCommand->getLength()-currCommand->getProgress()-currTrans->getVirtualLength())/currTrans->getVirtualLength()) << TAG_FINISHTIMEc; + //if (currCommand->getLength()==currCommand->getProgress()) + //ioMessage << TAG_STARTTIMETRANSo << "99" << TAG_STARTTIMETRANSc; + //else + ioMessage << TAG_STARTTIMETRANSo << currTrans->getStartTime() << TAG_STARTTIMETRANSc; + ioMessage << TAG_FINISHTIMETRANSo << currTrans->getEndTime() << TAG_FINISHTIMETRANSc; + } + unsigned int aNbNextCmds; + TMLCommand** aNextCmds = currCommand->getNextCommands(aNbNextCmds); + for(unsigned int i=0; i<aNbNextCmds; i++){ + ioMessage << TAG_NEXTCMDo << aNextCmds[i]->getID() << TAG_NEXTCMDc; + } + } + ioMessage << TAG_CURRCMDc << TAG_TASKc << std::endl; +} + +void Simulator::sendStatus(){ + std::ostringstream aMessage; + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << "Simulator status notification" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + //if (_busy) aMessage << SIM_BUSY; else aMessage << SIM_READY; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); +} + +bool Simulator::isBusy(){ + return _busy; +} + +void Simulator::writeSimState(std::ostream& ioMessage){ + ioMessage << TAG_STATUSo; + if (_busy){ + ioMessage << SIM_BUSY << TAG_STATUSc; + }else{ + if (_simTerm){ + ioMessage << SIM_TERM << TAG_STATUSc << TAG_REASONo << MSG_SIMENDED << TAG_REASONc; + }else{ + ioMessage << SIM_READY << TAG_STATUSc; + if (_simComp->getStopReason()!="") ioMessage << TAG_REASONo << _simComp->getStopReason() << TAG_REASONc; + } + } +} diff --git a/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Simulator.h b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Simulator.h new file mode 100644 index 0000000000000000000000000000000000000000..67d106e8a33826f836c45c1e37cc5cc552bcde67 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/c++2/src_simulator/sim/Simulator.h @@ -0,0 +1,338 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef SimulatorH +#define SimulatorH + +//#include <Parameter.h> +#include <definitions.h> +#include <GeneralListener.h> +#include <ListenerSubject.h> +#include <ListenersSimCmd.h> +//#include <CPU.h> +//#include <SingleCoreCPU.h> +//#include <RRScheduler.h> +//#include <PrioScheduler.h> +//#include <Bus.h> +//#include <Bridge.h> +//#include <Memory.h> +//#include <TMLbrbwChannel.h> +//#include <TMLnbrnbwChannel.h> +//#include <TMLbrnbwChannel.h> +//#include <TMLEventBChannel.h> +//#include <TMLEventFChannel.h> +//#include <TMLEventFBChannel.h> +//#include <TMLTransaction.h> +//#include <TMLCommand.h> +//#include <TMLTask.h> +//#include <SimComponents.h> +//#include <Server.h> +//#include <SimServSyncInfo.h> +//#include <ListenersSimCmd.h> +#ifdef EBRDD_ENABLED +#include <ERC.h> +#include <ERB.h> +#endif + +class CPU; +class TMLTransaction; +class TMLCommand; +class TMLTask; +class SchedulableCommDevice; + +#define RECUR_DEPTH 20 + +#define MSG_CMPNFOUND "Component not found" +#define MSG_CMDNFOUND "Command not found" +#define MSG_CMDNIMPL "Command currently not implemented" +#define MSG_FILEERR "Cannot open file " +#define MSG_CONDERR "Condition cannot be compiled" +#define MSG_SIMSTOPPED "Simulation stopped" +#define MSG_SIMPAUSED "Simulation paused" +#define MSG_SIMENDED "Simulation completed" +#define MSG_COVREACHED "Coverage reached" +#define SIM_READY "ready" +#define SIM_BUSY "busy" +#define SIM_TERM "term" + +class SimComponents; +class SimServSyncInfo; +class ServerIF; + +///Simulation engine and output capabilities +class Simulator: public ListenerSubject<GeneralListener> { +public: + ///Constructor + /** + \param iSyncInfo Pointer to synchronization info structure + */ + Simulator(SimServSyncInfo* iSyncInfo); + ///Destructor + ~Simulator(); + ///Runs the simulator in server mode + void run(); + ///Runs the simulator in command line mode + /** + \param iLen Number of arguments + \param iArgs Array withe arguments + \return Returns true if simulation could be executed + */ + ServerIF* run(int iLen, char** iArgs); + ///Execute asynchronous command + /** + \param iCmd Command string + */ + bool execAsyncCmd(const std::string& iCmd); + ///Sends simulator status information to client + void sendStatus(); + ///Run simulation until a breakpoint is encountered + /** + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToNextBreakpoint(TMLTransaction*& oLastTrans); + ///Runs the simulation until iTrans transaction have been executed + /** + \param iTrans Number of transactions + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runXTransactions(unsigned int iTrans, TMLTransaction*& oLastTrans); + ///Runs the simulation until iTrans commands have been executed + /** + \param iCmds Number of commands + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runXCommands(unsigned int iCmds, TMLTransaction*& oLastTrans); + ///Runs the simulation until the simulation time is greater or equal than iTime + /** + \param iTime Simulation End Time + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runTillTimeX(TMLTime iTime, TMLTransaction*& oLastTrans); + ///Runs the simulation for iTime time units + /** + \param iTime Number of time units + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runXTimeUnits(TMLTime iTime, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on iBus is executed + /** + \param iBus Pointer to the bus + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToBusTrans(SchedulableCommDevice* iBus, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on iCPU is executed + /** + \param iCPU Pointer to the CPU + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToCPUTrans(SchedulableDevice* iCPU, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction of iTask is executed + /** + \param iTask Pointer to the task + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToTaskTrans(TMLTask* iTask, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on Slave iSlave is executed + /** + \param iSlave Pointer to the Slave + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToSlaveTrans(Slave* iSlave, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on iChannel is executed + /** + \param iChannel Pointer to the Channel + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToChannelTrans(TMLChannel* iChannel, TMLTransaction*& oLastTrans); + ///Runs the simulation until a random choice command is encountered + /** + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToNextRandomCommand(TMLTransaction*& oLastTrans); + ///Runs the simulation until a given condition is satisfied + /** + \param iCond Condition expressed in terms of task variables of a given task + \param iTask Task + \param oLastTrans Returns the last transaction executed during a simulation + \param oSuccess Indicates whether the condition could be compiled and is valid + \return Return value of simulate() function + */ + bool runUntilCondition(std::string& iCond, TMLTask* iTask, TMLTransaction*& oLastTrans, bool& oSuccess); + ///Runs the automatic exploration of several branches of control flow. Choice commands to be explored must be marked with a breakpoint. + /** + \param iDepth Maximal recursion depth + \param iPrevID ID of the parent leaf + \param iDOTFile Handle of DOT file + \param iAUTFile Handle of AUT file + \param oTransCounter Reference to transaction counter + */ + void exploreTree(unsigned int iDepth, ID iPrevID, std::ofstream& iDOTFile, std::ofstream& iAUTFile, unsigned int& oTransCounter); + ///Writes a HTML representation of the schedule of CPUs and buses to an output file + void schedule2HTML(std::string& iTraceFileName) const; + ///Writes simulation traces in VCD format to an output file + /** + \param iTraceFileName Name of the output trace file + */ + void schedule2VCD(std::string& iTraceFileName) const; + ///Writes the simulation graph to an output file + /** + \param iTraceFileName Name of the output trace file + */ + void schedule2Graph(std::string& iTraceFileName) const; + ///Writes the simulation graph to a DOT and AUT file, for exploration mode + /** + \param iDOTFile Handle of DOT file + \param iAUTFile Handle of AUT file + \param iStartState ID of the state to begin with + \param oTransCounter Reference to a transation counter + \return ID of the last state writte to the files + */ + ID schedule2GraphDOT(std::ostream& iDOTFile, std::ostream& iAUTFile, ID iStartState, unsigned int& oTransCounter) const; + ///Writes a plain text representation of the schedule of CPUs to an output file + /** + \param iTraceFileName Name of the output trace file + */ + void schedule2TXT(std::string& iTraceFileName) const; + ///Is true if the simulator is busy + /** + \return Busy flag + */ + bool isBusy(); + ///Returns the time elapsed during simulation since the last reset + /** + \return Simulation duration + */ + inline long getSimDuration(){ return _simDuration;} +protected: + ///Runs the simulation + /** + \return returns true if the simulation is completed, false otherwise + */ + bool simulate(TMLTransaction*& oLastTrans); + ///Returns a pointer to the transaction with the lowest end time proposed by CPU schedulers + /** + \param oResultDevice Pointer to the CPU which is running the returned transaction + \return Pointer to transaction with lowest end time + */ + TMLTransaction* getTransLowestEndTime(SchedulableDevice*& oResultDevice) const; + ///Decodes a simulation command + /** + \param iCmd Pointer to the command + \return Returns false if simulator should be terminated + */ + //inline void decodeCommand(std::string iCmd){std::ofstream aNullStream("/dev/null"); decodeCommand(iCmd, aNullStream);} + void decodeCommand(std::string iCmd, std::ostream& iXmlOutStream=std::cout); + ///Searches for switches in the command line string + /** + \param iComp Command line switch to search for + \param iDefault Default output file name + \param iLen Number of arguments + \param iArgs Array withe arguments + \return File name of output file, string is empty if output not requested + */ + const std::string getArgs(const std::string& iComp, const std::string& iDefault, int iLen, char** iArgs); + ///Print information about simulator command line usage + void printHelp(); + ///Writes information about the current command of a task to the given stream in XML format + /** + \param aTask Pointer to the task + \param ioMessage Output stream + */ + void printCommandsOfTask(TMLTask* aTask, std::ostream& ioMessage); + ///Writes information about task variables to the given stream in XML format + /** + \param aTask Pointer to the task + \param ioMessage Output stream + */ + void printVariablesOfTask(TMLTask* aTask, std::ostream& ioMessage); + ///Writes the current simulator state to a stream + /** + \param ioMessage output stream + */ + void writeSimState(std::ostream& ioMessage); + ///Checks if command may be impacted by a anction on a channel + /** + \param iCh Channel + \param iCmd Command + \return Flag indicating if the command may be impacted + */ + bool channelImpactsCommand(TMLChannel* iCh, TMLCommand* iCmd); + ///Pointer to synchronization structure + SimServSyncInfo* _syncInfo; + ///Pointer to structure encapsulating architecture and application objects + SimComponents* _simComp; + ///Simulator Busy flag + bool _busy; + ///Simulation terminated flag + bool _simTerm; + ///Keeps track of all breakpoints set during the simulation + BreakpointSet _breakpoints; + ///Random choice breakpoint + RunTillNextRandomChoice _randChoiceBreak; + ///Flag indicating if the simulator has previously been reset + bool _wasReset; + ///Graph output path + std::string _graphOutPath; + ///Longest runtime + TMLTime _longRunTime; + ///Shortest runtime + TMLTime _shortRunTime; + ///Flag indicating whether replies should be sent back to the server, not set in command line mode + bool _replyToServer; + ///Branch coverage to target + unsigned int _branchCoverage; + ///Statement coverage to target + unsigned int _commandCoverage; + ///Termination flag for exploration mode; + bool _terminateExplore; + ///Duration of Simulation + long _simDuration; +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/Makefile b/preinstallTTool/linux/TTool/simulators/systemc1/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..46d7b0ad73e93f71b70bdcf469c9770250e75b12 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/Makefile @@ -0,0 +1,22 @@ +TARGET_ARCH = linux + +CC = g++ +#CC = /packages/gcc_3.2.2/bin/g++32 +OPT = -O1 +DEBUG = -g +OTHER = -Wall +TRY = -Wno-deprecated +CFLAGS = $(OPT) $(OTHER) $(TRY) +# CFLAGS = $(DEBUG) $(OTHER) +OBJDIR = lib + +MODULE = run +include Makefile.src +SRCS_base = node_labsoc.cpp channel_labsoc.cpp event_labsoc.cpp interface_labsoc.cpp cpu_labsoc.cpp task_labsoc.cpp cpurr_labsoc.cpp cpurrpb_labsoc.cpp mem_labsoc.cpp +SRCS_base_DIR = src_simulator +SRCS_generated = . + +OBJS_simulator = $(SRCS_base:%.cpp=lib/%.o) +OBJS = $(SRCS:%.cpp=lib/%.o) + +include Makefile.defs diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/Makefile.defs b/preinstallTTool/linux/TTool/simulators/systemc1/Makefile.defs new file mode 100644 index 0000000000000000000000000000000000000000..54d55c6df6a736ddbd3a398f3e4782ef98a58b0e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/Makefile.defs @@ -0,0 +1,43 @@ +## Variable that points to SystemC installation path +#SYSTEMC = /packages/Systemc_2.0.1 +SYSTEMC = /packages/systemc_2.1.1 +#SYSTEMC = /homes/muhammad/Systemc2.1 +#SYSTEMC = /homes/rasheed/Works/SystemC/systemc/systemc-2.1 +#SYSTEMC = /homes/petitmen/systemc/pack + +# Cristian Macario 21/11/07 +# SystemC directory on my laptop +#SYSTEMC = /usr/local/systemc-2.2.0 +#SYSTEMC = /home/inizan/Documents/systemC/systemc-2.2.0 +TLM_HOME = /homes/inizan/p01/Simon_dl/TLM-2006-11-29/tlm +#TLM_HOME = /home/inizan/Documents/systemC/TLM-2006-11-29/tlm + +INCDIR = -I. -I.. -I$(SRCS_base_DIR) -I$(SYSTEMC)/include -I$(TLM_HOME) +LIBDIR = -L. -L.. -L$(SYSTEMC)/lib-$(TARGET_ARCH) + +LIBS = -lsystemc -lm $(EXTRA_LIBS) + + +EXE = $(MODULE).x + +.SUFFIXES: .cpp .o .x + +$(EXE): $(OBJS) $(OBJS_simulator) $(SYSTEMC)/lib-$(TARGET_ARCH)/libsystemc.a + $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_simulator) $(LIBS) 2>&1 | c++filt + +$(OBJDIR)/%.o: $(SRCS_base_DIR)/%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +$(OBJDIR)/%.o: ./%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +clean:: + rm -f $(OBJS_simulator) $(OBJS) *~ $(EXE) core + +ultraclean: clean + rm -f Makefile.deps + +Makefile.deps: +# $(CC) $(CFLAGS) $(INCDIR) -M $(SRCS) >> Makefile.deps + +#include Makefile.deps diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/lib/README b/preinstallTTool/linux/TTool/simulators/systemc1/lib/README new file mode 100644 index 0000000000000000000000000000000000000000..be110e6ec98dbe7763f322e6949c409130fcc05d --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/lib/README @@ -0,0 +1 @@ +This directory contains object-files generated by the "make" command executed on upper level folder diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/basic_initiator_port.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/basic_initiator_port.h new file mode 100644 index 0000000000000000000000000000000000000000..3748d4f9d0d5c736cf1024917daa1c66bdbf86c5 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/basic_initiator_port.h @@ -0,0 +1,122 @@ + +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + +#ifndef BASIC_INTIATOR_PORT_HEADER +#define BASIC_INTIATOR_PORT_HEADER + +// +// Supplies read and write functions to the user. These call transport. +// +// Single ( N = 1 ) and multi connection ( N != 1 ) versions of read and write +// are supplied +// + +#include "basic_protocol.h" +#include "tlm.h" + +using tlm::tlm_transport_if; + +namespace basic_protocol +{ + +template < class ADDRESS , class DATA , int N = 1> +class basic_initiator_port : + public sc_port< + tlm_transport_if < + basic_request< ADDRESS , DATA > , + basic_response< DATA > + > , N + > , + public virtual basic_if<ADDRESS , DATA > +{ +public: + + typedef + tlm_transport_if < + basic_request< ADDRESS , DATA > , + basic_response< DATA > + > if_type; + + basic_initiator_port( const char *port_name ) : + sc_port< if_type , N > ( port_name ) + {} + + virtual basic_status write( const ADDRESS &a , const DATA &d ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = WRITE; + req.a = a; + req.d = d; + + rsp = (*this)->transport( req ); + + return rsp.status; + + } + + virtual basic_status write( const ADDRESS &a , const DATA &d , int p ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = WRITE; + req.a = a; + req.d = d; + + rsp = (*this)[p]->transport( req ); + + return rsp.status; + + } + + virtual basic_status read( const ADDRESS &a , DATA &d ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = READ; + req.a = a; + + rsp = (*this)->transport( req ); + d = rsp.d; + + return rsp.status; + + } + + virtual basic_status read( const ADDRESS &a , DATA &d , int p ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = READ; + req.a = a; + + rsp = (*this)[p]->transport( req ); + d = rsp.d; + + return rsp.status; + + } + +}; + +}; +#endif diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/basic_protocol.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/basic_protocol.h new file mode 100644 index 0000000000000000000000000000000000000000..1566f08ccd6b934366302f53f8cfae1c16578620 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/basic_protocol.h @@ -0,0 +1,158 @@ + +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + +#ifndef BASIC_PROTOCOL_HEADER +#define BASIC_PROTOCOL_HEADER + +#include <systemc.h> + +// +// basic protocol definition +// + +#undef ERROR // for those compilers naughty enough to define it ! + +namespace basic_protocol +{ + +enum basic_request_type +{ + READ , WRITE ,NOTIFY_EVENT, WAIT_EVENT +}; + +enum basic_status +{ + + ERROR , SUCCESS + +}; + +template< typename ADDRESS , typename DATA > +class basic_request +{ +public: + basic_request_type type; + + ADDRESS &get_address() { return a; } // makes it routable + + ADDRESS a; + DATA d; + +}; + +template< typename DATA > +class basic_response +{ +public: + basic_response() : status( ERROR ) {} // makes it routable + + basic_request_type type; + basic_status status; + + DATA d; + +}; + +template< typename ADDRESS , typename DATA > +class basic_if +{ +public: + virtual basic_status write( const ADDRESS &a , const DATA &d ) = 0; + virtual basic_status read( const ADDRESS &a , DATA &d ) = 0; + +}; + +}; // end namespace + + + +template< typename ADDRESS , typename DATA > +ostream &operator<<( ostream &fsout , + const basic_protocol::basic_request<ADDRESS,DATA> &req ) { + + switch( req.type ) + { + case basic_protocol::READ : + fsout << "Read Request : address = " << req.a << endl; + break; + case basic_protocol::WRITE : + fsout << "Write Request : address,data = " << req.a << " , " << req.d << endl; + break; + default : + fsout << "Error : no request type" << endl; + break; + } + + return fsout; +} + +template< typename DATA > +ostream &operator<<( ostream &fsout , + const basic_protocol::basic_response<DATA> &req ) { + + if( req.status == basic_protocol::ERROR ) { + fsout << "Error Response" << endl; + return fsout; + } + + switch( req.type ) + { + case basic_protocol::READ : + fsout << "Successful Read Response : data = " << req.d << endl; + break; + case basic_protocol::WRITE : + fsout << "Successful Write Response" << endl; + break; + default : + fsout << "Error : no request type ( in response )" << endl; + break; + } + + return fsout; + +} + +template< typename ADDRESS , typename DATA > +bool operator==( const basic_protocol::basic_request<ADDRESS,DATA> &req1 , + const basic_protocol::basic_request<ADDRESS,DATA> &req2 ) +{ + if( req1.type != req2.type ) { + return false; + } + + if( req1.a != req2.a ) { + return false; + } + + if( req1.type == basic_protocol::WRITE && req1.d != req2.d ) { + return false; + } + + return true; + +} + +template< typename ADDRESS , typename DATA > +bool operator!=( const basic_protocol::basic_request<ADDRESS,DATA> &req1 , + const basic_protocol::basic_request<ADDRESS,DATA> &req2 ) { + + return !(req1 == req2); +} + + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/bus_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/bus_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..0a5bc039df8aa652a9166dab2ef3d356dcb32601 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/bus_labsoc.h @@ -0,0 +1,228 @@ +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + + +#ifndef BUS_LABSOC_HEADER +#define BUS_LABSOC_HEADER + +// +// arbitration is done using a many to one multimap +// +// The key to the multimap is the priority. With each key we may in general +// have many sc_port<> * data elements. +// +// virtual get_next_request scans thru the masters, getting the highest +// port with a request pending. +// +// run() calls get_next_request and forwards the request to the slave +// and passes the response back to the appropriate master. +// +// This has the downside that we have to specify the number of master ports +// + +#include <map> +#include <vector> +using std::multimap; +using std::pair; +using std::vector; + +#include "tlm.h" +#include "event_labsoc.h" + +using tlm::tlm_transport_if; +using tlm::tlm_slave_if; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +using tlm::tlm_blocking_get_if; +using tlm::tlm_blocking_put_if; + + + +class bus : public sc_module{ +public: + +// definition of the req and response + typedef basic_request< ADDRESS_TYPE , DATA_TYPE > REQ; + typedef basic_response< DATA_TYPE > RSP; + +//signal to tell if the bus is busy or not + sc_signal<bool> bus_busy; + + int latency, evt_latency; +// definition of the array of ports to connect the masters (cpu interfaces) to the bus + + + typedef sc_port< tlm_slave_if< REQ , RSP > , 1 > in_port; + in_port *in_ports; + + typedef sc_port< tlm_transport_if< REQ , RSP > , 1 > out_port; + out_port *out_ports; + + TMLIf **Ifs; + + //counters for the arrays of Ports + int nbOfIfPorts, nbOfOutPorts; + + SC_HAS_PROCESS( bus ); + +//constructor of the module + bus( sc_module_name module_name ) : + sc_module( module_name ) { + nbOfIfPorts/*=nbOfOutPorts*/=0; + latency=evt_latency=1; + bus_busy=0; + SC_THREAD( run ); + + } + + +void setNbIf(int I){ +in_ports= new in_port[I]; +out_ports= new out_port[I]; +Ifs=new TMLIf*[I]; +nbOfOutPorts=I; +} + + +//add a cpu interface +void addIf(TMLIf * If, int priority=1){ + in_ports[nbOfIfPorts]( If->wire.slave_export ); + out_ports[nbOfIfPorts]( If->wire.target_export ); + + add_in_interface( &in_ports[nbOfIfPorts] , priority ); + Ifs[nbOfIfPorts]=If; + nbOfIfPorts++; + +} + +void setLatency(int lat){ +latency=lat; +} + +void setEvtLatency(int lat){ +evt_latency=lat; +} +//add an interface (event or cpu) into the map where the arbiter lok at to find requests +void add_in_interface( in_port *port , const int priority ) { + + if_map.insert( multimap_type::value_type( priority , port ) ); + + + } + + +protected: +//map where the TLM interfaces are stored + typedef multimap< int , in_port * > multimap_type; + multimap_type if_map; + + + virtual void run() { + +//port selected (the one which has been granted the access) + in_port *tmp_in_port; + //out_port *tmp_out_port; + multimap_type::iterator i; + REQ req; + RSP rsp; + + for( ;; ) { +// find the next request + if( (tmp_in_port = get_next_request( i , req ) ) ) { +// treating the request + //cout << name() << " " << sc_time_stamp() << " sending req " << endl; + bus_busy=1; +//if the request has an adress, it is routed to the corresponding memory with the transport function + if (req.a!=NULL){ + + //cout << name() << " " << sc_time_stamp() << " req.a not empty " << endl; + rsp = out_ports[get_out_port(req)]->transport( req ); + + //cout << name() << " " << sc_time_stamp() << " rsp given " << endl; + //put the response in the requesting port + (*tmp_in_port)->put( rsp ); + //cout << name() << " " << sc_time_stamp() << " rsp sent " << endl; + + } + else /*the request does not have an adress, it is an event*/{ + +//create the response, wait and send in back + rsp.status=basic_protocol::SUCCESS; + rsp.d=req.d; + + wait(evt_latency, SC_NS); + (*tmp_in_port)->put(rsp); + + + } + + bus_busy=0; + } +//latency of the bus between two request + wait( latency, SC_NS ); + + } + + } + +//the arbitration function + virtual in_port *get_next_request( multimap_type::iterator &i , REQ &req ) { + + + // + // this starvation inducing algorithm always starts from the highest priority + // you may want to do something else in a subclass + // + + in_port *p; + + for( i = if_map.begin(); i != if_map.end(); ++i ) { +// cout <<"debug " << "arb next req 1" << endl; + p = (*i).second; +// for (int k=0; k<B; k++){ + if( (*p)->nb_get( req ) ) { +// cout <<"debug " << "arb next req 2" << endl; + cout << name() << " " << sc_time_stamp() << " found pending request on port " << p->name() << " priority " << (*i).first << "data ="<<req.d << endl; + return p; + + } + + else + cout << name() << " " << sc_time_stamp() << " no pending request on port " << p->name() << " priority " << (*i).first << endl; +// cout <<"debug " << "arb next req 3" << endl; + + } + return NULL; + } + +//the routing to memory function +virtual int get_out_port(REQ req){ + + for (int i=0; i<nbOfOutPorts; i++){ + //cout << name() << " " << sc_time_stamp() << " out port n° "<< i << " If " << Ifs[i] << "==" << req.a<<endl; + if (req.a==Ifs[i]) return i; + //cout << "not this one"<<endl; + } + return -1; +} + +}; + + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/bus_types.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/bus_types.h new file mode 100644 index 0000000000000000000000000000000000000000..13aa4551667876bb511474a934b18fc62a86b249 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/bus_types.h @@ -0,0 +1,17 @@ + +/* + * + * SystemC TLM API Standard Proposal and Examples + * Copyright Cadence Design Systems Inc 2004 + * + */ + +#include "interface_labsoc.h" + +#ifndef BUS_TYPES_HEADER +#define BUS_TYPES_HEADER + +typedef class TMLIf * ADDRESS_TYPE; +typedef int DATA_TYPE; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/channel_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/channel_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..42220af989da4af04847a3482da80a3f0fb437a2 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/channel_labsoc.cpp @@ -0,0 +1,266 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "math.h" +#include "parameters.h" +#include "utils_labsoc.h" + +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "bus_labsoc.h" + + +int NBRNBW_Channel::write(int nb){ + //cout<<"writting in channels:"<<nb<<"\n"; + int maxWrite; + int nbOfBytesOneCycle = writingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"writting in channels:"<<nb<<" node size:"<<nbOfBytesOneCycle<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxWrite = nb; + } else { + maxWrite = nbOfBytesOneCycle; + } + + return writeIf->write(maxWrite, this); + +} + +int NBRNBW_Channel::read(int nb){ + int maxRead; + int nbOfBytesOneCycle = readingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + if (nb <nbOfBytesOneCycle) { + maxRead = nb; + } else { + maxRead = nbOfBytesOneCycle; + } + + return readIf->read(maxRead, this); +} + + + +// Cristian Macario 11/12/07 +// DEBUG +// including bus +// method has been modified +int BRBW_Channel::write(int nb){ +// mutex.lock(); + // Must determine how many can be written without being blocked + int ret, maxWrite; + + if (currentNbOfSamples == maxNbOfSamples) { + // mutex.unlock(); + return 0; + } + + //cout<<"writting in channels:"<<nb<<"\n"; + int nbOfBytesOneCycle = writingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"writting in channels:"<<nb<<" node size:"<<nbOfBytesOneCycle<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxWrite = nb; + } else { + maxWrite = nbOfBytesOneCycle; + } + + if ((maxWrite + currentNbOfSamples) > maxNbOfSamples) { + maxWrite = maxNbOfSamples - currentNbOfSamples; + } + + ret = writeIf->write(maxWrite, this); + + mutex.lock(); + currentNbOfSamples += ret; + mutex.unlock(); + + if (blockedReadTask != NULL) { + //cout<<"unblocking a blocked task\n"; + readingNode->setUnblockedTask(blockedReadTask); + blockedReadTask = NULL; + } + + +// mutex.unlock(); + return ret; + +} + +int BRBW_Channel::read(int nb){ + // Must determine how many can be written without being blocked + int ret, maxRead; + + +// mutex.lock(); + + if (currentNbOfSamples == 0) { +// mutex.unlock(); + return 0; + } + + //cout<<"reading in channels BRBW:"<<nb<<"\n"; + int nbOfBytesOneCycle = readingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"reading in channels BRBW:"<<nb<<" node size:"<<nbOfBytesOneCycle<<" samples="<<currentNbOfSamples<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxRead = nb; + } else { + maxRead = nbOfBytesOneCycle; + } + + if ((currentNbOfSamples - maxRead) < 0) { + maxRead = currentNbOfSamples; + } + + ret = readIf->read(maxRead, this); + + mutex.lock(); + currentNbOfSamples -= ret; + mutex.unlock(); + + + if (blockedWriteTask != NULL) { + writingNode->setUnblockedTask(blockedWriteTask); + blockedWriteTask = NULL; + } + +// mutex.unlock(); + return ret; +} + +int BRNBW_Channel::write(int nb){ + // Must determine how many can be written without being blocked + int ret, maxWrite; + + //cout<<"BRBW: write\n"; + +// mutex.lock(); + + //cout<<"BRBW: locked\n"; + + //cout<<"writting in channels:"<<nb<<"\n"; + int nbOfBytesOneCycle = writingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + // cout<<"writting in channels:"<<nb<<" node size:"<<nbOfBytesOneCycle<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxWrite = nb; + } else { + maxWrite = nbOfBytesOneCycle; + } + + + ret = writeIf->write(maxWrite, this); + + mutex.lock(); + currentNbOfSamples += ret; + mutex.unlock(); + + if (blockedReadTask != NULL) { + //cout<<"Unblocking a blocked task\n"; + readingNode->setUnblockedTask(blockedReadTask); + blockedReadTask = NULL; + } + +// mutex.unlock(); + return ret; + +} + +int BRNBW_Channel::read(int nb){ + // Must determine how many can be written without being blocked + int ret, maxRead; + + //cout<<"BRBW: read\n"; + +// mutex.lock(); + + //cout<<"BRBW: locked\n"; + + if (currentNbOfSamples == 0) { +// mutex.unlock(); + return 0; + } + + //cout<<"reading in channels BRBW:"<<nb<<"\n"; + int nbOfBytesOneCycle = readingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"reading in channels BRBW:"<<nb<<" node size:"<<nbOfBytesOneCycle<<" samples="<<currentNbOfSamples<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxRead = nb; + } else { + maxRead = nbOfBytesOneCycle; + } + + if ((currentNbOfSamples - maxRead) < 0) { + maxRead = currentNbOfSamples; + } + + + ret = readIf->read(maxRead, this); + + mutex.lock(); + currentNbOfSamples -= ret; + mutex.unlock(); + +// mutex.unlock(); + + return ret; +} + + + + + +void TMLChannel::initialize() { + currentNbOfSamples = 0; + blockedReadTask = NULL; + blockedWriteTask = NULL; + } + + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/channel_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/channel_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..495f45ee1ad3f9412b58282866687406034d4eb8 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/channel_labsoc.h @@ -0,0 +1,248 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + + +#ifndef CHANNEL_LABSOC__H +#define CHANNEL_LABSOC__H + + +#include "event_labsoc.h" +#include "interface_labsoc.h" + +class Task; +class Node; +class memory; + +#include "task_labsoc.h" +#include "node_labsoc.h" +#include "comm_labsoc.h" +#include "mem_labsoc.h" + + +// Cristian Macario 11/12/07 +// DEBUG +// including bus +//#include "interface_labsoc.h" + + +class TMLChannel:public TMLComm{ + public: + + // Cristian Macario 21/11/07 + // signals not used + /* + sc_signal<bool> wr; + sc_signal<bool> rd; + */ + memory * mem; + +protected: + + // Cristian Macario + // adding bus and cache emulation + int currentNbOfSamples; +// int writtenSamples; +// int readableSamples; + + + + int width; + int maxNbOfSamples; + Node *readingNode; + Node *writingNode; + Task *blockedReadTask; + Task *blockedWriteTask; + sc_mutex mutex; + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + TMLcpuIf * readIf; + TMLcpuIf * writeIf; + + + + public: + TMLChannel() {} + + +// Cristian Macario 13/12/07 +// adding bus +/* + TMLChannel(int _width, Node *_node) { + width = _width; + node = _node; + } +*/ +TMLChannel(int _width) { + width = _width; + } + +// Cristian Macario 13/12/07 +// adding bus +/* + void setNode(Node *_node) { + node = _node; + } +*/ + + void setReadingNode(Node *_node) { + readingNode = _node; + } + + void setWritingNode(Node *_node) { + writingNode = _node; + } + + + Node * getReadingNode() { + return readingNode; + } + + Node * getWritingNode() { + return writingNode; + } + + void setWidth(int _width) { + width = _width; + } + + + + // Width must be set first + // Input is in number of samples. Output is in byte. + void setMaxNbOfSamples(int _maxNbOfSamples) { + maxNbOfSamples = _maxNbOfSamples * width; + } + + // Width must be set first + void setCurrentNbOfSamples(int _currentNbOfSamples) { + currentNbOfSamples = _currentNbOfSamples; + } + + + void initialize(); + + // Returns the number of cycles it takes + virtual int getNbToWrite(int nb){return nb*width;} + virtual int getNbToRead(int nb){return nb*width;} + + // Effectively make the operation in one cycle + // Returns the number of non-written samples + virtual int write(int nb){return 1;} + virtual int read(int rd) {return 1;} + + void setBlockedWriteTask(Task *t) { + blockedWriteTask = t; + } + + void setBlockedReadTask(Task *t) { + blockedReadTask = t; + } + + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + void setReadIf(TMLcpuIf * _readIf) { + readIf = _readIf; + } + + TMLcpuIf *getReadIf(){ + return readIf; + } + + void setWriteIf(TMLcpuIf * _writeIf) { + writeIf = _writeIf; + } + + TMLcpuIf *getWriteIf(){ + return writeIf; + } + + void setMem(memory * _mem) { + mem = _mem; + } + + +/* + // Cristian Macario + // adding bus and cache emulation + void updateReadableSamples(int n); +*/ + + + virtual int isWriteBlocking() { return 0;} + virtual int isReadBlocking() {return 0;} + + virtual ~TMLChannel() {} + + + }; + +class NBRNBW_Channel: public TMLChannel { +public: + virtual int write(int nb); + virtual int read(int rd); + + virtual ~NBRNBW_Channel() {} + +}; + +class BRBW_Channel: public TMLChannel { +public: + virtual int write(int nb); + virtual int read(int rd); + + + virtual ~BRBW_Channel() {} + +}; + +class BRNBW_Channel: public TMLChannel { +public: + virtual int write(int nb); + virtual int read(int rd); + + // Cristian Macario 21/11/07 + // distructor removed because not useful + //virtual ~BRNBW_Channel() {currentNbOfSamples=0;} + +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/comm_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/comm_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..7d6e468e338b705d49b8d53d0bf4bb8cdfa3421f --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/comm_labsoc.h @@ -0,0 +1,52 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + + +#ifndef COMM_LABSOC__H +#define COMM_LABSOC__H + + + +class TMLComm{ + + public: + virtual ~TMLComm() {} + +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpu_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpu_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9bcb09e0309233b342504cb798d94d427d054cda --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpu_labsoc.cpp @@ -0,0 +1,231 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#include "node_labsoc.h" +#include "task_labsoc.h" +#include "cpu_labsoc.h" +#include "taskcpu_labsoc.h" +#include "utils_labsoc.h" + + +// Cristian Macario 05/12/07 +// removed constructor because not useful anymore +void CPU::initialize() { + executedInstructions = 0; + missedInstructions = 0; +} + + + +// Cristian Macario 06/12/07 +// This method must be redefined +// in the child classes. +/* +void CPU::go() { + runningTask = 1; + //wait(1, SC_NS); + runningTask = 0; +} +*/ + +void CPU::addTask(Task *t) { + tasks[nbOfTasks] = t; + + // Cristian Macario 21/11/07 + // Added the -1 in order to avoid buffer overflow + if (nbOfTasks < MAX_TASK_PER_CPU - 1) { + nbOfTasks ++; + } +} + + +// Pipeline size cannot be less than 1 +void CPU::setPipelineSize(int _pipelineSize) { + pipelineSize = _pipelineSize; + if (pipelineSize < 1) { + pipelineSize = 1; + } +} + +void CPU::setTaskSwitchingTime(int _taskSwitchingTime) { + taskSwitchingTime = _taskSwitchingTime; +} + +void CPU::setGoIdleTime(int _goIdleTime) { + goIdleTime = _goIdleTime; +} + +void CPU::setWakingUpTime(int _wakingUpTime) { + wakingUpTime = _wakingUpTime; +} + +void CPU::setBranchingPredictionMissRate(int _branchingPredictionMissRate) { + branchingPredictionMissRate = _branchingPredictionMissRate; +} + +int CPU::getBranchingPredictionMissRate() { + return branchingPredictionMissRate; +} + + + +// Cristian Macario 21/11/07 +// added the setter of maxConsecutiveIdleCycles +void CPU::setMaxConsecutiveIdleCycles(unsigned _maxConsecutiveIdleCycles) { + maxConsecutiveIdleCycles = _maxConsecutiveIdleCycles; +} + + +// Cristian Macario 30/11/07 +// Improved performance of this method +void CPU::waitForInstructions(int _nb) { + //cout<<"waiting\n"; + int rand; + int i; + int nbMiss; + int nbExec; + int firstTime; + + + if ((_nb >0) && (branchingPredictionMissRate > 0)) { + + + // When branchingPredictionMissRate > 0 and + // number of instructions is small, use this algorithm + if(_nb <= (100 / branchingPredictionMissRate)) { + // Branching prediction + for(i=0; i<_nb; i++) { + if (executedInstructions == 0) { + missedInstructions = 0; + } + + if (missedInstructions < branchingPredictionMissRate) { + rand = Utils::myrand(0, 99); + if (rand < branchingPredictionMissRate) { + //cout<<"BRANCHING ERROR"<<endl; + + if (currentTaskSignal != NULL) { + *currentTaskSignal = 0; + } + + branchMiss(); + missedInstructions ++; + } + } + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + } + wait(1); + executedInstructions ++; + if (executedInstructions == 100){ + executedInstructions = 0; + } + } + + + // When branchingPredictionMissRate > 0 and + // number of instructions is big, use this algorithm + } else { + nbMiss = (int)((_nb * branchingPredictionMissRate)/100.0); + nbExec = 0; + firstTime = 1; + for(i = 0; (i < nbMiss) && (nbExec < _nb); i++) { + // The first time the random range is divided by 2 + // just because + // --x----x----x----x-- + // (where x represent branch miss and - no branch miss) + // is more uniform than + // ----x----x----x----x + rand = Utils::myrand(1, ((200/branchingPredictionMissRate)>>firstTime) -1); + firstTime = 0; + if((nbExec + rand) > _nb) { + rand = _nb - nbExec; + } + nbExec += rand; + + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + wait(rand); + *currentTaskSignal = 0; + } else { + wait(rand); + } + + branchMiss(); + + } + + if(nbExec < _nb) { + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + wait(_nb - nbExec); + *currentTaskSignal = 0; + } else { + wait(_nb - nbExec); + } + } + } + + + + // when branchingPredictionMissRate == 0 + } else if (_nb > 0) { + + // Cristian Macario 21/11/07 + // added the if: set the signal before waiting + // if branchingPredictionMissRate == 0 + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + } + wait(_nb); + } + //cout<<"DONE\n"; + +} + + + +void CPU::branchMiss() { + branchingError = 1; + wait(1); + branchingError = 0; + pipelineLatency = 1; + if (pipelineSize > 1) { + wait(pipelineSize-1); + } + pipelineLatency = 0; +} diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpu_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpu_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..6f9a67f8996055f46f194ed4cf568bdae70c8278 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpu_labsoc.h @@ -0,0 +1,120 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + +#ifndef CPU_LABSOC__H +#define CPU_LABSOC__H + +#include "parameters.h" +#include "node_labsoc.h" +#include "task_labsoc.h" +#include "taskcpu_labsoc.h" + + + +class CPU : public Node { + public: + sc_signal<bool> runningTask; + sc_signal<bool> taskSwitching; + sc_signal<bool> idle; + sc_signal<bool> goIdle; + sc_signal<bool> pipelineLatency; + sc_signal<bool> branchingError; + + //Cristian Macario 08/02/08 + sc_signal<bool> wakingUp; + + +protected: + int pipelineSize; + int taskSwitchingTime; + int goIdleTime; + + // Cristian Macario 08/02/08 + int wakingUpTime; + + // Cristian Macario 05/12/07 + // now the following variable is + // a static variable of the method CPURR::runIdle() + // this make the code more readable + long cycle; + + int branchingPredictionMissRate; + + + int missedInstructions; + long executedInstructions; + + // Cristian Macario 21/11/2007 + // Added this variable + // When the cpu runs in idle state for maxConsecutiveIdleCycles + // consecutive cycles, it stop running + int maxConsecutiveIdleCycles; + + + + + + public: + + void initialize(); + + // Cristian Macario 05/12/07 + // this funcion should be virtual + virtual void go() = 0; + void addTask(Task *t); + void setPipelineSize(int _pipelineSize); + void setTaskSwitchingTime(int _taskSwitchingTime); + void setGoIdleTime(int _goIdleTime); + + // Cristian Macario 08/02/08 + void setWakingUpTime(int _wakingUpTime); + + void setBranchingPredictionMissRate(int _branchingPredictionMissRate); + int getBranchingPredictionMissRate(); + + // Cristian Macario 21/11/07 + // Added the setter for maxConsecutiveIdleCycles + void setMaxConsecutiveIdleCycles(unsigned _maxConsecutiveIdleCycles); + void waitForInstructions(int _nb); + void branchMiss(); + + virtual ~CPU(){} + +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4ef77a7697084d29077236b65cd499f7b36b6ae3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.cpp @@ -0,0 +1,425 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#include "cpurr_labsoc.h" +#include "utils_labsoc.h" + +// Randomizes tasks; +void CPURR::initialize() { + initialize(1); + + // Cristian Macario 05/12/07 + // these two variables are now satic vars of the + // CPU::waitForInstructions() method + //executedInstructions = 0; + //missedInstructions = 0; +} + +void CPURR::initialize(int randomTask) { + terminated = 0; + + nextBlocked = NULL; + nextRunning = NULL; + nextTerminated = NULL; + + // Default values + //taskSwitchingTime = 10; + //cyclesEXECI = 1; + //goIdleTime = 5; + + if (nbOfTasks == 0) { + terminated = 1; + //idle = 1; + return; + } + + // Randomizes runnable tasks + if (randomTask > 0) { + randomTasks(taskscpurr,nbOfTasks); + } + linkRunnableTasks(); +} + +void CPURR::go() { + int nb = 0; + Task *tmp; + TaskCPURR *tcpurr; + + + initialize(); + + while(terminated == 0) { + + + // Cristian Macario 14/12/07 + // adding bus + // now a task can be unblocked by an operation performed by another cpu + if (taskHasBeenUnblocked()) { + tmp = getUnblockedTask(); + tmp->UNBLOCK(); + tcpurr = getTaskCPURR(tmp); + removeBlocked(tcpurr); + addRunnable(tcpurr); + //cout << "A task has been unblocked\n"; + } + + + if (nextRunning == NULL) { + //cout << "Selecting task to run\n"; + selectTaskToRun(); + } + + if (nextRunning != NULL) { + //cout << "Running task\n"; + + // Cristian Macario 08/02/08 + // adding Waking up time + if(idle == 1) { + idle = 0; + nextRunning->task->running = 0; + wakingUp = 1; + if(wakingUpTime > 0) { + wait(wakingUpTime); + } + wakingUp = 0; + nextRunning->task->running = 1; + } + + + runningTask = 1; + idle = 0; + taskSwitching = 0; + + // A task is running + // Call that task + nb = nextRunning->task->run(); + + if (nb > 0) { + waitForInstructions(nb); + } + + // Task has been unblocked? + //cout<<"Checking for unblocked task\n"; + if (taskHasBeenUnblocked()) { + tmp = getUnblockedTask(); + tmp->UNBLOCK(); + tcpurr = getTaskCPURR(tmp); + removeBlocked(tcpurr); + addRunnable(tcpurr); + //cout << "A task has been unblocked\n"; + } + + // Is current task blocked? + if (taskHasBeenBlocked()) { + //cout << "task is blocked \n"; + tmp = getBlockedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 005"; + exit(0); + } + removeRunnable(nextRunning); + addBlocked(nextRunning); + nextRunning = NULL; + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } + + if (taskHasBeenTerminated()) { + // cout << "task is terminated \n"; + tmp = getTerminatedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 006"; + exit(0); + } + removeRunnable(nextRunning); + addTerminated(nextRunning); + nextRunning = NULL; + //if ((nextRunnable == NULL) && (nextBlocked == NULL)) { For CPU with external interfaces + if ((nextRunnable == NULL) && (nextBlocked == NULL)) { + terminated = 1; + runningTask = 0; + // This wait is needed to update the value of the signal terminated + // whose value will be checked on the go() method (this method), + // on the line "while(terminated == 0)" + wait(1); + //idle = 1; + } else { + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } + } + } else { + runIdle(); + } + } + wait(1); +// cout << "Ending CPURR node " << nb <<"\n"; + +} + +void CPURR::selectTaskToRun() { + if (nextRunnable != NULL) { + nextRunning = nextRunnable; + + // Cristian Macario 21/11/07 + // if() not useful + //if (nextRunning != NULL) { + nextRunning->task->running = 1; + nextRunning->nbOfInstInPipeline = 0; + //} + } + //cout<<"task selected in cpurr"<<endl; +} + +void CPURR::runIdle() { + + + if (idle == 0) { + goIdle = 1; + runningTask = 0; + + // Cristian Macario 21/11/07 + // cycle has to be initialized + cycle = 0; + if (goIdleTime > 0) { + wait(goIdleTime); + } + goIdle = 0; + } + //cout << "idle!\n"; + runningTask = 0; + idle = 1; + taskSwitching = 0; + wait(1); + cycle ++; + if (cycle > maxConsecutiveIdleCycles) { + idle = 0; + terminated = 1; + // This wait is needed to update the value of the signal terminated + // whose value will be checked on the go() method, + // on the line "while(terminated == 0)" + wait(1); + } +} + +void CPURR::switchTasks() { + runningTask = 0; + idle = 0; + taskSwitching = 1; + waitForInstructions(taskSwitchingTime); +} + + +// Manipulate tasks + + +void CPURR::addTask(Task *t) { + //cout << "adding task\n"<<nbOfTasks << "max=" << MAX_TASK_PER_CPU; + TaskCPURR *tcpu = new TaskCPURR(); + tcpu->nbOfInstInPipeline = 0; + tcpu->task = t; + tasks[nbOfTasks] = t; + taskscpurr[nbOfTasks] = tcpu; + if (nbOfTasks < MAX_TASK_PER_CPU) { + nbOfTasks ++; + } +} + +void CPURR::randomTasks(TaskCPURR *taskscpurr[], int index) { + int chosen; + + if (index <2 ) { + return; + } + TaskCPURR *tmp; + chosen = Utils::myrand(0, index-1); + if (chosen == index-1) { + return randomTasks(taskscpurr, index-1); + } + + tmp = taskscpurr[index-1]; + taskscpurr[index-1] = taskscpurr[chosen]; + taskscpurr[chosen] = tmp; + return randomTasks(taskscpurr, index-1); +} + +void CPURR::linkRunnableTasks() { + int i; + for(i=0; i<nbOfTasks; i++) { + if (i != (nbOfTasks-1)) { + taskscpurr[i]->next = taskscpurr[i+1]; + } else { + taskscpurr[i]->next = NULL; + } + taskscpurr[i]->task->runnable = 1; + } + nextRunnable = taskscpurr[0]; +} + + void CPURR::addTerminated(TaskCPURR *t) { + // First terminated task ? + if (nextTerminated == NULL) { + nextTerminated = t; + t->next = NULL; + return; + } + + // Task is added at the beginning of the list + t->next = nextTerminated; + nextTerminated = t; + } + + void CPURR::addBlocked(TaskCPURR *t) { + // First blocked task ? + if (nextBlocked == NULL) { + nextBlocked = t; + t->next = NULL; + return; + } + + // Task is added at the beginning of the list + t->next = nextBlocked; + nextBlocked = t; + } + + void CPURR::addRunnable(TaskCPURR *t) { + TaskCPURR *tmp; + + // First runnable task ? + if (nextRunnable == NULL) { + nextRunnable = t; + t->next = NULL; + return; + } + + // Task is added at the end of the list + tmp = nextRunnable; + while(tmp->next != NULL) { + + // Cristian Macario 22/11/07 + // If the task we want to insert is already on the list + // there is an error + if(tmp == t) { + cout<<"ERROR 007"<<endl; + return; + } + tmp = tmp->next; + } + tmp->next = t; + t->next = NULL; + } + + void CPURR::removeRunnable(TaskCPURR *t) { + TaskCPURR *tmp; + + if (nextRunnable == NULL) { + cout << "ERROR 001"; + return; + } + + // t first in list? + if (nextRunnable == t) { + nextRunnable = t->next; + t->next = NULL; + return; + } + + // Must search for the task just before t; + tmp = nextRunnable; + while((tmp != NULL) && (tmp->next != t)) { + tmp = tmp->next; + } + if (tmp == NULL) { + cout << "ERROR 002"; + return; + } + tmp->next = t->next; + t->next = NULL; + } + +void CPURR::removeBlocked(TaskCPURR *t) { + TaskCPURR *tmp; + + if (nextBlocked == NULL) { + cout << "ERROR 003"; + return; + } + + // t first in list? + if (nextBlocked == t) { + nextBlocked = t->next; + t->next = NULL; + return; + } + + // Must search for the task just before t; + tmp = nextBlocked; + while((tmp != NULL) && (tmp->next != t)) { + tmp = tmp->next; + } + if (tmp == NULL) { + + // Cristian Macario 21/11/07 + // Uncommented error messages: + // Trying to unblock a task that is not blocked + // anymore is an error. Got an example of bug on the + // simulation result. + cout<<"Task was already not blocked anymore\n"; + cout << "ERROR 004\n"; + return; + } + tmp->next = t->next; + t->next = NULL; + } + + TaskCPURR *CPURR::getTaskCPURR(Task *t) { + int i; + for(i=0; i<nbOfTasks; i++) { + if (taskscpurr[i]->task == t) { + return taskscpurr[i]; + } + } + return NULL; + } + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..41fbed67f4ce0fc2c750c0dfc84e70f7ef1afc5b --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.h @@ -0,0 +1,99 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + +#ifndef CPURR_LABSOC__H +#define CPURR_LABSOC__H + +#include "parameters.h" +#include "node_labsoc.h" +#include "cpu_labsoc.h" +#include "task_labsoc.h" +#include "taskcpu_labsoc.h" + + + +class CPURR : public CPU { + protected: + TaskCPURR *taskscpurr[MAX_TASK_PER_CPU]; + TaskCPURR *nextRunnable; + TaskCPURR *nextRunning; + TaskCPURR *nextBlocked; + TaskCPURR *nextTerminated; + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + // property moved to Node class + // int terminated; + + +public: + + // Crsitian Macario 05/12/07 + // This initialization is now done in the constructor of class node + // (nbOfTasks is a property of class node) +/* + CPURR() { + nbOfTasks = 0; + } +*/ + + virtual ~CPURR(){} + +public: + void initialize(); + void initialize(int randomTasks); + virtual void go(); + void addTask(Task *t); +protected: + virtual void selectTaskToRun(); + void switchTasks(); + void randomTasks(TaskCPURR *taskscpurr[], int index); + void linkRunnableTasks(); + void addTerminated(TaskCPURR *t); + void addRunnable(TaskCPURR *t); + void addBlocked(TaskCPURR *t); + void removeRunnable(TaskCPURR *t); + void removeBlocked(TaskCPURR *t); + void runIdle(); + TaskCPURR *getTaskCPURR(Task *t); + + +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a98d6f681fe95c29120d17a557eb29a6b69f33e3 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.cpp @@ -0,0 +1,184 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#include "cpurrpb_labsoc.h" +#include "utils_labsoc.h" +#include "task_labsoc.h" + +void CPURRPB::go() { + int nb = 0; + Task *tmp; + TaskCPURR *tcpurr; + + initialize(); + while(terminated == 0) { + if (nextRunning == NULL) { + //cout << "Selecting task to run\n"; + selectTaskToRun(); + } + + if (nextRunning != NULL) { + //cout << "Running task\n"; + runningTask = 1; + idle = 0; + taskSwitching = 0; + + // A task is running + // Call that task + + + nb = nextRunning->task->run(); + + //cout<<"nb=" << nb<<endl; + + // Apply penalty due to branching prediction + //cout<<"Applying time to wait="<<nb<<"\n"; + + + if (nb == 0) { + //wait(1); + } else { + //cout << "task must wait for " << nb<<"\n"; + //Setting task signal + if (nb > 0) { + waitForInstructions(nb); + } + //cout<<"waiting done\n"; + } + + // Task has been unblocked? + //cout<<"Checking for unblocked task\n"; + tmp = NULL; + if (taskHasBeenUnblocked()) { + tmp = getUnblockedTask(); + tmp->UNBLOCK(); + tcpurr = getTaskCPURR(tmp); + removeBlocked(tcpurr); + addRunnable(tcpurr); + //cout << "A task has been unblocked\n"; + } + + + + // Is current task blocked? + if (taskHasBeenBlocked()) { + //cout << "task is blocked \n"; + tmp = getBlockedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 005"; + exit(0); + } + removeRunnable(nextRunning); + addBlocked(nextRunning); + nextRunning = NULL; + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } else { + if (tmp != NULL) { // Task has been unblocked + if (tmp->getPriority() > nextRunning->task->getPriority()) { + // Nullify current signals + //nextRunning->task->currentSig = 0; + unsetCurrentTaskSignal(); + nextRunning->task->running = 0; + nextRunning = NULL; + switchTasks(); + } + } + } + + if (taskHasBeenTerminated()) { + //cout << "task is terminated \n"; + tmp = getTerminatedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 006"; + exit(0); + } + removeRunnable(nextRunning); + addTerminated(nextRunning); + nextRunning = NULL; + //if ((nextRunnable == NULL) && (nextBlocked == NULL)) { For CPU with external interfaces + if ((nextRunnable == NULL) && (nextBlocked == NULL)) { + terminated = 1; + } else { + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } + } + } else { + runIdle(); + } + } + wait(1); + cout << "Ending CPURRPB node " << nb <<"\n"; + +} + + +void CPURRPB::selectTaskToRun() { + TaskCPURR *task = NULL; + TaskCPURR *tmp = NULL; + int priority = 0; + int index = 0; + + if (nextRunnable != NULL) { + task = nextRunnable; + priority = task->task->getPriority(); + tmp = task; + while(tmp->next != NULL) { + tmp = tmp->next; + index ++; + if (tmp->task->getPriority() > priority) { + task = tmp; + priority = task->task->getPriority(); + } + } + + } + nextRunning = task; + if (nextRunning != NULL) { + nextRunning->task->running = 1; + nextRunning->nbOfInstInPipeline = 0; + } + cout<<"Task selected prio="<<priority<<endl; +} + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..5214b5aa4ec03ca9f2b8fa73a12556e149bd4f49 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.h @@ -0,0 +1,66 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + +#ifndef CPURRPB_LABSOC__H +#define CPURRPB_LABSOC__H + +#include "cpurr_labsoc.h" + + +class CPURRPB : public CPURR { + +public: + + // Cristian Macario 05/12/07 + // The initialization of nbOfTasks is done on the constructor + // of the class Node + /* + CPURRPB() { + nbOfTasks = 0; + } + */ + + virtual ~CPURRPB(){} + protected: + void selectTaskToRun(); + public: + void go(); + +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/event_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/event_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e17d15bee455134a05d6ef9ec84fdc061c7de90 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/event_labsoc.cpp @@ -0,0 +1,245 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "math.h" +#include "parameters.h" + +#include "node_labsoc.h" +#include "event_labsoc.h" + +void TMLEvent::addEvent(Event *event) { + EventCell *cell = new EventCell(); + cell->next = NULL; + cell->event = event; + + //cout<<"adding event\n"; + currentNbOfEvents ++; + //cout<<"Nb of events="<<currentNbOfEvents<<"\n"; + + // No element in list + if (tail == NULL) { + head = cell; + tail = cell; + } else { + tail->next = cell; + tail = cell; + } +} + +Event *TMLEvent::getFirstEvent() { + return head->event; +} + +void TMLEvent::removeFirstEvent() { + EventCell *tmp = head; + + if (head == NULL) { + return; + } + + currentNbOfEvents --; + if (currentNbOfEvents == 0) { + tail = NULL; + } + + head = head->next; + free(tmp); + return; +} + + +// Cristian Macario 22/11/07 +// Type of this method becomes int +int TMLEvent::notify(Event *event) { + //cout<<"step01\n"; + + //mutex.lock(); + + if(notifyingNode != waitingNode) { + notifyIf->notifyEvtOnBus(nParam, this); + } + + mutex.lock(); + addEvent(event); + + //cout<<"step03\n"; + //cout<<"NbOfEvents="<<currentNbOfEvents<<"\n"; + + + // Cristian Macario 21/11/07 + // Default event: Infinite Fifo + // We don't have to check this + // morever events are stored in a list, can't overflow + /* + if (currentNbOfEvents > maxNbOfEvents) { + event = getFirstEvent(); + removeFirstEvent(); + free(event); + //cout<<"Freeing events="<<currentNbOfEvents<<"\n"; + } + */ + + if (blockedWaitTask != NULL) { + //cout<<"Unblocking a blocked task (event)\n"; + waitingNode->setUnblockedTask(blockedWaitTask); + blockedWaitTask = NULL; + } + + mutex.unlock(); + + // Cristian Macario 22/11/07 + return 1; +} + + + +Event *TMLEvent::wait() { + Event *evt; + //mutex.lock(); + + //cout<<"wait evt step 01\n"; + + if (currentNbOfEvents == 0) { + // Block current task + //mutex.unlock(); + //cout<<"returning null\n"; + return NULL; + } + + // Cristian Macario 04/02/08 + // event between 2 cpus support + if(notifyingNode != waitingNode) { + ::sc_core::wait(1); + } + + + //cout<<"wait evt step 02\n"; + mutex.lock(); + evt = getFirstEvent(); + removeFirstEvent(); + + //cout<<"wait evt step 02\n"; + + // Cristian Macario 27/11/07 + // if there is a blocked notifying task + // it has to be unblocked + if(blockedNotifyTask != NULL) { + notifyingNode->setUnblockedTask(blockedNotifyTask); + blockedNotifyTask = NULL; + } + + + mutex.unlock(); + return evt; +} + +int TMLEvent::notified() { + return currentNbOfEvents; +} + + +// Cristian Macario 22/11/07 +// Type of this method becomes int +int FiniteFIFO_Event::notify(Event *event) { + //mutex.lock(); + + if(notifyingNode != waitingNode) { + notifyIf->notifyEvtOnBus(nParam, this); + } + + mutex.lock(); + addEvent(event); + + + // erase first evt if too many evts + if (currentNbOfEvents > maxNbOfEvents) { + mutex.lock(); + event = getFirstEvent(); + removeFirstEvent(); + free(event); + mutex.unlock(); + } + + if (blockedWaitTask != NULL) { + //cout<<"Unblocking a blocked task (evt)\n"; + waitingNode->setUnblockedTask(blockedWaitTask); + blockedWaitTask = NULL; + } + + mutex.unlock(); + + // Cristian Macario 22/11/07 + return 1; +} + + +// Cristian Macario 22/11/07 +// Type of this method becomes int +int FiniteBlockingFIFO_Event::notify(Event *event) { + //mutex.lock(); + + //cout<<"notify evt step 01\n"; + + if (currentNbOfEvents == maxNbOfEvents) { + // Block current task + //mutex.unlock(); + + // Cristian Macario 22/11/07 + //return; + return 0; + } + + //cout<<"notify evt step 02\n"; + if(notifyingNode != waitingNode) { + notifyIf->notifyEvtOnBus(nParam, this); + } + + mutex.lock(); + addEvent(event); + + if (blockedWaitTask != NULL) { + //cout<<"Unblocking a blocked task (evt)\n"; + waitingNode->setUnblockedTask(blockedWaitTask); + blockedWaitTask = NULL; + } + + mutex.unlock(); + + //Cristian Macario 22/11/07 + return 1; +} + + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/event_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/event_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..91b8db6cd030b38be5a01da7d236cbc37676ac84 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/event_labsoc.h @@ -0,0 +1,277 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + + +#ifndef EVENT_LABSOC__H +#define EVENT_LABSOC__H + +class Node; +class Task; +class TMLcpuIf; +#include "task_labsoc.h" +#include "interface_labsoc.h" + + +class Event { + public: + int param0; + int param1; + int param2; +}; + +class EventCell { + public: + Event *event; + EventCell *next; +}; + + +class TMLEvent{ + public: + + // Cristian Macario 21/11/07 + // following signals were not used + /* + sc_signal<bool> notifyEvent; + sc_signal<bool> waitEvent; + sc_signal<bool> notifiedEvent; + */ + TMLcpuIf * waitIf; + TMLcpuIf * notifyIf; + + +protected: + int currentNbOfEvents; // All data are in Byte + int maxNbOfEvents; + int nParam; + + // Cristian Macario 14/01/08 + // adding bus + // Node *node; + Node *notifyingNode; + Node *waitingNode; + + + // Cristian Macario 04/02/08 + // including bus + + + Task *blockedWaitTask; + + // Cristian Macario 22/11/07 + // in a finite blocking fifo a task may be blocked also + // when it is notifying an event + Task *blockedNotifyTask; + + sc_mutex mutex; + + EventCell *head; + EventCell *tail; + + public: + TMLEvent() {} + +/* + TMLEvent(Node *_node) { + node = _node; + } +*/ + // Cristian Macario 14/01/08 + // adding bus +/* + void setNode(Node *_node) { + node = _node; + } +*/ + + void setNotifyingNode(Node *node) { + notifyingNode = node; + } + + Node *getNotifyingNode() { + return notifyingNode; + } + + void setWaitingNode(Node *node) { + waitingNode = node; + } + + Node *getWaitingNode() { + return waitingNode; + } + + void setWaitIf(TMLcpuIf * iface){ + waitIf = iface; + } + + TMLcpuIf * getWaitIf(){ + return waitIf; + } + + void setNotifyIf(TMLcpuIf * iface) { + notifyIf = iface; + } + + TMLcpuIf * getNotifyIf() { + return notifyIf; + } + + + void setMaxNbOfEvents(int _maxNbOfEvents) { + maxNbOfEvents = _maxNbOfEvents; + } + + void setCurrentNbOfEvents(int _currentNbOfEvents) { + currentNbOfEvents = _currentNbOfEvents; + } + + + // Cristian Macario 04/02/2008 + // support for event between 2 different cpus + void setNParam(int n) { + nParam = n; + } + + int getNParam() { + return nParam; + } + + void initialize() { + currentNbOfEvents = 0; + blockedWaitTask = NULL; + + // Cristian Macario 22/11/07 + // initialization of added property + blockedNotifyTask = NULL; + + head = NULL; + tail = NULL; + } + + // Effectively make the operation in one cycle + // Returns the number of non-written samples + + // Cristian Macario 22/11/07 + // modified notify method: it returns 0 if + // the task has to be blocked and 1 if not + //virtual void notify(Event *event); + virtual int notify(Event *event); + + virtual Event *wait(); + virtual int notified(); + +public: + void setBlockedWaitTask(Task *t) { + blockedWaitTask = t; + } + + void unblockWaitTask() { + blockedWaitTask = NULL; + } + + // Cristian Macario 22/11/07 + // Added this method + Task * getBlockedWaitTask() { + return blockedWaitTask; + } + + // Cristian Macario 22/11/07 + // added these two methods + void setBlockedNotifyTask(Task *t) { + blockedNotifyTask = t; + } + + void unblockNotifyTask() { + blockedNotifyTask = NULL; + } + +protected: + void addEvent(Event *event); // Added at the end of the list + Event *getFirstEvent(); + void removeFirstEvent(); + + + virtual ~TMLEvent() {} + + + +}; + +class InfiniteFIFO_Event: public TMLEvent { +public: + + virtual ~InfiniteFIFO_Event() {} + +}; + +class TMLRequest: public TMLEvent { +public: + + virtual ~TMLRequest() {} + +}; + +class FiniteFIFO_Event: public TMLEvent { +public: + + // Cristian Macario 22/11/07 + // modified notify method: it returns 0 if + // the task has to be blocked and 1 if not + //virtual void notify(Event *event); + virtual int notify(Event *event); + + virtual ~FiniteFIFO_Event() {} + +}; + +class FiniteBlockingFIFO_Event: public TMLEvent { +public: + + // Cristian Macario 22/11/07 + // modified notify method: it returns 0 if + // the task has to be blocked and 1 if not + //virtual void notify(Event *event); + virtual int notify(Event *event); + + virtual ~FiniteBlockingFIFO_Event() {} + +}; + + + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/interface_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/interface_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dea5faa3ba66c810a7bee4f853867fc0130f560f --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/interface_labsoc.cpp @@ -0,0 +1,109 @@ +#include "systemc" +#include "parameters.h" +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "utils_labsoc.h" +#include "bus_labsoc.h" +#include "mem_labsoc.h" +#include "comm_labsoc.h" + + + +int TMLcpuIf::write(int nb, TMLChannel *ch){ + TMLcpuIf *readIf = ch->getReadIf(); + + + // If tasks on the same CPU + if(readIf->getNode() == node) { + // If cache miss + if(Utils::myrand(0, 999) < node->getCacheMissRate()) { + node->setCacheMiss(); + if(Utils::myrand(0, 99) < node->getCacheWriteBackRate()){ + writeBackCacheLine(ch); + } + loadCacheLine(ch); + node->unsetCacheMiss(); + } + + return nb; + } + + + // Inter CPU communication + writeOnBus(nb, ch); + + return nb; + +} + +void TMLcpuIf::writeBackCacheLine(TMLChannel * ch) { + node->setCacheWriteBackLine(); + writeOnBus(node->getCacheLineSize(), ch); + node->unsetCacheWriteBackLine(); +} + +void TMLcpuIf::loadCacheLine(TMLChannel * ch){ + node->setCacheLoadLine(); + readFromBus(node->getCacheLineSize(),ch ); + node->unsetCacheLoadLine(); +} + + +int TMLcpuIf::read(int nb, TMLChannel *ch) { + TMLcpuIf *writeIf = ch->getWriteIf(); + + // If tasks on the same CPU + if(writeIf->getNode() == node) { + // Cache emulation + if(Utils::myrand(0, 999) < node->getCacheMissRate()) { + node->setCacheMiss(); + if(Utils::myrand(0, 99) < node->getCacheWriteBackRate()){ + writeBackCacheLine(ch); + } + loadCacheLine(ch); + node->unsetCacheMiss(); + } + return nb; + } + + // Tasks on different cpus + readFromBus(nb, ch); + return nb; +} + + + + +void TMLcpuIf::readFromBus(int nb, TMLChannel *ch){ + while(nb > 0) { + rd_bus = 1; + initiator_port.read(ch->mem->If, nb); + rd_bus = 0; + nb -= busWidth; + } +} + + +void TMLcpuIf::writeOnBus(int nb, TMLChannel * ch){ + while(nb > 0) { + wr_bus = 1; + initiator_port.write( ch->mem->If, nb); + wr_bus = 0; + nb -= busWidth; + } +} + + + + +void TMLcpuIf::notifyEvtOnBus(int n_param, TMLEvent * dest){ + int i; + i = 1 + (n_param * 4) / busWidth; + if((n_param * 4) % busWidth) + i++; + for(; i > 0; i--) { + wr_evt_bus = 1; + initiator_port.write(NULL, i); + wr_evt_bus = 0; + } +} diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/interface_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/interface_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..90d0977073df1cbbdc31e8de75310a321194bfa6 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/interface_labsoc.h @@ -0,0 +1,161 @@ +#include "systemc.h" + +#ifndef INTERFACE_LABSOC__H +#define INTERFACE_LABSOC__H + + +class Node; +class TMLChannel; +class TMLEvent; +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "event_labsoc.h" +#include "tlm.h" +#include "bus_types.h" +#include "basic_initiator_port.h" +#include "basic_protocol.h" + + +using basic_protocol::basic_initiator_port; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +using tlm::tlm_transport_channel; + +using tlm::tlm_blocking_get_if; +using tlm::tlm_blocking_put_if; + +// max buffer size in words of width-bit +#define MAX_BUFFER_SIZE 1024 + + + + +class TMLIf{ + public : + + //a channel (in the TLM sense, more like a wire) to connect the interface to the bus + typedef tlm_transport_channel< basic_request< ADDRESS_TYPE , DATA_TYPE > , basic_response< DATA_TYPE > > arb_channel_type; + arb_channel_type wire; + + virtual ~TMLIf() {} +}; + + + +/**Memory interface*/ +class TMLmemIf: public TMLIf, sc_module { +public: + + typedef sc_port< tlm_blocking_get_if < basic_request< ADDRESS_TYPE , DATA_TYPE > > > In_port; + In_port in_port; + + typedef sc_port< tlm_blocking_put_if < basic_response< DATA_TYPE > > > Out_port; + Out_port out_port; + + TMLmemIf(sc_module_name module_name): sc_module( module_name ) , + in_port("in_port"), out_port("out_port"){ + //plug the wire into the port + in_port( wire.get_request_export ); + out_port(wire.put_response_export); + + } + + + +}; + +/**CPU interface*/ +class TMLcpuIf: public TMLIf, sc_module{ +protected: + + int busWidth; + + Node *node; + sc_mutex mutex; + + + +public: + +//a port to produce request on the bus +basic_initiator_port <ADDRESS_TYPE,DATA_TYPE> initiator_port; +sc_port< tlm_blocking_get_if < basic_request< ADDRESS_TYPE , DATA_TYPE > > > in_port; + + +//constructor + TMLcpuIf(sc_module_name module_name): sc_module( module_name ) , + initiator_port("iport"), in_port("inport") +{ + //plug the wire into the port + initiator_port( wire.target_export ); + in_port( wire.get_request_export ); + + rd_bus = wr_bus = wr_evt_bus = 0; + + } + +// These signals represent (when the Interface is used) what it is doing) + sc_signal<bool> rd_bus, wr_bus, wr_evt_bus; + + + + void setBusWidth(int _width){ + busWidth = _width; + } + + int getBusWidth() { + return busWidth; + } + + + + void setNode(Node *n){ + node = n; + } + + Node * getNode(){ + return node; + } + + + // These methods are used from the channels and the events + int write(int nb, TMLChannel *ch); + int read(int nb, TMLChannel *ch); + void notifyEvtOnBus(int n_param, TMLEvent * dest); + + + +protected: + void writeBackCacheLine(TMLChannel *); + void loadCacheLine(TMLChannel * ch); + + // These method are the ones that communicate with the bus + void readFromBus(int nb, TMLChannel *ch); + void writeOnBus(int nb, TMLChannel *ch); + + + + + +}; + + + + + + + +#endif + + + + + + + + + + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/mem_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/mem_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..665d4d74f617197249fb839785501ab86512eefa --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/mem_labsoc.cpp @@ -0,0 +1,100 @@ + +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + + +#include "mem_labsoc.h" + +#include "systemc.h" +#include "interface_labsoc.h" +#include "bus_types.h" +#include "basic_protocol.h" +#include "basic_slave_base.h" + +using basic_protocol::basic_status; +using basic_protocol::basic_slave_base; +using tlm::tlm_transport_if; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +using basic_protocol::basic_status; + +memory::memory() +{ + wr_mem=0; + rd_mem=0; + latency=3; +} + + +void memory::go(){ + REQ req; + RSP rsp; + + for (;;){ + cout << sc_time_stamp() << " memory looking for requests " << endl; + req=If->in_port->get(); + cout << sc_time_stamp() << " memory found the request " <<req.d <<" on " << req.a << endl; + // if (req.d>0){ + + cout << sc_time_stamp() << " memory treating the request " << endl; + switch( req.type ) { + case basic_protocol::READ : + rsp.status = this->read( req.a , rsp.d ); + break; + case basic_protocol::WRITE: + rsp.status = write( req.a , req.d ); + break; + default : + rsp.status = basic_protocol::ERROR; + break; + + } + cout << sc_time_stamp() << " memory sending back the request " << endl; + If->out_port->put(rsp); + + //} + // wait(1, SC_NS); + } +} + + +basic_status memory::write( const ADDRESS_TYPE &a , const DATA_TYPE &d ) +{ + wr_mem=1; + cout << " writing at " << a << " value " << d << endl; + //latency of the memory + wait(latency, SC_NS); + wr_mem=0; + return basic_protocol::SUCCESS; +} + +basic_status memory::read( const ADDRESS_TYPE &a , DATA_TYPE &d ) +{ + + rd_mem=1; + cout << " reading from " << a << " value " << "we do not care" << endl; + //latency of the memory + wait(latency, SC_NS); + rd_mem=0; +return basic_protocol::SUCCESS; +} + +memory::~memory() { + +} diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/mem_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/mem_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..ffb13cd1d8ce9e13203a7ea979555834316c3240 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/mem_labsoc.h @@ -0,0 +1,73 @@ +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + + +#ifndef MEM_LABSOC_HEADER +#define MEM_LABSOC_HEADER + +#include "systemc.h" +#include "bus_types.h" +#include "basic_protocol.h" +#include "basic_slave_base.h" +#include "interface_labsoc.h" + +using basic_protocol::basic_status; +using basic_protocol::basic_slave_base; +using tlm::tlm_transport_if; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +//extends the base class basic_slave_base of TLM, we just redefine the read and write function +class memory +{ +public: + + typedef basic_request< ADDRESS_TYPE , DATA_TYPE > REQ; + typedef basic_response< DATA_TYPE > RSP; + + + int latency;//could be divided into read and write latency if needed + + sc_signal<bool> rd_mem, wr_mem; + + TMLmemIf * If; + + memory(); + void go (); + basic_status write( const ADDRESS_TYPE & , const DATA_TYPE & ); + basic_status read( const ADDRESS_TYPE & , DATA_TYPE & ); + + + void setIf(TMLmemIf * _If){ + If=_If; + } + +void setLatency(int lat){ +latency=lat; +} + + ~memory(); + + + +}; + + + + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/node_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/node_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3601a6abe3eb03feb7b835053b78791278839677 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/node_labsoc.cpp @@ -0,0 +1,186 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc" +#include "parameters.h" +#include "node_labsoc.h" + +void Node::initialize() { + unblockedTask = NULL; + blockedTask = NULL; + terminatedTask = NULL; +} + +int Node::applyEXECIPolicy(int nbEXECI){ + return (int)(cyclesEXECI * nbEXECI); +} + +void Node::setByteDataSize(int _byteDataSize) { + byteDataSize = _byteDataSize; +} + +void Node::setCyclePerEXECIOp(int _cyclesEXECI) { + cyclesEXECI = _cyclesEXECI; +} + +int Node::getByteDataSize() { + return byteDataSize; +} + +int Node::taskHasBeenUnblocked() { + return (unblockedTask != NULL); +} + +void Node::setUnblockedTask(Task *t) { + unblockedTask = t; +} + +Task *Node::getUnblockedTask() { + Task *tmp = unblockedTask; + unblockedTask = NULL; + return tmp; +} + +int Node::taskHasBeenBlocked() { + return (blockedTask != NULL); +} + +void Node::setBlockedTask(Task *t) { + blockedTask = t; + //cout<<"ici\n"; + unsetCurrentTaskSignal(currentTaskSignal); + //cout<<"la\n"; +} + +Task *Node::getBlockedTask() { + Task *tmp = blockedTask; + blockedTask = NULL; + return tmp; +} + +int Node::taskHasBeenTerminated() { + return (terminatedTask != NULL); +} + +void Node::setTerminatedTask(Task *t) { + terminatedTask = t; +} + +Task *Node::getTerminatedTask() { + Task *tmp = terminatedTask; + terminatedTask = NULL; + return tmp; +} + +void Node::setCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal) { + currentTaskSignal = _currentTaskSignal; +} + +void Node::unsetCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal) { + if (currentTaskSignal != NULL) { + *_currentTaskSignal = 0; + } + currentTaskSignal = NULL; +} + +void Node::unsetCurrentTaskSignal() { + if (currentTaskSignal != NULL) { + *currentTaskSignal = 0; + } + currentTaskSignal = NULL; +} + + +// Cristian Macario 11/12/07 +void Node::setCacheMissRate(int _cacheMissRate) { + cacheMissRate = _cacheMissRate; +} + +int Node::getCacheMissRate() { + return cacheMissRate; +} + +void Node::setCacheLineSize(int _cacheLineSize) { + cacheLineSize = _cacheLineSize; +} + +int Node::getCacheLineSize() { + return cacheLineSize; +} + +void Node::setCacheWriteBackRate(int _cacheWriteBackRate) { + cacheWriteBackRate = _cacheWriteBackRate; +} + +int Node::getCacheWriteBackRate() { + return cacheWriteBackRate; +} + +void Node::setCacheMiss(){ + cacheMiss = 1; +} + +void Node::unsetCacheMiss(){ + cacheMiss = 0; +} + +void Node::setCacheWriteBackLine(){ + cacheWriteBackLine = 1; +} + +void Node::unsetCacheWriteBackLine(){ + cacheWriteBackLine = 0; +} + +void Node::setCacheLoadLine(){ + cacheLoadLine = 1; +} + +void Node::unsetCacheLoadLine(){ + cacheLoadLine = 0; +} + + + +// Cristian Macario 11/12/07 +// DEBUG +// including bus +int Node::hasTerminated(){ + return terminated; +} + + + + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/node_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/node_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..e88b06ff730239746b739d16e85a592f5ea76cc6 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/node_labsoc.h @@ -0,0 +1,145 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc" + +#ifndef NODE_LABSOC__H +#define NODE_LABSOC__H + + +class Task; +#include "task_labsoc.h" + + + +class Node { + protected: + + int nbOfTasks; + Task *tasks[MAX_TASK_PER_CPU]; + + int byteDataSize; + int cyclesEXECI; + + Task *unblockedTask; + Task *blockedTask; + Task *terminatedTask; + + sc_signal<bool> *currentTaskSignal; + + + // Cristian Macario 11/12/07 + int cacheMissRate; // In %o + int cacheLineSize; // In bytes + int cacheWriteBackRate; // In % + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + // moved this property from CPURR class to this class +// int terminated; + // terminated has become a signal and it is traced + + + + + public: + + // Cristian Macario 12/12/07 + // DEBUG + // including bus + sc_signal<bool> cacheMiss; + sc_signal<bool> cacheWriteBackLine; + sc_signal<bool> cacheLoadLine; + sc_signal<bool> terminated; + + + // Cristian Macario 05/12/07 + // Defined constructor + // Before nbOfTasks was initialized in the CPURR class constructor + // given that nbOfTasks is a property of this class, it's better + // to do it here. + Node(){ + nbOfTasks = 0; + terminated = 0; + cacheMissRate = 0; + cacheWriteBackRate = 0; + } + + void initialize(); + int applyEXECIPolicy(int nbEXECI); + + void setByteDataSize(int _byteDataSize); + void setCyclePerEXECIOp(int _cyclesEXECI); + int getByteDataSize(); + + void setUnblockedTask(Task *); + int taskHasBeenUnblocked(); + Task *getUnblockedTask(); + void setBlockedTask(Task *); + int taskHasBeenBlocked(); + Task *getBlockedTask(); + void setTerminatedTask(Task *); + int taskHasBeenTerminated(); + Task *getTerminatedTask(); + + void setCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal); + void unsetCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal); + void unsetCurrentTaskSignal(); + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + void setCacheMissRate(int _cacheMissRate); + int getCacheMissRate(); + void setCacheLineSize(int _cacheLineSize); + int getCacheLineSize(); + void setCacheWriteBackRate(int _cacheWriteBackRate); + int getCacheWriteBackRate(); + int hasTerminated(); + void setCacheMiss(); + void unsetCacheMiss(); + void setCacheWriteBackLine(); + void unsetCacheWriteBackLine(); + void setCacheLoadLine(); + void unsetCacheLoadLine(); + + // Cristian Macario 08/02/08 + virtual int getBranchingPredictionMissRate() {return 0;} + virtual void branchMiss(){}; + + +}; + +#endif diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/parameters.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/parameters.h new file mode 100644 index 0000000000000000000000000000000000000000..15019653ff86ff42fca729cb562cdc69f7355c30 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/parameters.h @@ -0,0 +1,53 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + + + +#ifndef PARAMETERS__H +#define PARAMETERS__H + +// CPU +#define MAX_TASK_PER_CPU 10 + + +// TASKS +#define MAX_FUNC_TASK 1024 + +// Cristian Macario 22/11/07 +// Definition of the maximum number of events +#define MAX_EVENT 4096 + + +#endif + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/task_labsoc.cpp b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/task_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..412bbacbcd9cbd4018abc42f0a9508332e4bc97e --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/task_labsoc.cpp @@ -0,0 +1,449 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "task_labsoc.h" +#include "channel_labsoc.h" +#include "utils_labsoc.h" + + +void Task::initialize() { + initWrite = 0; + initRead = 0; +} + +int Task::run() { + cout<<"Task is running -> bad function has been called!\n"; + return 0; +} + +void Task::setNode(Node *_node) { + node = _node; +} + + +int Task::EXECI(int nbOfIntOp) { + int nbOp = node->applyEXECIPolicy(nbOfIntOp); + node->setCurrentTaskSignal(&execi); + return nbOp; +} + +void Task::END_EXECI() { + node->unsetCurrentTaskSignal(&execi); +} + +void Task::TERMINATE(){ + node->setTerminatedTask(this); + runnable = 0; + running = 0; + terminated = 1; + runnable = 0; +} + +void Task::BLOCK(){ + //cout<<"blocking\n"; + node->setBlockedTask(this); + running = 0; + blocked = 1; + runnable = 0; + terminated = 0; + //cout<<"end_blocking\n"; +} + +void Task::UNBLOCK(){ + //node->setUnblockedTask(this); + + // Cristian Macario 22/11/07 + // When a task is blocked by many events and + // then it is unblocked by one of them, + // we call the unblockWaitTask() method of the + // the other blocking events. + for(int i = 0; i < nbOfReceivedEvents; i++) { + if(receivedEvents[i]->getBlockedWaitTask() == this) { + receivedEvents[i]->unblockWaitTask(); + } + } + running = 0; + blocked = 0; + runnable = 1; + terminated = 0; +} + +int Task::WRITE(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *wr_sig, int endFunction) { + // Write initialization + //cout<<"write0\n"; + //currentSig = wr_sig; + if (initWrite == 0) { + initWrite = 1; + //cout<<"write01\n"; + nbToWrite = ch->getNbToWrite(nbOfSamples); + //cout<<"write02\n"; + } + + //cout<<"write1\n"; + + // Test if write has to continue + if (nbToWrite == 0) { + currentFunction = endFunction; + node->unsetCurrentTaskSignal(wr_sig); + initWrite = 0; + return run(); + } + + //cout<<"write2\n"; + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(ch->getReadingNode() != ch->getWritingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + + // Write is not over: calculate the number of samples that can be written + + // Cristian Macario 13/12/07 + // adding bus + // added set and reset signal + // because now during the write operation there can be wait() + *wr_sig = 1; + nbWritten = ch->write(nbToWrite); + *wr_sig = 0; + + + if (nbWritten == 0) { + + // Task must block + ch->setBlockedWriteTask(this); + //cout<<"task is blocked: cannot write"; + BLOCK(); + *wr_sig = 0; + return 0; + } + + //cout<<"write3\n"; + // A one-cycle Write operation is performed + nbToWrite = nbToWrite - nbWritten; + node->setCurrentTaskSignal(wr_sig); + //cout<<"Nb written="<<nbWritten<<" nb to write="<<nbToWrite<<"\n"; + + + // Cristian Macario 06/01/08 + // adding bus + // When channel between 2 CPUs the wait() is done on the interface + if(ch->getReadingNode() != ch->getWritingNode()) { + return 0; + } + return 1; +} + + +// Cristian Macario 21/11/07 +// The following instruction were already executed during +// last time WRITE() was called +void Task::END_WRITE(sc_signal<bool> *wr_sig) { +// node->unsetCurrentTaskSignal(wr_sig); +// initWrite = 0; +} + +int Task::READ(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *rd_sig, int endFunction) { + // Read initialization + if (initRead == 0) { + initRead = 1; + nbToRead = ch->getNbToRead(nbOfSamples); + } + + // Test if read has to continue + if (nbToRead == 0) { + //cout<<"Well, nothing to be read"; + currentFunction = endFunction; + node->unsetCurrentTaskSignal(rd_sig); + initRead = 0; + return run(); + } + + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(ch->getReadingNode() != ch->getWritingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + // Read is not over: calculate the number of samples that can be read + + // Cristian Macario 13/12/07 + // adding bus + // added set and reset signal + // because now during the read operation there can be wait() + *rd_sig = 1; + nbRead = ch->read(nbToRead); + *rd_sig = 0; + + if (nbRead == 0) { + // Task must block + ch->setBlockedReadTask(this); + //cout<<"task is blocked: cannot read"; + BLOCK(); + *rd_sig = 0; + return 0; + } + + // A one-cycle Write operation is performed + nbToRead = nbToRead - nbRead; + node->setCurrentTaskSignal(rd_sig); + //cout<<"Nb read="<<nbRead<<" nb to read="<<nbToRead<<"\n"; + + // Cristian Macario 14/01/08 + // adding bus + // When channel between 2 CPUs the wait() is done on the interface + if(ch->getReadingNode() != ch->getWritingNode()) { + return 0; + } + + return 1; +} + + +// Cristian Macario 21/11/07 +// The following instruction were already executed during +// last time WRITE() was called +void Task::END_READ(sc_signal<bool> *rd_sig) { +// node->unsetCurrentTaskSignal(rd_sig); +// initRead = 0; +} + + +int Task::WAIT_EVENT(TMLEvent *evt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig, int endFunction) { + Event *event; + + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + *wait_sig = 1; + event = evt->wait(); + *wait_sig = 0; + + if (event == NULL) { + //cout<<"null event 0\n"; + node->unsetCurrentTaskSignal(wait_sig); + //cout<<"null event 1\n"; + evt->setBlockedWaitTask(this); + //cout<<"null event 2\n"; + //cout<<"task is blocked: cannot get event (wait op)\n"; + BLOCK(); + //cout<<"null event 3\n"; + return 0; + } + + *param0 = event->param0; + *param1 = event->param1; + *param2 = event->param2; + free(event); + node->setCurrentTaskSignal(wait_sig); + currentFunction = endFunction; + + // Cristian Macario 04/02/08 + // adding bus + // When event between 2 CPUs the wait() is done on the interface + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + return 0; + } + + return 1; +} + +void Task::END_WAIT(sc_signal<bool> *wait_sig) { + node->unsetCurrentTaskSignal(wait_sig); +} + + +// Critian Macario 27/11/07 +// modified the definition of the function: +// we need end function as an argument +int Task::NOTIFY_EVENT(TMLEvent *evt, int param0, int param1, int param2, sc_signal<bool> *notify_sig, int endFunction) { + //cout<<"Notify Event!\n"; + Event *event = new Event(); + event->param0 = param0; + event->param1 = param1; + event->param2 = param2; + //cout<<"Calling notify()\n"; + + + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + + // Cristian Macario 05/02/08 + // Need to set the signal becuase there + // can be wait() while notifying + *notify_sig = 1; + // Cristian Macario 22/11/07 + // if finite blocking fifo, event may not be notified + // and block the task + if(!evt->notify(event)) { + *notify_sig = 0; + node->unsetCurrentTaskSignal(notify_sig); + evt->setBlockedNotifyTask(this); + BLOCK(); + return 0; + } + *notify_sig = 0; + + // Cristian Macario 27/11/07 + // Update current function if event has been notified + currentFunction = endFunction; + + //cout<<"Notify done!\n"; + node->setCurrentTaskSignal(notify_sig); + + // Cristian Macario 04/02/08 + // adding bus + // When event between 2 CPUs the wait() is done on the interface + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + return 0; + } + + + return 1; +} + +void Task::END_NOTIFY(sc_signal<bool> *notify_sig) { + node->unsetCurrentTaskSignal(notify_sig); +} + +int Task::NOTIFIED_EVENT(TMLEvent *evt, int *notified, sc_signal<bool> *notified_sig) { + *notified = evt->notified(); + node->setCurrentTaskSignal(notified_sig); + return 1; +} + +void Task::END_NOTIFIED(sc_signal<bool> *notified_sig) { + node->unsetCurrentTaskSignal(notified_sig); +} + +int Task::SELECT_EVENT(TMLEvent *evt[], int nbEvt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig[], int endFunction[]) { + int i = 0, index=0, j, k; + Event *event = NULL; + int found = 0; + + if (nbEvt == 0) { + return 0; + } + + //cout<<"select0\n"; + index = Utils::myrand(0, nbEvt-1); + for(i=0; i<nbEvt; i++) { + j =(index+i)%nbEvt; + event = evt[j]->wait(); + if (event == NULL) { + *wait_sig[j] = 0; + evt[j]->setBlockedWaitTask(this); + } else if (found == 0) { + found = 1; + for(k=0; k<nbEvt; k++) { + *wait_sig[k] = 0; + evt[k]->unblockWaitTask(); + } + //*wait_sig[j] = 1; + node->setCurrentTaskSignal(wait_sig[j]); + currentFunction = endFunction[j]; + break; + } + } + + //cout<<"select1\n"; + + if (found == 0) { + //cout<<"task is blocked: cannot get event (select op)"; + BLOCK(); + return 0; + } + + //cout<<"select2\n"; + + *param0 = event->param0; + *param1 = event->param1; + *param2 = event->param2; + free(event); + + //cout<<"select3\n"; + + return 1; +} + + +void Task::END_SELECT(sc_signal<bool> *wait_sig) { + node->unsetCurrentTaskSignal(wait_sig); +} + + +int Task::getPriority() { + return priority; +} + +void Task::setPriority(int _priority) { + priority = _priority; +} + + +// Cristian Macario 22/11/07 +// Definition of the method +void Task::addReceivedEvent(TMLEvent * evt) { + if(nbOfReceivedEvents < MAX_EVENT) { + receivedEvents[nbOfReceivedEvents++] = evt; + } else { + cout<<"Too many events connected to the same task"<<endl; + exit(0); + } +} + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/task_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/task_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..a1fd8f4354a618e3259c9d8e6d277db6382bc7bc --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/task_labsoc.h @@ -0,0 +1,132 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#ifndef TASK_LABSOC__H +#define TASK_LABSOC__H + +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "event_labsoc.h" + + +class Task { + private: + Node *node; + + public: + sc_signal<bool> runnable; + sc_signal<bool> running; + sc_signal<bool> terminated; + sc_signal<bool> blocked; + + sc_signal<bool> execi; + + // Cristian Macario 21/11/2007 + // the following signals were not used + /* + sc_signal<bool> wr; + sc_signal<bool> rd; + */ + + //sc_signal<bool> currentSig; + + +protected: + int currentFunction; + int nbToWrite; + int nbToRead; + int nbWritten; + int nbRead; + int initWrite; + int initRead; + int initWait; + + int priority; + + // Cristian Macario 22/11/07 + // List of the events received by the task + TMLEvent * receivedEvents[MAX_EVENT]; + int nbOfReceivedEvents; + + +public: + Task() { + currentFunction = 0; + + // Cristian Macario 22/11/07 + // Initialize the number of received events + nbOfReceivedEvents = 0; + } + + void initialize(); + virtual int run(); + void setNode(Node *_node); + int EXECI(int nbOfIntOp); + void END_EXECI(); + void TERMINATE(); + void BLOCK(); + void UNBLOCK(); + int WRITE(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *wr_sig, int endFunction); + void END_WRITE(sc_signal<bool> *wr_sig); + int READ(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *rd_sig, int endFunction); + void END_READ(sc_signal<bool> *rd_sig); + + // Cristian Macario 27/11/07 + // Modified the prototype of the method: added the endFunction parameter + int NOTIFY_EVENT(TMLEvent *evt, int param0, int param1, int param2, sc_signal<bool> *wait_sig, int endFunction); + + void END_NOTIFY(sc_signal<bool> *wait_sig); + int WAIT_EVENT(TMLEvent *evt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig, int endFunction); + void END_WAIT(sc_signal<bool> *wait_sig); + int NOTIFIED_EVENT(TMLEvent *evt, int *notified, sc_signal<bool> *notified_sig); + void END_NOTIFIED(sc_signal<bool> *notified_sig); + int SELECT_EVENT(TMLEvent *evt[], int nbEvt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig[], int endFunction[]); + void END_SELECT(sc_signal<bool> *wait_sig); + + int getPriority(); + void setPriority(int _priority); + + // Cristian Macario 22/11/07 + // Added method to add received events + void addReceivedEvent(TMLEvent * evt); + + virtual ~Task() {} +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/taskcpu_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/taskcpu_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..e64d97dc9a626b15c50e0d341e6273b8d92acab8 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/taskcpu_labsoc.h @@ -0,0 +1,73 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +"²software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" +#include "task_labsoc.h" + +#ifndef TASKCPU_LABSOC__H +#define TASKCPU_LABSOC__H + + +// Cristian Macario 06/12/07 +// Modified data structure to make code more readable +/* +class TaskCPURR { + public: + Task *task; + int nbOfInstInPipeline; + TaskCPURR *nextRunnable; + TaskCPURR *nextTerminated; + TaskCPURR *nextBlocked; +}; +*/ +class TaskCPURR { + public: + Task *task; + int nbOfInstInPipeline; + TaskCPURR *next; +}; + + +class TaskOneNode { + public: + Task *task; + TaskOneNode *nextRunnable; + TaskOneNode *nextTerminated; + TaskOneNode *nextBlocked; +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/utils_labsoc.h b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/utils_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..23ca7b9d2dcaa393ca2ee1fc8eb5e5c7a7dee155 --- /dev/null +++ b/preinstallTTool/linux/TTool/simulators/systemc1/src_simulator/utils_labsoc.h @@ -0,0 +1,88 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + + +#include "systemc.h" + +#ifndef UTILS_LABSOC__H +#define UTILS_LABSOC__H + +// Cristian Macario 21/11/07 +// Improved definition of macros +//#define div(a,b) a/b +//#define mod(a,b) a%b +#define div(a,b) ((a)/(b)) +#define mod(a,b) ((a)%(b)) + + +typedef char s8; +typedef short s16; +typedef int s32; + +class Utils { + public: + + //Random No between n1 and n2 (both inclusive) + + // Cristian Macario + // Improved the random generator + static int myrand(int n1, int n2) + { + static bool firstTime = true; + + if(firstTime){ + srand(time(NULL)); + firstTime = false; + } + + n2++; + + /* + int rnd = (int)(((float)n2)*rand()/RAND_MAX); + + while(rnd < n1) + { + int rnd_dummy = (int)((float)n1*rand()/RAND_MAX+1.0); + rnd = rnd + rnd_dummy; + } + return rnd; + */ + + return (n1 + (int)(((float)(n2 - n1))*rand()/(RAND_MAX + 1.0))); + } +}; + +#endif + + diff --git a/preinstallTTool/linux/TTool/tmlcode/README_tml b/preinstallTTool/linux/TTool/tmlcode/README_tml new file mode 100644 index 0000000000000000000000000000000000000000..5ca05cf572b858aa03ed7bea4acf2256c236933a --- /dev/null +++ b/preinstallTTool/linux/TTool/tmlcode/README_tml @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The tmlcode directory is intended to store the TML / TMAP files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/ttool.exe b/preinstallTTool/linux/TTool/ttool.exe new file mode 100755 index 0000000000000000000000000000000000000000..afb0d3bbb09b023568a5361978e159701ff53032 --- /dev/null +++ b/preinstallTTool/linux/TTool/ttool.exe @@ -0,0 +1 @@ +cd bin; java -Xmx1024m -jar ttool.jar -launcher -config config.xml -nc -diplodocus -avatar -proverif diff --git a/preinstallTTool/linux/TTool/uppaal/README_uppaal b/preinstallTTool/linux/TTool/uppaal/README_uppaal new file mode 100644 index 0000000000000000000000000000000000000000..4afeb66886c3aa72bf07e1c77ccf256690e8c9a8 --- /dev/null +++ b/preinstallTTool/linux/TTool/uppaal/README_uppaal @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The uppaal directory is intended to store the uppaal files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP \ No newline at end of file diff --git a/preinstallTTool/linux/TTool/vcd/README_vcd b/preinstallTTool/linux/TTool/vcd/README_vcd new file mode 100644 index 0000000000000000000000000000000000000000..a44e630c0ca48a5973305289d318511cfe5a0647 --- /dev/null +++ b/preinstallTTool/linux/TTool/vcd/README_vcd @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +This directory is meant to host vcd files generated by TTool from Power Analysis. diff --git a/preinstallTTool/linux/proverif/CHANGES b/preinstallTTool/linux/proverif/CHANGES new file mode 100644 index 0000000000000000000000000000000000000000..11f679ea9ad902d1f8a90061c054e91db0c06f4d --- /dev/null +++ b/preinstallTTool/linux/proverif/CHANGES @@ -0,0 +1,465 @@ +This file summarizes the most important changes between versions +of the cryptographic protocol verifier. + +Version 1.90 + +- Reimplemented the merging of two processes into one biprocess +(with V. Cheval) +- Allowing to specify which arguments the internal reprsentation of +a name should have, using the construct new a[x,y,...]:t +- Allow to declare several equations in a single declaration, possibly +with options [convergent] or [linear]. This extension allows one +to bypass the termination test for equations corresponding to a +convergent rewrite system: ProVerif continues with a warning when +the termination test fails for equations marked [convergent]. +- Modified the semantics of boolean operators && and ||: when the result +is known from the first argument, the second argument is supposed not +to be evaluated, so the conjunction or disjunction succeeds in this case +even if the second argument fails. +- Fixed serious bug that could yield incorrect result with +"set ignoreTypes = false". +- Fixed bug in display of an error message in the verification of +the implementability of predicates +- Fixed bug with "set movenew = true" and queries "new a[x = ...]": +when x was defined above "new a" and also under "new a" and movenew +lead to moving "new a" under the second definition of x, the wrong +occurrence of x was used in the query. + +Version 1.89 + +- Changed the weight of the goal in the selection function to 3000, to give +the possibility to have a nounif declaration (with weight less than 3000) +such that ProVerif selects facts that match that nounif declaration +rather than selecting the goal. +- Fixed bug in Spass output. +- Allow "table(t(...))" in query, not, and nounif. +- Improved unification modulo to speed it up and avoid a +stack overflow. + +Version 1.88pl1 + +- Changed priorities in the parser, so that (! P1 | ! P2) is +interpreted as ((! P1) | (! P2)) and not as (! (P1 | ! P2)). +- Fixed bug that could lead to an internal error when a query, a not, or +a nounif declaration refers to a bound name that is never generated. +ProVerif now displays a proper error message in this case. + +Version 1.88 + +- Remove subsumed clauses and tautologies from attacker clauses +before displaying them. + +Version 1.87beta6 + +- Fixed several bugs that lead to internal errors instead of +displaying a proper error message. +- Elimination of redundant hypotheses now considers blocking predicates +like events. + +Summary of changes between version 1.86pl4 and version 1.87beta5: + +- Typed and untyped pi calculus front-ends: + Extended definition of destructors, by Vincent Cheval. + Now, destructors must be deterministic. +- Typed pi calculus front-end: + - Extension of the class of observational equivalences that can be proved, + by encoding more operations into terms. Automatic transformation of + processes to benefit from this extension, by Vincent Cheval. + - Query "equivalence P1 P2" to prove the observational equivalence between + two processes P1 and P2, by Vincent Cheval. + - Functions marked "typeConverter" are now automatically marked "data" as + well. + - Added an "else" branch to the "get" construct +- New keywords: + - Typed pi calculus front-end: equivalence, fail, or, otherwise + - Untyped pi calculus front-end: can, fail, otherwise, where + These keywords can no longer be used as ordinary identifiers. +- Fixed bugs: + - Fixed bug in attack reconstruction + - Fixed bug for query noninterf...among: a clause was forgotten + that allows the adversary to test whether the secret is a tuple. + - Fixed bug in attack reconstruction with patterns =M where the + term M contains a destructor with several rewrite rules. + - Removed decompData/decompDataSelect options for user-defined + predicates in the pi/typed pi calculus front-ends, for several reasons: + * These predicates caused bugs + * For user-defined predicates, it is not very likely that + decompData/decompDataSelect are useful + * The same effect can be achieved by using the equivalences + forall x1:T1, ..., xn:Tn; p(x1) && ... && p(xn) <=> p(f(x1,...,xn)) + for each data constructor f, in the "clauses" section. + - Improved termination heuristic so that it does not trigger + uselessly. + - Fixed bug with references to bound names of the form new a[x_1 = ...] + where the variable name x_1 ends with underscore followed by a number. + (This bug could lead to an error message saying x_1 was not bound, + when in fact it was.) + - Fixed bug with nested "letfun" with local variables (there was some + mixing between these variables) + - Fixed bug: choice was ignored when it occurred only in patterns. + - Fixed bug: "else" branches could not be omitted in "if" and + "let...suchthat" terms. +- Improved the proof of equivalences in case "if M then P else Q" +with Q = 0: the case in which M fails and the case in which M succeeds +and is false cannot be distinguished by the adversary. +- The term "let pat = M in M'" has changed meaning: when M or the +pattern-matching fails, its value is fail, instead of stopping the +whole process. +- The argument of events is always evaluated, even when the event itself +is useless (proof of equivalences, of correspondences that do not involve +that event). +- Patterns (x, =M) in which M depends on x are now forbidden for simplicity. +(Use pattern matching followed by a test to encode that.) +- Optimized elimination of redundant hypotheses + +Details of the changes in the beta releases: + +* Version 1.87beta5 + +- Cosmetic changes only. + +* Version 1.87beta4 (not a public release) + +- Reactivated all front-ends +- New destructors in the untyped front-end +- Simplified the test that destructors are deterministic +- Optimized elimination of redundant hypotheses +- When proving equivalences, the arguments of names are now +choice[.,.] instead of pairs. +- Fixed soundness bugs with choice and with noninterf in case of +inputs with pattern-matching +- Fixed bug in the generation of Horn clauses for trace properties +(some branches were cut too quickly) +- Fixed bug: choice was ignored when it occurred only in patterns. +- Fixed bug with references to bound names of the form new a[x_1 = ...] +where the variable name x_1 ends with underscore followed by a number. +(This bug could lead to an error message saying x_1 was not bound, +when in fact it was.) +- Fixed bug in the computation of rewrite rules for new +destructors (it may have generated too many rules) + +* Version 1.87beta3 (not a public release; restricted to the typed +front-end) + +- Optimized elimination of redundant hypotheses +- In the definition of user-defined predicates, the meaning of clauses +is the following: the fact in the conclusion holds when the hypotheses +hold and all the arguments of the predicates, equalities and +inequalities in the clause do not fail. (This is closer to the +semantics of user-defined predicates with the old destructors.) +- The argument of events is always evaluated, even when the event itself +is useless (proof of equivalences, of correspondences that do not involve +that event). +- Patterns (x, =M) in which M depends on x are now forbidden for simplicity. +(Use pattern matching followed by a test to encode that.) +- Final fix for the bug that could lead to forgetting some rewrite +rules of destructors, when the new destructors of ProVerif 1.87beta +were combined with equational theories. (This bug was quickly patched +in version 1.87beta2.) +- Fixed bug in which a non-deterministic destructor was not detected as such. +- With respect to ProVerif version 1.86, the term "let pat = M in M'" has +changed meaning: when M or the pattern-matching fails, its value is fail, +instead of stopping the whole process. + +* Version 1.87beta2 (not a public release; restricted to the typed +front-end) + +- Re-allow proofs of trace properties, noninterf, weaksecr, +updated to the new destructors of ProVerif 1.87beta +- Added an "else" branch to the "get" construct +- Improved the proof of equivalences in case "if M then P else Q" +with Q = 0: the case in which M fails and the case in which M succeeds +and is false cannot be distinguished by the adversary. +- Fixed bug in attack reconstruction: f(...fail...) was left as it is +instead of reducing it to fail, when f is a constructor. +- Fixed bug in merging of parallel processes that could lead to +swapping the first and second processes to merge. +- Quick patch for a bug that could lead to forgetting some rewrite +rules of destructors, when the new destructors of ProVerif 1.87beta +were combined with equational theories +- Also fixed problems that occurred in ProVerif 1.86pl4: + - Fixed bug for query noninterf...among: a clause was forgotten + that allows the adversary to test whether the secret is a tuple. + - Fixed bug in attack reconstruction with patterns =M where the + term M contains a destructor with several rewrite rules. + - Removed decompData/decompDataSelect options for user-defined + predicates in the pi/typed pi calculus front-ends, for several reasons: + * These predicates caused bugs + * For user-defined predicates, it is not very likely that + decompData/decompDataSelect are useful + * The same effect can be achieved by using the equivalences + forall x1:T1, ..., xn:Tn; p(x1) && ... && p(xn) <=> p(f(x1,...,xn)) + for each data constructor f, in the "clauses" section. + - Improved termination heuristic so that it does not trigger + uselessly. + +* Version 1.87beta (restricted to the typed front-end and to proofs of +equivalences with choice) + +- Extended definition of destructors, by Vincent Cheval. +Now, destructors must be deterministic. +- Extension of the class of observational equivalences that can be proved, +by encoding more operations into terms. Automatic transformation of +processes to benefit from this extension, by Vincent Cheval. +- Query "equivalence P1 P2" to prove the observational equivalence between +two processes P1 and P2, by Vincent Cheval. +- Functions marked "typeConverter" are now automatically marked "data" as +well. +- Fixed bug in attack reconstruction + + +Version 1.86pl4 + +- Removed setting "set ignoreTypes = attacker", still accepted as a synonym +of "set ignoreTypes = false" for compatibility. +- Functions marked "data" can no longer be marked "private". (Functions +marked "private, data" were not correctly handled.) +- Equations now must not introduce variables in their right-hand side +that do not occur in the left-hand side. (There was a bug with such +equations.) +- Fixed bug that could cause Internal error: Name ... has bad type/bad arity. +- Fixed bug that could cause an internal error due to an incorrect +expansion of the condition of "get ... suchthat". + +Version 1.86pl3 + +- Fixed bugs in the generation of clauses for proofs of equivalences. + +Version 1.86pl2 + +- Fixed bug in the selection function for proofs of equivalences. +(This bug could cause non-termination.) + +Version 1.86pl1 + +- Fixed minor display bug (missing parenthesis in display of outputs +on private channels) +- Fixed bug in the proof of non-blocking predicates in queries + +Version 1.86 + +- HTML output, using the command line option -html <html directory> +- basic emacs mode with coloring + +Version 1.85 + +- documentation for the typed pi calculus front-end, which is now +the recommended input format. +- fixed bug in attack reconstruction with passive adversaries. +- fixed display bug that could lead in some rare cases to display +distinct variables with the same name. +- nicer display: occurrences starting from 1 and in increasing order, +omit trailing 0, reuse initial variable name when possible, ... + +Version 1.84pl2 + +- fixed bug in the generation of clauses for observational +equivalence (choice) + +Version 1.84pl1 + +- some improvements in error messages +- fixed display bug for queries with empty conjunctions +- fixed internal error in trace reconstruction for equivalences that +appeared when the final, distinguishing step was a test that a message +is a given constant. + +Version 1.84 + +- elimVar and elimVarStrict are now forbidden in pi calculus front-ends. +- elimtrue no longer accepts star variables. +- improved performance of simplification of derivations and of +unifyDerivation for very large traces. + +Version 1.83 + +- renamed the executable to proverif +- improved the simplification of derivations, in particular in +the presence of private channels. +- fixed internal error that happened in some cases when trying +to reconstruct attacks against injective correspondences. + +Version 1.82 + +- fixed bug in the compromise of session keys (free names were missing + in the terms that are allowed to build compromised terms). +- fixed two bugs in trace reconstruction (one in the presence of choice, + one in the presence of phases). +- fixed some bugs in the protocol models. +- fixed bugs in proveriftotex (use LaTeX macros when special TeX characters + appear in the ProVerif file to convert; some ProVerif constructs were + not handled due to an outdated lexer file). +- typed front-end: for CryptoVerif compatibility, + - added a def/expand macro mechanism + - added -lib command-line option + - added tables, in particular useful for tables of keys + (the same construct will be added to CryptoVerif; one will be able to use + it instead of find in the initial game) + - allow empty patterns (), allow "let" without "in", allow "if f(...) then" + when f returns a result of type bool. + +Version 1.81 (not a public release) + +- improved proof of injective correspondences when there are +several occurrences in the process of the events that occur after ==> +in the query. +- heuristic "unifyDerivation" now active by default, and iterated +(following File, Vigo, CSF'09). +- when -in <format> is not specified, the input format is now selected +by the extension of the file: + .pv for the typed pi-calculus front-end + .pi for the untyped pi-calculus front-end + .horntype for the typed Horn clauses front-end +In all other cases, the untyped Horn clauses front-end. Case is not +significant in file extensions. +- typed front-end: + - type "bool" and constants "true" and "false" now declared by default; + - "not" allowed as an ordinary function; + - bound names of the process must be preceded by "new" when they are + used in queries, for more clarity; + - "if", "let", "new" now allowed in terms (by expanding them into processes). + - declarations "param", "proba", "proof" allowed (but ignored) for + compatibility with CryptoVerif + - for type declarations, options between brackets allowed (but ignored) for + compatibility with CryptoVerif + - ! i <= N allowed for compatibility with CryptoVerif. + - yield allowed as a synonym of 0 for compatibility with CryptoVerif + - declarations "letfun f(x1:t1, ..., xn:tn) = M" + - declaration "channel c1,...,cn." as a synonym for + "free c1,...,cn:channel." for compatibility with CryptoVerif. + +Version 1.80 (not a public release) + +- new front-end with types and parametric processes (in progress) +- reorganized examples according to the front-end they use +- do not display the generated clauses by default (but a command-line +option "-test" and a setting "param verboseClauses = explained" display them) +- removed setting "param channels = names" +- allow injective events to occur several times (but only in different +branches of tests) +- fixed bug in the verification that a rewrite system is confluent + +Version 1.18pl1 + +- fixed bug in attack reconstruction in the presence of a passive +adversary that caused an internal error. +- minor changes in the examples. + +Version 1.18 + +- reconstruction of attacks against injective correspondences +- when an injective correspondence is not proved, also give the result +of the corresponding non-injective correspondence, for information. + +Version 1.17 + +- reconstruction of attacks for processes with "choice" +- reconstruction of attacks for query noninterf +- display of traces with locations of the executed inputs, outputs, and events +in the process. +- display terms that represent names in the form a[x = ..., y = ..., ...] +to relate the arguments of the names to variables in the process. +- option -color to display a colored output on terminals that support ANSI +color codes. + +Version 1.16 + +- reconstruction of attacks for query weaksecret +- fixed bug with predicate is_name in the output of clauses in Spass format + +Version 1.15 + +- ProVerif now provides explanations of where the clauses come from +- ProVerif uses abbreviations in the display of derivations +- ProVerif explains the derivations by referring to the process +- fixed some bugs in the output of clauses in Spass format +- fixed a recently introduced bug in attack reconstruction that caused +attack reconstruction to fail in some cases in which it should have succeeded. + +Version 1.14 + +- fixed some bugs. +- removed "param allVarsInNames = ...", replaced with an automatic mechanism +- improved naming of variables in clauses, so that they use process variable + names more often. +- extended "nounif" instructions. +- removed limitation to 10 phases. +- added optimization "refTransAtt" for reflexive and transitive predicates + whose arguments are known by the attacker (by Avik Chaudhuri and + Bruno Blanchet). + +Version 1.13 + +- fixed bug with queries "query f ==> x == y." +- the system is now capable of saying that some injective queries are false. +- additional option "param redundantHypElim = beginOnly." + +Version 1.12 + +- improved trace reconstruction for very big traces. + +Version 1.11 + +- verification of protocols subject to dictionary attacks +- verification of observational equivalence of processes that differ + only by the terms they use +- reconstruction of an execution trace that corresponds to an attack +- generalization of the optimizations + pred p/n decompData (see rules F1 & ... & Fn <-> F and F1 & ... & Fn <=> F), + pred p/n elimVar (see elimtrue F), + and, for the pi-calculus front-end, not F. +- reworked treatment of equations +- various bug fixes and internal improvements +- removed deprecated keywords anytrue, tupleinv, blocking. + +Version 1.10 + +- new query system (incompatible with previous versions) +- converter ProVerif to TeX +- improved treatment of inequalities in the presence of equations +(previously, syntactic inequality was used as a sound approximation +of inequality modulo an equational theory) + +Version 1.09 + +- proof of strong secrecy +- scenarios with several phases +- inequalities with universally quantified variables. +- precise analysis of else clauses of destructors +(before, they were considered as a parallel composition) +- improvement in treatment of equations +- optimization: elimination of redundant hypotheses in clauses + +Version 1.08 (not a public release) + +- let ... suchthat ... construct and predicates. +- special treatment for lists. + +Version 1.07 + +- A few more optimizations. + +Version 1.06 (not a public release) + +- A single executable program, that can take several input formats and +output several kinds of results. + +Version 1.05alpha (not a public release) + +- More general treatment of equations (including f(x,g(y)) = f(y,g(x)) +used for Diffie-Hellman but also other simple equations; however, +associativity for instance is not supported). +- Pattern-matching construct +- Parameter to set whether communications are allowed on channels that +are not names. +- Key compromise is now compatible with authenticity +- Verification of more general event specifications, not only +authenticity (begin* and end*) +- Optimization of the subsumption test (can give dramatic speedups) +- Redundancy test: when a rule with empty selection is derivable from +several other rules with empty selection, it is removed. +- Various small bug fixes and cosmetic changes + +Version 1.00alpha + +First release. diff --git a/preinstallTTool/linux/proverif/LICENSE b/preinstallTTool/linux/proverif/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..5b6e7c66c276e7610d4a73c70ec1a1f7c1003259 --- /dev/null +++ b/preinstallTTool/linux/proverif/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/preinstallTTool/linux/proverif/README b/preinstallTTool/linux/proverif/README new file mode 100644 index 0000000000000000000000000000000000000000..5f19ca960c44aaee472402f0f7156994eafffa6a --- /dev/null +++ b/preinstallTTool/linux/proverif/README @@ -0,0 +1,115 @@ +Protocol verifier, copyright INRIA-CNRS, by Bruno Blanchet +and Vincent Cheval, 2000-2015. + +This software can be used to prove secrecy and authenticity properties +of cryptographic protocols. + +INSTALL + +To run this software, you need Objective Caml version 3.00 or +higher. Objective Caml can be downloaded from + http://caml.inria.fr +Furthermore, on Mac OS X, you need to install XCode if you do not +already have it. It can be downloaded from + https://developer.apple.com/xcode/ + +* under Unix / Mac + +Uncompress the source and documentation archives using tar: + + gunzip proverif1.90.tar.gz + tar -xf proverif1.90.tar + gunzip proverifdoc1.90.tar.gz + tar -xf proverifdoc1.90.tar + +or if you have GNU tar: + + tar -xzf proverif1.90.tar.gz + tar -xzf proverifdoc1.90.tar.gz + +This will create a directory named proverif1.90 in the current directory. +Go into this directory, and build the programs: + + cd proverif1.90 + ./build + +* under Windows + +Uncompress the archives proverif1.90.tar.gz and proverifdoc1.90.tar.gz +using Winzip, in the directory of your choice. This will create a +subdirectory named proverif1.90. Open a DOS window, cd into the +proverif1.90 directory and run the build .BAT file: + + build + +The system can run under Windows, but it is not very Windows-friendly: +you have to use the command line to run the programs. Improving the interface +is on the to-do list... + +USAGE + +This software contains two executable programs, proverif and proveriftotex. + +The program proverif takes as input a description of a cryptographic +protocol, and checks whether it satisfies secrecy, authenticity, or +equivalence properties. The description of the protocol can have +several different formats. The recommended format is the typed pi +calculus format, which is a dialect of the applied pi calculus (Abadi +and Fournet, POPL'01). The description of the protocol is first +translated into Horn clauses, then the core of the verifier is called. +This input format is documented in the file docs/manual.pdf +(found in proverifdoc1.90.tar.gz). Examples of protocol descriptions +can be found in the examples/pitype subdirectory. +To run these examples, use + ./proverif <filename>.pv +or if your filename does not end in .pv, + ./proverif -in pitype <filename> +For example: + ./proverif examples/pitype/secr-auth/NeedhamSchroederPK.pv + +Other input formats are documented in the file docs/manual-untyped.pv +Research papers can be downloaded at + http://prosecco.inria.fr/personal/bblanche/publications/index.html +They are not included in the distribution because of copyright differences. +(You cannot redistribute these papers.) + +The program proveriftotex takes as input a protocol description +and converts it into a LaTeX file. This is useful for including +protocols in research papers. + +The scripts "test" and "test-type" runs several tests (Unix or cygwin only): +You can run them by + ./test all + ./test-type all +The output of these scripts is written in the directory tests. The +filename of the output contains the argument of "test" and the +date/time of the run. + +COPYRIGHT + +This software is distributed under the GNU general public license. +See the file LICENSE for more information. + +BUG REPORTS + +Bugs and comments should be reported by e-mail to + Bruno.Blanchet@inria.fr + +MAILING LIST + +A mailing list is available for discussions on ProVerif. New releases +are announced on this mailing list. + +* If you wish to subscribe, send an email to sympa@inria.fr with subject +"subscribe proverif <your name>" (without quotes) and an empty body. + +* To post a message on the list, send it to proverif@inria.fr. +To avoid spam, only people that have subscribed to the list can post. + +ACKNOWLEDGMENTS + +I would like to thank all users of ProVerif who contributed to the +development of the software by their helpful remarks. +From July 2008 to October 2010, the development of ProVerif was partly +supported by DGA. + diff --git a/preinstallTTool/linux/proverif/README_proverif b/preinstallTTool/linux/proverif/README_proverif new file mode 100644 index 0000000000000000000000000000000000000000..16e2aac6f30bfb157281a17bfc5532db2a8348f4 --- /dev/null +++ b/preinstallTTool/linux/proverif/README_proverif @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at Telecom ParisTech, http://ttool.telecom-paristech.fr/ +------------------------------------------------------------------------------- + +The proverif directory is intended to store the proverif files generated from TTool. To generate these files, please refer to http://ttool.telecom-paristech.fr/ \ No newline at end of file diff --git a/preinstallTTool/linux/proverif/build b/preinstallTTool/linux/proverif/build new file mode 100755 index 0000000000000000000000000000000000000000..055af7fd88d59e41a1302f3d9e24b0cc1072a074 --- /dev/null +++ b/preinstallTTool/linux/proverif/build @@ -0,0 +1,22 @@ +#!/bin/sh + +cd src + +ocamlyacc parser.mly +ocamllex lexer.mll +ocamlyacc piparser.mly +ocamllex pilexer.mll +ocamlyacc pitparser.mly +ocamllex pitlexer.mll +ocamlopt -o ../proverif parsing_helper.mli parsing_helper.ml stringmap.mli stringmap.ml ptree.mli piptree.mli pitptree.mli types.mli pitypes.mli param.mli param.ml parser.mli parser.ml lexer.ml queue.mli queue.ml terms.mli terms.ml termslinks.mli termslinks.ml display.mli display.ml history.mli history.ml termsEq.mli termsEq.ml pievent.mli pievent.ml weaksecr.mli weaksecr.ml noninterf.mli noninterf.ml selfun.mli selfun.ml rules.mli rules.ml syntax.mli syntax.ml tsyntax.mli tsyntax.ml piparser.mli piparser.ml pilexer.ml pitparser.mli pitparser.ml pitlexer.ml spassout.mli spassout.ml reduction_helper.mli reduction_helper.ml simplify.mli simplify.ml pisyntax.mli pisyntax.ml pitsyntax.mli pitsyntax.ml pitransl.mli pitransl.ml pitranslweak.mli pitranslweak.ml destructor.mli destructor.ml reduction.mli reduction.ml reduction_bipro.mli reduction_bipro.ml piauth.mli piauth.ml main.ml + +ocamllex lexertotex.mll +ocamllex pitlexertotex.mll +ocamlopt -o ../proveriftotex parsing_helper.cmx param.cmx piparser.cmx pilexer.cmx pitparser.cmx pitlexer.cmx fileprint.ml lexertotex.ml pitlexertotex.ml proveriftotex.ml + +if [ -f xtime.c ] +then + gcc -o ../xtime xtime.c +fi + +cd .. diff --git a/preinstallTTool/linux/proverif/build.bat b/preinstallTTool/linux/proverif/build.bat new file mode 100644 index 0000000000000000000000000000000000000000..37bc49c13d654e895d80900a4d4965fa164867e6 --- /dev/null +++ b/preinstallTTool/linux/proverif/build.bat @@ -0,0 +1,15 @@ +cd src + +ocamlyacc parser.mly +ocamllex lexer.mll +ocamlyacc piparser.mly +ocamllex pilexer.mll +ocamlyacc pitparser.mly +ocamllex pitlexer.mll +ocamlc -o ..\proverif.exe parsing_helper.mli parsing_helper.ml stringmap.mli stringmap.ml ptree.mli piptree.mli pitptree.mli types.mli pitypes.mli param.mli param.ml parser.mli parser.ml lexer.ml queue.mli queue.ml terms.mli terms.ml termslinks.mli termslinks.ml display.mli display.ml history.mli history.ml termsEq.mli termsEq.ml pievent.mli pievent.ml weaksecr.mli weaksecr.ml noninterf.mli noninterf.ml selfun.mli selfun.ml rules.mli rules.ml syntax.mli syntax.ml tsyntax.mli tsyntax.ml piparser.mli piparser.ml pilexer.ml pitparser.mli pitparser.ml pitlexer.ml spassout.mli spassout.ml reduction_helper.mli reduction_helper.ml simplify.mli simplify.ml pisyntax.mli pisyntax.ml pitsyntax.mli pitsyntax.ml pitransl.mli pitransl.ml pitranslweak.mli pitranslweak.ml destructor.mli destructor.ml reduction.mli reduction.ml reduction_bipro.mli reduction_bipro.ml piauth.mli piauth.ml main.ml + +ocamllex lexertotex.mll +ocamllex pitlexertotex.mll +ocamlc -o ..\proveriftotex.exe parsing_helper.mli parsing_helper.ml ptree.mli piptree.mli pitptree.mli types.mli param.mli param.ml piparser.mli piparser.ml pilexer.ml pitparser.mli pitparser.ml pitlexer.ml fileprint.ml lexertotex.ml pitlexertotex.ml proveriftotex.ml + +cd .. diff --git a/preinstallTTool/linux/proverif/cryptoverif.pvl b/preinstallTTool/linux/proverif/cryptoverif.pvl new file mode 100644 index 0000000000000000000000000000000000000000..4857d11f10439646a58113ed865bc125fb4ecdd4 --- /dev/null +++ b/preinstallTTool/linux/proverif/cryptoverif.pvl @@ -0,0 +1,141 @@ +(* This library is designed for maximal compatibility with CryptoVerif. +It contains ProVerif definitions for cryptographic primitives under the +same name as their corresponding CryptoVerif definitions---even though +the ProVerif assumption is very often stronger than the more realistic +CryptoVerif assumption. *) + +type bitstringbot. + +(* ProVerif cannot distinguish IND-CPA, IND-CPA and INT-CTXT, and +IND-CCA2 and INT-PTXT symmetric encryption schemes. The definition +used by ProVerif corresponds best to the strongest property, that is, +IND-CPA and INT-CTXT. *) + +def IND_CPA_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc) { + +fun enc(cleartext, key, seed): ciphertext. +fun kgen(keyseed):key. +fun injbot(cleartext):bitstringbot [data]. +reduc forall m:cleartext, r:keyseed, r2:seed; + dec(enc(m, kgen(r), r2), kgen(r)) = injbot(m). + +fun Z(cleartext):cleartext. + +(* Encryption leaks Z(m), typically the length of m *) +reduc forall m:cleartext, r:seed, k:key; + leak(enc(m, k, r)) = Z(m). +(* Note: providing a good definition of Z in ProVerif is a problem *) + +(* Test equality of keys *) +reduc forall x:cleartext, x':cleartext, r:seed, r':seed, y:key; + keyeq(enc(x,y,r),enc(x',y,r')) = true. + +} + +def IND_CPA_INT_CTXT_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc, Pencctxt) { + +expand IND_CPA_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc). + +} + +def IND_CCA2_INT_PTXT_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc, Pencptxt) { + +expand IND_CPA_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc). + +} + +(* ProVerif cannot distinguish a PRP block cipher from a SPRP block cipher. +The definition used by ProVerif corresponds best to a SPRP block cipher *) + +def SPRP_cipher(keyseed, key, blocksize, kgen, enc, dec, Penc) { + +fun enc(blocksize, key): blocksize. +fun kgen(keyseed):key. +fun dec(blocksize, key): blocksize. + +equation forall m:blocksize, r:keyseed; + dec(enc(m, kgen(r)), kgen(r)) = m. +equation forall m:blocksize, r:keyseed; + enc(dec(m, kgen(r)), kgen(r)) = m. + +} + +def PRP_cipher(keyseed, key, blocksize, kgen, enc, dec, Penc) { + +expand SPRP_cipher(keyseed, key, blocksize, kgen, enc, dec, Penc). + +} + +(* MACs + These are very strong in ProVerif (essentially random oracles) +*) + +def UF_CMA_mac(mkeyseed, mkey, macinput, macres, mkgen, mac, check, Pmac) { + +fun mac(macinput, mkey):macres. +fun mkgen(mkeyseed):mkey. + +reduc forall m:macinput, r:mkeyseed; + check(m, mkgen(r), mac(m, mkgen(r))) = true. + +} + +def SUF_CMA_mac(mkeyseed, mkey, macinput, macres, mkgen, mac, check, Pmac) { + +expand UF_CMA_mac(mkeyseed, mkey, macinput, macres, mkgen, mac, check, Pmac). + +} + +(* Public-key encryption *) + +def IND_CCA2_public_key_enc(keyseed, pkey, skey, cleartext, ciphertext, seed, skgen, pkgen, enc, dec, injbot, Z, Penc, Penccoll) { + +fun enc(cleartext, pkey, seed): ciphertext. +fun skgen(keyseed):skey. +fun pkgen(keyseed):pkey. + +fun injbot(cleartext):bitstringbot [data]. + +reduc forall m:cleartext, r:keyseed, r2:seed; + dec(enc(m, pkgen(r), r2), skgen(r)) = injbot(m). + +(* Test equality of keys *) +reduc forall x:cleartext, x':cleartext, r:seed, r':seed, y:pkey; + keyeq(enc(x,y,r),enc(x',y,r')) = true. + +} + +(* Signatures *) + +def UF_CMA_signature(keyseed, pkey, skey, signinput, signature, seed, skgen, pkgen, sign, check, Psign, Psigncoll) { + +fun sign(signinput, skey, seed): signature. +fun skgen(keyseed):skey. +fun pkgen(keyseed):pkey. + +reduc forall m:signinput, r:keyseed, r2:seed; + check(m, pkgen(r), sign(m, skgen(r), r2)) = true. + +} + +def SUF_CMA_signature(keyseed, pkey, skey, signinput, signature, seed, skgen, pkgen, sign, check, Psign, Psigncoll) { + +expand UF_CMA_signature(keyseed, pkey, skey, signinput, signature, seed, skgen, pkgen, sign, check, Psign, Psigncoll). + +} + +(* Hash functions *) + +def ROM_hash(hashinput, hashoutput, hash, hashoracle, qH) { + +fun hash(hashinput):hashoutput. + +let hashoracle = 0. + +} + +def CollisionResistant_hash(key, hashinput, hashoutput, hash, Phash) { + +fun hash(key, hashinput):hashoutput. + +} diff --git a/preinstallTTool/linux/proverif/cssproverif.css b/preinstallTTool/linux/proverif/cssproverif.css new file mode 100755 index 0000000000000000000000000000000000000000..980833885a8a5b5645fed52013b57faf8ec70ac8 --- /dev/null +++ b/preinstallTTool/linux/proverif/cssproverif.css @@ -0,0 +1,82 @@ +/* spacing between list items */ + +li { +margin-bottom: 20px; +} + +/* occurrence class */ + +.occ +{ + color:green; +} + +/* keywords */ + +.keyword +{ + color:blue; +} + +/* connectives */ + +.conn +{ + font-weight:bold; +} + +/* explanations of clauses */ + +.explain +{ + color:fuchsia; +} + +/* Function symbols */ + +.fun +{ +} + +/* Predicates */ + +.pred +{ +} + +/* Variables */ + +.var +{ + font-style:italic; +} + +/* Names */ + +.name +{ +} + +/* Types */ + +.type +{ +} + +/* Results */ + +.query +{ font-weight: bold; + font-size: 120% } + +.result +{ font-weight: bold } + +.trueresult +{ color: green } + +.unknownresult +{ color: darkorange } + +.falseresult +{ color: red } \ No newline at end of file diff --git a/preinstallTTool/linux/proverif/docs/manual-untyped.pdf b/preinstallTTool/linux/proverif/docs/manual-untyped.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2f87246b350c9ed191cfec4c97f56687ce7fd944 Binary files /dev/null and b/preinstallTTool/linux/proverif/docs/manual-untyped.pdf differ diff --git a/preinstallTTool/linux/proverif/docs/upgrade b/preinstallTTool/linux/proverif/docs/upgrade new file mode 100644 index 0000000000000000000000000000000000000000..48ab4b100fff22cd5bfe576ab3fd59db034a01e7 --- /dev/null +++ b/preinstallTTool/linux/proverif/docs/upgrade @@ -0,0 +1,65 @@ +How to upgrade from ProVerif 1.10 to ProVerif 1.11 +-------------------------------------------------- + +Replace "param verbose = rules." with "param verboseRules = yes." +and "param verbose = no." with "param verboseRules = no." + + +How to upgrade from ProVerif 1.09 to ProVerif 1.10 +-------------------------------------------------- + +The query system has been completely rewritten, and queries must be +modified as follows: + +* authquery f/n. +must be replaced with + query ev:endf(x_1, ..., x_n) ==> ev:beginf(x_1, ..., x_n). +where f is any identifier, beginf means "begin" concatenated before +the identifier f, endf means "end" concatenated before the identifier f. + +* query M. +must be replaced with + query attacker:M. +or with + query putbegin ev:beginf_1, ..., beginf_n; + attacker:M. +when we want to determine after which begin events f_1, ..., f_n +the attacker can have M. + +* query M phase p. +must be replaced with + query attacker:M phase p. +or with + query putbegin ev:beginf_1, ..., beginf_n; + attacker:M phase p. +as above. + +* channelquery M,N. +must be replaced with + query mess:M,N. +or with + query putbegin ev:beginf_1, ..., beginf_n; + mess:M,N. +as above. + +* channelquery M,N phase p. +must be replaced with + query mess:M,N phase p. +or with + query putbegin ev:beginf_1, ..., beginf_n; + mess:M,N phase p. +as above. + +* endquery f(M_1, ..., M_n). +must be replaced with + query ev:endf(M_1, ..., M_n). +or with + query putbegin ev:beginf_1, ..., beginf_n; + ev:endf(M_1, ..., M_n). + +* remove "param injectiveAg = ...". When "param injectiveAg = true" +was present, replace all "ev:" above with "evinj:". + +* replace "begin f(M_1, ..., M_n)" with "event beginf(M_1, ..., M_n)" + and "end f(M_1, ..., M_n)" with "event endf(M_1, ..., M_n)" + in the processes. diff --git a/preinstallTTool/linux/proverif/emacs/README b/preinstallTTool/linux/proverif/emacs/README new file mode 100755 index 0000000000000000000000000000000000000000..29b094089c075d0ea3779abc88b12e474112e9dc --- /dev/null +++ b/preinstallTTool/linux/proverif/emacs/README @@ -0,0 +1,18 @@ +This directory provides an Emacs mode for editing ProVerif files. + +To use this mode: + +1. Copy the file proverif.el to a directory where Emacs will find it +(that is, in your emacs load-path) + +2. Add the following lines to your .emacs file: + + (setq auto-mode-alist + (cons '("\\.horn$" . proverif-horn-mode) + (cons '("\\.horntype$" . proverif-horntype-mode) + (cons '("\\.pv$" . proverif-pv-mode) + (cons '("\\.pi$" . proverif-pi-mode) auto-mode-alist))))) + (autoload 'proverif-pv-mode "proverif" "Major mode for editing ProVerif code." t) + (autoload 'proverif-pi-mode "proverif" "Major mode for editing ProVerif code." t) + (autoload 'proverif-horn-mode "proverif" "Major mode for editing ProVerif code." t) + (autoload 'proverif-horntype-mode "proverif" "Major mode for editing ProVerif code." t) diff --git a/preinstallTTool/linux/proverif/emacs/proverif.el b/preinstallTTool/linux/proverif/emacs/proverif.el new file mode 100755 index 0000000000000000000000000000000000000000..3461171686c9b1c4d70ea2b400a0c512f8a7f84b --- /dev/null +++ b/preinstallTTool/linux/proverif/emacs/proverif.el @@ -0,0 +1,135 @@ +;; +;; mode for .pi files +;; + +(defvar proverif-pi-kw '("among" "and" "can" "choice" "clauses" "data" "elimtrue" "else" "equation" "event" "fail" "free" "fun" "if" "in" "let" "new" "noninterf" "not" "nounif" "otherwise" "out" "param" "phase" "putbegin" "pred" "private" "process" "query" "reduc" "suchthat" "then" "weaksecret" "where") "ProVerif keywords") + +(defvar proverif-pi-builtin '("memberOptim" "decompData" "decompDataSelect" "block" "attacker" "mess" "ev" "evinj") "ProVerif builtins") + +(defvar proverif-pi-kw-regexp (regexp-opt proverif-pi-kw 'words)) +(defvar proverif-pi-builtin-regexp (regexp-opt proverif-pi-builtin 'words)) + +(defvar proverif-pi-connectives-regexp "\|\\|&\\|->\\|<->\\|<=>\\|==>") + +(setq proverif-piKeywords + `((,proverif-pi-kw-regexp . font-lock-keyword-face) + (,proverif-pi-builtin-regexp . font-lock-builtin-face) + (,proverif-pi-connectives-regexp . font-lock-reference-face) + ) +) + +(define-derived-mode proverif-pi-mode fundamental-mode + (setq font-lock-defaults '(proverif-piKeywords)) + (setq mode-name "ProVerif Pi") + +;; comment highlighting + (modify-syntax-entry ?\( "()1" proverif-pi-mode-syntax-table) + (modify-syntax-entry ?\) ")(4" proverif-pi-mode-syntax-table) + (modify-syntax-entry ?* ". 23" proverif-pi-mode-syntax-table) + +;; _ and ' belong to ordinary identifiers + (modify-syntax-entry ?_ "w" proverif-pi-mode-syntax-table) + (modify-syntax-entry ?' "w" proverif-pi-mode-syntax-table) +) + +;; +;; mode for .pv files (typed pi calculus) +;; + +(defvar proverif-pv-kw '("among" "channel" "choice" "clauses" "const" "def" "elimtrue" "else" "equation" "equivalence" "event" "expand" "fail" "forall" "free" "fun" "get" "if" "in" "inj-event" "insert" "let" "letfun" "new" "noninterf" "not" "nounif" "or" "otherwise" "out" "param" "phase" "pred" "proba" "process" "proof" "putbegin" "query" "reduc" "set" "suchthat" "table" "then" "type" "weaksecret" "yield") "ProVerif keywords") + +(defvar proverif-pv-builtin '("private" "data" "typeConverter" "memberOptim" "decompData" "decompDataSelect" "block" "attacker" "mess") "ProVerif builtins") + +(defvar proverif-pv-kw-regexp (regexp-opt proverif-pv-kw 'words)) +(defvar proverif-pv-builtin-regexp (regexp-opt proverif-pv-builtin 'words)) + +(defvar proverif-pv-connectives-regexp "\|\|\\|&&\\|->\\|<->\\|<=>\\|==>") + +(setq proverif-pvKeywords + `((,proverif-pv-kw-regexp . font-lock-keyword-face) + (,proverif-pv-builtin-regexp . font-lock-builtin-face) + (,proverif-pv-connectives-regexp . font-lock-reference-face) + ) +) + +(define-derived-mode proverif-pv-mode fundamental-mode + (setq font-lock-defaults '(proverif-pvKeywords)) + (setq mode-name "ProVerif Typed Pi") + +;; comment highlighting + (modify-syntax-entry ?\( "()1" proverif-pv-mode-syntax-table) + (modify-syntax-entry ?\) ")(4" proverif-pv-mode-syntax-table) + (modify-syntax-entry ?* ". 23" proverif-pv-mode-syntax-table) + +;; _ and ' belong to ordinary identifiers + (modify-syntax-entry ?_ "w" proverif-pv-mode-syntax-table) + (modify-syntax-entry ?' "w" proverif-pv-mode-syntax-table) +) + +;; +;; mode for .horn files +;; + +(defvar proverif-horn-kw '("data" "elimtrue" "equation" "fun" "not" "nounif" "param" "pred" "query" "reduc") "ProVerif keywords") + +(defvar proverif-horn-builtin '("elimVar" "elimVarStrict" "memberOptim" "decompData" "decompDataSelect" "block") "ProVerif builtins") + +(defvar proverif-horn-kw-regexp (regexp-opt proverif-horn-kw 'words)) +(defvar proverif-horn-builtin-regexp (regexp-opt proverif-horn-builtin 'words)) + +(defvar proverif-horn-connectives-regexp "&\\|->\\|<->\\|<=>") + +(setq proverif-hornKeywords + `((,proverif-horn-kw-regexp . font-lock-keyword-face) + (,proverif-horn-builtin-regexp . font-lock-builtin-face) + (,proverif-horn-connectives-regexp . font-lock-reference-face) + ) +) + +(define-derived-mode proverif-horn-mode fundamental-mode + (setq font-lock-defaults '(proverif-hornKeywords)) + (setq mode-name "ProVerif Horn") + +;; comment highlighting + (modify-syntax-entry ?\( "()1" proverif-horn-mode-syntax-table) + (modify-syntax-entry ?\) ")(4" proverif-horn-mode-syntax-table) + (modify-syntax-entry ?* ". 23" proverif-horn-mode-syntax-table) + +;; _ and ' belong to ordinary identifiers + (modify-syntax-entry ?_ "w" proverif-horn-mode-syntax-table) + (modify-syntax-entry ?' "w" proverif-horn-mode-syntax-table) +) + +;; +;; mode for .horntype files +;; + +(defvar proverif-horntype-kw '("type" "name" "const" "forall" "elimtrue" "equation" "fun" "not" "nounif" "set" "pred" "query" "clauses") "ProVerif keywords") + +(defvar proverif-horntype-builtin '("elimVar" "elimVarStrict" "memberOptim" "decompData" "decompDataSelect" "block") "ProVerif builtins") + +(defvar proverif-horntype-kw-regexp (regexp-opt proverif-horntype-kw 'words)) +(defvar proverif-horntype-builtin-regexp (regexp-opt proverif-horntype-builtin 'words)) + + +(setq proverif-horntypeKeywords + `((,proverif-horntype-kw-regexp . font-lock-keyword-face) + (,proverif-horntype-builtin-regexp . font-lock-builtin-face) + (,proverif-horn-connectives-regexp . font-lock-reference-face) + ) +) + +(define-derived-mode proverif-horntype-mode fundamental-mode + (setq font-lock-defaults '(proverif-horntypeKeywords)) + (setq mode-name "ProVerif Typed Horn") + +;; comment highlighting + (modify-syntax-entry ?\( "()1" proverif-horntype-mode-syntax-table) + (modify-syntax-entry ?\) ")(4" proverif-horntype-mode-syntax-table) + (modify-syntax-entry ?* ". 23" proverif-horntype-mode-syntax-table) + +;; _ and ' belong to ordinary identifiers + (modify-syntax-entry ?_ "w" proverif-horntype-mode-syntax-table) + (modify-syntax-entry ?' "w" proverif-horntype-mode-syntax-table) + +) diff --git a/preinstallTTool/linux/proverif/examples/cryptoverif/otway-rees3Stream.pv b/preinstallTTool/linux/proverif/examples/cryptoverif/otway-rees3Stream.pv new file mode 100644 index 0000000000000000000000000000000000000000..b1c94e48a1a807ef2cf392ddbf2f2c73847dbf16 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/cryptoverif/otway-rees3Stream.pv @@ -0,0 +1,204 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Version with possibly dishonest participants. + Using two series of function symbols to prevent repeated applications + of the same cryptographic rule. +*) + +set traceDisplay = long. + +param N. +param N2. +param N3. + +type nonce [large,fixed]. +type host [bounded]. +type mkey [bounded]. +type mkeyseed [fixed]. +type key [fixed]. +type keyseed [fixed]. +type seed [fixed]. +type macs [fixed]. +type maxenc [bounded]. +type maxmac [bounded]. + +(* A function f(x1...xn) is declared [data] when: + - it is injective + - the values of x1...xn are computable in polynomial time from f(x1...xn) *) + +fun concat1(nonce, nonce, host, host):maxenc [data]. +fun concat2(nonce, key):maxenc [data]. + +(*CV ONLY +forall y:nonce,z:nonce,t:host,u:host, y2:nonce,z2:key; concat1(y,z,t,u) <> concat2(y2,z2). +*) + +(* Shared-key encryption (CPA Stream cipher) *) + +proba Penc. + +expand IND_CPA_sym_enc(keyseed, key, maxenc, maxmac, seed, kgen, enc, dec, injbot, Z, Penc). + +(*CV ONLY + The function Z returns for each bitstring, a bitstring + of the same length, consisting only of zeroes. +const Zconcat1:maxenc. +const Zconcat2:maxenc. +forall y:nonce,z:nonce,t:host,u:host; + Z(concat1(y,z,t,u)) = Zconcat1. +forall y:nonce,z:key; + Z(concat2(y,z)) = Zconcat2. +*) + +(* Mac *) + +proba Pmac. + +expand UF_CMA_mac(mkeyseed, mkey, maxmac, macs, mkgen, mac, check, Pmac). + +(* Queries *) + +(*CV ONLY +query secret1 keyA. +query secret1 keyB. + +query secret keyA. +query secret keyB. +*) + +channel c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, + start, finish. + +const A : host. +const B : host. + +event endA(host, host, nonce, key). +event endB(host, host, nonce, key). +event beginA(host, host, nonce). +event beginB(host, host, nonce). + +(*CV ONLY +query x:host, y:host, n:nonce, k:key; + event endA(x,y,n,k) ==> beginB(x,y,n). +query x:host, y:host, n:nonce, k:key; + event endB(x,y,n,k) ==> beginA(x,y,n). +query x:host, y:host, n:nonce, k:key; + event inj:endA(x,y,n,k) ==> inj:beginB(x,y,n). +query x:host, y:host, n:nonce, k:key; + event inj:endB(x,y,n,k) ==> inj:beginA(x,y,n). +*) +query x:host, y:host, n:nonce, k:key; + event(endA(x,y,n,k)) ==> event(beginB(x,y,n)). +query x:host, y:host, n:nonce, k:key; + event(endB(x,y,n,k)) ==> event(beginA(x,y,n)). +query x:host, y:host, n:nonce, k:key; + inj-event(endA(x,y,n,k)) ==> inj-event(beginB(x,y,n)). +query x:host, y:host, n:nonce, k:key; + inj-event(endB(x,y,n,k)) ==> inj-event(beginA(x,y,n)). + + +let processA(Kas:key, mKas:mkey) = + in(c1, hb: host); + new M : nonce; + new Na : nonce; + new s1 : seed; + let ea1 = enc(concat1(Na, M, A, hb), Kas, s1) in + event beginA(A, hb, M); + out(c2, (M, A, hb, ea1, mac(ea1, mKas))); + in(c3, (=M, ea2: maxmac, ma2: macs)); + if check(ea2, mKas, ma2) then + let injbot(concat2(=Na, k)) = dec(ea2, Kas) in + if hb = B then + ( + event endA(A, hb, M, k); + let keyA:key = k + ) + else + out(c11, k). + +let processB(Kbs:key, mKbs:mkey) = + in(c4, (M: nonce, ha: host, =B, ea:maxmac, ma:macs)); + new Nb : nonce; + new s2 : seed; + let e2 = enc(concat1(Nb, M, ha, B), Kbs, s2) in + event beginB(ha, B, M); + out(c5, (M, ha, B, ea, ma, e2, mac(e2, mKbs))); + in(c6, (=M, ea2: maxmac, ma2: macs, eb2: maxmac, mb2: macs)); + if check(eb2, mKbs, mb2) then + let injbot(concat2(=Nb, k)) = dec(eb2, Kbs) in + out(c7, (M, ea2, ma2)); + in(finish, ()); + if ha = A then + ( + event endB(ha, B, M, k); + let keyB:key = k + ) + else + out(c12, k). + +table keys(host, key, mkey). + +let processK(Kas:key, Kbs:key, mKas:mkey, mKbs:mkey) = + in(c8, (Khost: host, Kkey: key, Kmkey: mkey)); + if Khost = A then + insert keys(Khost, Kas, mKas) + else if Khost = B then + insert keys(Khost, Kbs, mKbs) + else + insert keys(Khost, Kkey, Kmkey). + +let processS = + in(c9, (M: nonce, ha: host, hb: host, ea1: maxmac, ma1: macs, eb1: maxmac, mb1: macs)); + get keys(h, kas, mkas) suchthat h = ha in + get keys(h, kbs, mkbs) suchthat h = hb in + if check(ea1, mkas, ma1) then + let injbot(concat1(Na, =M, =ha, =hb)) = dec(ea1, kas) in + if check(eb1, mkbs, mb1) then + let injbot(concat1(Nb, =M, =ha, =hb)) = dec(eb1, kbs) in + new k: key; + new s3: seed; + new s4: seed; + let e1 = enc(concat2(Na, k), kas, s3) in + let e2 = enc(concat2(Nb, k), kbs, s4) in + out(c10, (M, e1, mac(e1, mkas), e2, mac(e2, mkbs))). + +process + in(start, ()); + new rKas: keyseed; + let Kas = kgen(rKas) in + new rmKas: mkeyseed; + let mKas = mkgen(rmKas) in + new rKbs: keyseed; + let Kbs = kgen(rKbs) in + new rmKbs: mkeyseed; + let mKbs = mkgen(rmKbs) in + out(c13, ()); + ((! iA<=N processA(Kas, mKas)) | + (! iB<=N processB(Kbs, mKbs)) | + (! iS<=N processS) | + (! iK<=N2 processK(Kas, Kbs, mKas, mKbs))) diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/needham b/preinstallTTool/linux/proverif/examples/horn/auth/needham new file mode 100644 index 0000000000000000000000000000000000000000..235b8cd430bfb8b22fd9a2ff64957fc56c6a1d3e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/needham @@ -0,0 +1,48 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred begin/1 block. +pred c/1 elimVar, decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +query end:x,y. + +reduc + +c:encrypt(Nb[encrypt((v9,pk(skA[])),pk(skB[])),v10],pk(skB[])) & c:encrypt((v9,pk(skA[])),pk(skB[])) -> end:(v10),(v9,pk(skA[]),pk(skB[]),Nb[encrypt((v9,pk(skA[])),pk(skB[])),v10]); +c:encrypt((v6,v7),pk(skB[])) -> c:encrypt((v6,Nb[encrypt((v6,v7),pk(skB[])),v8],pk(skB[])),v7); +begin:(Na[v3,v4],pk(skA[]),v3,v5) & c:encrypt((Na[v3,v4],v5,v3),pk(skA[])) & c:v3 -> c:encrypt(v5,v3); +c:v1 -> c:encrypt((Na[v1,v2],pk(skA[])),v1); +c:pk(skB[]); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any3 -> c:pk(any3); +c:any2 & c:any1 -> c:encrypt(any2,any1). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/needham-corr-orig-auth b/preinstallTTool/linux/proverif/examples/horn/auth/needham-corr-orig-auth new file mode 100644 index 0000000000000000000000000000000000000000..4ff52698781d14b081794a6b31507b041fb98e67 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/needham-corr-orig-auth @@ -0,0 +1,88 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 elimVar, decompData. +nounif c:x. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query B:x,y,z. + +not c:sS[]. +not c:sA[]. +not c:sB[]. + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, host(x)), sS[]) -> c:encrypt((Na[pkx], host(sA[])), pkx); +c:sign((pkx, host(x)), sS[]) & c:encrypt((Na[pkx], y, host(x)), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); +(* + +to prove authenticity, restrict the above rule to conclusions different from + c:encrypt((Nb[Na[pk(sB[])],sA[],J0()],k[sB[]]),pk(sB[])) +(or c:encrypt((Nb[*,*,J0()],k[sB[]]),pk(sB[])) ) +and show that + B:encrypt((Na[pk(sB[])],host(sA[])),pk(sB[])),sign((pk(sA[]),host(sA[])) + ,sS[]),encrypt((Nb[Na[pk(sB[])],sA[],J0()],k[sB[]]),pk(sB[])) +cannot be proved. + +*) + +(* B *) + +c:encrypt((x,host(a)), pk(sB[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,a,j], host(sB[])), pka); +c:encrypt((x,host(sA[])), pk(sB[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, sA[],j], z), pk(sB[])) + -> B:encrypt((x,host(sA[])), pk(sB[])), sign((pka, host(sA[])), sS[]), encrypt((Nb[x, sA[],j], z), pk(sB[])); + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/needham-corr-orig-auth2 b/preinstallTTool/linux/proverif/examples/horn/auth/needham-corr-orig-auth2 new file mode 100644 index 0000000000000000000000000000000000000000..09fdf1b387743ce8d8564f637d5be4af86a13a92 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/needham-corr-orig-auth2 @@ -0,0 +1,89 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 elimVar, decompData. +nounif c:x. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. +fun J0/0. + +query B:x,y,z. + +not c:sS[]. +not c:sA[]. +not c:sB[]. + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, host(x)), sS[]) -> c:encrypt((Na[pkx], host(sA[])), pkx); +c:sign((pkx, host(x)), sS[]) & c:encrypt((Na[pkx], y, host(x)), pk(sA[])) +& encrypt((y,k[x]), pkx) <> encrypt((Nb[Na[pk(sB[])],sA[],J0()],k[sB[]]),pk(sB[])) -> c:encrypt((y,k[x]), pkx); +(* + +to prove authenticity, restrict the above rule to conclusions different from + c:encrypt((Nb[Na[pk(sB[])],sA[],J0()],k[sB[]]),pk(sB[])) +(or c:encrypt((Nb[*,*,J0()],k[sB[]]),pk(sB[])) ) +and show that + B:encrypt((Na[pk(sB[])],host(sA[])),pk(sB[])),sign((pk(sA[]),host(sA[])) + ,sS[]),encrypt((Nb[Na[pk(sB[])],sA[],J0()],k[sB[]]),pk(sB[])) +cannot be proved. + +*) + +(* B *) + +c:encrypt((x,host(a)), pk(sB[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,a,j], host(sB[])), pka); +c:encrypt((x,host(sA[])), pk(sB[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, sA[],j], z), pk(sB[])) + -> B:encrypt((x,host(sA[])), pk(sB[])), sign((pka, host(sA[])), sS[]), encrypt((Nb[x, sA[],j], z), pk(sB[])); + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/needham-err b/preinstallTTool/linux/proverif/examples/horn/auth/needham-err new file mode 100644 index 0000000000000000000000000000000000000000..7b28739c8ee8e6a6c5eaf5c7ad20dc06abdb1a5a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/needham-err @@ -0,0 +1,47 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred begin/1 block. +pred c/1 elimVar, decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +query end:x,y. + +reduc + +c:encrypt(Nb[encrypt((v9,pk(skA[])),pk(skB[])),v10],pk(skB[])) & c:encrypt((v9,pk(skA[])),pk(skB[])) -> end:(v10),(v9,pk(skA[]),pk(skB[]),Nb[encrypt((v9,pk(skA[])),pk(skB[])),v10]); +c:encrypt((v6,v7),pk(skB[])) -> c:encrypt((v6,Nb[encrypt((v6,v7),pk(skB[])),v8]),v7); +c:encrypt((Na[v3,v4],v5),pk(skA[])) & begin:(Na[v3,v4],pk(skA[]),v3,v5) & c:v3 -> c:encrypt(v5,v3); +c:v1 -> c:encrypt((Na[v1,v2],pk(skA[])),v1); +c:pk(skB[]); +c:pk(skA[]); +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any3 -> c:pk(any3); +c:any2 & c:any1 -> c:encrypt(any2,any1). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/needham-namenopreviousinputs b/preinstallTTool/linux/proverif/examples/horn/auth/needham-namenopreviousinputs new file mode 100644 index 0000000000000000000000000000000000000000..b03f375aa98921f64b55e7acceffe65ad9224dae --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/needham-namenopreviousinputs @@ -0,0 +1,55 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Check that the analysis is less precise when names do not have the +previous inputs in their parameters (only the session identifiers) + +This is the corrected Needham-Schroeder protocol, and the system +fails to prove its correctness, whereas it succeeds with the previous +inputs in the parameters of nonces *) + +pred begin/1 block. +pred c/1 elimVar, decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +query end:x,y. + +reduc + +c:encrypt(Nb[v10],pk(skB[])) & c:encrypt((v9,pk(skA[])),pk(skB[])) -> end:(v10),(v9,pk(skA[]),pk(skB[]),Nb[v10]); +c:encrypt((v6,v7),pk(skB[])) -> c:encrypt((v6,Nb[v8],pk(skB[])),v7); +begin:(Na[v4],pk(skA[]),v3,v5) & c:encrypt((Na[v4],v5,v3),pk(skA[])) & c:v3 -> c:encrypt(v5,v3); +c:v1 -> c:encrypt((Na[v2],pk(skA[])),v1); +c:pk(skB[]); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any3 -> c:pk(any3); +c:any2 & c:any1 -> c:encrypt(any2,any1). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/needham-orig-auth b/preinstallTTool/linux/proverif/examples/horn/auth/needham-orig-auth new file mode 100644 index 0000000000000000000000000000000000000000..33bf8a799538953880bc7071b87953a0114b9494 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/needham-orig-auth @@ -0,0 +1,79 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 elimVar, decompData. +nounif c:x. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query B:x. + +not c:sS[]. +not c:sA[]. +not c:sB[]. +(* not c:Na[pk(sB[])]. *) + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, x), sS[]) -> c:encrypt((Na[pkx,i], host(sA[])), pkx); +c:sign((pkx, x), sS[]) & c:encrypt((Na[pkx,i], y), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); + +(* B *) + +c:encrypt((x,host(a)), pk(sB[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,host(a),j]), pka); +c:encrypt((x,host(sA[])), pk(sB[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, host(sA[]),j], z), pk(sB[])) + -> B:Nb[x, host(sA[]),j]; + + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/simpleryahalom-auth b/preinstallTTool/linux/proverif/examples/horn/auth/simpleryahalom-auth new file mode 100644 index 0000000000000000000000000000000000000000..0e7bec085566ac80a718136b026da08e19e3f4f1 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/simpleryahalom-auth @@ -0,0 +1,76 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Simpler Yahalom protocol +Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; Nb; {A; Na}Kbs +Message 3 S -> A: Nb; {B; Kab; Na}Kas ; {A; Kab; Nb}Kbs +Message 4 A -> B: {A; Kab; Nb}Kbs ; {Nb}Kab + +Attack of Syverson, A taxonomy of replay attacks + +*) + +pred c/1 elimVar, decompData. +nounif c:x. + +fun encrypt/2. +fun host/1. + +query A:x,y. + +(* param maxDepth = 6. *) + +not c:Kas[]. +not c:Kbs[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; +c:host(Kas[]); +c:host(Kbs[]); + +(* A *) + +c:(host(Kas[]), Na[i]); +c:(nb, encrypt((b, k, Na[i]), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(nb, encrypt((host(Kbs[]), k, Na[i]), Kas[]), mb) -> A:nb, encrypt((host(Kbs[]), k, Na[i]), Kas[]); + +(* B *) + +c:(a, na) -> c:(host(Kbs[]), Nb[a, na, j], encrypt((a, na), Kbs[])); + +(* S *) + +c:(host(kbs), nb, encrypt((host(kas), na), kbs)) -> c:(nb, encrypt((host(kbs), k[kas, kbs, na, nb], na), kas), encrypt((host(kas), k[kas, kbs, na, nb], nb), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/simpleryahalom-auth2 b/preinstallTTool/linux/proverif/examples/horn/auth/simpleryahalom-auth2 new file mode 100644 index 0000000000000000000000000000000000000000..7d33aebed3738677f2d45a3ab90c451d93004ae1 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/simpleryahalom-auth2 @@ -0,0 +1,77 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Simpler Yahalom protocol +Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; Nb; {A; Na}Kbs +Message 3 S -> A: Nb; {B; Kab; Na}Kas ; {A; Kab; Nb}Kbs +Message 4 A -> B: {A; Kab; Nb}Kbs ; {Nb}Kab + +Attack of Syverson, A taxonomy of replay attacks + +*) + +pred c/1 elimVar, decompData. +nounif c:x. + +fun encrypt/2. +fun host/1. +fun i0/0. + +query A:x. + +(* param maxDepth = 6. *) + +not c:Kas[]. +not c:Kbs[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; +c:host(Kas[]); +c:host(Kbs[]); + +(* A *) + +c:(host(Kas[]), Na[i]); +c:(nb, encrypt((b, k, Na[i]), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(nb, encrypt((host(Kbs[]), k, Na[i]), Kas[]), mb) -> A:encrypt((host(Kbs[]), k, Na[i]), Kas[]); + +(* B *) + +c:(a, na) & (a,na) <> (host(Kas[]),Na[i0()]) -> c:(host(Kbs[]), Nb[a, na, j], encrypt((a, na), Kbs[])); + +(* S *) + +c:(host(kbs), nb, encrypt((host(kas), na), kbs)) -> c:(nb, encrypt((host(kbs), k[kas, kbs, na, nb], na), kas), encrypt((host(kas), k[kas, kbs, na, nb], nb), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/yahalom-auth b/preinstallTTool/linux/proverif/examples/horn/auth/yahalom-auth new file mode 100644 index 0000000000000000000000000000000000000000..4fc48d6ec8ec76ca0b0046e1e6cb9ac26cb80ba6 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/yahalom-auth @@ -0,0 +1,75 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +pred c/1 elimVar, decompData. +nounif c:x. + +fun encrypt/2. +fun host/1. + + +query A:x. + +(* param maxDepth = 100. *) + +not c:Kas[]. +not c:Kbs[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; +c:host(Kas[]); +c:host(Kbs[]); + +(* A *) + +c:(host(Kas[]), Na[i]); +c:(encrypt((b, k, Na[i], nb), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(encrypt((host(Kbs[]), k, Na[i], nb), Kas[]), mb) -> A:encrypt((host(Kbs[]), k, Na[i], nb), Kas[]); + +(* B *) + +c:(a, na) -> c:(host(Kbs[]), encrypt((a, na, Nb[a,na,j]), Kbs[])); + +(* S *) + +c:(host(kbs), encrypt((host(kas), na, nb), kbs)) -> c:(encrypt((host(kbs), k[kas, kbs, na, nb], na, nb), kas), encrypt((host(kas), k[kas, kbs, na, nb]), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/auth/yahalom-auth2 b/preinstallTTool/linux/proverif/examples/horn/auth/yahalom-auth2 new file mode 100644 index 0000000000000000000000000000000000000000..f288f3d91283bba6dd5d2f0aa5820ca0e65bf3e9 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/auth/yahalom-auth2 @@ -0,0 +1,77 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +pred c/1 elimVar, decompData. +nounif c:x. + +fun encrypt/2. +fun host/1. +fun i0/0. + +query A:x. + +param verboseRules = yes. + +(* param maxDepth = 100. *) + +not c:Kas[]. +not c:Kbs[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; +c:host(Kas[]); +c:host(Kbs[]); + +(* A *) + +c:(host(Kas[]), Na[i]); +c:(encrypt((b, k, Na[i], nb), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(encrypt((host(Kbs[]), k, Na[i], nb), Kas[]), mb) -> A:Na[i]; + +(* B *) + +c:a & c:na & (a,na) <> (host(Kas[]),Na[i0()]) -> c:(host(Kbs[]), encrypt((a, na, Nb[a,na]), Kbs[])); + +(* S *) + +c:(host(kbs), encrypt((host(kas), na, nb), kbs)) -> c:(encrypt((host(kbs), k[kas, kbs, na, nb], na, nb), kas), encrypt((host(kas), k[kas, kbs, na, nb]), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco new file mode 100644 index 0000000000000000000000000000000000000000..e8b61c42ac7a5cbbcd7cf27e07544f80e427855c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco @@ -0,0 +1,60 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +fun sign/2. + +query c:secret[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:sign(x,y) -> c:x; +c:x & c:y -> c:sign(x,y); + +(* The protocol *) +(* A *) + +c:pk(x) -> c:encrypt(sign(k[pk(x)], sA[]), pk(x)); + +(* B *) + +c:encrypt(sign(k, sA[]), pk(sB[])) -> c:encrypt(secret[], pk(k)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corr-orig b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..ac042bf8aa408436cef426c0699f0389077eb576 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corr-orig @@ -0,0 +1,77 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +fun sign/2. + +fun sencrypt/2. + +fun host/1. + +query c:secret[]. + +not c:sA[]. +not c:sB[]. +not c:sS[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:sign(x,y) -> c:x; +c:x & c:y -> c:sign(x,y); +c:host(x); +c:x & c:y -> c:sencrypt(x,y); +c:x & c:sencrypt(m,x) -> c:m; + +(* The protocol *) +(* A *) + +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[])) -> +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]), encrypt(sign((host(sA[]), host(x), k[pkx]), sA[]), pkx)); + +(* B *) + +c:(sign((host(sA[]), pk(s1)), sS[]), sign((host(sB[]), pk(sB[])), sS[]), encrypt(sign((host(sA[]), host(sB[]), k), s1), pk(sB[]))) -> c:sencrypt(secret[], k); + +(* server *) + +c:(host(s1), host(s2)) -> c:(sign((host(s1), pk(s1)), sS[]), sign((host(s2), pk(s2)), sS[])). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corr-orig-bid b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corr-orig-bid new file mode 100644 index 0000000000000000000000000000000000000000..c5c3958ec591b6dfa9b8044078a7dda9f83deb9a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corr-orig-bid @@ -0,0 +1,75 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +fun sign/2. + +fun sencrypt/2. + +fun host/1. + +query c:secret[]. + +not c:sA[]. +not c:sS[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sS[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:sign(x,y) -> c:x; +c:x & c:y -> c:sign(x,y); +c:host(x); +c:x & c:y -> c:sencrypt(x,y); +c:x & c:sencrypt(m,x) -> c:m; + +(* The protocol *) +(* A *) + +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[])) -> +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]), encrypt(sign((host(sA[]), host(x), k[pkx]), sA[]), pkx)); + +(* B *) + +c:(sign((host(sA[]), pk(s1)), sS[]), sign((host(sA[]), pk(sA[])), sS[]), encrypt(sign((host(sA[]), host(sA[]), k), s1), pk(sA[]))) -> c:sencrypt(secret[], k); + +(* server *) + +c:(host(s1), host(s2)) -> c:(sign((host(s1), pk(s1)), sS[]), sign((host(s2), pk(s2)), sS[])). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corrected b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corrected new file mode 100644 index 0000000000000000000000000000000000000000..82b84fc598c414d02e3324d8e47477883d159f36 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-corrected @@ -0,0 +1,60 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +fun sign/2. + +query c:secret[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:sign(x,y) -> c:x; +c:x & c:y -> c:sign(x,y); + +(* The protocol *) +(* A *) + +c:pk(x) -> c:encrypt(sign((pk(sA[]), pk(x), k[pk(x)]), sA[]), pk(x)); + +(* B *) + +c:encrypt(sign((pk(sA[]), pk(sB[]), k), sA[]), pk(sB[])) -> c:encrypt(secret[], pk(k)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-orig b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-orig new file mode 100644 index 0000000000000000000000000000000000000000..9e13a0d74263580e175f5cd5b3a26f12897b81d6 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-orig @@ -0,0 +1,77 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +fun sign/2. + +fun host/1. + +fun sencrypt/2. + +query c:secret[]. + +not c:sA[]. +not c:sB[]. +not c:sS[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:sign(x,y) -> c:x; +c:x & c:y -> c:sign(x,y); +c:host(x); +c:x & c:y -> c:sencrypt(x,y); +c:x & c:sencrypt(m,x) -> c:m; + +(* The protocol *) +(* A *) + +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[])) -> +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]), encrypt(sign(k[pkx], sA[]), pkx)); + +(* B *) + +c:(sign((host(sA[]), pk(s1)), sS[]), sign((host(sB[]), pk(sB[])), sS[]), encrypt(sign(k, s1), pk(sB[]))) -> c:sencrypt(secret[], k); + +(* server *) + +c:(host(s1), host(s2)) -> c:(sign((host(s1), pk(s1)), sS[]), sign((host(s2), pk(s2)), sS[])). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-orig-bid b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-orig-bid new file mode 100644 index 0000000000000000000000000000000000000000..b398755c39b2b6645bfd03a0b5ebd528f00da606 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/denning-sacco-orig-bid @@ -0,0 +1,75 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +fun sign/2. + +fun host/1. + +fun sencrypt/2. + +query c:secret[]. + +not c:sA[]. +not c:sS[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sS[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:sign(x,y) -> c:x; +c:x & c:y -> c:sign(x,y); +c:host(x); +c:x & c:y -> c:sencrypt(x,y); +c:x & c:sencrypt(m,x) -> c:m; + +(* The protocol *) +(* A *) + +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[])) -> +c:(sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]), encrypt(sign(k[pkx], sA[]), pkx)); + +(* B *) + +c:(sign((host(sA[]), pk(s1)), sS[]), sign((host(sA[]), pk(sA[])), sS[]), encrypt(sign(k, s1), pk(sA[]))) -> c:sencrypt(secret[], k); + +(* server *) + +c:(host(s1), host(s2)) -> c:(sign((host(s1), pk(s1)), sS[]), sign((host(s2), pk(s2)), sS[])). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/dualneedham b/preinstallTTool/linux/proverif/examples/horn/secr/dualneedham new file mode 100644 index 0000000000000000000000000000000000000000..3a4c69d550f61f63a6b52de13b7383841e5dc5f9 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/dualneedham @@ -0,0 +1,78 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder publi-key protocol + Corrected version of Lowe *) + +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +query c:secret[]. +query c:secretb[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); + +(* The protocol *) +(* A *) + +c:pk(x) -> c:encrypt((Na[pk(x)], pk(sA[])), pk(x)); +c:pk(x) & c:encrypt((Na[pk(x)], y, pk(x)), pk(sA[])) + -> c:encrypt((y,k[pk(x)]), pk(x)); + +(* B *) + +c:encrypt((x,y), pk(sB[])) -> c:encrypt((x, Nb[x,y], pk(sB[])), y); +c:encrypt((x,pk(sA[])), pk(sB[])) & c:encrypt((Nb[x, pk(sA[])], z), pk(sB[])) + -> c:encrypt(secret[], pk(z)); + +(* B as A *) + +c:pk(x) -> c:encrypt((Nba[pk(x)], pk(sB[])), pk(x)); +c:pk(x) & c:encrypt((Nba[pk(x)], y, pk(x)), pk(sB[])) + -> c:encrypt((y,kb[pk(x)]), pk(x)); + +(* A as B *) + +c:encrypt((x,y), pk(sA[])) -> c:encrypt((x, Nab[x,y], pk(sA[])), y); +c:encrypt((x,pk(sB[])), pk(sA[])) & c:encrypt((Nab[x, pk(sB[])], z), pk(sA[])) + -> c:encrypt(secretb[], pk(z)). + + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/macs b/preinstallTTool/linux/proverif/examples/horn/secr/macs new file mode 100644 index 0000000000000000000000000000000000000000..6342e0005c34b9a47778b19a928f603c2a20a73a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/macs @@ -0,0 +1,72 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +The following code does not work because we cannot handle properly +the associativity of the concatenation + +[* concatenation *] + +fun concat0/2. + +[* fst returns the first atomic component of a concatenation *] +reduc fst(concat0(x,y)) = x. +[* rest returns a concatenation without its first atomic component *] +reduc rest(concat0(x,y)) = y. + +[** PB if y is itself a concatenation !!!!! **] +reduc concat(concat0(x,y),z) = concat0(x, concat(y,z)); + concat(x,y) = concat0(x,y). + +[* f = keyed hash function *] + +fun f/2. +fun h0/2. +reduc h(f(x,y),z) = f(x,concat(y,z)); + h(x,y) = h0(x,y). + + +Here is a version that works, but with pairs instead of concatenation + +*) + +pred c/1 elimVar,decompData. +nounif c:x. + +(* f = keyed hash function *) + +fun f/2. +fun h0/2. +reduc h(f(x,y),z) = f(x,(y,z)); + h(x,y) = h0(x,y). + +(* macs *) + +reduc badMac(x,y) = f(x,y). + +reduc goodMac(x,y) = f(x,f(x,y)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham b/preinstallTTool/linux/proverif/examples/horn/secr/needham new file mode 100644 index 0000000000000000000000000000000000000000..a012accbf96b12d18e297c0037c11c6f745d72f7 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham @@ -0,0 +1,63 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder publi-key protocol + Corrected version of Lowe *) + +pred c/1 elimVar,decompData. +nounif c:x. + +fun pk/1. +fun encrypt/2. + +query c:secret[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); + +(* The protocol *) +(* A *) + +c:pk(x) -> c:encrypt((Na[pk(x)], pk(sA[])), pk(x)); +c:pk(x) & c:encrypt((Na[pk(x)], y, pk(x)), pk(sA[])) + -> c:encrypt((y,k[pk(x)]), pk(x)); + +(* B *) + +c:encrypt((x,y), pk(sB[])) -> c:encrypt((x, Nb[x,y], pk(sB[])), y); +c:encrypt((x,pk(sA[])), pk(sB[])) & c:encrypt((Nb[x, pk(sA[])], z), pk(sB[])) + -> c:encrypt(secret[], pk(z)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig b/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..3ea71954f42c48ba5f6fe0b078aaca73f651ec35 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig @@ -0,0 +1,77 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 elimVar,decompData. +nounif c:x. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query c:secret[]. + +not c:sS[]. +not c:sA[]. +not c:sB[]. + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, host(x)), sS[]) -> c:encrypt((Na[pkx], host(sA[])), pkx); +c:sign((pkx, host(x)), sS[]) & c:encrypt((Na[pkx], y, host(x)), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); + +(* B *) + +c:encrypt((x,host(a)), pk(sB[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,a], host(sB[])), pka); +c:encrypt((x,host(sA[])), pk(sB[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, sA[]], z), pk(sB[])) + -> c:encrypt(secret[], pk(z)); + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig-auth b/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig-auth new file mode 100644 index 0000000000000000000000000000000000000000..f100d320dddc5a8191658ac5038d66abad7c7087 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig-auth @@ -0,0 +1,88 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 elimVar,decompData. +nounif c:x. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query B:x,y,z. + +not c:sS[]. +not c:sA[]. +not c:sB[]. + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, host(x)), sS[]) -> c:encrypt((Na[pkx], host(sA[])), pkx); +c:sign((pkx, host(x)), sS[]) & c:encrypt((Na[pkx], y, host(x)), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); +(* + +to prove authenticity, restrict the above rule to conclusions different from + c:encrypt((Nb[Na[pk(sB[])],sA[],J0()],k[sB[]]),pk(sB[])) +(or c:encrypt((Nb[*,*,J0()],k[sB[]]),pk(sB[])) ) +and show that + B:encrypt((Na[pk(sB[])],host(sA[])),pk(sB[])),sign((pk(sA[]),host(sA[])) + ,sS[]),encrypt((Nb[Na[pk(sB[])],sA[],J0()],k[sB[]]),pk(sB[])) +cannot be proved. + +*) + +(* B *) + +c:encrypt((x,host(a)), pk(sB[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,a,j], host(sB[])), pka); +c:encrypt((x,host(sA[])), pk(sB[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, sA[],j], z), pk(sB[])) + -> B:encrypt((x,host(sA[])), pk(sB[])), sign((pka, host(sA[])), sS[]), encrypt((Nb[x, sA[],j], z), pk(sB[])); + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig-bid b/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig-bid new file mode 100644 index 0000000000000000000000000000000000000000..4ffceb687fd0b7910bfc71eea59b1faf6dd93c61 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-corr-orig-bid @@ -0,0 +1,75 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 elimVar,decompData. +nounif c:x. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query c:secret[]. + +not c:sS[]. +not c:sA[]. + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, host(x)), sS[]) -> c:encrypt((Na[pkx], host(sA[])), pkx); +c:sign((pkx, host(x)), sS[]) & c:encrypt((Na[pkx], y, host(x)), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); + +(* B *) + +c:encrypt((x,host(a)), pk(sA[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,a], host(sA[])), pka); +c:encrypt((x,host(sA[])), pk(sA[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, sA[]], z), pk(sA[])) + -> c:encrypt(secret[], pk(z)); + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-err b/preinstallTTool/linux/proverif/examples/horn/secr/needham-err new file mode 100644 index 0000000000000000000000000000000000000000..2cd0d375f6ae01faf84cd1d66ccd622e2a680eae --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-err @@ -0,0 +1,65 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 decompData, elimVar. + +fun pk/1. +fun encrypt/2. + +query c:secret[]. + +not c:sA[]. +not c:sB[]. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); + +(* The protocol *) +(* A *) + +c:pk(x) -> c:encrypt((Na[pk(x)], pk(sA[])), pk(x)); +c:pk(x) & c:encrypt((Na[pk(x)], y), pk(sA[])) + -> c:encrypt((y,k[pk(x)]), pk(x)); + +(* B *) + +c:encrypt((x,y), pk(sB[])) -> c:encrypt((x, Nb[x,y]), y); +c:encrypt((x,pk(sA[])), pk(sB[])) & c:encrypt((Nb[x, pk(sA[])], z), pk(sB[])) + -> c:encrypt(secret[], pk(z)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-err2 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-err2 new file mode 100644 index 0000000000000000000000000000000000000000..1eff5189c8d1ea498c593a7df3c31422fb16eabf --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-err2 @@ -0,0 +1,57 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 decompData, elimVar. + +fun pk/1. +fun encrypt/2. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); + +(* The protocol *) +(* A *) + +c:pk(x) -> c:encrypt((Na[pk(x)], pk(sA[])), pk(x)); +c:pk(x) & c:encrypt((Na[pk(x)], y), pk(sA[])) + -> c:encrypt((y,k[pk(x)]), pk(x)); + +(* B *) + +c:encrypt((x,y), pk(sB[])) -> c:encrypt((x, Nb[x,y]), y); +c:encrypt((x,pk(sA[])), pk(sB[])) & c:encrypt((Nb[x, pk(sA[])], z), pk(sB[])) + -> c:encrypt(secret[], pk(z)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-hash2 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-hash2 new file mode 100644 index 0000000000000000000000000000000000000000..27a7bb3c131217a1d1361ef0f95010ddcadd9338 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-hash2 @@ -0,0 +1,76 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +? -> A : pkB +A -> B : { N_A, pkA }_pkB +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB +B -> A : { S }_hNa,Nb + +This protocol takes into account Lowe's correction. + +*) + +pred c/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +(* reduc decrypt(encrypt(x,pk(y)),y) = x. *) + +(* Hash function *) + +fun hash/2. + +(* Shared-key cryptography *) + +fun sencrypt/2. +(* reduc sdecrypt(sencrypt(x,y),y) = x. *) + +query c:secret[]. + +reduc + +c:encrypt(Nb[encrypt((v6,pk(skA[])),pk(skB[]))],pk(skB[])) & c:encrypt((v6,pk(skA[])),pk(skB[])) -> c:sencrypt(secret[],hash(v6,Nb[encrypt((v6,pk(skA[])),pk(skB[]))])); +c:encrypt((v4,v5),pk(skB[])) -> c:encrypt((v4,Nb[encrypt((v4,v5),pk(skB[]))],pk(skB[])),v5); +c:encrypt((Na[v3],v2,v3),pk(skA[])) & c:v3 -> c:encrypt(v2,v3); +c:v1 -> c:encrypt((Na[v1],pk(skA[])),v1); +c:pk(skB[]); +c:pk(skA[]); +c:c[]; + +(* The attacker *) + +c:any7 & c:any6 -> c:sencrypt(any7,any6); +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any5 -> c:pk(any5); +c:any4 & c:any3 -> c:encrypt(any4,any3); +c:any2 & c:any1 -> c:hash(any2,any1); +c:sencrypt(x,y) & c:y -> c:x. diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig b/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig new file mode 100644 index 0000000000000000000000000000000000000000..3750a964c892aa5d34a9f6d66f04ebd97823b367 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig @@ -0,0 +1,77 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 decompData, elimVar. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query c:secret[]. + +not c:sS[]. +not c:sA[]. +not c:sB[]. +(* not c:Na[pk(sB[])]. *) + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, x), sS[]) -> c:encrypt((Na[pkx], host(sA[])), pkx); +c:sign((pkx, x), sS[]) & c:encrypt((Na[pkx], y), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); + +(* B *) + +c:encrypt((x,host(a)), pk(sB[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,host(a)]), pka); +c:encrypt((x,host(sA[])), pk(sB[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, host(sA[])], z), pk(sB[])) + -> c:encrypt(secret[], pk(z)); + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig-auth b/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig-auth new file mode 100644 index 0000000000000000000000000000000000000000..838edbad927b971174e55aeb4af0ca94179a86cf --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig-auth @@ -0,0 +1,78 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 decompData, elimVar. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query B:x,y,z. + +not c:sS[]. +not c:sA[]. +not c:sB[]. +(* not c:Na[pk(sB[])]. *) + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sB[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, x), sS[]) -> c:encrypt((Na[pkx,i], host(sA[])), pkx); +c:sign((pkx, x), sS[]) & c:encrypt((Na[pkx,i], y), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); + +(* B *) + +c:encrypt((x,host(a)), pk(sB[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,host(a),j]), pka); +c:encrypt((x,host(sA[])), pk(sB[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, host(sA[]),j], z), pk(sB[])) + -> B:encrypt((x,host(sA[])), pk(sB[])), sign((pka, host(sA[])), sS[]), encrypt((Nb[x, host(sA[]),j], z), pk(sB[])); + + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig-bid b/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig-bid new file mode 100644 index 0000000000000000000000000000000000000000..69a91d4277e814a7328da7f2c659f7f08877411f --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-orig-bid @@ -0,0 +1,74 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c/1 decompData, elimVar. + +fun host/1. +fun sign/2. +fun pk/1. +fun encrypt/2. + +query c:secret[]. + +not c:sS[]. +not c:sA[]. + +reduc + +(* The attacker *) + +c:x & c:y -> c:sign(x,y); +c:sign(x,y) -> c:x; +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* The protocol *) +(* Initialisation *) + +c:pk(sA[]); +c:pk(sS[]); + +(* A *) + +c:sign((pkx, x), sS[]) -> c:encrypt((Na[pkx], host(sA[])), pkx); +c:sign((pkx, x), sS[]) & c:encrypt((Na[pkx], y), pk(sA[])) + -> c:encrypt((y,k[x]), pkx); + +(* B *) + +c:encrypt((x,host(a)), pk(sA[])) & c:sign((pka, host(a)), sS[]) -> c:encrypt((x, Nb[x,host(a)]), pka); +c:encrypt((x,host(sA[])), pk(sA[])) & c:sign((pka, host(sA[])), sS[]) & c:encrypt((Nb[x, host(sA[])], z), pk(sA[])) + -> c:encrypt(secret[], pk(z)); + +(* server *) + +c:(host(s1),host(s2)) -> c:sign((pk(s2), host(s2)), sS[]). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr new file mode 100644 index 0000000000000000000000000000000000000000..fcc4ea44e8c995310bc7ca84d430012ea17273ff --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr @@ -0,0 +1,90 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Notice that we have slightly changed the protocol such that +the analyzer terminates. The + { Nb }Kab -> { Nb-1 }Kab +is replaced by + { Nb, 0 }Kab -> { Nb, 1 }Kab + + *) + + +pred c/1 elimVar, decompData. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +query c:secretA[i]. +query c:secretB[i]. +query c:secretA[c1]. +query c:secretB[c1]. + +reduc + +(* Attacker *) + +c:k & c:encrypt(m,k) -> c:m; +c:x -> c:host(x); +c:x & c:y -> c:encrypt(x,y); + +c:host(Kas[]); +c:host(Kbs[]); + +c:k[Kas[], Kbs[], Na[host(Kbs[]),c0]]; + +(* A *) + +c:h -> c:(host(Kas[]), h, Na[h,i]); +c:encrypt((Na[h,i], h, key, m), Kas[]) -> c:m; +c:encrypt((Na[h,i], h, key, m), Kas[]) & c:encrypt((n, c0), key) -> c:encrypt((n, c1), key); + +c:encrypt((Na[host(Kbs[]),i], host(Kbs[]), key, m), Kas[]) -> c:encrypt(secretA[i], key); + + +(* B *) + +c:encrypt((key, h), Kbs[]) -> c:encrypt((Nb[key,h], c0), key); + +c:encrypt((key, host(Kas[])), Kbs[]) -> c:encrypt(secretB[i], key); + +(* S *) + +c:(host(Ks1), host(Ks2), n) -> c:encrypt((n, host(Ks2), k[Ks1, Ks2, n], encrypt((k[Ks1, Ks2, n], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-analnonterm b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-analnonterm new file mode 100644 index 0000000000000000000000000000000000000000..61e6d8450e38aaea9ca2e29af48459084675aa4e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-analnonterm @@ -0,0 +1,52 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Inspired from the Needham Shroeder shared key protocol +The analyzer loops ! *) + +pred cs0/1 elimVar, decompData. + +fun encrypt/2. +fun decr/1. + +param verboseRules = yes. + +query cs0:secretA[]. + +reduc + +(* +cs0:encrypt(n, k[Kas[], Ks2]) -> cs0:encrypt(decr(n), k[Kas[], Ks2]). +*) + +(* A *) + +cs0:encrypt(n, key) & cs0:encrypt((Na[Ks2], key), Kas[]) -> cs0:encrypt(decr(n), key); + +(* S *) + +cs0:encrypt((Na[Ks2], k[Ks1, Ks2]), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-analnonterm2 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-analnonterm2 new file mode 100644 index 0000000000000000000000000000000000000000..ff7dffc8603d370dbbe42ced5182eeb21cd4e7e0 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-analnonterm2 @@ -0,0 +1,54 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol *) + +param verboseRules = yes. + +pred c/1 elimVar, decompData. + +fun encrypt/2. +fun decr/1. + +query c:secretA[]. + +(* The analyzer finds automatically: +nounif c:x. +nounif c:encrypt(x,k[]). + +These nounif are necessary: +c:encrypt(n,k[]) -> c:encrypt(decr(n),k[]) +c:encrypt(v3,k[]) -> c:decr(v3) +=> loop +*) + +reduc + +c:k & c:encrypt(m,k) -> c:m; +c:encrypt(n, k[]) -> c:encrypt(decr(n), k[]); +c:encrypt(k[], Ks2). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr new file mode 100644 index 0000000000000000000000000000000000000000..a701383e6cbfbf49fa6c93987c912bb47c30e19c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr @@ -0,0 +1,138 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Notice that we have slightly changed the protocol such that +the analyzer terminates. The + { Nb }Kab -> { Nb-1 }Kab +is replaced by + { Nb, 0 }Kab -> { Nb, 1 }Kab + + *) + + +pred c/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +query c:secretA[i]. +query c:secretB[i]. +query c:secretA[c1]. +query c:secretB[c1]. + +reduc + +(* Attacker *) + +c:k & c:encrypt(m,k) -> c:m; +c:x -> c:host(x); +c:x & c:y -> c:encrypt(x,y); + +c:host(Kas[]); +c:host(Kbs[]); + + +(* key compromise +c:k[Kas[], Kbs[], Na[host(Kbs[]),c0],c0]; *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,c0]; +comp:x -> comp:J[x,c0]; +comp:x & comp:y -> comp:Nb[x,y,c0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,c0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:x -> c:Na[x, c0]; +comp:x -> c:J[x,c0]; +comp:x & comp:y -> c:Nb[x,y,c0]; +comp:x & comp:y & comp:z -> c:k[x,y,z,c0]; + +(* A *) + +c:h & c:bm -> c:(host(Kas[]), h, Na[h,i], bm); +c:encrypt((Na[h,i], h, key, m), Kas[]) -> c:m; +c:encrypt((Na[h,i], h, key, m), Kas[]) & c:encrypt((c0, n), key) -> c:encrypt((c1, n), key); + +c:encrypt((Na[host(Kbs[]),i], host(Kbs[]), key, m), Kas[]) -> c:encrypt(secretA[i], key); + + +(* B *) + +c:h -> c:encrypt((h, J[h,i]), Kbs[]); +c:encrypt((key, h, J[h,i]), Kbs[]) -> c:encrypt((c0, Nb[key,h,i]), key); + +c:encrypt((key, host(Kas[]), J[host(Kas[]),i]), Kbs[]) & c:encrypt((c1, Nb[key, host(Kas[]), i]), key) -> c:encrypt(secretB[i], key); + +(* S *) + +c:(host(Ks1), host(Ks2), n, encrypt((host(Ks1), j), Ks2)) -> c:encrypt((n, host(Ks2), k[Ks1, Ks2, n, i], encrypt((k[Ks1, Ks2, n, i], host(Ks1), j), Ks2)), Ks1). + +(* + +Prendre un Na compromis et un J neuf. Envoyer au serveur comme si ca venait de A. + +Rule 1: c:k & c:encrypt(m,k) -> c:m +Rule 2: c:x -> c:host(x) +Rule 3: c:x & c:y -> c:encrypt(x,y) +Rule 4: c:host(Kas[]) +Rule 5: c:host(Kbs[]) +Rule 6: c:c0() +Rule 7: c:c1() +Rule 8: comp:Kas[] +Rule 9: comp:Kbs[] +Rule 10: comp:x -> comp:Na[x,c0()] +Rule 11: comp:x -> comp:J[x,c0()] +Rule 12: comp:x & comp:y -> comp:Nb[x,y,c0()] +Rule 13: comp:x & comp:y & comp:z -> comp:k[x,y,z,c0()] +Rule 14: comp:x -> comp:host(x) +Rule 15: comp:x & comp:y -> comp:encrypt(x,y) +Rule 16: comp:x -> c:Na[x,c0()] +Rule 17: comp:x -> c:J[x,c0()] +Rule 18: comp:x & comp:y -> c:Nb[x,y,c0()] +Rule 19: comp:x & comp:y & comp:z -> c:k[x,y,z,c0()] +Rule 20: c:h & c:bm -> c:(host(Kas[]),h,Na[h,i],bm) +Rule 21: c:encrypt((Na[h,i],h,key,m),Kas[]) -> c:m +Rule 22: c:encrypt((Na[h,i],h,key,m),Kas[]) & c:encrypt((c0(),n),key) -> c:encrypt((c1(),n),key) +Rule 23: c:encrypt((Na[host(Kbs[]),i],host(Kbs[]),key,m),Kas[]) -> c:encrypt(secretA[i],key) +Rule 24: c:h -> c:encrypt((h,J[h,i]),Kbs[]) +Rule 25: c:encrypt((key,h,J[h,i]),Kbs[]) -> c:encrypt((c0(),Nb[key,h,i]),key) +Rule 26: c:encrypt((key,host(Kas[]),J[host(Kas[]),i]),Kbs[]) & c:encrypt((c1(),Nb[key,host(Kas[]),i]),key) -> c:encrypt(secretB[i],key) +Rule 27: c:(host(Ks1),host(Ks2),n,encrypt((host(Ks1),j),Ks2)) -> c:encrypt((n,host(Ks2),k[Ks1,Ks2,n,i],encrypt((k[Ks1,Ks2,n,i],host(Ks1),j),Ks2)),Ks1) diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr-bid b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr-bid new file mode 100644 index 0000000000000000000000000000000000000000..fb3eea3efea1e63dd7df21b7adf22173004cccb2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr-bid @@ -0,0 +1,157 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],session0]] +for one session0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Notice that we have slightly changed the protocol such that +the analyzer terminates. The + { Nb }Kab -> { Nb-1 }Kab +is replaced by + { Nb, 0 }Kab -> { Nb, 1 }Kab + + +Three predicates: +comp:M iff M is a term containing only names of session0 +cs0:M iff the attacker can get M in session0 +cs1:M iff the attacker can get M in session1 using compromised terms +of session0. + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> cs0:a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with cs0 and session0 +4) cs0:M -> cs1:M +5) the usual rules of the protocol with cs1 and session1 + + *) + + +pred cs0/1 elimVar, decompData. +pred cs1/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +not cs0:Kas[]. +not cs1:Kas[]. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data session0/0. +data session1/0. + +query cs1:secretA[session1]. +query cs1:secretB[session1]. + +reduc + +(* Attacker *) + +cs0:k & cs0:encrypt(m,k) -> cs0:m; +cs0:host(x); +cs0:x & cs0:y -> cs0:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:x -> comp:Na[x,session0]; +comp:x -> comp:J[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> cs0:Na[x, session0]; +comp:x -> cs0:J[x,session0]; +comp:x & comp:y -> cs0:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> cs0:k[x,y,z,session0]; +cs0:secretA[session0]; +cs0:secretB[session0]; + +(* A *) + +cs0:h & cs0:bm -> cs0:(host(Kas[]), h, Na[h,session0], bm); +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) -> cs0:m; +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) & cs0:encrypt((c0, n), key) -> cs0:encrypt((c1, n), key); + +cs0:encrypt((Na[host(Kas[]),session0], host(Kas[]), key, m), Kas[]) -> cs0:encrypt(secretA[session0], key); + + +(* B *) + +cs0:h -> cs0:encrypt((h, J[h,session0]), Kas[]); +cs0:encrypt((key, h, J[h,session0]), Kas[]) -> cs0:encrypt((c0, Nb[key,h,session0]), key); + +cs0:encrypt((key, host(Kas[]), J[host(Kas[]),session0]), Kas[]) & cs0:encrypt((c1, Nb[key, host(Kas[]), session0]), key) -> cs0:encrypt(secretB[session0], key); + +(* S *) + +cs0:(host(Ks1), host(Ks2), n, encrypt((host(Ks1), j), Ks2)) -> cs0:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session0], encrypt((k[Ks1, Ks2, n, session0], host(Ks1), j), Ks2)), Ks1); + +(* Implication *) + +cs0:x -> cs1:x; + +(* Attacker *) + +cs1:k & cs1:encrypt(m,k) -> cs1:m; +cs1:host(x); +cs1:x & cs1:y -> cs1:encrypt(x,y); + +(* A *) + +cs1:h & cs1:bm -> cs1:(host(Kas[]), h, Na[h,session1], bm); +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) -> cs1:m; +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) & cs1:encrypt((c0, n), key) -> cs1:encrypt((c1, n), key); + +cs1:encrypt((Na[host(Kas[]),session1], host(Kas[]), key, m), Kas[]) -> cs1:encrypt(secretA[session1], key); + + +(* B *) + +cs1:h -> cs1:encrypt((h, J[h,session1]), Kas[]); +cs1:encrypt((key, h, J[h,session1]), Kas[]) -> cs1:encrypt((c0, Nb[key,h,session1]), key); + +cs1:encrypt((key, host(Kas[]), J[host(Kas[]),session1]), Kas[]) & cs1:encrypt((c1, Nb[key, host(Kas[]), session1]), key) -> cs1:encrypt(secretB[session1], key); + +(* S *) + +cs1:(host(Ks1), host(Ks2), n, encrypt((host(Ks1), j), Ks2)) -> cs1:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session1], encrypt((k[Ks1, Ks2, n, session1], host(Ks1), j), Ks2)), Ks1). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr4 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr4 new file mode 100644 index 0000000000000000000000000000000000000000..fdc1876d4833211b303b33a0087dd73b300f9bf5 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-corr4 @@ -0,0 +1,160 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],session0]] +for one session0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Notice that we have slightly changed the protocol such that +the analyzer terminates. The + { Nb }Kab -> { Nb-1 }Kab +is replaced by + { Nb, 0 }Kab -> { Nb, 1 }Kab + + +Three predicates: +comp:M iff M is a term containing only names of session0 +cs0:M iff the attacker can get M in session0 +cs1:M iff the attacker can get M in session1 using compromised terms +of session0. + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> cs0:a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with cs0 and session0 +4) cs0:M -> cs1:M +5) the usual rules of the protocol with cs1 and session1 + + *) + + +pred cs0/1 elimVar, decompData. +pred cs1/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +not cs0:Kas[]. +not cs0:Kbs[]. +not cs1:Kas[]. +not cs1:Kbs[]. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data session0/0. +data session1/0. + +query cs1:secretA[session1]. +query cs1:secretB[session1]. + +reduc + +(* Attacker *) + +cs0:k & cs0:encrypt(m,k) -> cs0:m; +cs0:host(x); +cs0:x & cs0:y -> cs0:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,session0]; +comp:x -> comp:J[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> cs0:Na[x, session0]; +comp:x -> cs0:J[x,session0]; +comp:x & comp:y -> cs0:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> cs0:k[x,y,z,session0]; +cs0:secretA[session0]; +cs0:secretB[session0]; + +(* A *) + +cs0:h & cs0:bm -> cs0:(host(Kas[]), h, Na[h,session0], bm); +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) -> cs0:m; +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) & cs0:encrypt((c0, n), key) -> cs0:encrypt((c1, n), key); + +cs0:encrypt((Na[host(Kbs[]),session0], host(Kbs[]), key, m), Kas[]) -> cs0:encrypt(secretA[session0], key); + + +(* B *) + +cs0:h -> cs0:encrypt((h, J[h,session0]), Kbs[]); +cs0:encrypt((key, h, J[h,session0]), Kbs[]) -> cs0:encrypt((c0, Nb[key,h,session0]), key); + +cs0:encrypt((key, host(Kas[]), J[host(Kas[]),session0]), Kbs[]) & cs0:encrypt((c1, Nb[key, host(Kas[]), session0]), key) -> cs0:encrypt(secretB[session0], key); + +(* S *) + +cs0:(host(Ks1), host(Ks2), n, encrypt((host(Ks1), j), Ks2)) -> cs0:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session0], encrypt((k[Ks1, Ks2, n, session0], host(Ks1), j), Ks2)), Ks1); + +(* Implication *) + +cs0:x -> cs1:x; + +(* Attacker *) + +cs1:k & cs1:encrypt(m,k) -> cs1:m; +cs1:host(x); +cs1:x & cs1:y -> cs1:encrypt(x,y); + +(* A *) + +cs1:h & cs1:bm -> cs1:(host(Kas[]), h, Na[h,session1], bm); +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) -> cs1:m; +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) & cs1:encrypt((c0, n), key) -> cs1:encrypt((c1, n), key); + +cs1:encrypt((Na[host(Kbs[]),session1], host(Kbs[]), key, m), Kas[]) -> cs1:encrypt(secretA[session1], key); + + +(* B *) + +cs1:h -> cs1:encrypt((h, J[h,session1]), Kbs[]); +cs1:encrypt((key, h, J[h,session1]), Kbs[]) -> cs1:encrypt((c0, Nb[key,h,session1]), key); + +cs1:encrypt((key, host(Kas[]), J[host(Kas[]),session1]), Kbs[]) & cs1:encrypt((c1, Nb[key, host(Kas[]), session1]), key) -> cs1:encrypt(secretB[session1], key); + +(* S *) + +cs1:(host(Ks1), host(Ks2), n, encrypt((host(Ks1), j), Ks2)) -> cs1:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session1], encrypt((k[Ks1, Ks2, n, session1], host(Ks1), j), Ks2)), Ks1). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig new file mode 100644 index 0000000000000000000000000000000000000000..b55b64c5e5cacce6d7b4e6429153dc44ebec8dc7 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig @@ -0,0 +1,101 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Notice that we have slightly changed the protocol such that +the analyzer terminates. The + { Nb }Kab -> { Nb-1 }Kab +is replaced by + { Nb, 0 }Kab -> { Nb, 1 }Kab + + *) + + +pred c/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +not c:Kas[]. +not c:Kbs[]. + +query c:secretA[i]. +query c:secretB[i]. +query c:secretA[c1]. +query c:secretB[c1]. + +reduc + +(* Attacker *) + +c:k & c:encrypt(m,k) -> c:m; +c:host(x); +c:x & c:y -> c:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,c0]; +comp:x & comp:y -> comp:Nb[x,y,c0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,c0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:x -> c:Na[x, c0]; +comp:x & comp:y -> c:Nb[x,y,c0]; +comp:x & comp:y & comp:z -> c:k[x,y,z,c0]; + +(* A *) + +c:h -> c:(host(Kas[]), h, Na[h,i]); +c:encrypt((Na[h,i], h, key, m), Kas[]) -> c:m; +c:encrypt((Na[h,i], h, key, m), Kas[]) & c:encrypt((n, c0), key) -> c:encrypt((n, c1), key); + +c:encrypt((Na[host(Kbs[]),i], host(Kbs[]), key, m), Kas[]) -> c:encrypt(secretA[i], key); + + +(* B *) + +c:encrypt((key, h), Kbs[]) -> c:encrypt((Nb[key,h,i], c0), key); + +c:encrypt((key, host(Kas[])), Kbs[]) & c:encrypt((Nb[key,host(Kas[]),i], c1), key) -> c:encrypt(secretB[i], key); + +(* S *) + +c:(host(Ks1), host(Ks2), n) -> c:encrypt((n, host(Ks2), k[Ks1, Ks2, n, i], encrypt((k[Ks1, Ks2, n, i], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig-bid b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig-bid new file mode 100644 index 0000000000000000000000000000000000000000..de0162c6038cbd13af1728a332d878eed8226f8c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig-bid @@ -0,0 +1,151 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Notice that we have slightly changed the protocol such that +the analyzer terminates. The + { Nb }Kab -> { Nb-1 }Kab +is replaced by + { Nb, 0 }Kab -> { Nb, 1 }Kab + +Three predicates: +comp:M iff M is a term containing only names of session0 +cs0:M iff the attacker can get M in session0 +cs1:M iff the attacker can get M in session1 using compromised terms +of session0. + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> cs0:a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with cs0 and session0 +4) cs0:M -> cs1:M +5) the usual rules of the protocol with cs1 and session1 + + *) + +pred cs0/1 elimVar, decompData. +pred cs1/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data session0/0. +data session1/0. + +not cs0:Kas[]. +not cs1:Kas[]. + +query cs1:secretA[session1]. +query cs1:secretB[session1]. + +reduc + +(* Attacker *) + +cs0:k & cs0:encrypt(m,k) -> cs0:m; +cs0:host(x); +cs0:x & cs0:y -> cs0:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:x -> comp:Na[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> cs0:Na[x, session0]; +comp:x & comp:y -> cs0:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> cs0:k[x,y,z,session0]; +cs0:secretA[session0]; +cs0:secretB[session0]; + + +(* A *) + +cs0:h -> cs0:(host(Kas[]), h, Na[h,session0]); +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) -> cs0:m; +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) & cs0:encrypt((n, c0), key) -> cs0:encrypt((n, c1), key); + +cs0:encrypt((Na[host(Kas[]),session0], host(Kas[]), key, m), Kas[]) -> cs0:encrypt(secretA[session0], key); + + +(* B *) + +cs0:encrypt((key, h), Kas[]) -> cs0:encrypt((Nb[key,h,session0], c0), key); + +cs0:encrypt((key, host(Kas[])), Kas[]) & cs0:encrypt((Nb[key,host(Kas[]),session0], c1), key) -> cs0:encrypt(secretB[session0], key); + +(* S *) + +cs0:(host(Ks1), host(Ks2), n) -> cs0:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session0], encrypt((k[Ks1, Ks2, n, session0], host(Ks1)), Ks2)), Ks1); + +(* Implication *) + +cs0:x -> cs1:x; + +(* Attacker *) + +cs1:k & cs1:encrypt(m,k) -> cs1:m; +cs1:host(x); +cs1:x & cs1:y -> cs1:encrypt(x,y); + +(* A *) + +cs1:h -> cs1:(host(Kas[]), h, Na[h,session1]); +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) -> cs1:m; +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) & cs1:encrypt((n, c0), key) -> cs1:encrypt((n, c1), key); + +cs1:encrypt((Na[host(Kas[]),session1], host(Kas[]), key, m), Kas[]) -> cs1:encrypt(secretA[session1], key); + + +(* B *) + +cs1:encrypt((key, h), Kas[]) -> cs1:encrypt((Nb[key,h,session1], c0), key); + +cs1:encrypt((key, host(Kas[])), Kas[]) & cs1:encrypt((Nb[key,host(Kas[]),session1], c1), key) -> cs1:encrypt(secretB[session1], key); + +(* S *) + +cs1:(host(Ks1), host(Ks2), n) -> cs1:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session1], encrypt((k[Ks1, Ks2, n, session1], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig-test b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig-test new file mode 100644 index 0000000000000000000000000000000000000000..e74624321c66a59235b7befd2498e74d3ae98d58 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig-test @@ -0,0 +1,83 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +c:encrypt(decr(Nb[k[Kas[],Kbs[],Na[host(Kbs[])]],host(Kas[])]),k[Kas[],Kbs[],Na[host(Kbs[])]]) +c:encrypt\(decr\(Nb\[k\[Kas\[\],Kbs\[\],Na\[host\(Kbs\[\]\)\]\],host\(Kas\[\]\)\]\),k\[Kas\[\],Kbs\[\],Na\[host\(Kbs\[\]\)\]\]\) + *) + +param verboseRules = yes. + +param selFun = Nounifset. + +pred c/1 elimVar, decompData. + +fun encrypt/2. + +fun host/1. + +fun decr/1. + +not c:Kas[]. +not c:Kbs[]. + +query c:secretB[]. + +reduc + +(* Attacker *) + +c:k & c:encrypt(m,k) -> c:m; +c:host(Kas[]); +c:host(Kbs[]); +c:host(Kcs[]); +c:Kcs[]; +c:x & c:y -> c:encrypt(x,y); +c:x -> c:decr(x); +(* c:decr(x) -> c:x; *) + +(* A *) + +c:h -> c:(host(Kas[]), h, Na[h]); +c:encrypt((Na[h], h, key, m), Kas[]) -> c:m; +c:encrypt((Na[h], h, key, m), Kas[]) & c:encrypt(n, key) -> c:encrypt(decr(n), key); + +(* B *) + +c:encrypt((key, h), Kbs[]) -> c:encrypt(Nb[key,h], key); + +c:encrypt((key, host(Kas[])), Kbs[]) & c:encrypt(decr(Nb[key,host(Kas[])]), key) -> c:encrypt(secretB[], key); + +(* S *) + +c:(host(Ks1), host(Ks2), n) -> c:encrypt((n, host(Ks2), k[Ks1, Ks2, n], encrypt((k[Ks1, Ks2, n], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig4 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig4 new file mode 100644 index 0000000000000000000000000000000000000000..467b2248024af0c6b3611919c98ce64c9c6a4f60 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig4 @@ -0,0 +1,154 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Notice that we have slightly changed the protocol such that +the analyzer terminates. The + { Nb }Kab -> { Nb-1 }Kab +is replaced by + { Nb, 0 }Kab -> { Nb, 1 }Kab + +Three predicates: +comp:M iff M is a term containing only names of session0 +cs0:M iff the attacker can get M in session0 +cs1:M iff the attacker can get M in session1 using compromised terms +of session0. + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> cs0:a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with cs0 and session0 +4) cs0:M -> cs1:M +5) the usual rules of the protocol with cs1 and session1 + + *) + +pred cs0/1 elimVar, decompData. +pred cs1/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data session0/0. +data session1/0. + +not cs0:Kas[]. +not cs0:Kbs[]. +not cs1:Kas[]. +not cs1:Kbs[]. + +query cs1:secretA[session1]. +query cs1:secretB[session1]. + +reduc + +(* Attacker *) + +cs0:k & cs0:encrypt(m,k) -> cs0:m; +cs0:host(x); +cs0:x & cs0:y -> cs0:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> cs0:Na[x, session0]; +comp:x & comp:y -> cs0:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> cs0:k[x,y,z,session0]; +cs0:secretA[session0]; +cs0:secretB[session0]; + + +(* A *) + +cs0:h -> cs0:(host(Kas[]), h, Na[h,session0]); +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) -> cs0:m; +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) & cs0:encrypt((n, c0), key) -> cs0:encrypt((n, c1), key); + +cs0:encrypt((Na[host(Kbs[]),session0], host(Kbs[]), key, m), Kas[]) -> cs0:encrypt(secretA[session0], key); + + +(* B *) + +cs0:encrypt((key, h), Kbs[]) -> cs0:encrypt((Nb[key,h,session0], c0), key); + +cs0:encrypt((key, host(Kas[])), Kbs[]) & cs0:encrypt((Nb[key,host(Kas[]),session0], c1), key) -> cs0:encrypt(secretB[session0], key); + +(* S *) + +cs0:(host(Ks1), host(Ks2), n) -> cs0:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session0], encrypt((k[Ks1, Ks2, n, session0], host(Ks1)), Ks2)), Ks1); + +(* Implication *) + +cs0:x -> cs1:x; + +(* Attacker *) + +cs1:k & cs1:encrypt(m,k) -> cs1:m; +cs1:host(x); +cs1:x & cs1:y -> cs1:encrypt(x,y); + +(* A *) + +cs1:h -> cs1:(host(Kas[]), h, Na[h,session1]); +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) -> cs1:m; +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) & cs1:encrypt((n, c0), key) -> cs1:encrypt((n, c1), key); + +cs1:encrypt((Na[host(Kbs[]),session1], host(Kbs[]), key, m), Kas[]) -> cs1:encrypt(secretA[session1], key); + + +(* B *) + +cs1:encrypt((key, h), Kbs[]) -> cs1:encrypt((Nb[key,h,session1], c0), key); + +cs1:encrypt((key, host(Kas[])), Kbs[]) & cs1:encrypt((Nb[key,host(Kas[]),session1], c1), key) -> cs1:encrypt(secretB[session1], key); + +(* S *) + +cs1:(host(Ks1), host(Ks2), n) -> cs1:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session1], encrypt((k[Ks1, Ks2, n, session1], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig5 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig5 new file mode 100644 index 0000000000000000000000000000000000000000..10be8f6f513bf41a2d0a0280c4fa3d5a3204fe69 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig5 @@ -0,0 +1,150 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Three predicates: +comp:M iff M is a term containing only names of session0 +cs0:M iff the attacker can get M in session0 +cs1:M iff the attacker can get M in session1 using compromised terms +of session0. + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> cs0:a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with cs0 and session0 +4) cs0:M -> cs1:M +5) the usual rules of the protocol with cs1 and session1 + + *) + +pred cs0/1 elimVar, decompData. +pred cs1/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data decr/1. + +data session0/0. +data session1/0. + +not cs0:Kas[]. +not cs0:Kbs[]. +not cs1:Kas[]. +not cs1:Kbs[]. + +query cs1:secretA[session1]. +query cs1:secretB[session1]. + +reduc + +(* Attacker *) + +cs0:k & cs0:encrypt(m,k) -> cs0:m; +cs0:host(x); +cs0:x & cs0:y -> cs0:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> cs0:Na[x, session0]; +comp:x & comp:y -> cs0:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> cs0:k[x,y,z,session0]; +cs0:secretA[session0]; +cs0:secretB[session0]; + + +(* A *) + +cs0:h -> cs0:(host(Kas[]), h, Na[h,session0]); +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) -> cs0:m; +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) & cs0:encrypt(decr(n), key) -> cs0:encrypt(n, key); + +cs0:encrypt((Na[host(Kbs[]),session0], host(Kbs[]), key, m), Kas[]) -> cs0:encrypt(secretA[session0], key); + + +(* B *) + +cs0:encrypt((key, h), Kbs[]) -> cs0:encrypt(decr(Nb[key,h,session0]), key); + +cs0:encrypt((key, host(Kas[])), Kbs[]) & cs0:encrypt(Nb[key,host(Kas[]),session0], key) -> cs0:encrypt(secretB[session0], key); + +(* S *) + +cs0:(host(Ks1), host(Ks2), n) -> cs0:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session0], encrypt((k[Ks1, Ks2, n, session0], host(Ks1)), Ks2)), Ks1); + +(* Implication *) + +cs0:x -> cs1:x; + +(* Attacker *) + +cs1:k & cs1:encrypt(m,k) -> cs1:m; +cs1:host(x); +cs1:x & cs1:y -> cs1:encrypt(x,y); + +(* A *) + +cs1:h -> cs1:(host(Kas[]), h, Na[h,session1]); +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) -> cs1:m; +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) & cs1:encrypt(decr(n), key) -> cs1:encrypt(n, key); + +cs1:encrypt((Na[host(Kbs[]),session1], host(Kbs[]), key, m), Kas[]) -> cs1:encrypt(secretA[session1], key); + + +(* B *) + +cs1:encrypt((key, h), Kbs[]) -> cs1:encrypt(decr(Nb[key,h,session1]), key); + +cs1:encrypt((key, host(Kas[])), Kbs[]) & cs1:encrypt(Nb[key,host(Kas[]),session1], key) -> cs1:encrypt(secretB[session1], key); + +(* S *) + +cs1:(host(Ks1), host(Ks2), n) -> cs1:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session1], encrypt((k[Ks1, Ks2, n, session1], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig6 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig6 new file mode 100644 index 0000000000000000000000000000000000000000..556e2481b4263761d5b1983ac330653e3f72c36a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig6 @@ -0,0 +1,156 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Three predicates: +comp:M iff M is a term containing only names of session0 +cs0:M iff the attacker can get M in session0 +cs1:M iff the attacker can get M in session1 using compromised terms +of session0. + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> cs0:a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with cs0 and session0 +4) cs0:M -> cs1:M +5) the usual rules of the protocol with cs1 and session1 + + *) + +pred cs0/1 elimVar, decompData. +pred cs1/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data decr/1. + +data session0/0. +data session1/0. + +not cs0:Kas[]. +not cs0:Kbs[]. +not cs1:Kas[]. +not cs1:Kbs[]. + +query cs1:secretA[session1]. +query cs1:secretB[session1]. + +reduc + +(* Attacker *) + +cs0:k & cs0:encrypt(m,k) -> cs0:m; +cs0:host(Kas[]); +cs0:host(Kbs[]); +cs0:host(Kcs[]); +cs0:Kcs[]; +cs0:x & cs0:y -> cs0:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> cs0:Na[x, session0]; +comp:x & comp:y -> cs0:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> cs0:k[x,y,z,session0]; +cs0:secretA[session0]; +cs0:secretB[session0]; + + +(* A *) + +cs0:h -> cs0:(host(Kas[]), h, Na[h,session0]); +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) -> cs0:m; +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) & cs0:encrypt(n, key) -> cs0:encrypt(decr(n), key); + +cs0:encrypt((Na[host(Kbs[]),session0], host(Kbs[]), key, m), Kas[]) -> cs0:encrypt(secretA[session0], key); + + +(* B *) + +cs0:encrypt((key, h), Kbs[]) -> cs0:encrypt(Nb[key,h,session0], key); + +cs0:encrypt((key, host(Kas[])), Kbs[]) & cs0:encrypt(decr(Nb[key,host(Kas[]),session0]), key) -> cs0:encrypt(secretB[session0], key); + +(* S *) + +cs0:(host(Ks1), host(Ks2), n) -> cs0:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session0], encrypt((k[Ks1, Ks2, n, session0], host(Ks1)), Ks2)), Ks1); + +(* Implication *) + +cs0:x -> cs1:x; + +(* Attacker *) + +cs1:k & cs1:encrypt(m,k) -> cs1:m; +cs1:host(Kas[]); +cs1:host(Kbs[]); +cs1:host(Kcs[]); +cs1:Kcs[]; +cs1:x & cs1:y -> cs1:encrypt(x,y); + +(* A *) + +cs1:h -> cs1:(host(Kas[]), h, Na[h,session1]); +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) -> cs1:m; +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) & cs1:encrypt(n, key) -> cs1:encrypt(decr(n), key); + +cs1:encrypt((Na[host(Kbs[]),session1], host(Kbs[]), key, m), Kas[]) -> cs1:encrypt(secretA[session1], key); + + +(* B *) + +cs1:encrypt((key, h), Kbs[]) -> cs1:encrypt(Nb[key,h,session1], key); + +cs1:encrypt((key, host(Kas[])), Kbs[]) & cs1:encrypt(decr(Nb[key,host(Kas[]),session1]), key) -> cs1:encrypt(secretB[session1], key); + +(* S *) + +cs1:(host(Ks1), host(Ks2), n) -> cs1:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session1], encrypt((k[Ks1, Ks2, n, session1], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig8 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig8 new file mode 100644 index 0000000000000000000000000000000000000000..aa05adf3541a85e642724e3c3c05d6b8855806b0 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig8 @@ -0,0 +1,163 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +With the "Weight" selection function, the analyzer determines himself +all the nounif clauses that have to be added, and achieves termination. +(Even in this rather complicated case.) + +Three predicates: +comp:M iff M is a term containing only names of session0 +cs0:M iff the attacker can get M in session0 +cs1:M iff the attacker can get M in session1 using compromised terms +of session0. + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> cs0:a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with cs0 and session0 +4) cs0:M -> cs1:M +5) the usual rules of the protocol with cs1 and session1 + +The difference wrt needham-shr-orig6 is that the rules + cs0:host(Kas[]); + cs0:host(Kbs[]); + cs0:host(Kcs[]); + cs0:Kcs[]; +are replaced by + cs0:host(x); +and similarly for cs1. + + *) + +pred cs0/1 elimVar, decompData. +pred cs1/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +fun encrypt/2. + +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data decr/1. + +data session0/0. +data session1/0. + +not cs0:Kas[]. +not cs0:Kbs[]. +not cs1:Kas[]. +not cs1:Kbs[]. + +query cs1:secretA[session1]. +query cs1:secretB[session1]. + +reduc + +(* Attacker *) + +cs0:k & cs0:encrypt(m,k) -> cs0:m; +cs0:host(x); +cs0:x & cs0:y -> cs0:encrypt(x,y); + +(* key compromise *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> cs0:Na[x, session0]; +comp:x & comp:y -> cs0:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> cs0:k[x,y,z,session0]; +cs0:secretA[session0]; +cs0:secretB[session0]; + + +(* A *) + +cs0:h -> cs0:(host(Kas[]), h, Na[h,session0]); +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) -> cs0:m; +cs0:encrypt((Na[h,session0], h, key, m), Kas[]) & cs0:encrypt(n, key) -> cs0:encrypt(decr(n), key); + +cs0:encrypt((Na[host(Kbs[]),session0], host(Kbs[]), key, m), Kas[]) -> cs0:encrypt(secretA[session0], key); + + +(* B *) + +cs0:encrypt((key, h), Kbs[]) -> cs0:encrypt(Nb[key,h,session0], key); + +cs0:encrypt((key, host(Kas[])), Kbs[]) & cs0:encrypt(decr(Nb[key,host(Kas[]),session0]), key) -> cs0:encrypt(secretB[session0], key); + +(* S *) + +cs0:(host(Ks1), host(Ks2), n) -> cs0:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session0], encrypt((k[Ks1, Ks2, n, session0], host(Ks1)), Ks2)), Ks1); + +(* Implication *) + +cs0:x -> cs1:x; + +(* Attacker *) + +cs1:k & cs1:encrypt(m,k) -> cs1:m; +cs1:host(x); +cs1:x & cs1:y -> cs1:encrypt(x,y); + +(* A *) + +cs1:h -> cs1:(host(Kas[]), h, Na[h,session1]); +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) -> cs1:m; +cs1:encrypt((Na[h,session1], h, key, m), Kas[]) & cs1:encrypt(n, key) -> cs1:encrypt(decr(n), key); + +cs1:encrypt((Na[host(Kbs[]),session1], host(Kbs[]), key, m), Kas[]) -> cs1:encrypt(secretA[session1], key); + + +(* B *) + +cs1:encrypt((key, h), Kbs[]) -> cs1:encrypt(Nb[key,h,session1], key); + +cs1:encrypt((key, host(Kas[])), Kbs[]) & cs1:encrypt(decr(Nb[key,host(Kas[]),session1]), key) -> cs1:encrypt(secretB[session1], key); + +(* S *) + +cs1:(host(Ks1), host(Ks2), n) -> cs1:encrypt((n, host(Ks2), k[Ks1, Ks2, n, session1], encrypt((k[Ks1, Ks2, n, session1], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig9 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig9 new file mode 100644 index 0000000000000000000000000000000000000000..64b912f9bb800ebd60355b4f14e40f941457ff89 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr-orig9 @@ -0,0 +1,137 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol +Encoding using Christopher Olson's Security (CS223) Quarter Project. + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + +Two predicates: +comp:M iff M is a term containing only names of session0 +c:i,M iff the attacker can get M in session i + +Rules: +1) rules for comp: +2) comp:x1 & ... & comp:xn -> c:session0,a[session0,x1, ..., xn] for every +session name a +3) the usual rules of the protocol with c:sessionvar,M +4) c:session0,M -> c:session1,M + + *) + +pred c/2. +elimtrue c:x,b[i]. +pred comp/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +data decr/1. + +data session0/0. +data session1/0. + +not c:sessionvar,Kas[]. +not c:sessionvar,Kbs[]. + +query c:session1,secretA[session1]. +query c:session1,secretB[session1]. + +param verboseRules = yes. + +reduc + +(* Attacker *) + +c:sessionvar,k & c:sessionvar,encrypt(m,k) -> c:sessionvar,m; +c:sessionvar,x & c:sessionvar,y -> c:sessionvar,encrypt(x,y); +c:sessionvar,host(Kas[]); +c:sessionvar,host(Kbs[]); +c:sessionvar,host(Kcs[]); +c:sessionvar,Kcs[]; + +(* Attacker: decomposition of data constructors *) + +c:sessionvar,c0; +c:sessionvar,c1; +c:sessionvar,x <=> c:sessionvar,decr(x); +c:sessionvar,session0; +c:sessionvar,session1; +c:sessionvar,x & c:sessionvar,y <=> c:sessionvar,(x,y); +c:sessionvar,x & c:sessionvar,y & c:sessionvar,z <=> c:sessionvar,(x,y,z); +c:sessionvar,x & c:sessionvar,y & c:sessionvar,z & c:sessionvar,t <=> c:sessionvar,(x,y,z,t); + +(* key compromise *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,session0]; +comp:x & comp:y -> comp:Nb[x,y,session0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,session0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:secretA[session0]; +comp:secretB[session0]; + +comp:x -> c:session0,Na[x, session0]; +comp:x & comp:y -> c:session0,Nb[x,y,session0]; +comp:x & comp:y & comp:z -> c:session0,k[x,y,z,session0]; +c:session0,secretA[session0]; +c:session0,secretB[session0]; + + +(* A *) + +c:sessionvar,h -> c:sessionvar,(host(Kas[]), h, Na[h,sessionvar]); +c:sessionvar,encrypt((Na[h,sessionvar], h, key, m), Kas[]) -> c:sessionvar,m; +c:sessionvar,encrypt((Na[h,sessionvar], h, key, m), Kas[]) & c:sessionvar,encrypt(n, key) -> c:sessionvar,encrypt(decr(n), key); + +c:sessionvar,encrypt((Na[host(Kbs[]),sessionvar], host(Kbs[]), key, m), Kas[]) -> c:sessionvar,encrypt(secretA[sessionvar], key); + + +(* B *) + +c:sessionvar,encrypt((key, h), Kbs[]) -> c:sessionvar,encrypt(Nb[key,h,sessionvar], key); + +c:sessionvar,encrypt((key, host(Kas[])), Kbs[]) & c:sessionvar,encrypt(decr(Nb[key,host(Kas[]),sessionvar]), key) -> c:sessionvar,encrypt(secretB[sessionvar], key); + +(* S *) + +c:sessionvar,(host(Ks1), host(Ks2), n) -> c:sessionvar,encrypt((n, host(Ks2), k[Ks1, Ks2, n, sessionvar], encrypt((k[Ks1, Ks2, n, sessionvar], host(Ks1)), Ks2)), Ks1); + +(* Implication *) + +c:session0,x -> c:session1,x. + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr2 b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr2 new file mode 100644 index 0000000000000000000000000000000000000000..3830a71ffeadd63d39b433a198c893a5e8bc1297 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-shr2 @@ -0,0 +1,98 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder shared key protocol + +The weakness of this protocol is that if an attacker has +a session key k[Kas[], Kbs[], Na[Kbs[],c0]] +for one c0, he can have all secrets of B, since B cannot +distinguish different sessions. + + *) + + +pred c/1 elimVar, decompData. +pred comp/1 elimVar, decompData. + +data minus/1. + +fun encrypt/2. +fun host/1. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +query c:secretA[i]. +query c:secretB[i]. +query c:secretA[c1]. +query c:secretB[c1]. + +reduc + +(* Attacker *) + +c:k & c:encrypt(m,k) -> c:m; +c:x -> c:host(x); +c:x & c:y -> c:encrypt(x,y); + +c:host(Kas[]); +c:host(Kbs[]); + +(* key compromise +c:k[Kas[], Kbs[], Na[host(Kbs[]),c0],c0]; *) + +comp:Kas[]; +comp:Kbs[]; +comp:x -> comp:Na[x,c0]; +comp:x & comp:y -> comp:Nb[x,y,c0]; +comp:x & comp:y & comp:z -> comp:k[x,y,z,c0]; +comp:x -> comp:host(x); +comp:x & comp:y -> comp:encrypt(x,y); +comp:x -> c:Na[x, c0]; +comp:x & comp:y -> c:Nb[x,y,c0]; +comp:x & comp:y & comp:z -> c:k[x,y,z,c0]; + +(* A *) + +c:h -> c:(host(Kas[]), h, Na[h,i]); +c:encrypt((Na[h,i], h, key, m), Kas[]) -> c:m; +c:encrypt((Na[h,i], h, key, m), Kas[]) & c:encrypt(n, key) -> c:encrypt(minus(n), key); + +c:encrypt((Na[host(Kbs[]),i], host(Kbs[]), key, m), Kas[]) -> c:encrypt(secretA[i], key); + + +(* B *) + +c:encrypt((key, h), Kbs[]) -> c:encrypt(Nb[key,h,i], key); + +c:encrypt((key, host(Kas[])), Kbs[]) -> c:encrypt(secretB[i], key); + +(* S *) + +c:(host(Ks1), host(Ks2), n) -> c:encrypt((n, host(Ks2), k[Ks1, Ks2, n, i], encrypt((k[Ks1, Ks2, n, i], host(Ks1)), Ks2)), Ks1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham-vitaly b/preinstallTTool/linux/proverif/examples/horn/secr/needham-vitaly new file mode 100644 index 0000000000000000000000000000000000000000..d07860edc0796179e29bd694cf20f9606de0d247 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham-vitaly @@ -0,0 +1,81 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with Lowe's correction and changes + to find an attack mentioned by Vitaly Shmatikov: + - the fields of the first message are swapped, + - the tuples are built from pairs such as (x, (y, (z, t))), and + - A and B both play the two roles of B and A +*) + +pred c/1 decompData, elimVar. + +fun host/1. +fun pk/1. +fun encrypt/2. + +query c:secretA[]. +query c:secretB[]. + +not c:sA[]. +not c:sB[]. + +reduc + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:pk(x); +c:host(x); +c:x & c:y -> c:encrypt(x,y); + +(* The protocol *) + +(* A *) + +c:encrypt((host(sA[]), Na[pk(x)]), pk(x)); +c:encrypt((Na[pk(x)], (y, host(x))), pk(sA[])) + -> c:encrypt((y,kA[x]), pk(x)); + +(* B *) + +c:encrypt((host(a),x), pk(sB[])) -> c:encrypt((x, (Nb[x,a], host(sB[]))), pk(a)); +c:encrypt((x,host(sA[])), pk(sB[])) & c:encrypt((Nb[x, sA[]], z), pk(sB[])) + -> c:encrypt(secretB[], pk(z)); + +(* B as A *) + +c:encrypt((host(sB[]), Nb2[pk(x)]), pk(x)); +c:encrypt((Nb2[pk(x)], (y, host(x))), pk(sB[])) + -> c:encrypt((y,kB[x]), pk(x)); + +(* A as B *) + +c:encrypt((host(a),x), pk(sA[])) -> c:encrypt((x, Na2[x,a], host(sA[])), pk(a)); +c:encrypt((x,host(sB[])), pk(sA[])) & c:encrypt((Na2[x, sB[]], z), pk(sA[])) + -> c:encrypt(secretA[], pk(z)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/needham2 b/preinstallTTool/linux/proverif/examples/horn/secr/needham2 new file mode 100644 index 0000000000000000000000000000000000000000..0c19ad055b8dc62664d1d83428c445be65b439f8 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/needham2 @@ -0,0 +1,57 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 decompData, elimVar. + +fun pk/1. +fun encrypt/2. + +reduc +(* Initialization *) + +c:c[]; +c:pk(sA[]); +c:pk(sB[]); + +(* The attacker *) + +c:x & c:encrypt(m,pk(x)) -> c:m; +c:x -> c:pk(x); +c:x & c:y -> c:encrypt(x,y); + +(* The protocol *) +(* A *) + +c:pkX -> c:encrypt((Na[pkX], pk(sA[])), pkX); +c:pkX & c:encrypt((Na[pkX], y, pkX), pk(sA[])) + -> c:encrypt((y,k[pkX]), pkX); + +(* B *) + +c:encrypt((x,y), pk(sB[])) -> c:encrypt((x, Nb[x,y], pk(sB[])), y); +c:encrypt((x,pk(sA[])), pk(sB[])) & c:encrypt((Nb[x, pk(sA[])], z), pk(sB[])) + -> c:encrypt(secret[], pk(z)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/nontermex b/preinstallTTool/linux/proverif/examples/horn/secr/nontermex new file mode 100644 index 0000000000000000000000000000000000000000..10fe90309fa0a0b14c9ed4d94b5f3e7cdb59fd87 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/nontermex @@ -0,0 +1,44 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 decompData, elimVar. + +fun f/1. +fun g/1. + +(* This "nounif" instruction leads to termination of the process *) +nounif c:f(x). + +param verboseRules = yes. + +query c:s[]. + +reduc + +c:f(s[]); + +c:f(x) -> c:f(g(x)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees new file mode 100644 index 0000000000000000000000000000000000000000..e5269e733a330bfdbcc38f804f4a1941476bcfee --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees @@ -0,0 +1,71 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Correct version, from Millen, Ruess, + 2000 IEEE Symposium on Security and Privacy *) + +pred c/1 decompData, elimVar. + +fun host/1. + +fun encrypt/2. + +query c:secretA[]. +query c:secretB[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); +c:x -> c:host(x); + + +c:host(shrA[]); +c:host(shrB[]); + +(* A *) + +c:X -> c:(N[X],host(shrA[]),X, encrypt((Na[X], N[X], host(shrA[]), X), shrA[])); + +c:(N[host(shrB[])], encrypt((Na[host(shrB[])],key), shrA[])) -> c:encrypt(secretA[], key); + +(* B *) + +c:(x,y,host(shrB[]),z) -> c:(x,y,host(shrB[]),z,encrypt((Nb[y],x,y,host(shrB[])), shrB[])); + +c:(x,y,host(shrB[]),z) & c:(x,y2,encrypt((Nb[y], key), shrB[])) -> c:(x,y2); + +c:(x,host(shrA[]),host(shrB[]),z) & c:(x,y2,encrypt((Nb[host(shrA[])],key), shrB[])) -> c:encrypt(secretB[], key); + +(* Server *) + +c:(x,host(shra), host(shrb), encrypt((na, x,host(shra), host(shrb)), shra), + encrypt((nb,x,host(shra),host(shrb)), shrb)) -> +c:(x,encrypt((na, k[x,shra,shrb]), shra),encrypt((nb,k[x,shra,shrb]), shrb)). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-fctshr b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-fctshr new file mode 100644 index 0000000000000000000000000000000000000000..a02743a08979b95a3258b4832d6eda871c0e71a9 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-fctshr @@ -0,0 +1,72 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Correct version, from Millen, Ruess, + 2000 IEEE Symposium on Security and Privacy *) + +pred c/1 decompData, elimVar. + +fun shr/1. + +fun encrypt/2. + +query c:secretA[]. +query c:secretB[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); + +c:A[]; +c:B[]; +c:C[]; +c:shr(C[]); + +(* A *) + +c:X -> c:(N[X],A[],X, encrypt((Na[X], N[X], A[], X), shr(A[]))); + +c:(N[B[]], encrypt((Na[B[]],key), shr(A[]))) -> c:encrypt(secretA[], key); + +(* B *) + +c:(x,y,B[],z) -> c:(x,y,B[],z,encrypt((Nb[y],x,y,B[]), shr(B[]))); + +c:(x,y,B[],z) & c:(x,y2,encrypt((Nb[y], key), shr(B[]))) -> c:(x,y2); + +c:(x,A[],B[],z) & c:(x,y2,encrypt((Nb[A[]],key), shr(B[]))) -> +c:encrypt(secretB[], key); + +(* Server *) + +c:(x,a,b, encrypt((na, x,a,b), shr(a)), encrypt((nb,x,a,b), shr(b))) -> +c:(x,encrypt((na, k[x,a,b]), shr(a)), + encrypt((nb, k[x,a,b]), shr(b))). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-orig b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-orig new file mode 100644 index 0000000000000000000000000000000000000000..db12aa7944cbd1d1a1e49d0b78f2751462aab274 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-orig @@ -0,0 +1,69 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 *) + +pred c/1 decompData, elimVar. + +fun host/1. + +fun encrypt/2. + +not c:shrA[]. +not c:shrB[]. + +query c:secretA[]. +query c:secretB[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* A *) + +c:X -> c:(C[X],host(shrA[]),X, encrypt((Na[X], C[X], host(shrA[]), X), shrA[])); + +c:(C[host(shrB[])], encrypt((Na[host(shrB[])],key), shrA[])) -> c:encrypt(secretA[], key); + +(* B *) + +c:(x,y,host(shrB[]),z) -> c:(x,y,host(shrB[]),z,encrypt((Nb[y],x,y,host(shrB[])), shrB[])); + +c:(x,y,host(shrB[]),z) & c:(x,y2,encrypt((Nb[y], key), shrB[])) -> c:(x,y2); + +c:(x,host(shrA[]),host(shrB[]),z) & c:(x,y2,encrypt((Nb[host(shrA[])],key), shrB[])) -> c:encrypt(secretB[], key); + +(* Server *) + +c:(c,host(shra), host(shrb), encrypt((na, c, host(shra), host(shrb)), shra), + encrypt((nb, c, host(shra),host(shrb)), shrb)) -> +c:(c,encrypt((na, k[c,shra,shrb]), shra),encrypt((nb,k[c,shra,shrb]), shrb)). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-orig-bid b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-orig-bid new file mode 100644 index 0000000000000000000000000000000000000000..07a274644948dfd58f3f89c78115cbf2bad84dae --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-orig-bid @@ -0,0 +1,68 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 *) + +pred c/1 decompData, elimVar. + +fun host/1. + +fun encrypt/2. + +not c:shrA[]. + +query c:secretA[]. +query c:secretB[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* A *) + +c:X -> c:(C[X],host(shrA[]),X, encrypt((Na[X], C[X], host(shrA[]), X), shrA[])); + +c:(C[host(shrA[])], encrypt((Na[host(shrA[])],key), shrA[])) -> c:encrypt(secretA[], key); + +(* B *) + +c:(x,y,host(shrA[]),z) -> c:(x,y,host(shrA[]),z,encrypt((Nb[y],x,y,host(shrA[])), shrA[])); + +c:(x,y,host(shrA[]),z) & c:(x,y2,encrypt((Nb[y], key), shrA[])) -> c:(x,y2); + +c:(x,host(shrA[]),host(shrA[]),z) & c:(x,y2,encrypt((Nb[host(shrA[])],key), shrA[])) -> c:encrypt(secretB[], key); + +(* Server *) + +c:(c,host(shra), host(shrb), encrypt((na, c, host(shra), host(shrb)), shra), + encrypt((nb, c, host(shra),host(shrb)), shrb)) -> +c:(c,encrypt((na, k[c,shra,shrb]), shra),encrypt((nb,k[c,shra,shrb]), shrb)). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-corr b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-corr new file mode 100644 index 0000000000000000000000000000000000000000..ec17a36c51b0e5f8bda0c8fd06254a6b2014189e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-corr @@ -0,0 +1,70 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Corrected version by Paulson TR443 Inductive... *) + +pred c/1 decompData, elimVar. + +fun host/1. + +fun encrypt/2. + +query c:secretA[]. +query c:secretB[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); +c:x -> c:host(x); + + +c:host(shrA[]); +c:host(shrB[]); + +(* A *) + +c:X -> c:(Na[X],host(shrA[]),X, encrypt((Na[X], host(shrA[]), X), shrA[])); + +c:(Na[host(shrB[])], encrypt((Na[host(shrB[])],key), shrA[])) -> c:encrypt(secretA[], key); + +(* B *) + +c:(x,y,host(shrB[]),z) -> c:(x,y,host(shrB[]),z, encrypt((x,Nb[y],y,host(shrB[])), shrB[])); + +c:(x,y,host(shrB[]),z) & c:(x,y2,encrypt((Nb[y], key), shrB[])) -> c:(x,y2); + +c:(x,host(shrA[]),host(shrB[]),z) & c:(x,y2,encrypt((Nb[host(shrA[])],key), shrB[])) -> c:encrypt(secretB[], key); + +(* Server *) + +c:(na,host(shra), host(shrb), encrypt((na, host(shra), host(shrb)), shra), + encrypt((na,nb,host(shra),host(shrb)), shrb)) -> +c:(na,encrypt((na, k[x,shra,shrb]), shra),encrypt((nb,k[x,shra,shrb]), shrb)). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-err b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-err new file mode 100644 index 0000000000000000000000000000000000000000..15bc56013eea333bac8b4bbe0fbf5d691e124563 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-err @@ -0,0 +1,69 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Flawed version, quoted by Paulson TR443 Inductive... *) + +pred c/1 decompData, elimVar. + +fun host/1. + +fun encrypt/2. + +query c:secretA[]. +query c:secretB[]. + +not c:shrA[]. +not c:shrB[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* A *) + +c:X -> c:(Na[X],host(shrA[]),X, encrypt((Na[X], host(shrA[]), X), shrA[])); + +c:(Na[host(shrB[])], encrypt((Na[host(shrB[])],key), shrA[])) -> c:encrypt(secretA[], key); + +(* B *) + +c:(x,y,host(shrB[]),z) -> c:(x,y,host(shrB[]),z,Nb[y], encrypt((x,y,host(shrB[])), shrB[])); + +c:(x,y,host(shrB[]),z) & c:(x,y2,encrypt((Nb[y], key), shrB[])) -> c:(x,y2); + +c:(x,host(shrA[]),host(shrB[]),z) & c:(x,y2,encrypt((Nb[host(shrA[])],key), shrB[])) -> c:encrypt(secretB[], key); + +(* Server *) + +c:(na,host(shra), host(shrb), encrypt((na, host(shra), host(shrb)), shra), nb, + encrypt((na,host(shra),host(shrb)), shrb)) -> +c:(na,encrypt((na, k[x,shra,shrb]), shra),encrypt((nb,k[x,shra,shrb]), shrb)). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-err-bid b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-err-bid new file mode 100644 index 0000000000000000000000000000000000000000..68d15bf6d903263274bad688478d4eb50373802e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees-paulson-err-bid @@ -0,0 +1,68 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Flawed version, quoted by Paulson TR443 Inductive... *) + +pred c/1 decompData, elimVar. + +fun host/1. + +fun encrypt/2. + +query c:secretA[]. +query c:secretB[]. + +not c:shrA[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); +c:host(x); + +(* A *) + +c:X -> c:(Na[X],host(shrA[]),X, encrypt((Na[X], host(shrA[]), X), shrA[])); + +c:(Na[host(shrA[])], encrypt((Na[host(shrA[])],key), shrA[])) -> c:encrypt(secretA[], key); + +(* B *) + +c:(x,y,host(shrA[]),z) -> c:(x,y,host(shrA[]),z,Nb[y], encrypt((x,y,host(shrA[])), shrA[])); + +c:(x,y,host(shrA[]),z) & c:(x,y2,encrypt((Nb[y], key), shrA[])) -> c:(x,y2); + +c:(x,host(shrA[]),host(shrA[]),z) & c:(x,y2,encrypt((Nb[host(shrA[])],key), shrA[])) -> c:encrypt(secretB[], key); + +(* Server *) + +c:(na,host(shra), host(shrb), encrypt((na, host(shra), host(shrb)), shra), nb, + encrypt((na,host(shra),host(shrb)), shrb)) -> +c:(na,encrypt((na, k[x,shra,shrb]), shra),encrypt((nb,k[x,shra,shrb]), shrb)). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees2 b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees2 new file mode 100644 index 0000000000000000000000000000000000000000..fde2a64423f0c6ab6d88072ad92084256ce1cfd2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/otway-rees2 @@ -0,0 +1,72 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +pred c/1 decompData, elimVar. + +fun host/1. + +fun encrypt/2. + +query c:secretA[]. +query c:secretB[]. + +reduc + +(* attacker *) +c:encrypt(m,k) & c:k -> c:m; +c:x & c:y -> c:encrypt(x,y); +c:x -> c:host(x); + + +c:host(shrA[]); +c:host(shrB[]); + +(* A *) + +c:X -> c:N[X]; +c:X -> c:encrypt((Na[X], N[X], host(shrA[]), X), shrA[]); + +c:encrypt((Na[host(shrB[])],key), shrA[]) -> c:encrypt(secretA[], key); + +(* B *) + +c:x & c:y -> c:encrypt((Nb[y],x,y,host(shrB[])), shrB[]); + +c:encrypt((Nb[host(shrA[])],key), shrB[]) -> c:encrypt(secretB[], key); + +(* Server *) + +c:x & c:host(shra) & c:host(shrb) +& c:encrypt((na, x,host(shra), host(shrb)), shra) +& c:encrypt((nb, x,host(shra), host(shrb)), shrb) +-> c:encrypt((na, k[x,shra,shrb]), shra); + +c:x & c:host(shra) & c:host(shrb) +& c:encrypt((na, x,host(shra), host(shrb)), shra) +& c:encrypt((nb, x,host(shra), host(shrb)), shrb) +-> c:encrypt((nb,k[x,shra,shrb]), shrb). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom b/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom new file mode 100644 index 0000000000000000000000000000000000000000..3b683dbbba04cbee7930026680ea4f0b2954e6c1 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom @@ -0,0 +1,71 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Simpler Yahalom protocol +Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; Nb; {A; Na}Kbs +Message 3 S -> A: Nb; {B; Kab; Na}Kas ; {A; Kab; Nb}Kbs +Message 4 A -> B: {A; Kab; Nb}Kbs ; {Nb}Kab + +*) + +pred c/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +query c:secretA[]. +query c:secretB[]. + +not c:Kas[]. +not c:Kbs[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; + +(* A *) + +c:(host(Kas[]), Na[]); +c:(nb, encrypt((b, k, Na[]), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(nb, encrypt((host(Kbs[]), k, Na[]), Kas[]), mb) -> c:encrypt(secretA[], k); + +(* B *) + +c:(a, na) -> c:(host(Kbs[]), Nb[a, na], encrypt((a, na), Kbs[])); +c:(encrypt((host(Kas[]), k, Nb[host(Kas[]), na]), Kbs[]), encrypt(Nb[host(Kas[]), na], k)) -> c:encrypt(secretB[], k); + +(* S *) + +c:(host(kbs), nb, encrypt((host(kas), na), kbs)) -> c:(nb, encrypt((host(kbs), k[kas, kbs, na, nb], na), kas), encrypt((host(kas), k[kas, kbs, na, nb], nb), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom-bid b/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom-bid new file mode 100644 index 0000000000000000000000000000000000000000..409a40a0561834e60e667d0bac1a91213692467e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom-bid @@ -0,0 +1,70 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Simpler Yahalom protocol +Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; Nb; {A; Na}Kbs +Message 3 S -> A: Nb; {B; Kab; Na}Kas ; {A; Kab; Nb}Kbs +Message 4 A -> B: {A; Kab; Nb}Kbs ; {Nb}Kab + +*) + +pred c/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +query c:secretA[]. +query c:secretB[]. + +not c:Kas[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; + +(* A *) + +c:(host(Kas[]), Na[]); +c:(nb, encrypt((b, k, Na[]), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(nb, encrypt((host(Kas[]), k, Na[]), Kas[]), mb) -> c:encrypt(secretA[], k); + +(* B *) + +c:(a, na) -> c:(host(Kas[]), Nb[a, na], encrypt((a, na), Kas[])); +c:(encrypt((host(Kas[]), k, Nb[host(Kas[]), na]), Kas[]), encrypt(Nb[host(Kas[]), na], k)) -> c:encrypt(secretB[], k); + +(* S *) + +c:(host(kbs), nb, encrypt((host(kas), na), kbs)) -> c:(nb, encrypt((host(kbs), k[kas, kbs, na, nb], na), kas), encrypt((host(kas), k[kas, kbs, na, nb], nb), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom2 b/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom2 new file mode 100644 index 0000000000000000000000000000000000000000..fe77c04698c9aa9a1bd680cc6076c22f32be6e07 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/simpleryahalom2 @@ -0,0 +1,75 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Simpler Yahalom protocol +Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; Nb; {A; Na}Kbs +Message 3 S -> A: Nb; {B; Kab; Na}Kas ; {A; Kab; Nb}Kbs +Message 4 A -> B: {A; Kab; Nb}Kbs ; {Nb}Kab + +*) + +pred c/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +not c:Kas[]. +not c:Kbs[]. +query c:secretA[]. +query c:secretB[]. + +param maxDepth = 6. + +reduc + +(* attacker *) + +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; + +(* A *) + +c:host(Kas[]); +c:Na[]; +c:nb & c:encrypt((b, k, Na[]), Kas[]) -> c:encrypt(nb, k); +c:encrypt((host(Kbs[]), k, Na[]), Kas[]) -> c:encrypt(secretA[], k); + +(* B *) + +c:host(Kbs[]); +c:a & c:na -> c:Nb[a, na]; +c:a & c:na -> c:encrypt((a, na), Kbs[]); +c:encrypt((host(Kas[]), k, Nb[host(Kas[]), na]), Kbs[]) & c:encrypt(Nb[host(Kas[]), na], k) -> c:encrypt(secretB[], k); + +(* S *) + +c:nb & c:encrypt((host(kas), na), kbs) -> c:encrypt((host(kbs), k[kas, kbs, na, nb], na), kas); +c:nb & c:encrypt((host(kas), na), kbs) -> c:encrypt((host(kas), k[kas, kbs, na, nb], nb), kbs). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/skeme-bid b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-bid new file mode 100644 index 0000000000000000000000000000000000000000..fbe36e3de40ae724242290c0bb9838ecb9a0e73f --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-bid @@ -0,0 +1,88 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +pred c/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) +(* equation f(x,g(y)) = f(y,g(x)). *) + +fun g/1. +fun h1/2. +fun h0/2. + +(* Keyed hash function *) + +fun keyhash/2. + +query c:secretA[]. +query c:secretB[]. + +(* Secrecy assumptions *) + +not c:skA[]. +not c:x[pk(skA[])]. +not c:y[(encrypt((pk(skA[]), a), pk(skA[])), b)]. +not c:Ka[pk(skA[])]. +not c:Kb[(encrypt((pk(skA[]),Ka[pk(skA[])]),pk(skA[])),g(x[pk(skA[])]))]. + +reduc + +c:keyhash((g(y[(encrypt((pk(skA[]),v18),pk(skA[])),v19)]),v19,pk(skA[]),pk(skA[])),hash((v18,Kb[(encrypt((pk(skA[]),v18),pk(skA[])),v19)]))) & c:(encrypt((pk(skA[]),v18),pk(skA[])),v19) -> c:encrypt(secretB[],pk(hash(h0(y[(encrypt((pk(skA[]),v18),pk(skA[])),v19)],v19)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v16),pk(skA[])),g(v17))]),g(v17),pk(skA[]),pk(skA[])),hash((v16,Kb[(encrypt((pk(skA[]),v16),pk(skA[])),g(v17))]))) & c:(encrypt((pk(skA[]),v16),pk(skA[])),g(v17)) -> c:encrypt(secretB[],pk(hash(h1(y[(encrypt((pk(skA[]),v16),pk(skA[])),g(v17))],v17)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v15),pk(skA[])),g(v14))]),g(v14),pk(skA[]),pk(skA[])),hash((v15,Kb[(encrypt((pk(skA[]),v15),pk(skA[])),g(v14))]))) & c:(encrypt((pk(skA[]),v15),pk(skA[])),g(v14)) -> c:encrypt(secretB[],pk(hash(h1(v14,y[(encrypt((pk(skA[]),v15),pk(skA[])),g(v14))])))); +c:(encrypt((v11,v12),pk(skA[])),v13) -> c:(encrypt(Kb[(encrypt((v11,v12),pk(skA[])),v13)],v11),g(y[(encrypt((v11,v12),pk(skA[])),v13)]),keyhash((v13,g(y[(encrypt((v11,v12),pk(skA[])),v13)]),pk(skA[]),v11),hash((v12,Kb[(encrypt((v11,v12),pk(skA[])),v13)])))); +c:(encrypt(v10,pk(skA[])),v9,keyhash((g(x[pk(skA[])]),v9,pk(skA[]),pk(skA[])),hash((Ka[pk(skA[])],v10)))) & c:pk(skA[]) -> c:encrypt(secretA[],pk(hash(h0(x[pk(skA[])],v9)))); +c:(encrypt(v8,pk(skA[])),g(v7),keyhash((g(x[pk(skA[])]),g(v7),pk(skA[]),pk(skA[])),hash((Ka[pk(skA[])],v8)))) & c:pk(skA[]) -> c:encrypt(secretA[],pk(hash(h1(x[pk(skA[])],v7)))); +c:(encrypt(v6,pk(skA[])),g(v5),keyhash((g(x[pk(skA[])]),g(v5),pk(skA[]),pk(skA[])),hash((Ka[pk(skA[])],v6)))) & c:pk(skA[]) -> c:encrypt(secretA[],pk(hash(h1(v5,x[pk(skA[])])))); +c:(encrypt(v4,pk(skA[])),v2,keyhash((g(x[v3]),v2,v3,pk(skA[])),hash((Ka[v3],v4)))) & c:v3 -> c:keyhash((v2,g(x[v3]),pk(skA[]),v3),hash((Ka[v3],v4))); +c:v1 -> c:(encrypt((pk(skA[]),Ka[v1]),v1),g(x[v1])); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any11 -> c:pk(any11); +c:any10 & c:any9 -> c:keyhash(any10,any9); +c:any8 & c:any7 -> c:encrypt(any8,any7); +c:any6 & c:any5 -> c:h1(any6,any5); +c:any4 & c:any3 -> c:h0(any4,any3); +c:any2 -> c:hash(any2); +c:any1 -> c:g(any1); +c:x & c:y -> c:h0(x,y); +c:x & c:g(y) -> c:h1(x,y); +c:y & c:g(x) -> c:h1(x,y); +c:x & c:h1(x,y) -> c:g(y); +c:x & c:h1(y,x) -> c:g(y). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/skeme-eq b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-eq new file mode 100644 index 0000000000000000000000000000000000000000..908a6edf56c4595a85db37ddeaf684b699116726 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-eq @@ -0,0 +1,79 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +pred c/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) + +fun f/2. +fun g/1. +equation f(x,g(y)) = f(y,g(x)). + +(* Keyed hash function *) + +fun keyhash/2. + +query c:secretA[]. +query c:secretB[]. + +(* Secrecy assumptions *) + +not c:skA[]. +not c:skB[]. +not c:x[pk(skB[])]. +not c:y[(encrypt((pk(skA[]), a), pk(skB[])), b)]. +not c:Ka[pk(skB[])]. +not c:Kb[(encrypt((pk(skA[]),Ka[pk(skB[])]),pk(skB[])),g(x[pk(skB[])]))]. + +reduc + +c:keyhash((g(y[(encrypt((pk(skA[]),v14),pk(skB[])),v15)]),v15,pk(skA[]),pk(skB[])),hash((v14,Kb[(encrypt((pk(skA[]),v14),pk(skB[])),v15)]))) & c:(encrypt((pk(skA[]),v14),pk(skB[])),v15) -> c:encrypt(secretB[],pk(hash(f(y[(encrypt((pk(skA[]),v14),pk(skB[])),v15)],v15)))); +c:(encrypt((v9,v10),pk(skB[])),v11) -> c:(encrypt(Kb[(encrypt((v9,v10),pk(skB[])),v11)],v9),g(y[(encrypt((v9,v10),pk(skB[])),v11)]),keyhash((v11,g(y[(encrypt((v9,v10),pk(skB[])),v11)]),pk(skB[]),v9),hash((v10,Kb[(encrypt((v9,v10),pk(skB[])),v11)])))); +c:(encrypt(v8,pk(skA[])),v7,keyhash((g(x[pk(skB[])]),v7,pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v8)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(f(x[pk(skB[])],v7)))); +c:(encrypt(v4,pk(skA[])),v2,keyhash((g(x[v3]),v2,v3,pk(skA[])),hash((Ka[v3],v4)))) & c:v3 -> c:keyhash((v2,g(x[v3]),pk(skA[]),v3),hash((Ka[v3],v4))); +c:v1 -> c:(encrypt((pk(skA[]),Ka[v1]),v1),g(x[v1])); +c:pk(skB[]); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any9 -> c:pk(any9); +c:any8 & c:any7 -> c:keyhash(any8,any7); +c:any6 & c:any5 -> c:encrypt(any6,any5); +c:any4 -> c:hash(any4); +c:any3 & c:any2 -> c:f(any3,any2); +c:any1 -> c:g(any1). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/skeme-eq-bid b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-eq-bid new file mode 100644 index 0000000000000000000000000000000000000000..77de03169ec6e00927cfc1ead9588ba1b5c5a282 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-eq-bid @@ -0,0 +1,78 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +pred c/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) + +fun f/2. +fun g/1. +equation f(x,g(y)) = f(y,g(x)). + +(* Keyed hash function *) + +fun keyhash/2. + +query c:secretA[]. +query c:secretB[]. + +(* Secrecy assumptions *) + +not c:skA[]. +not c:x[pk(skA[])]. +not c:y[(encrypt((pk(skA[]), a), pk(skA[])), b)]. +not c:Ka[pk(skA[])]. +not c:Kb[(encrypt((pk(skA[]),Ka[pk(skA[])]),pk(skA[])),g(x[pk(skA[])]))]. + +reduc + +c:keyhash((g(y[(encrypt((pk(skA[]),v14),pk(skA[])),v15)]),v15,pk(skA[]),pk(skA[])),hash((v14,Kb[(encrypt((pk(skA[]),v14),pk(skA[])),v15)]))) & c:(encrypt((pk(skA[]),v14),pk(skA[])),v15) -> c:encrypt(secretB[],pk(hash(f(y[(encrypt((pk(skA[]),v14),pk(skA[])),v15)],v15)))); +c:(encrypt((v9,v10),pk(skA[])),v11) -> c:(encrypt(Kb[(encrypt((v9,v10),pk(skA[])),v11)],v9),g(y[(encrypt((v9,v10),pk(skA[])),v11)]),keyhash((v11,g(y[(encrypt((v9,v10),pk(skA[])),v11)]),pk(skA[]),v9),hash((v10,Kb[(encrypt((v9,v10),pk(skA[])),v11)])))); +c:(encrypt(v8,pk(skA[])),v7,keyhash((g(x[pk(skA[])]),v7,pk(skA[]),pk(skA[])),hash((Ka[pk(skA[])],v8)))) & c:pk(skA[]) -> c:encrypt(secretA[],pk(hash(f(x[pk(skA[])],v7)))); +c:(encrypt(v4,pk(skA[])),v2,keyhash((g(x[v3]),v2,v3,pk(skA[])),hash((Ka[v3],v4)))) & c:v3 -> c:keyhash((v2,g(x[v3]),pk(skA[]),v3),hash((Ka[v3],v4))); +c:v1 -> c:(encrypt((pk(skA[]),Ka[v1]),v1),g(x[v1])); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any9 -> c:pk(any9); +c:any8 & c:any7 -> c:keyhash(any8,any7); +c:any6 & c:any5 -> c:encrypt(any6,any5); +c:any4 -> c:hash(any4); +c:any3 & c:any2 -> c:f(any3,any2); +c:any1 -> c:g(any1). + diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/skeme-pfs2 b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-pfs2 new file mode 100644 index 0000000000000000000000000000000000000000..dda97b52da0548e1db5b37cbdfee7cf4e5a59c4a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/skeme-pfs2 @@ -0,0 +1,112 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +pred c/1 decompData, elimVar. +pred c2/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) +(* equation f(x,g(y)) = f(y,g(x)). *) + +fun g/1. +fun h1/2. +fun h0/2. + +(* Keyed hash function *) + +fun keyhash/2. + +query c2:secretA[]. +query c2:secretB[]. + +(* Secrecy assumptions *) + +not c:skA[]. +not c:skB[]. +not c:x[pk(skB[])]. +not c:y[(encrypt((pk(skA[]), a), pk(skB[])), b)]. +not c:Ka[pk(skB[])]. +not c:Kb[(encrypt((pk(skA[]),Ka[pk(skB[])]),pk(skB[])),g(x[pk(skB[])]))]. + +reduc + +c:keyhash((g(y[(encrypt((pk(skA[]),v18),pk(skB[])),v19)]),v19,pk(skA[]),pk(skB[])),hash((v18,Kb[(encrypt((pk(skA[]),v18),pk(skB[])),v19)]))) & c:(encrypt((pk(skA[]),v18),pk(skB[])),v19) -> c:encrypt(secretB[],pk(hash(h0(y[(encrypt((pk(skA[]),v18),pk(skB[])),v19)],v19)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v16),pk(skB[])),g(v17))]),g(v17),pk(skA[]),pk(skB[])),hash((v16,Kb[(encrypt((pk(skA[]),v16),pk(skB[])),g(v17))]))) & c:(encrypt((pk(skA[]),v16),pk(skB[])),g(v17)) -> c:encrypt(secretB[],pk(hash(h1(y[(encrypt((pk(skA[]),v16),pk(skB[])),g(v17))],v17)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v15),pk(skB[])),g(v14))]),g(v14),pk(skA[]),pk(skB[])),hash((v15,Kb[(encrypt((pk(skA[]),v15),pk(skB[])),g(v14))]))) & c:(encrypt((pk(skA[]),v15),pk(skB[])),g(v14)) -> c:encrypt(secretB[],pk(hash(h1(v14,y[(encrypt((pk(skA[]),v15),pk(skB[])),g(v14))])))); +c:(encrypt((v11,v12),pk(skB[])),v13) -> c:(encrypt(Kb[(encrypt((v11,v12),pk(skB[])),v13)],v11),g(y[(encrypt((v11,v12),pk(skB[])),v13)]),keyhash((v13,g(y[(encrypt((v11,v12),pk(skB[])),v13)]),pk(skB[]),v11),hash((v12,Kb[(encrypt((v11,v12),pk(skB[])),v13)])))); +c:(encrypt(v10,pk(skA[])),v9,keyhash((g(x[pk(skB[])]),v9,pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v10)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h0(x[pk(skB[])],v9)))); +c:(encrypt(v8,pk(skA[])),g(v7),keyhash((g(x[pk(skB[])]),g(v7),pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v8)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h1(x[pk(skB[])],v7)))); +c:(encrypt(v6,pk(skA[])),g(v5),keyhash((g(x[pk(skB[])]),g(v5),pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v6)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h1(v5,x[pk(skB[])])))); +c:(encrypt(v4,pk(skA[])),v2,keyhash((g(x[v3]),v2,v3,pk(skA[])),hash((Ka[v3],v4)))) & c:v3 -> c:keyhash((v2,g(x[v3]),pk(skA[]),v3),hash((Ka[v3],v4))); +c:v1 -> c:(encrypt((pk(skA[]),Ka[v1]),v1),g(x[v1])); +c:pk(skB[]); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any11 -> c:pk(any11); +c:any10 & c:any9 -> c:keyhash(any10,any9); +c:any8 & c:any7 -> c:encrypt(any8,any7); +c:any6 & c:any5 -> c:h1(any6,any5); +c:any4 & c:any3 -> c:h0(any4,any3); +c:any2 -> c:hash(any2); +c:any1 -> c:g(any1); +c:x & c:y -> c:h0(x,y); +c:x & c:g(y) -> c:h1(x,y); +c:y & c:g(x) -> c:h1(x,y); + +(* Implication *) + +c:x -> c2:x; + +(* Computation rules for c2 *) + +c2:encrypt(x,pk(y)) & c2:y -> c2:x; +c2:any11 -> c2:pk(any11); +c2:any10 & c2:any9 -> c2:keyhash(any10,any9); +c2:any8 & c2:any7 -> c2:encrypt(any8,any7); +c2:any6 & c2:any5 -> c2:h1(any6,any5); +c2:any4 & c2:any3 -> c2:h0(any4,any3); +c2:any2 -> c2:hash(any2); +c2:any1 -> c2:g(any1); +c2:x & c2:y -> c2:h0(x,y); +c2:x & c2:g(y) -> c2:h1(x,y); +c2:g(x) & c2:y -> c2:h1(x,y); + +(* and assume that the attacker has the secret keys *) + +c2:skA[]; +c2:skB[]. diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/skeme2 b/preinstallTTool/linux/proverif/examples/horn/secr/skeme2 new file mode 100644 index 0000000000000000000000000000000000000000..8583a05cc3ba212237b4f6f2a5fa1f2c53e894f0 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/skeme2 @@ -0,0 +1,90 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +pred c/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) +(* equation f(x,g(y)) = f(y,g(x)). *) + +fun g/1. +fun h1/2. +fun h0/2. + +(* Keyed hash function *) + +fun keyhash/2. + +query c:secretA[]. +query c:secretB[]. + +(* Secrecy assumptions *) + +not c:skA[]. +not c:skB[]. +not c:x[pk(skB[])]. +not c:y[(encrypt((pk(skA[]), a), pk(skB[])), b)]. +not c:Ka[pk(skB[])]. +not c:Kb[(encrypt((pk(skA[]),Ka[pk(skB[])]),pk(skB[])),g(x[pk(skB[])]))]. + +reduc + +c:keyhash((g(y[(encrypt((pk(skA[]),v18),pk(skB[])),v19)]),v19,pk(skA[]),pk(skB[])),hash((v18,Kb[(encrypt((pk(skA[]),v18),pk(skB[])),v19)]))) & c:(encrypt((pk(skA[]),v18),pk(skB[])),v19) -> c:encrypt(secretB[],pk(hash(h0(y[(encrypt((pk(skA[]),v18),pk(skB[])),v19)],v19)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v16),pk(skB[])),g(v17))]),g(v17),pk(skA[]),pk(skB[])),hash((v16,Kb[(encrypt((pk(skA[]),v16),pk(skB[])),g(v17))]))) & c:(encrypt((pk(skA[]),v16),pk(skB[])),g(v17)) -> c:encrypt(secretB[],pk(hash(h1(y[(encrypt((pk(skA[]),v16),pk(skB[])),g(v17))],v17)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v15),pk(skB[])),g(v14))]),g(v14),pk(skA[]),pk(skB[])),hash((v15,Kb[(encrypt((pk(skA[]),v15),pk(skB[])),g(v14))]))) & c:(encrypt((pk(skA[]),v15),pk(skB[])),g(v14)) -> c:encrypt(secretB[],pk(hash(h1(v14,y[(encrypt((pk(skA[]),v15),pk(skB[])),g(v14))])))); +c:(encrypt((v11,v12),pk(skB[])),v13) -> c:(encrypt(Kb[(encrypt((v11,v12),pk(skB[])),v13)],v11),g(y[(encrypt((v11,v12),pk(skB[])),v13)]),keyhash((v13,g(y[(encrypt((v11,v12),pk(skB[])),v13)]),pk(skB[]),v11),hash((v12,Kb[(encrypt((v11,v12),pk(skB[])),v13)])))); +c:(encrypt(v10,pk(skA[])),v9,keyhash((g(x[pk(skB[])]),v9,pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v10)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h0(x[pk(skB[])],v9)))); +c:(encrypt(v8,pk(skA[])),g(v7),keyhash((g(x[pk(skB[])]),g(v7),pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v8)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h1(x[pk(skB[])],v7)))); +c:(encrypt(v6,pk(skA[])),g(v5),keyhash((g(x[pk(skB[])]),g(v5),pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v6)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h1(v5,x[pk(skB[])])))); +c:(encrypt(v4,pk(skA[])),v2,keyhash((g(x[v3]),v2,v3,pk(skA[])),hash((Ka[v3],v4)))) & c:v3 -> c:keyhash((v2,g(x[v3]),pk(skA[]),v3),hash((Ka[v3],v4))); +c:v1 -> c:(encrypt((pk(skA[]),Ka[v1]),v1),g(x[v1])); +c:pk(skB[]); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any11 -> c:pk(any11); +c:any10 & c:any9 -> c:keyhash(any10,any9); +c:any8 & c:any7 -> c:encrypt(any8,any7); +c:any6 & c:any5 -> c:h1(any6,any5); +c:any4 & c:any3 -> c:h0(any4,any3); +c:any2 -> c:hash(any2); +c:any1 -> c:g(any1); +c:x & c:y -> c:h0(x,y); +c:x & c:g(y) -> c:h1(x,y); +c:y & c:g(x) -> c:h1(x,y); +c:x & c:h1(x,y) -> c:g(y); +c:x & c:h1(y,x) -> c:g(y). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/skeme3 b/preinstallTTool/linux/proverif/examples/horn/secr/skeme3 new file mode 100644 index 0000000000000000000000000000000000000000..2ab670f864c7c92140efa39e085d0157be763edb --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/skeme3 @@ -0,0 +1,85 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +pred c/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) +(* equation f(x,g(y)) = f(y,g(x)). *) + +fun g/1. +fun h/2. + +(* Keyed hash function *) + +fun keyhash/2. + +query c:secretA[]. +query c:secretB[]. + +(* Secrecy assumptions *) + +not c:skA[]. +not c:skB[]. +not c:x[pk(skB[])]. +not c:y[(encrypt((pk(skA[]), a), pk(skB[])), b)]. +not c:Ka[pk(skB[])]. +not c:Kb[(encrypt((pk(skA[]),Ka[pk(skB[])]),pk(skB[])),g(x[pk(skB[])]))]. + +reduc + +c:keyhash((g(y[(encrypt((pk(skA[]),v14),pk(skB[])),v15)]),v15,pk(skA[]),pk(skB[])),hash((v14,Kb[(encrypt((pk(skA[]),v14),pk(skB[])),v15)]))) & c:(encrypt((pk(skA[]),v14),pk(skB[])),v15) -> c:encrypt(secretB[],pk(hash(h(y[(encrypt((pk(skA[]),v14),pk(skB[])),v15)],v15)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v13),pk(skB[])),g(v12))]),g(v12),pk(skA[]),pk(skB[])),hash((v13,Kb[(encrypt((pk(skA[]),v13),pk(skB[])),g(v12))]))) & c:(encrypt((pk(skA[]),v13),pk(skB[])),g(v12)) -> c:encrypt(secretB[],pk(hash(h(v12,g(y[(encrypt((pk(skA[]),v13),pk(skB[])),g(v12))]))))); +c:(encrypt((v9,v10),pk(skB[])),v11) -> c:(encrypt(Kb[(encrypt((v9,v10),pk(skB[])),v11)],v9),g(y[(encrypt((v9,v10),pk(skB[])),v11)]),keyhash((v11,g(y[(encrypt((v9,v10),pk(skB[])),v11)]),pk(skB[]),v9),hash((v10,Kb[(encrypt((v9,v10),pk(skB[])),v11)])))); +c:(encrypt(v8,pk(skA[])),v7,keyhash((g(x[pk(skB[])]),v7,pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v8)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h(x[pk(skB[])],v7)))); +c:(encrypt(v6,pk(skA[])),g(v5),keyhash((g(x[pk(skB[])]),g(v5),pk(skB[]),pk(skA[])),hash((Ka[pk(skB[])],v6)))) & c:pk(skB[]) -> c:encrypt(secretA[],pk(hash(h(v5,g(x[pk(skB[])]))))); +c:(encrypt(v4,pk(skA[])),v2,keyhash((g(x[v3]),v2,v3,pk(skA[])),hash((Ka[v3],v4)))) & c:v3 -> c:keyhash((v2,g(x[v3]),pk(skA[]),v3),hash((Ka[v3],v4))); +c:v1 -> c:(encrypt((pk(skA[]),Ka[v1]),v1),g(x[v1])); +c:pk(skB[]); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any9 -> c:pk(any9); +c:any8 & c:any7 -> c:keyhash(any8,any7); +c:any6 & c:any5 -> c:encrypt(any6,any5); +c:any4 -> c:hash(any4); +c:any3 & c:any2 -> c:h(any3,any2); +c:any1 -> c:g(any1); +c:x & c:y -> c:h(x,y); +c:x & c:g(y) -> c:h(y,g(x)); +c:x & c:h(x,g(y)) -> c:g(y); +c:x & c:h(y,g(x)) -> c:g(y). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/skeme3-bid b/preinstallTTool/linux/proverif/examples/horn/secr/skeme3-bid new file mode 100644 index 0000000000000000000000000000000000000000..62c43b64014a5140664cb748f307eede37d63225 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/skeme3-bid @@ -0,0 +1,83 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +pred c/1 decompData, elimVar. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) +(* equation f(x,g(y)) = f(y,g(x)). *) + +fun g/1. +fun h/2. + +(* Keyed hash function *) + +fun keyhash/2. + +query c:secretA[]. +query c:secretB[]. + +(* Secrecy assumptions *) + +not c:skA[]. +not c:x[pk(skA[])]. +not c:y[(encrypt((pk(skA[]), a), pk(skA[])), b)]. +not c:Ka[pk(skA[])]. +not c:Kb[(encrypt((pk(skA[]),Ka[pk(skA[])]),pk(skA[])),g(x[pk(skA[])]))]. + +reduc + +c:keyhash((g(y[(encrypt((pk(skA[]),v14),pk(skA[])),v15)]),v15,pk(skA[]),pk(skA[])),hash((v14,Kb[(encrypt((pk(skA[]),v14),pk(skA[])),v15)]))) & c:(encrypt((pk(skA[]),v14),pk(skA[])),v15) -> c:encrypt(secretB[],pk(hash(h(y[(encrypt((pk(skA[]),v14),pk(skA[])),v15)],v15)))); +c:keyhash((g(y[(encrypt((pk(skA[]),v13),pk(skA[])),g(v12))]),g(v12),pk(skA[]),pk(skA[])),hash((v13,Kb[(encrypt((pk(skA[]),v13),pk(skA[])),g(v12))]))) & c:(encrypt((pk(skA[]),v13),pk(skA[])),g(v12)) -> c:encrypt(secretB[],pk(hash(h(v12,g(y[(encrypt((pk(skA[]),v13),pk(skA[])),g(v12))]))))); +c:(encrypt((v9,v10),pk(skA[])),v11) -> c:(encrypt(Kb[(encrypt((v9,v10),pk(skA[])),v11)],v9),g(y[(encrypt((v9,v10),pk(skA[])),v11)]),keyhash((v11,g(y[(encrypt((v9,v10),pk(skA[])),v11)]),pk(skA[]),v9),hash((v10,Kb[(encrypt((v9,v10),pk(skA[])),v11)])))); +c:(encrypt(v8,pk(skA[])),v7,keyhash((g(x[pk(skA[])]),v7,pk(skA[]),pk(skA[])),hash((Ka[pk(skA[])],v8)))) & c:pk(skA[]) -> c:encrypt(secretA[],pk(hash(h(x[pk(skA[])],v7)))); +c:(encrypt(v6,pk(skA[])),g(v5),keyhash((g(x[pk(skA[])]),g(v5),pk(skA[]),pk(skA[])),hash((Ka[pk(skA[])],v6)))) & c:pk(skA[]) -> c:encrypt(secretA[],pk(hash(h(v5,g(x[pk(skA[])]))))); +c:(encrypt(v4,pk(skA[])),v2,keyhash((g(x[v3]),v2,v3,pk(skA[])),hash((Ka[v3],v4)))) & c:v3 -> c:keyhash((v2,g(x[v3]),pk(skA[]),v3),hash((Ka[v3],v4))); +c:v1 -> c:(encrypt((pk(skA[]),Ka[v1]),v1),g(x[v1])); +c:pk(skA[]); +c:c[]; +c:encrypt(x,pk(y)) & c:y -> c:x; +c:any9 -> c:pk(any9); +c:any8 & c:any7 -> c:keyhash(any8,any7); +c:any6 & c:any5 -> c:encrypt(any6,any5); +c:any4 -> c:hash(any4); +c:any3 & c:any2 -> c:h(any3,any2); +c:any1 -> c:g(any1); +c:x & c:y -> c:h(x,y); +c:x & c:g(y) -> c:h(y,g(x)); +c:x & c:h(x,g(y)) -> c:g(y); +c:x & c:h(y,g(x)) -> c:g(y). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/yahalom b/preinstallTTool/linux/proverif/examples/horn/secr/yahalom new file mode 100644 index 0000000000000000000000000000000000000000..eef6d98754ca2564bcaad1ff306af0f422aae525 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/yahalom @@ -0,0 +1,72 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +pred c/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +query c:Nb[host(Kas[]), Na[]]. +query c:secretA[]. +query c:secretB[]. + +not c:Kas[]. +not c:Kbs[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; + +(* A *) + +c:(host(Kas[]), Na[]); +c:(encrypt((b, k, Na[], nb), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(encrypt((host(Kbs[]), k, Na[], nb), Kas[]), mb) -> c:encrypt(secretA[], k); + +(* B *) + +c:(a, na) -> c:(host(Kbs[]), encrypt((a, na, Nb[a,na]), Kbs[])); +c:(encrypt((host(Kas[]), k), Kbs[]), encrypt(Nb[host(Kas[]),na], k)) -> c:encrypt(secretB[], k); + +(* S *) + +c:(host(kbs), encrypt((host(kas), na, nb), kbs)) -> c:(encrypt((host(kbs), k[kas, kbs, na, nb], na, nb), kas), encrypt((host(kas), k[kas, kbs, na, nb]), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/yahalom-bid b/preinstallTTool/linux/proverif/examples/horn/secr/yahalom-bid new file mode 100644 index 0000000000000000000000000000000000000000..201072bc84cf6e5e99a83d5cf915959cc59d556b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/yahalom-bid @@ -0,0 +1,71 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +pred c/1 decompData, elimVar. + +fun encrypt/2. +fun host/1. + +query c:Nb[host(Kas[]), Na[]]. +query c:secretA[]. +query c:secretB[]. + +not c:Kas[]. + +reduc + +(* attacker *) + +c:c[]; +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; + +(* A *) + +c:(host(Kas[]), Na[]); +c:(encrypt((b, k, Na[], nb), Kas[]), mb) -> c:(mb, encrypt(nb, k)); +c:(encrypt((host(Kas[]), k, Na[], nb), Kas[]), mb) -> c:encrypt(secretA[], k); + +(* B *) + +c:(a, na) -> c:(host(Kas[]), encrypt((a, na, Nb[a,na]), Kas[])); +c:(encrypt((host(Kas[]), k), Kas[]), encrypt(Nb[host(Kas[]),na], k)) -> c:encrypt(secretB[], k); + +(* S *) + +c:(host(kbs), encrypt((host(kas), na, nb), kbs)) -> c:(encrypt((host(kbs), k[kas, kbs, na, nb], na, nb), kas), encrypt((host(kas), k[kas, kbs, na, nb]), kbs)). diff --git a/preinstallTTool/linux/proverif/examples/horn/secr/yahalom2 b/preinstallTTool/linux/proverif/examples/horn/secr/yahalom2 new file mode 100644 index 0000000000000000000000000000000000000000..8130bb7faec82c6c5080be395a57206f319d9086 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horn/secr/yahalom2 @@ -0,0 +1,72 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +pred c/1 elimVar, decompData. + +fun encrypt/2. +fun host/1. + +query c:Nb[host(Kas[]), Na[]]. +query c:secretA[]. +query c:secretB[]. + +reduc + +(* attacker *) + +c:k -> c:host(k); +c:k & c:m -> c:encrypt(m,k); +c:k & c:encrypt(m,k) -> c:m; + +(* A *) + +c:host(Kas[]); +c:Na[]; +c:encrypt((b, k, Na[], nb), Kas[]) -> c:encrypt(nb, k); +c:encrypt((host(Kbs[]), k, Na[], nb), Kas[]) -> c:encrypt(secretA[], k); + +(* B *) + +c:host(Kbs[]); +c:a & c:na -> c:encrypt((a, na, Nb[a,na]), Kbs[]); +c:encrypt((host(Kas[]), k), Kbs[]) & c:encrypt(Nb[host(Kas[]),na], k) -> c:encrypt(secretB[], k); + +(* S *) + +c:host(kbs) & c:encrypt((host(kas), na, nb), kbs) -> c:encrypt((host(kbs), k[kas, kbs, na, nb], na, nb), kas); +c:host(kbs) & c:encrypt((host(kas), na, nb), kbs) -> c:encrypt((host(kas), k[kas, kbs, na, nb]), kbs). + diff --git a/preinstallTTool/linux/proverif/examples/horntype/secr/denning-sacco-corr-orig b/preinstallTTool/linux/proverif/examples/horntype/secr/denning-sacco-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..5e5a5da300adf8086f4fad73ffd8625087178085 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horntype/secr/denning-sacco-corr-orig @@ -0,0 +1,88 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* set ignoreTypes = true. *) + +type skey. +type pkey. +type host. +type key. + +pred c(any_type) [elimVar,decompData]. + +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. + +fun sign(bitstring,skey):bitstring. + +fun sencrypt(bitstring,key):bitstring. + +fun host(skey):host. + +name secret:bitstring. +name sA:skey. +name sB:skey. +name sS:skey. +name k:key. + +query c(secret[]). + +not c(sA[]). +not c(sB[]). +not c(sS[]). + +clauses +(* Initialization *) + +c(pk(sA[])); +c(pk(sB[])); +c(pk(sS[])); + +(* The attacker *) + +forall x:skey, m:bitstring; c(x) & c(encrypt(m,pk(x))) -> c(m); +forall x:skey; c(x) -> c(pk(x)); +forall x:bitstring, y:pkey; c(x) & c(y) -> c(encrypt(x,y)); +forall x:bitstring, y:skey; c(sign(x,y)) -> c(x); +forall x:bitstring, y:skey; c(x) & c(y) -> c(sign(x,y)); +forall x:skey; c(host(x)); +forall x:bitstring, y:key; c(x) & c(y) -> c(sencrypt(x,y)); +forall x:key, m:bitstring; c(x) & c(sencrypt(m,x)) -> c(m); + +(* The protocol *) +(* A *) + +forall x:skey, pkx:pkey; c((sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]))) -> +c((sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]), encrypt(sign((host(sA[]), host(x), k[pkx]), sA[]), pkx))); + +(* B *) + +forall s1:skey, xk:key; c((sign((host(sA[]), pk(s1)), sS[]), sign((host(sB[]), pk(sB[])), sS[]), encrypt(sign((host(sA[]), host(sB[]), xk), s1), pk(sB[])))) -> c(sencrypt(secret[], xk)); + +(* server *) + +forall s1:skey, s2:skey; c((host(s1), host(s2))) -> c((sign((host(s1), pk(s1)), sS[]), sign((host(s2), pk(s2)), sS[]))). diff --git a/preinstallTTool/linux/proverif/examples/horntype/secr/denning-sacco-orig b/preinstallTTool/linux/proverif/examples/horntype/secr/denning-sacco-orig new file mode 100644 index 0000000000000000000000000000000000000000..afdf0567a9dfba86d3ef705f133cbedf2ae4456c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horntype/secr/denning-sacco-orig @@ -0,0 +1,90 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* set ignoreTypes = true. *) + +type skey. +type pkey. +type host. +type key. + +pred c(any_type) [elimVar,decompData]. + +fun key_to_bitstring(key):bitstring [data,typeConverter]. + +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. + +fun sign(bitstring,skey):bitstring. + +fun sencrypt(bitstring,key):bitstring. + +fun host(skey):host. + +name secret:bitstring. +name sA:skey. +name sB:skey. +name sS:skey. +name k:key. + +query c(secret[]). + +not c(sA[]). +not c(sB[]). +not c(sS[]). + +clauses +(* Initialization *) + +c(pk(sA[])); +c(pk(sB[])); +c(pk(sS[])); + +(* The attacker *) + +forall x:skey, m:bitstring; c(x) & c(encrypt(m,pk(x))) -> c(m); +forall x:skey; c(x) -> c(pk(x)); +forall x:bitstring, y:pkey; c(x) & c(y) -> c(encrypt(x,y)); +forall x:bitstring, y:skey; c(sign(x,y)) -> c(x); +forall x:bitstring, y:skey; c(x) & c(y) -> c(sign(x,y)); +forall x:skey; c(host(x)); +forall x:bitstring, y:key; c(x) & c(y) -> c(sencrypt(x,y)); +forall x:key, m:bitstring; c(x) & c(sencrypt(m,x)) -> c(m); + +(* The protocol *) +(* A *) + +forall x:skey, pkx:pkey; c((sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]))) -> +c((sign((host(sA[]), pk(sA[])), sS[]), sign((host(x), pkx), sS[]), encrypt(sign(key_to_bitstring(k[pkx]), sA[]), pkx))); + +(* B *) + +forall s1:skey, xk:key; c((sign((host(sA[]), pk(s1)), sS[]), sign((host(sB[]), pk(sB[])), sS[]), encrypt(sign(key_to_bitstring(xk), s1), pk(sB[])))) -> c(sencrypt(secret[], xk)); + +(* server *) + +forall s1:skey, s2:skey; c((host(s1), host(s2))) -> c((sign((host(s1), pk(s1)), sS[]), sign((host(s2), pk(s2)), sS[]))). diff --git a/preinstallTTool/linux/proverif/examples/horntype/secr/needham-corr-orig b/preinstallTTool/linux/proverif/examples/horntype/secr/needham-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..fae451cbfc2a09b4cbf653f5146ef737fdf7e3a3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horntype/secr/needham-corr-orig @@ -0,0 +1,91 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c(any_type) [decompData, elimVar]. + +type skey. +type pkey. +type host. +type key. +type nonce. + +fun host(skey):host. +fun sign(bitstring,skey):bitstring. +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. + +name secret:bitstring. +name sS:skey. +name sA:skey. +name sB:skey. +name k:skey. +name Na:nonce. +name Nb:nonce. + +query c(secret[]). + +not c(sS[]). +not c(sA[]). +not c(sB[]). +(* not c(Na[pk(sB[])]). *) + +clauses + +(* The attacker *) + +forall x:bitstring, y:skey; c(x) & c(y) -> c(sign(x,y)); +forall x:bitstring, y:skey; c(sign(x,y)) -> c(x); +forall x:skey, m:bitstring; c(x) & c(encrypt(m,pk(x))) -> c(m); +forall x:skey; c(x) -> c(pk(x)); +forall x:bitstring, y:pkey; c(x) & c(y) -> c(encrypt(x,y)); +forall x:skey; c(host(x)); + +(* The protocol *) +(* Initialisation *) + +c(pk(sA[])); +c(pk(sB[])); +c(pk(sS[])); + +(* A *) + +forall x:host, pkx:pkey; c(sign((pkx, x), sS[])) -> c(encrypt((Na[pkx], host(sA[])), pkx)); +forall x:host, y:nonce, pkx:pkey; c(sign((pkx, x), sS[])) & c(encrypt((Na[pkx], y, x), pk(sA[]))) + -> c(encrypt((y,k[x]), pkx)); + +(* B *) + +forall x:nonce, a:host, pka:pkey; c(encrypt((x,a), pk(sB[]))) & c(sign((pka, a), sS[])) -> c(encrypt((x, Nb[x,a], host(sB[])), pka)); +forall x:nonce, pka:pkey, z:skey; c(encrypt((x,host(sA[])), pk(sB[]))) & c(sign((pka, host(sA[])), sS[])) & c(encrypt((Nb[x, host(sA[])], z), pk(sB[]))) + -> c(encrypt(secret[], pk(z))); + +(* server *) + +forall s1:skey, s2:skey; c((host(s1),host(s2))) -> c(sign((pk(s2), host(s2)), sS[])). diff --git a/preinstallTTool/linux/proverif/examples/horntype/secr/needham-orig b/preinstallTTool/linux/proverif/examples/horntype/secr/needham-orig new file mode 100644 index 0000000000000000000000000000000000000000..7ad77437539c4bc1208c3d44d3f87d89d4aa08a2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/horntype/secr/needham-orig @@ -0,0 +1,91 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham Shroeder public key protocol. + Original version, with a flaw discovered by Lowe *) + +pred c(any_type) [decompData, elimVar]. + +type skey. +type pkey. +type host. +type key. +type nonce. + +fun host(skey):host. +fun sign(bitstring,skey):bitstring. +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. + +name secret:bitstring. +name sS:skey. +name sA:skey. +name sB:skey. +name k:skey. +name Na:nonce. +name Nb:nonce. + +query c(secret[]). + +not c(sS[]). +not c(sA[]). +not c(sB[]). +(* not c(Na[pk(sB[])]). *) + +clauses + +(* The attacker *) + +forall x:bitstring, y:skey; c(x) & c(y) -> c(sign(x,y)); +forall x:bitstring, y:skey; c(sign(x,y)) -> c(x); +forall x:skey, m:bitstring; c(x) & c(encrypt(m,pk(x))) -> c(m); +forall x:skey; c(x) -> c(pk(x)); +forall x:bitstring, y:pkey; c(x) & c(y) -> c(encrypt(x,y)); +forall x:skey; c(host(x)); + +(* The protocol *) +(* Initialisation *) + +c(pk(sA[])); +c(pk(sB[])); +c(pk(sS[])); + +(* A *) + +forall x:host, pkx:pkey; c(sign((pkx, x), sS[])) -> c(encrypt((Na[pkx], host(sA[])), pkx)); +forall x:host, y:nonce, pkx:pkey; c(sign((pkx, x), sS[])) & c(encrypt((Na[pkx], y), pk(sA[]))) + -> c(encrypt((y,k[x]), pkx)); + +(* B *) + +forall x:nonce, a:host, pka:pkey; c(encrypt((x,a), pk(sB[]))) & c(sign((pka, a), sS[])) -> c(encrypt((x, Nb[x,a]), pka)); +forall x:nonce, pka:pkey, z:skey; c(encrypt((x,host(sA[])), pk(sB[]))) & c(sign((pka, host(sA[])), sS[])) & c(encrypt((Nb[x, host(sA[])], z), pk(sB[]))) + -> c(encrypt(secret[], pk(z))); + +(* server *) + +forall s1:skey, s2:skey; c((host(s1),host(s2))) -> c(sign((pk(s2), host(s2)), sS[])). diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/JFKr-coresec b/preinstallTTool/linux/proverif/examples/pi/choice/JFKr-coresec new file mode 100644 index 0000000000000000000000000000000000000000..a1b564846d16d6797a70ba11972f722df7c85322 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/JFKr-coresec @@ -0,0 +1,236 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +(* Exponential and Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S/2. +fun Pk/1. +data true/0. +reduc V(S(k,v), Pk(k),v) = true. +reduc RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +reduc RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E/2. +reduc D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H/2. + +(* Sets + +data consset/2. +data emptyset/0. +pred member/2. +clauses + member:x,consset(x,y); + member:x,y -> member:x,consset(z,y). +*) + +(* Tags *) + +data tagE/0. data tagA/0. data tagV/0. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +data cons1/2. data cons2/5. data cons3/7. data cons4/2. + +(* More constants *) + +data constI/0. data constR/0. data saR/0. + +(* Free names *) + +free c. (* Public channel *) +free pub, genprinc, getexponential, grpinfoR, init0, getprinc0. + +(* Secrecy assumptions *) + +not kAminus phase 0. +not d. + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI = + ! + in(exponent, (dI, xI)); + ! + in(init, dummy); (* Init message *) + new NI; + out(c, cons1(NI, xI)); + in(c, cons2(=NI, NR, xR, grpinfoR, tR)); + let h = exp(xR, dI) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, grpinfoR)) in + out(getI, (dummy, NI, NR, xI, xR, tR, Ka, Ke, Kv, sI)). + +(* Responder + The process processR corresponds to R^A in the figure. *) + +let processR = + ! + in(exponent, (dR, xR)); + ! + in(c, cons1(NI, xI)); + new NR; + new tR; + out(c, cons2(NI, NR, xR, grpinfoR, tR)); + new l; + ( + ( + ! + in(c, cons3(=NI,=NR,xI,=xR,=tR,eI,hI)); + out(l, (xI,eI,hI)) + ) + | + ( + in(l, (xI,eI,hI)); + processR4 + ) + ). + +let processR4 = + out(d0, (NR, IDA)) | + let h = exp(xI,dR) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sR = S(kAminus, (NI, NR, xI, xR)) in + out(getR, (NI, NR, xI, xR, tR, eI, hI, Ka, Ke, Kv, sR)). + +(* Whole JFK system. *) + +process + new exponent; + new cp; + new ids; + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + ( + ! + new kAminus; + let IDA = Pk(kAminus) in + new init; new getI; new getR; + out(getprinc0, (IDA, getI, getR, init)); + ( processI | processR | (!out(cp, IDA)) | (!out(ids, (kAminus, IDA)))) + ) + | + ( + in(ids, (kAIminus, IDAI)); + in(ids, (kARminus, IDAR)); + in(exponent, (dI,xI)); + in(exponent, (dR,xR)); (* with in(pub, (NR, xR)) instead, attack for xR = g, so h = exp(g, dI) = xI. *) + in(init0, (IDRp, saI,=IDAI,=IDAR,=xI,=xR)); + new NI; + new NR; (* we could use instead in(pub, NR); *) + new TR; + new NeI; new NhI; new NeR; new NhR; new NKv; + let h = exp(xR,dI) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sR = S(kARminus, (NI, NR, xI, xR)) in + let eR = E(Ke, (IDAR, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + let sI = S(kAIminus, (NI, NR, xI, xR, grpinfoR)) in + let eI = E(Ke, (IDAI, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + out(pub, (NI, NR, TR, + choice[eI, NeI], + choice[hI, NhI], + choice[eR, NeR], + choice[hR, NhR], + choice[Kv, NKv])) + ) + + + +(* + +Let us name S' the above process. +Let us define the context C as follows: + +new getprinc0; +( + [] +| + ! + in(getprinc0, (IDA, getI, getR, init)); + new connect; new accept; new channelSIA; + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( processI2 | processR2 ) +) + +let processI2 = + ! + in(getI, ((IDRp, saI), NI, NR, xI, xR, tR, Ka, Ke, Kv, sI)); + let eI = E(Ke, (IDA, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (IDRl, saR, sR) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR)) = true then + out(connect, (IDRl, IDRp, saI, saR, Kv)). + +let processR2 = + ! + in(getR, (NI, NR, xI, xR, tR, eI, hI, Ka, Ke, Kv, sR)); + if H(Ka, (constI, eI)) = hI then + let (IDIl, IDRp, saI, sI) = D(Ke,eI) in + if member:IDIl,SIA then + if V(sI, IDIl, (NI, NR, xI, xR, grpinfoR)) = true then + out(accept, (IDIl, IDRp, saI, saR, Kv)); + let eR = E(Ke, (IDA, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + out(c, cons4(eR, hR)). + +The full JFKr script S (version without cache) is weakly observationally +equivalent to C[S'] (more precisely, fst(S) is equivalent to +fst(C[S']) and snd(S) is equivalent to snd(C[S'])). This is proved by +eliminating communications on the private channel getprinc and on each +instance of getI and getR. ProVerif shows that S' satisfies +equivalence, then so does C[S'] by the contextual property of +equivalence, then fst(S) is weakly observationally equivalent to snd(S). + +*) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/augmentedeke b/preinstallTTool/linux/proverif/examples/pi/choice/augmentedeke new file mode 100644 index 0000000000000000000000000000000000000000..b7d3e1e5fc2f93773e0ba4ab1ca62d26cfedcc52 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/augmentedeke @@ -0,0 +1,126 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 + One does not know whether one decrypts { challengeA, challengeB }_K + and similar messages correctly. In this case, there is no attack. *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not + -- not used in this script + +fun senc/2. +reduc sdec(senc(x,y),y) = x. *) + +(* Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,x),y) = exp(exp(g,y),x). + +(* Hash function *) + +fun h/1. + +(* One-way function *) + +fun F/2. + +(* Predicate *) + +data true/0. +reduc T(h(x), F(x,y), y) = true. + +(* Host *) + +data host/2. + + +free hostA, hostB. +private free P. + +let processA = + new RA; + out(c, (hostA, enc(exp(g,RA), h(P)))); + in(c, (m1, m2)); + let gRB = dec(m1, h(P)) in + let K = exp(gRB, RA) in + let (challengeB) = dec(m2, K) in + new challengeA; + out(c, enc((challengeA, challengeB), K)); + in(c, m3); + if (challengeA) = dec(m3, K) then + out(c, enc(F(P,K), K)). + + +let processB = + in(c, (=hostX, gRA)); + new RB; + let K = exp(gRA, RB) in + new challengeB; + out(c, (enc(exp(g, RB), h(P)), enc(challengeB, K))); + in(c, m4); + let (challengeA, =challengeB) = dec(m4, K) in + out(c, enc(challengeA, K)); + in(c, m5); + let fr = dec(m5, K) in + if T(h(P), fr, K) = true then + 0. + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) + diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/basic1 b/preinstallTTool/linux/proverif/examples/pi/choice/basic1 new file mode 100644 index 0000000000000000000000000000000000000000..3c2856ffd81ae2a42b3c59bcf88d2e023ee938e8 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/basic1 @@ -0,0 +1,34 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +fun hash/1. + +free c. + +process + new n; + out(c, choice[n, hash(n)]) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/basic2 b/preinstallTTool/linux/proverif/examples/pi/choice/basic2 new file mode 100644 index 0000000000000000000000000000000000000000..3a29770b3570dbfdce27a55bc314fa2e68a53989 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/basic2 @@ -0,0 +1,34 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +fun hash/1. + +free c. + +process + new n; new m; + out(c, (m, choice[n, hash(m)])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/basicweaksecret b/preinstallTTool/linux/proverif/examples/pi/choice/basicweaksecret new file mode 100644 index 0000000000000000000000000000000000000000..0c09241516021c80545dc78eb4b0906421ba4e55 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/basicweaksecret @@ -0,0 +1,47 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Basic weak secret example, from JLAP paper + Corrected version *) + +fun pk/1. +fun penc/3. +fun pdec/2. +equation pdec(penc(x, pk(y), z), y) = x. + +fun h/1. + +free c. +private free w. + +weaksecret w. + +process + new s; + new a; + out(c, pk(s)); + out(c, penc(h(w), pk(s), a)) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/basicweaksecret-attack b/preinstallTTool/linux/proverif/examples/pi/choice/basicweaksecret-attack new file mode 100644 index 0000000000000000000000000000000000000000..fc6efc7f6258495a648588a5a56029d55ec26494 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/basicweaksecret-attack @@ -0,0 +1,46 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Basic weak secret example, from JLAP paper + First version, with an attack *) + +fun pk/1. +fun penc/2. +fun pdec/2. +equation pdec(penc(x, pk(y)), y) = x. + +fun h/1. + +free c. +private free w. + +weaksecret w. + +process + new s; + out(c, pk(s)); + out(c, penc(h(w), pk(s))) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/dh-fs b/preinstallTTool/linux/proverif/examples/pi/choice/dh-fs new file mode 100644 index 0000000000000000000000000000000000000000..646ddcdbbd5c1a65bed5edc7916e67779db4acc0 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/dh-fs @@ -0,0 +1,39 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Diffie-Hellman *) + +data g/0. +fun exp/2. + +equation exp(exp(g,x),y) = exp(exp(g,y),x). + +free c. + +process + new a1; new a2; new a3; + out(c, (exp(g,a1), exp(g,a2), choice[exp(exp(g,a1),a2), exp(g,a3)])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/eke b/preinstallTTool/linux/proverif/examples/pi/choice/eke new file mode 100644 index 0000000000000000000000000000000000000000..830a52f7b2aed8bc6c20890c1ff67ae9a625ea0e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/eke @@ -0,0 +1,106 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 2.1 + Version in which A and B talk to anybody *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +(* Host name *) + +fun host/2. + +free hostA, hostB. +private free P. + +let processA = + new sEA; + let EA = pk(sEA) in + out(c, (hostA, enc(EA, P))); + in(c,m2); + let R = pdec(dec(m2,P),sEA) in + new challengeA; + out(c, senc((challengeA), R)); + in(c, m4); + let (=challengeA, challengeB) = sdec(m4, R) in + out(c, senc((challengeB), R)). + + +let processB = + in(c, (=hostX, m)); + let EA = dec(m, P) in + new R; + out(c, enc(penc(R, EA), P)); + in(c,m3); + let (challengeA) = sdec(m3, R) in + new challengeB; + out(c, senc((challengeA, challengeB), R)); + in(c, m5); + if sdec(m5, R) = (challengeB) then + 0. + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/eke1 b/preinstallTTool/linux/proverif/examples/pi/choice/eke1 new file mode 100644 index 0000000000000000000000000000000000000000..92798d180b4d4bf9018d418429e0331a4671f9b3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/eke1 @@ -0,0 +1,80 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 2.1 *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +free hostA. +private free P. + +let processA = + new sEA; + let EA = pk(sEA) in + out(c, (hostA, enc(EA, P))); + in(c,m2); + let R = pdec(dec(m2,P),sEA) in + new challengeA; + out(c, enc((challengeA), R)); + in(c, m4); + let (=challengeA, challengeB) = dec(m4, R) in + out(c, enc((challengeB), R)). + + +let processB = + in(c, (=hostA, m)); + let EA = dec(m, P) in + new R; + out(c, enc(penc(R, EA), P)); + in(c,m3); + let (challengeA) = dec(m3, R) in + new challengeB; + out(c, enc((challengeA, challengeB), R)); + in(c, m5); + if dec(m5, R) = (challengeB) then + 0. + +process + + (!processA) | (!processB)| + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/eke2 b/preinstallTTool/linux/proverif/examples/pi/choice/eke2 new file mode 100644 index 0000000000000000000000000000000000000000..1b8a20f04bd7f10e9922a1b398e2ec1dfa2180db --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/eke2 @@ -0,0 +1,113 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 2.1 + Version in which A and B talk to anybody *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +(* Host name -> password *) + +fun passwdA/1. (* passwdA(hostX) = the password that X shares with A *) +fun passwdB/1. (* passwdB(hostX) = the password that X shares with B *) + +free hostA, hostB. +private free P. + +(* query ev:Asays(x,y,z) ==> ev:Bsays(x,y,z). *) + +let processA = + new sEA; + let EA = pk(sEA) in + out(c, (hostA, enc(EA, P))); + in(c,m2); + let R = pdec(dec(m2,P),sEA) in + new challengeA; + out(c, senc((challengeA), R)); + in(c, m4); + let (=challengeA, challengeB) = sdec(m4, R) in + out(c, senc((challengeB), R)) (*; + if hostX = hostB then + event Asays(hostA, hostX, R)*). + + +let processB = + in(c, (=hostX, m)); + let EA = dec(m, P) in + new R; + (* event Bsays(hostX, hostB, R); *) + out(c, enc(penc(R, EA), P)); + in(c,m3); + let (challengeA) = sdec(m3, R) in + new challengeB; + out(c, senc((challengeA, challengeB), R)); + in(c, m5); + if sdec(m5, R) = (challengeB) then + 0. + +let processAtalkingX = + in(c, hostX); + (* if hostX = hostB then 0 else *) + let P = passwdA(hostX) in + processA. + +let processBtalkingX = + in(c, hostX); + (* if hostX = hostA then 0 else *) + let P = passwdB(hostX) in + processB. + +process + + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/ekedh b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh new file mode 100644 index 0000000000000000000000000000000000000000..4da4f5b28b87dd9a96be8e283c39d464f3129bc2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh @@ -0,0 +1,105 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 3.1 + Version in which A and B talk to anybody *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,x),y) = exp(exp(g,y),x). + +(* Host *) + +data host/2. + +free hostA, hostB. +private free P. + +let processA = + new RA; + out(c, (hostA, enc(exp(g,RA), P))); + in(c,(m2,m3)); + let gRB = dec(m2,P) in + let K = exp(gRB, RA) in + let challengeB = sdec(m3, K) in + new challengeA; + out(c, senc((challengeA,challengeB), K)); + in(c, m4); + if (challengeA) = sdec(m4, K) then + 0. + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, P) in + new RB; + let K = exp(gRA, RB) in + new challengeB; + out(c, (enc(exp(g,RB), P), senc(challengeB, K))); + in(c,m3); + let (challengeA,=challengeB) = sdec(m3, K) in + out(c, senc((challengeA), K)). + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/ekedh1 b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh1 new file mode 100644 index 0000000000000000000000000000000000000000..121dafd7e01e84217e195d781d969ef83c476921 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh1 @@ -0,0 +1,115 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 3.1 + Version in which A and B talk to anybody + + The tool was very slow on this example. Some subsumption + tests take more than 2 minutes! Problem solved by the following + optimization: when phases 0 to i do not contain choice, we + use attacker/mess instead of attacker2/mess2 for them + (because the left and right sides are always equal in these + phases). + *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Host name -> password *) + +fun passwdA/1. (* passwdA(hostX) = the password that X shares with A *) +fun passwdB/1. (* passwdB(hostX) = the password that X shares with B *) + +(* param verboseRules = yes. *) + +free hostA, hostB. +private free P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), P))); + in(c,(m2,m3)); + let gRB = dec(m2,P) in + let K = f(RA, gRB) in + let challengeB = sdec(m3, K) in + new challengeA; + out(c, senc((challengeA,challengeB), K)); + in(c, m4); + if (challengeA) = sdec(m4, K) then + 0. + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, P) in + new RB; + let K = f(RB, gRA) in + new challengeB; + out(c, (enc(g(RB), P), senc(challengeB, K))); + in(c,m3); + let (challengeA,=challengeB) = sdec(m3, K) in + out(c, senc((challengeA), K)). + +let processAtalkingX = + in(c, hostX); + let P = passwdA(hostX) in + processA. + +let processBtalkingX = + in(c, hostX); + let P = passwdB(hostX) in + processB. + +process + + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/ekedh2 b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh2 new file mode 100644 index 0000000000000000000000000000000000000000..37504ac40694646e7bc4c86136f9c25f8dd687aa --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh2 @@ -0,0 +1,111 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 3.1 + Version in which A and B talk to anybody + The tool was very slow on this example. Problem solved + as for ekedh1. +*) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Host *) + +data host/2. + +(* param verboseRules = yes. *) + +free hostA, hostB. +private free P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), P))); + in(c,(m2,m3)); + let gRB = dec(m2,P) in + let K = f(RA, gRB) in + let challengeB = sdec(m3, K) in + new challengeA; + out(c, senc((challengeA,challengeB), K)); + in(c, m4); + if (challengeA) = sdec(m4, K) then + 0. + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, P) in + new RB; + let K = f(RB, gRA) in + new challengeB; + out(c, (enc(g(RB), P), senc(challengeB, K))); + in(c,m3); + let (challengeA,=challengeB) = sdec(m3, K) in + out(c, senc((challengeA), K)). + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/ekedh3 b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh3 new file mode 100644 index 0000000000000000000000000000000000000000..882d47313a2b566d50eb6b21929cb62d36c19350 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/ekedh3 @@ -0,0 +1,102 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 3.1 + Version in which A and B talk to anybody + The tool was very slow on this example. Problem solved + as for ekedh1. +*) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Host *) + +data host/2. + +(* param verboseRules = yes. *) + +free hostA, hostB. +private free P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), P))); + in(c,(m2,m3)); + let gRB = dec(m2,P) in + let K = f(RA, gRB) in + out(c, K). + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, P) in + new RB; + let K = f(RB, gRA) in + out(c, (enc(g(RB), P), K)). + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/macs b/preinstallTTool/linux/proverif/examples/pi/choice/macs new file mode 100644 index 0000000000000000000000000000000000000000..947635d7dc3deac6c808f8abdd754ee2b1c6c1bc --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/macs @@ -0,0 +1,60 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Comparing an abstract MAC primitive to its implementation using + hashes of blocks, as explained in "mobile values", section 6. + This example amounts to a change of signature, with + the implementation signature having additional equations for the + benefit of the attacker. *) + +fun mac/2. (* MAC specification, with no equation. *) +private fun impl/2. (* choice of a MAC implementation *) + +fun f/2. (* variable-length keyed hash *) +fun h/2. (* keyed-hash for a single block *) + +(* +The first, broken implementation uses +equation impl(k,x) = f(k,x). + +The second, correct implementation uses +equation impl(k,x) = f(k,f(k,x)). +*) + +equation impl(k,x) = f(k,f(k,x)). + +equation h(f(x,y),z) = f(x,(y,z)). + +free c, c1, c2. + +process + new k; + ( + ( !in(c1, x); out(c,(x,choice[mac(k,x),impl(k,x)]))) + | + ( in(c,(x,m)); if choice[mac(k,x),impl(k,x)] = m then out(c2,x)) + ) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/nde-pk b/preinstallTTool/linux/proverif/examples/pi/choice/nde-pk new file mode 100644 index 0000000000000000000000000000000000000000..eda365fba9537ba19069ba671b9b2524af59aa88 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/nde-pk @@ -0,0 +1,46 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Non-deterministic public-key encryption *) + +fun pk/1. +fun enc/3. +fun dec/2. +equation dec(enc(x, pk(y), z), y) = x. + +free c,c2. + +process + new s; + ( + out(c, pk(s)) + | + ! + in(c2, x); + new a; + out(c, choice[enc(x, pk(s), a), a]) + ) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/pihandshake b/preinstallTTool/linux/proverif/examples/pi/choice/pihandshake new file mode 100644 index 0000000000000000000000000000000000000000..efbcf8311cc9e8699b63b6c486ce855722d36165 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/pihandshake @@ -0,0 +1,58 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Handshake protocol. + Taken from Delaune, Jacquemard, LSV-04-1 *) + +(* shared-key encryption as equation *) + +fun encrypt/2. +fun decrypt/2. +equation decrypt(encrypt(x,y),y) = x. +equation encrypt(decrypt(x,y),y) = x. + +(* addition of one *) + +fun f/1. + +free c. +private free pw. + +let processA = + new N; + out(c, encrypt(N, pw)). + +let processB = + in(c, x); + let y = decrypt(x, pw) in + out(c, encrypt(f(y), pw)). + +process + ((!processA) | (!processB) | + (phase 1; + new w; + out(c, choice[w,pw]))) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/pineedham-corr-orig b/preinstallTTool/linux/proverif/examples/pi/choice/pineedham-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..0291a2a3fb45436dc9f8ce1cfee55e85e5ee27c4 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/pineedham-corr-orig @@ -0,0 +1,128 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Host *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Signatures *) + +fun sign/2. +reduc checksign(sign(x,y),pk(y)) = x. +reduc getmess(sign(x,y)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretBNa, secretBNb. + +let processA = + (* Choose the other host *) + in(c,hostX); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms); + let (pkX,=hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na; + out(c, encrypt((Na, hostA), pkX)); + in(c, m); + let (=Na, NX2, =hostX) = decrypt(m, skA) in + out(c, encrypt(NX2, pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB = + (* Message 1 *) + in(c, m); + let (NY, hostY) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms); + let (pkY,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3); + if Nb = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS = in(c,m); + let (a,b) = m in + let sb = getkey(b) in + out(c,sign((pk(sb),b),skS)). + +process in(c, xANa); + in(c, yANa); + in(c, xANb); + in(c, yANb); + let secretANa = choice[xANa, yANa] in + let secretANb = choice[xANb, yANb] in + new skA; let pkA = pk(skA) in + out(c, pkA); + new skB; let pkB = pk(skB) in + out(c, pkB); + new skS; let pkS = pk(skS) in + out(c, pkS); + let hostA = host(skA) in + out(c, hostA); + let hostB = host(skB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/pineedham-corr-orig2 b/preinstallTTool/linux/proverif/examples/pi/choice/pineedham-corr-orig2 new file mode 100644 index 0000000000000000000000000000000000000000..a0c673357aad3e48d100c7e053d38571ffaf03ff --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/pineedham-corr-orig2 @@ -0,0 +1,132 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Host *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Signatures *) + +fun sign/2. +reduc checksign(sign(x,y),pk(y)) = x. +reduc getmess(sign(x,y)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +let processA = + (* Choose the other host *) + in(c,hostX); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms); + let (pkX,=hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na; + out(c, encrypt((Na, hostA), pkX)); + in(c, m); + let (=Na, NX2, =hostX) = decrypt(m, skA) in + out(c, encrypt(NX2, pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB = + (* Message 1 *) + in(c, m); + let (NY, hostY) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms); + let (pkY,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3); + if Nb = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS = in(c,m); + let (a,b) = m in + let sb = getkey(b) in + out(c,sign((pk(sb),b),skS)). + +process in(c, xANa); + in(c, yANa); + in(c, xANb); + in(c, yANb); + in(c, xBNa); + in(c, yBNa); + in(c, xBNb); + in(c, yBNb); + let secretANa = choice[xANa, yANa] in + let secretANb = choice[xANb, yANb] in + let secretBNa = choice[xBNa, yBNa] in + let secretBNb = choice[xBNb, yBNb] in + new skA; let pkA = pk(skA) in + out(c, pkA); + new skB; let pkB = pk(skB) in + out(c, pkB); + new skS; let pkS = pk(skS) in + out(c, pkS); + let hostA = host(skA) in + out(c, hostA); + let hostB = host(skB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/pivote b/preinstallTTool/linux/proverif/examples/pi/choice/pivote new file mode 100644 index 0000000000000000000000000000000000000000..dec56d9abe38422a92c5f91b2340752d9f1f6b0a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/pivote @@ -0,0 +1,51 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Naive vote protocol + Taken from Delaune, Jacquemard, LSV-04-1 *) + +(* public key encryption *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)), y) = x. + +free c. +private free v. + +let processA = + out(c, encrypt(v, pkS)). + +process + (new skS; + let pkS = pk(skS) in + out(c, pkS); + !processA) + | + (phase 1; + new w; + out(c, choice[w,v])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/signedaugmentedeke b/preinstallTTool/linux/proverif/examples/pi/choice/signedaugmentedeke new file mode 100644 index 0000000000000000000000000000000000000000..780ec9bb61e34db6f04fcf1c22bdfa87ef6d34b3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/signedaugmentedeke @@ -0,0 +1,121 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 + One does not know whether one decrypts { challengeA, challengeB }_K + and similar messages correctly. In this case, there is no attack. *) + + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not + -- not used in this script. + +fun senc/2. +reduc sdec(senc(x,y),y) = x. *) + +(* Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,x),y) = exp(exp(g,y),x). + +(* Signature *) + +fun pk/1. +fun sign/2. +data true/0. +reduc verif(sign(x,y), pk(y),x) = true. +reduc getmess(sign(x,y)) = x. + +(* Host *) + +data host/2. + + +free hostA, hostB. +private free P. + +let processA = + new RA; + out(c, (hostA, enc(exp(g,RA), pk(P)))); + in(c, (m1, m2)); + let gRB = dec(m1, pk(P)) in + let K = exp(gRB, RA) in + let (challengeB) = dec(m2, K) in + new challengeA; + out(c, enc((challengeA, challengeB), K)); + in(c, m3); + if (challengeA) = dec(m3, K) then + out(c, enc(sign(K,P), K)). + + +let processB = + in(c, (=hostX, gRA)); + new RB; + let K = exp(gRA, RB) in + new challengeB; + out(c, (enc(exp(g,RB), pk(P)), enc(challengeB, K))); + in(c, m4); + let (challengeA, =challengeB) = dec(m4, K) in + out(c, enc(challengeA, K)); + in(c, m5); + let fr = dec(m5, K) in + if verif(fr,pk(P),K) = true then + 0. + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + (!let hostX = hostB in processA) | + (!let hostX = hostA in processB) | + (!processAtalkingX) | + (!processBtalkingX) | + (phase 1; + new w; + out(c, choice[w,P])) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/wmf-auth b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-auth new file mode 100644 index 0000000000000000000000000000000000000000..50cce8a275f84ef93de1c6e9ab5aa8d2e2842f03 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-auth @@ -0,0 +1,63 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Wide Mouth Frog protocol. + Example taken from Abadi, Gordon, A Calculus for Cryptographic + Protocols. The Spi Calculus. SRC research report 149. + Pages 14-- +*) + +(* Shared-key encryption *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +free c,e. + +let processA = + new Kab; + out(c, encrypt(Kab, Kas)); + out(c, encrypt(M, Kab)). + +let processS = + in(c, x); + let y = decrypt(x, Kas) in + out(c, encrypt(y, Ksb)). + +let processB = + in(c, x); + let y = decrypt(x, Ksb) in + in(c, z); + let w = decrypt(z,y) in + out(e, choice[w,M]). + + +process + in(c, M); + new Kas; + new Ksb; + (processA | processS | processB) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth new file mode 100644 index 0000000000000000000000000000000000000000..31c8a4519a638464f21054644a817d35e2b59c9b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth @@ -0,0 +1,121 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Wide Mouth Frog protocol. + Example taken from Abadi, Gordon, A Calculus for Cryptographic + Protocols. The Spi Calculus. SRC research report 149. + Pages 16-- + + Flawed version (no handshake) + + Probably too complex to be proved using choice on terms +*) + +data star/0. + +(* Shared-key encryption *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Keys *) + +private fun Ksi/1. +private fun Kis/1. +reduc gethost(Ksi(x)) = x; + gethost(Kis(x)) = x. + +fun host/1. + +free c,e. + +let processA = + new p; + ( + ( + new K; + out(c, (i, encrypt((j,K), Kis(i)))); + out(c, (i, encrypt(choice[M,p], K))) + ) + | + ( + in(p, x); + out(e, (i, j, M)) + ) + ). + +let processS = + in(c, (xA, xCipher)); + let (xB, xKey) = decrypt(xCipher, Kis(xA)) in + out(c, encrypt((xA, xKey), Ksi(xB))). + +let processB = + in(c, yCipher); + let (xA, xKey) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + out(choice[e, zPlain], (xA, j, zPlain)). +(* Or better: + new q; + (out(choice[q, zPlain], star) | in(q, x); out(e, (xA, j, zPlain))). +*) + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + + +(* This is the process + +let processA = + new K; + out(c, (i, encrypt((j,K), Kis(i)))); + out(c, (i, encrypt(M, K))). + +let processS = + in(c, (xA, xCipher)); + let (xB, xKey) = decrypt(xCipher, Kis(xA)) in + out(c, encrypt((xA, xKey), Ksi(xB))). + +let processB = + in(c, yCipher); + let (xA, xKey) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + out(e, (xA, j, zPlain)). + + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + + +*) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth2 b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth2 new file mode 100644 index 0000000000000000000000000000000000000000..bd46ce374a74b99edbfc0150df2e58743337c919 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth2 @@ -0,0 +1,120 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Wide Mouth Frog protocol. + Example taken from Abadi, Gordon, A Calculus for Cryptographic + Protocols. The Spi Calculus. SRC research report 149. + Pages 16-- + + Flawed version (no handshake) + + The finally desired equivalence is probably too complex to be + proved using choice on terms. Here, we aim at proving automatically + a lemma that we could then use in a partially manual proof. +*) + +(* Shared-key encryption *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Keys *) + +private fun Ksi/1. +private fun Kis/1. +reduc gethost(Ksi(x)) = x; + gethost(Kis(x)) = x. + +fun host/1. + +free c,e. + +let processA = + new p; + ( + ( + new K; + out(c, (i, encrypt((j,K), Kis(i)))); + out(c, (i, encrypt(choice[M,p], K))) + ) + | + ( + in(p,x); + out(e, (i,j,M)) + ) + ). + +let processS = + in(c, (xA, xCipher)); + let (xB, xKey) = decrypt(xCipher, Kis(xA)) in + out(c, encrypt((xA, xKey), Ksi(xB))). + +let processB = + in(c, yCipher); + let (xA, xKey) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + new q; + in(q,x); + out(e, (xA, j, zPlain)). + + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + + +(* This is the process + +let processA = + new K; + out(c, (i, encrypt((j,K), Kis(i)))); + out(c, (i, encrypt(M, K))). + +let processS = + in(c, (xA, xCipher)); + let (xB, xKey) = decrypt(xCipher, Kis(xA)) in + out(c, encrypt((xA, xKey), Ksi(xB))). + +let processB = + in(c, yCipher); + let (xA, xKey) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + out(e, (xA, j, zPlain)). + + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + + +*) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth3 b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth3 new file mode 100644 index 0000000000000000000000000000000000000000..1e66ea3c4a6117646d73763cdc30767381d09c30 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth3 @@ -0,0 +1,144 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Wide Mouth Frog protocol. + Example taken from Abadi, Gordon, A Calculus for Cryptographic + Protocols. The Spi Calculus. SRC research report 149. + Pages 20-- + + Repaired version (with 2 handshakes) + + Probably too complex to be proved using choice on terms. + (ProVerif finds a false attack.) +*) + +data star/0. +data S/0. + +(* Shared-key encryption *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Keys *) + +private fun Ksi/1. +private fun Kis/1. +reduc gethost(Ksi(x)) = x; + gethost(Kis(x)) = x. + +fun host/1. + +free c,e. + +let processA = + new p; + ( + ( + out(c, i); + in(c, xNonce); + new K; + out(c, (i, encrypt((i,i,j,K,xNonce), Kis(i)))); + out(c, (i, encrypt(choice[M,p], K))) + ) + | + ( + in(p,x); + out(e, (i,j,M)) + ) + ). + +let processS = + in(c, xA); + new Ns; + out(c, Ns); + in(c, (=xA, xCipher)); + let (=xA, =xA, xB, xKey, =Ns) = decrypt(xCipher, Kis(xA)) in + out(c, star); + in(c, yNonce); + out(c, encrypt((S, xA, xB, xKey, yNonce), Ksi(xB))). + +let processB = + in(c, w); + new Nb; + out(c, Nb); + in(c, yCipher); + let (=S, xA, =xB, xKey, =Nb) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + out(choice[e, zPlain], (xA, j, zPlain)). +(* Or better: + new q; + (out(choice[q, zPlain], star) | in(q, x); out(e, (xA, j, zPlain))). +*) + + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + + +(* This is the process + +let processA = + out(c, i); + in(c, xNonce); + new K; + out(c, (i, encrypt((i,i,j,K,xNonce), Kis(i)))); + out(c, (i, encrypt(choice[M,p], K))). + + +let processS = + in(c, xA); + new Ns; + out(c, Ns); + in(c, (=xA, xCipher)); + let (=xA, =xA, xB, xKey, =Ns) = decrypt(xCipher, Kis(xA)) in + out(c, star); + in(c, yNonce); + out(c, encrypt((S, xA, xB, xKey, yNonce), Ksi(xB))). + +let processB = + in(c, w); + new Nb; + out(c, Nb); + in(c, yCipher); + let (=S, xA, =xB, xKey, =Nb) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + out(e, (zA, j, zPlain)). + + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + +*) diff --git a/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth4 b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth4 new file mode 100644 index 0000000000000000000000000000000000000000..a4c29d3e5233a2af38c0faa0dd727529fbd103f9 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/choice/wmf-many-auth4 @@ -0,0 +1,143 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Wide Mouth Frog protocol. + Example taken from Abadi, Gordon, A Calculus for Cryptographic + Protocols. The Spi Calculus. SRC research report 149. + Pages 20-- + + Repaired version (with 2 handshakes) + + The finally desired equivalence is probably too complex to be + proved using choice on terms. Here, we aim at proving automatically + a lemma that we could then use in a partially manual proof. +*) + +data star/0. +data S/0. + +(* Shared-key encryption *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Keys *) + +private fun Ksi/1. +private fun Kis/1. +reduc gethost(Ksi(x)) = x; + gethost(Kis(x)) = x. + +fun host/1. + +free c,e. + +let processA = + new p; + ( + ( + out(c, i); + in(c, xNonce); + new K; + out(c, (i, encrypt((i,i,j,K,xNonce), Kis(i)))); + out(c, (i, encrypt(choice[M,p], K))) + ) + | + ( + in(p,x); + out(e, (i,j,M)) + ) + ). + +let processS = + in(c, xA); + new Ns; + out(c, Ns); + in(c, (=xA, xCipher)); + let (=xA, =xA, xB, xKey, =Ns) = decrypt(xCipher, Kis(xA)) in + out(c, star); + in(c, yNonce); + out(c, encrypt((S, xA, xB, xKey, yNonce), Ksi(xB))). + +let processB = + in(c, w); + new Nb; + out(c, Nb); + in(c, yCipher); + let (=S, xA, =xB, xKey, =Nb) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + new q; + in(q,x); + out(e, (xA, j, zPlain)). + + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + + +(* This is the process + +let processA = + out(c, i); + in(c, xNonce); + new K; + out(c, (i, encrypt((i,i,j,K,xNonce), Kis(i)))); + out(c, (i, encrypt(choice[M,p], K))). + + +let processS = + in(c, xA); + new Ns; + out(c, Ns); + in(c, (=xA, xCipher)); + let (=xA, =xA, xB, xKey, =Ns) = decrypt(xCipher, Kis(xA)) in + out(c, star); + in(c, yNonce); + out(c, encrypt((S, xA, xB, xKey, yNonce), Ksi(xB))). + +let processB = + in(c, w); + new Nb; + out(c, Nb); + in(c, yCipher); + let (=S, xA, =xB, xKey, =Nb) = decrypt(yCipher, Ksi(j)) in + in(c, (=xA, zCipher)); + let zPlain = decrypt(zCipher, xKey) in + out(e, (xA, j, zPlain)). + + +process + (!in(c, x); out(princ, host(x))) + |(!in(princ, i); in(princ, j); in(c, M); processA) + | !processS + |(!in(princ, j); processB) + +*) diff --git a/preinstallTTool/linux/proverif/examples/pi/features/piclauses b/preinstallTTool/linux/proverif/examples/pi/features/piclauses new file mode 100644 index 0000000000000000000000000000000000000000..566dcf805c654a8804f46a92c2388d6cec41a443 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/features/piclauses @@ -0,0 +1,121 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Host name / key + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +authquery Bparam/2. +authquery Bkey/3. + +private free secretA, secretB. +query secretA. +query secretB. + + +(* Clauses *) + +data cons/2. + +clauses + +member:x,cons(x,l); +member:x,l -> member:x,cons(y,l). + +let processA = + in(c, (cert1, cert2)); + let (=hostA, =pkA) = checksign(cert1, pkS) in + let (h2, pk2) = checksign(cert2, pkS) in + let x suchthat member:x,h2 in + begin Bparam(hostA, h2); + new k; + begin Bkey(hostA, h2, k); + out(c, (cert1, cert2, encrypt(sign(k, skA), pk2))); + if h2 = hostB then + out(c, sencrypt(secretA, k)). + +let processB = + in(c, (cert1, cert2, km)); + let (h1, pk1) = checksign(cert1, pkS) in + let (=hostB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let k = checksign(ks, pk1) in + if h1 = hostA then + end Bparam(h1, hostB); + end Bkey(h1, hostB, k); + out(c, sencrypt(secretB, k)). + +let processS = + in(c, (h1,h2)); + let s1 = getkey(h1) in + let s2 = getkey(h2) in + out(c, (sign((h1, s1), skS), sign((h2, s2), skS))). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + new skS; + let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/features/piclauses1 b/preinstallTTool/linux/proverif/examples/pi/features/piclauses1 new file mode 100644 index 0000000000000000000000000000000000000000..e9c87123ba086a0208a8864c54be789ac3aedf24 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/features/piclauses1 @@ -0,0 +1,68 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. + +(* signatures *) + +fun sign/2. +fun pk/1. +reduc checksign(sign(m,k),pk(k)) = m. + +data cons/2. + +(* Clauses *) + +pred member/2 memberOptim. + +clauses + +member:x,cons(x,l); +member:x,l -> member:x,cons(y,l). + + +private free secretA, secretB. +query secretA. +query secretB. + +let processA = + in(c, x); + let y suchthat member:y,x in + let =pkA = checksign(y, pkB) in + out(c, sign(x,skA)). + +let processB = + out(c, sign(pkA, skB)); + in(c,x); + let z = checksign(x,pkA) in + out(c, secretB). + +process new skA; new skB; + let pkA = pk(skA) in + let pkB = pk(skB) in + out(c, pkA); out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/features/piclauses2 b/preinstallTTool/linux/proverif/examples/pi/features/piclauses2 new file mode 100644 index 0000000000000000000000000000000000000000..22664c05f9e36c33af726d7913bba51a9c7713a3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/features/piclauses2 @@ -0,0 +1,116 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Flawed version, quoted by Paulson TR443 Inductive... *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not kA. +not kB. + +authquery Aparam/1. +authquery Akey/3. +authquery Bparam/1. +authquery Bkey/3. + +data cons/2. +data signatureElement/1. + +(* Clauses *) + +pred member/2 memberOptim. +pred mypred/2. + +clauses + +member:x,cons(x,l); +member:x,l -> member:x,cons(y,l); + +x = signatureElement(y) -> mypred:x,y. + + + +private free secretA, secretB. +query secretA. +query secretB. + +let processA = + in(c, hostB0); + begin Bparam(hostB0); + new Na; + out(c, (Na, hostA, hostB0, encrypt((Na, hostA, hostB0), kA))); + in(c, (=Na, m2)); + let (=Na, k) = decrypt(m2, kA) in + let x suchthat member:x,k in + begin Bkey(hostA, hostB0, k); + (* OK *) + if hostB0 = hostB then + end Aparam(hostA); + end Akey(hostA, hostB0, k); + out(c, encrypt(secretA, k)). + +let processB = + in(c, (na, hostA1, =hostB, z)); + begin Aparam(hostA1); + new Nb; + out(c, (na, hostA1, hostB, z, Nb, encrypt((na, hostA1, hostB), kB))); + in(c, (=na, m3, m4)); + let (=Nb, k) = decrypt(m4, kB) in + begin Akey(hostA1, hostB, k); + out(c, (na, m3)); + (* OK *) + if hostA1 = hostA then + end Bparam(hostB); + end Bkey(hostA1, hostB, k); + out(c, encrypt(secretB, k)). + +let processS = in(c, (Na1, hostA1, hostB1, m2, Nb1, m3)); + let (=Na1, =hostA1, =hostB1) = decrypt(m2, getkey(hostA1)) in + let (=Na1, =hostA1, =hostB1) = decrypt(m3, getkey(hostB1)) in + new k; + out(c, (Na1, encrypt((Na1, k), getkey(hostA1)), + encrypt((Nb1, k), getkey(hostB1)))). + + +process new kA; new kB; + let hostA = host(kA) in + let hostB = host(kB) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/features/piclauses3 b/preinstallTTool/linux/proverif/examples/pi/features/piclauses3 new file mode 100644 index 0000000000000000000000000000000000000000..ba5ba0edac653a6cbe92f3a4171401a56c83508c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/features/piclauses3 @@ -0,0 +1,69 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. + +(* signatures *) + +fun sign/2. +fun pk/1. +reduc checksign(sign(m,k),pk(k)) = m. + +data cons/2. + +(* Clauses *) + +pred member/2 memberOptim. +nounif member:*x,y. + +clauses + +member:x,cons(x,l); +member:x,l -> member:x,cons(y,l). + + +private free secretA, secretB. +query secretA. +query secretB. + +let processA = + in(c, x); + let y suchthat member:y,x in + let =pkA = checksign(y, pkB) in + out(c, sign(y,skA)). + +let processB = + out(c, sign(pkA, skB)); + in(c,x); + let z = checksign(x,pkA) in + out(c, secretB). + +process new skA; new skB; + let pkA = pk(skA) in + let pkB = pk(skB) in + out(c, pkA); out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/features/piclauses4 b/preinstallTTool/linux/proverif/examples/pi/features/piclauses4 new file mode 100644 index 0000000000000000000000000000000000000000..2ec495468fe72e602db007c509d7e9507f070530 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/features/piclauses4 @@ -0,0 +1,72 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. + +(* signatures *) + +fun sign/2. +fun pk/1. +reduc checksign(sign(m,k),pk(k)) = m. + +data cons/2. +data consnew/2. + +(* Clauses *) + +pred member/2 memberOptim. +pred membernew/2 memberOptim. + +clauses + +member:x,cons(x,l); +member:x,l -> member:x,cons(y,l); +membernew:x,consnew(x,l); +membernew:x,l -> membernew:x,consnew(y,l). + + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. + +let processA = + in(c, x); + let y suchthat member:y,x in + let =pkA = checksign(y, pkB) in + out(c, sign(x,skA)). + +let processB = + out(c, sign(pkA, skB)); + in(c,x); + let z = checksign(x,pkA) in + out(c, secretB). + +process new skA; new skB; + let pkA = pk(skA) in + let pkB = pk(skB) in + out(c, pkA); out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/ffgg/ffgg.ml b/preinstallTTool/linux/proverif/examples/pi/ffgg/ffgg.ml new file mode 100644 index 0000000000000000000000000000000000000000..bc74060b09e83f4d4ed8c0aa08a0150e58188bdc --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/ffgg/ffgg.ml @@ -0,0 +1,107 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + + +let ffgg n = + print_string "(* Generated script of the protocol f^ng^n for n = "; + print_int n; + print_string " + See Jonathan Millen, A Necessarily Parallel Attack, + Workshop on Formal Methods and Security Protocols (FMSP'99) + July 99. *) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Function from secrets to host names *) + +fun host/1. + +free c. +private free M. + +query attacker:M. + +let processA = + out(c, hostA); + in(c,(=hostB"; + for i = 1 to n do + print_string ", n"; + print_int i + done; + print_string "));\n\tout(c, (hostA, encrypt(("; + for i = 1 to n do + print_string "n"; + print_int i; + print_string ", " + done; + print_string "M ), pkB))).\n\nlet processB = \n\tin(c, =hostA);\n"; + for i = 1 to n do + print_string "new n"; + print_int i; + print_string "; " + done; + print_string "\n\tout(c, (hostB"; + for i = 1 to n do + print_string ", n"; + print_int i + done; + print_string "));\n\tin(c, (=hostA, mes));\n\tlet (=n1"; + for i = 1 to n do + print_string ", x"; + print_int i + done; + print_string ") = decrypt(mes, skB) in\n\tout(c, (n1, x1, encrypt(("; + for i = 1 to n do + print_string "x"; + print_int i; + print_string ", " + done; + print_string "n1), pkB))). + +process + new skB; let pkB = pk(skB) in + out(c, pkB); + let hostB = host(skB) in + out(c, hostB); + new skA; let pkA = pk(skA) in + out(c, pkA); + let hostA = host(skA) in + out(c, hostA); + ((!processA) | (!processB)) +" + + +let _ = + try + ffgg (int_of_string (Sys.argv.(1))) + with _ -> + print_string "Error. Usage: ffgg n\nwhere n is an integer\n" diff --git a/preinstallTTool/linux/proverif/examples/pi/ffgg/gen b/preinstallTTool/linux/proverif/examples/pi/ffgg/gen new file mode 100755 index 0000000000000000000000000000000000000000..0facfbc57fbd09cfc40eaccad08023aac3d64eb5 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/ffgg/gen @@ -0,0 +1,35 @@ +#!/bin/sh + +if [ -x ../../../xtime ] +then + PROG=../../../xtime +else + PROG=time +fi + +ocamlc -o ffgg ffgg.ml + +for i in 10 50 100 150 200 +do + ./ffgg $i > ffgg$i + (echo "param traceDisplay = long."; cat ffgg$i) > ffgg$i-long + (echo "param reconstructTrace = no."; cat ffgg$i) > ffgg$i-notrace +done + +( + +for i in 10 50 100 150 200 +do + echo FFGG$i + echo -n "No trace: " + $PROG ../../../proverif -in pi ffgg$i-notrace > ffgg$i.out.notrace + grep user ffgg$i.out.notrace + echo -n "Short display: " + $PROG ../../../proverif -in pi ffgg$i > ffgg$i.out + grep user ffgg$i.out +# echo -n "Long display: " +# $PROG ../../../proverif -in pi ffgg$i-long > ffgg$i.out.long +# grep user ffgg$i.out.long +done + +) | tee results diff --git a/preinstallTTool/linux/proverif/examples/pi/jfk/JFKi b/preinstallTTool/linux/proverif/examples/pi/jfk/JFKi new file mode 100644 index 0000000000000000000000000000000000000000..3cf4cdde73fd53ef146a19b7e2db26c5ee4ce0a9 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/jfk/JFKi @@ -0,0 +1,472 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKi *) + +param redundantHypElim = beginOnly. + +(* Exponential and Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S/2. +fun Pk/1. +data true/0. +fun V/3. +fun RecoverKey/1. +fun RecoverText/1. +equation V(S(k,v), Pk(k),v) = true. +equation RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +equation RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E/2. +fun D/2. +equation D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H/2. + +(* Sets *) + +data consset/2. +data emptyset/0. +pred member/2. +clauses + member:x,consset(x,y); + member:x,y -> member:x,consset(z,y). + +(* Tags *) + +data tagE/0. data tagA/0. data tagV/0. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +data cons1/3. data cons2/7. data cons3/7. data cons4/2. + +(* More constants *) + +data constI/0. data constR/0. data saR/0. + +(* Free names *) + +free c. (* Public channel *) +free pub, getprinc, getexponential, grpinfoR. + +(* Queries: properties to prove *) + +(* Correspondence assertions *) + +ifdef(`EVCACHE',` + (* Denial of service for I. *) + query evinj:enddosi(XIDA, XNI) ==> + (evinj:mess2rec(XIDA, XNI, XNR, XxR, XgrpinfoR, XIDB, XsR2, XtR, XxI, XIDRp, XsaI) ==> + (evinj:mess1(XIDA, XNI, XxI, XIDRp, XinitA, Xautorid, XsaI) ==> + evinj:init(XinitA, Xautorid, XIDRp, XsaI))) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA). + + (* First part of Property 1 of Theorem 3. *) + query ev:accept(XacceptB, XIDA, XsaI, XsaR, XKv) ==> + ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB) + & member:XIDA,XSIB. + + (* First part of Property 2 of Theorem 3. *) + query evinj:connect(XconnectA, XIDB, XsaI, XsaR, XKv) ==> + evinj:init(XinitA, Xautorid, XIDRp, XsaI) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & member:XIDB, Xautorid. + + (* Second part of Property 2 of Theorem 3. *) + query evinj:connecthonest(XconnectA, XIDB, XsaI, XsaR, XKv) ==> + evinj:accept(XacceptB, XIDA, XsaI, XsaR, XKv) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB). + + (* Certificates that the attacker can have *) + query attacker:S(kAminus, x). + + define(`HONESTEVENTS') +') + + +ifdef(`EVNOCACHE',` + (* To prove these injective correspondences, you need to replace the caching + of message 3 with a version without caching *) + + (* Denial of service for R. *) + query evinj:enddosr(XIDA, XNI, XNR) ==> + ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & (evinj:mess3rec(XIDA, XNI, XNR, XxI, XxR, XtR, XeI, XhI) ==> + (evinj:mess2(XIDA, XNI, XNR, XxIp, XxR, XgR, XS, XtR, XIDRpp) ==> + evinj:mess1rec(XIDA, XNI, XxIp, XIDRpp))). + + (* Second part of Property 1 of Theorem 3. *) + query evinj:accepthonest(XacceptB, XIDA, XsaI, XsaR, XKv) ==> + evinj:init(XinitA, Xautorid, XIDRp, XsaI) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB). + + (* Reordering *) + query evinj:connecthonest(XconnectA, XIDB, XsaI, XsaR, XKv) ==> + ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB) + &(evinj:mess4rec(XIDA, XeR, XhR, XconnectA, XIDB, XsaI, XsaR, XKv) ==> + (evinj:mess4(XIDB, XIDA, XeR, XhR, XNI, XNR, XxI, XxR, XtR, XeI, XhI) ==> + (evinj:accept(XacceptB, XIDA, XsaI, XsaR, XKv) ==> + (evinj:mess3rec(XIDB, XNI, XNR, XxI, XxR, XtR, XeI, XhI) ==> + (evinj:mess3(XIDA, XNI, XNR, XxI, XxR, XtRp, XeI, XhI, XgR, XIDRp, XsaI, XKv) ==> + (evinj:mess2rec(XIDA, XNI, XNR, XxR, XgR, XIDB, S(XkBminus, (XxR, XgR)), XtRp, XxI, XIDRp, XsaI) ==> + (evinj:mess2(XIDB, XNI, XNR, XxIp, XxR, XgR, S(XkBminus, (XxR, XgR)), XtR, XIDRpp) ==> + evinj:mess1rec(XIDB, XNI, XxIp, XIDRpp)) + & (evinj:mess1(XIDA, XNI, XxI, XIDRp, XinitA, Xautorid, XsaI) ==> + evinj:init(XinitA, Xautorid, XIDRp, XsaI)))))))). + + (* Note the presence of XtRp in events mess3 and mess2rec and + XxIp and XIDRpp in events mess2 and mess1rec, instead of + XtR, XxI, and XIDRp respectively *) + + define(`NOCACHE') + define(`HONESTEVENTS') +') + +(* Secrecy *) + +ifdef(`SECRECY',` + (* Secrecy of the exchanged key Kv, from the point of view of I and R *) + private free secretI, secretR. + query attacker:secretI; + attacker:secretR. +') + +(* Identity protection. + The predicate member: must be removed, because it is not supported + for observational equivalence proofs. So we use a version without cache. + Only compliant principals are allowed to connect to R. *) + +ifdef(`IDISECR',` + (* Identity protection for I against active adversaries *) + private fun honest/1. + reduc ishonest(Pk(honest(x))) = true. + + private free hIminus0, hIminus3, hminus1, hminus2. + noninterf hIminus0 among (hminus1, hminus2), + hIminus3 among (hminus1, hminus2). + not hminus1. + not hminus2. + not hAminus. + define(`NOCACHE') +') + + +(* Secrecy assumptions *) + +ifdef(`IDISECR',, +not kAminus phase 0. +) +not d. +ifdef(`NOCACHE',, +not f. +) + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI = + ! + in(exponent, (dI, xI)); + ! + in(init, (autorid, IDRp, saI)); (* Init message *) + event init(init, autorid, IDRp, saI); + new NI; + event mess1(IDA, NI, xI, IDRp, init, autorid, saI); + out(c, cons1(NI, xI, IDRp)); + in(c, cons2(=NI, NR, xR, grpinfoR, IDRl, sR2, tR)); + event mess2rec(IDA, NI, NR, xR, grpinfoR, IDRl, sR2, tR, xI, IDRp, saI); +ifdef(`IDISECR', + (* Only honest hosts are allowed to connect to I in this case *) + if ishonest(IDRl) = true then +,` + if member:IDRl,autorid then +') + event enddosi(IDA, NI); + if V(sR2, IDRl, (xR, grpinfoR)) = true then + let h = exp(xR, dI) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, IDRl, saI)) in + let eI = E(Ke, (IDA, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + event mess3(IDA, NI, NR, xI, xR, tR, eI, hI, grpinfoR, IDRp, saI, Kv); + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (sR, saR) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR, IDA, saI, saR)) = true then + event mess4rec(IDA, eR, hR, connect, IDRl, saI, saR, Kv); +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDRl); + event connecthonest(connect, IDRl, saI, saR, Kv) + ) + | +) + event connect(connect, IDRl, saI, saR, Kv); + out(connect, (IDRl, saI, saR, Kv)); +ifdef(`SECRECY', + in(honestC, =IDRl); + out(c, E(Kv, secretI)); +) + 0. + +(* Responder + The process processR corresponds to R^A in the figure. *) + +ifdef(`NOCACHE',` + +let processR = + new KR; + ! + in(exponent, (dR, xR)); + ! + in(c, cons1(NI, xI, IDRp)); + event mess1rec(IDA, NI, xI, IDRp); + new NR; + new tR; + event mess2(IDA, NI, NR, xI, xR, grpinfoR, S(kAminus, (xR, grpinfoR)), tR, IDRp); + out(c, cons2(NI, NR, xR, grpinfoR, IDA, S(kAminus, (xR, grpinfoR)), tR)); + new l; + ( + ( + ! + in(c, cons3(=NI,=NR,xI,=xR,=tR,eI,hI)); + out(l, (xI,eI,hI)) + ) + | + ( + in(l, (xI,eI,hI)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + processR4 + ) + ). + +',` + +let processR = + new KR; + ( + ( + ! + in(exponent, (dR, xR)); + ! + in(c, cons1(NI, xI, IDRp)); + new NR; + let tR = H(KR, (xR, NR, NI)) in + event mess2(IDA, NI, NR, xI, xR, grpinfoR, S(kAminus, (xR, grpinfoR)), tR, IDRp); + out(c, cons2(NI, NR, xR, grpinfoR, IDA, S(kAminus, (xR, grpinfoR)), tR)) + ) + | + new f; + ( + out(f, emptyset) + | + ( + ! + in(c, cons3(NI,NR,xI,xR,tR,eI,hI)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + if tR = H(KR, (xR, NR, NI)) then + in(f, cache); + ( + out(f, consset(tR, cache)) + | + if member:tR,cache then 0 else + new l; + ( + ( + ! + in(exponent, (dR, =xR)); + out(l, dR) + ) + | + ( + in(l, dR); + processR4 + ) + ) + ) + ) + ) + ). + +') + + +let processR4 = + event enddosr(IDA, NI, NR); + let h = exp(xI,dR) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + if H(Ka, (constI, eI)) = hI then + let (IDIl, saI, sI) = D(Ke,eI) in +ifdef(`IDISECR', + if ishonest(IDIl) = true then +,` + if member:IDIl,SIA then +') + if V(sI, IDIl, (NI, NR, xI, xR, IDA, grpinfoR)) = true then +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDIl); + event accepthonest(accept, IDIl, saI, saR, Kv) + ) + | +) + event accept(accept, IDIl, saI, saR, Kv); + out(accept, (IDIl, saI, saR, Kv)); + ( + ( + let sR = S(kAminus, (NI, NR, xI, xR, IDIl, saI, saR)) in + let eR = E(Ke, (sR, saR)) in + let hR = H(Ka, (constR, eR)) in + event mess4(IDA, IDIl, eR, hR, NI, NR, xI, xR, tR, eI, hI); + out(c, cons4(eR, hR)); +ifdef(`SECRECY', + in(honestC, =IDIl); + out(c, E(Kv, secretR)); +) + 0 + ) + ). + + +(* Whole JFK system. *) + +ifdef(`IDISECR', +(* Version for identity protection with active adversaries *) + +process + new exponent; + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new initI; (* private channel used to launch principals playing role I *) + let kminus1 = honest(hminus1) in + let ID1 = Pk(kminus1) in + let kminus2 = honest(hminus2) in + let ID2 = Pk(kminus2) in + out(pub, ID1); + out(pub, ID2); + ( + ( + (* Create principal playing role I, with secret key kIminus0 *) + let kIminus0 = honest(hIminus0) in + let IDI0 = Pk(kIminus0) in + new connect0; new init0; + out(pub, init0); + ( + (! in(connect0, x)) + | out(initI, (kIminus0, IDI0, init0, connect0)) + ) + ) + | + ( + (* Create principal playing role I, with secret key kIminus3 *) + let kIminus3 = honest(hIminus3) in + let IDI3 = Pk(kIminus3) in + new connect3; new init3; + out(pub, init3); + ( + (! in(connect3, x)) + | out(initI, (kIminus3, IDI3, init3, connect3)) + ) + ) + | + ( + ! + new hAminus; + let kAminus = honest(hAminus) in + let IDA = Pk(kAminus) in + new connect; new accept; new init; new channelSIA; + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA); + ( + (! in(accept, x)) + | (! in(connect, x)) + | out(initI, (kAminus, IDA, init, connect)) + | processR + ) + ) + | + (! in(initI, (kAminus, IDA, init, connect)); processI) + ) + +, +(* Standard version of the process *) + +process + + new exponent; + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new honestC; (* private channel used to simulate the set C of honest principals *) + ! + new kAminus; + let IDA = Pk(kAminus) in + new connect; new accept; new init; new channelSIA; +ifdef(`SECRECY', + (* Do not give accept and connect to the adversary when proving secrecy of Kv: + These messages contain Kv! Instead, input on these channels here. *) + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + ( phase 1; out(pub, kAminus) ) + | (! in(accept, x)) + | (! in(connect, x)) + | (! out(honestC, IDA) ) (* IDA is in C *) + | processI + | processR + ) +, + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + (! out(honestC, IDA) ) (* IDA is in C *) + | processI + | processR + ) +) + +) diff --git a/preinstallTTool/linux/proverif/examples/pi/jfk/JFKr b/preinstallTTool/linux/proverif/examples/pi/jfk/JFKr new file mode 100644 index 0000000000000000000000000000000000000000..51ab67f0b1dd05ef90db778424349c8ef109e654 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/jfk/JFKr @@ -0,0 +1,590 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +param redundantHypElim = beginOnly. + +(* Exponential and Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S/2. +fun Pk/1. +data true/0. +fun V/3. +fun RecoverKey/1. +fun RecoverText/1. +equation V(S(k,v), Pk(k),v) = true. +equation RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +equation RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E/2. +fun D/2. +equation D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H/2. + +(* Sets *) + +data consset/2. +data emptyset/0. +pred member/2. +clauses + member:x,consset(x,y); + member:x,y -> member:x,consset(z,y). + +(* Tags *) + +data tagE/0. data tagA/0. data tagV/0. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +data cons1/2. data cons2/5. data cons3/7. data cons4/2. + +(* More constants *) + +data constI/0. data constR/0. data saR/0. + +(* Free names *) + +free c. (* Public channel *) +free pub, getprinc, getexponential, grpinfoR, channelSIAR1, channelSIAR2. + +(* Queries: properties to prove *) + +(* Correspondence assertions *) + +ifdef(`EVCACHE',` + (* Denial of service for I. *) + query evinj:enddosi(XIDA, XNI) ==> + (evinj:mess2rec(XIDA, XNI, XNR, XxR, XgrpinfoR, XtR, XxI, XIDRp, XsaI) ==> + (evinj:mess1(XIDA, XNI, XxI, XinitA, XIDRp, XsaI) ==> + evinj:init(XinitA, XIDRp, XsaI))) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA). + + (* First part of Property 1 of Theorem 3. *) + query ev:accept(XacceptB, XIDA, XIDRp, XsaI, XasR, XKv) ==> + ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB) + & member:XIDA,XSIB. + + (* First part of Property 2 of Theorem 3. *) + query evinj:connect(XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv) ==> + evinj:init(XinitA, XIDRp, XsaI) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA). + + (* Second part of Property 2 of Theorem 3. *) + query evinj:connecthonest(XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv) ==> + evinj:accept(XacceptB, XIDA, XIDRp, XsaI, XsaR, XKv) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB). + + (* Certificates that the attacker can have *) + query attacker:S(kAminus, x). + + define(`HONESTEVENTS') +') + + +ifdef(`EVNOCACHE',` + (* To prove these injective correspondences, you need to replace the caching + of message 3 with a version without caching *) + + (* Denial of service for R. *) + query evinj:enddosr(XIDA, XNI, XNR) ==> + ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & (evinj:mess3rec(XIDA, XNI, XNR, XxI, XxR, XtR, XeI, XhI) ==> + (evinj:mess2(XIDA, XNI, XNR, XxIp, XxR, XgrpinfoR, XtR) ==> + evinj:mess1rec(XIDA, XNI, XxIp))). + + (* Second part of Property 1 of Theorem 3. *) + query evinj:accepthonest(XacceptB, XIDA, XIDRp, XsaI, XsaR, XKv) ==> + evinj:init(XinitA, XIDRp, XsaI) + & ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB). + + (* Reordering *) + query evinj:connecthonest(XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv) ==> + ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) + & ev:princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB) + &(evinj:mess4rec(XIDA, XeR, XhR, XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv) ==> + (evinj:mess4(XIDB, XIDA, XeR, XhR, XNI, XNR, XxI, XxR, XtR, XeI, XhI) ==> + (evinj:accept(XacceptB, XIDA, XIDRp, XsaI, XsaR, XKv) ==> + (evinj:mess3rec(XIDB, XNI, XNR, XxI, XxR, XtR, XeI, XhI) ==> + (evinj:mess3(XIDA, XNI, XNR, XxI, XxR, XtRp, XeI, XhI, XgR, XIDRp, XsaI, XKv) ==> + (evinj:mess2rec(XIDA, XNI, XNR, XxR, XgR, XtRp, XxI, XIDRp, XsaI) ==> + (evinj:mess2(XIDB, XNI, XNR, XxIp, XxR, XgR, XtR) ==> + evinj:mess1rec(XIDB, XNI, XxIp)) + &(evinj:mess1(XIDA, XNI, XxI, XinitA, XIDRp, XsaI) ==> + evinj:init(XinitA, XIDRp, XsaI)))))))). + + (* Note the presence of XtRp in events mess3 and mess2rec + and XxIp in events mess2 and mess1rec, instead of + XtR and XxI respectively *) + + define(`NOCACHE') + define(`HONESTEVENTS') +') + + +(* Secrecy *) + +ifdef(`SECRECY',` + (* Secrecy of the exchanged key Kv, from the point of view of I and R *) + private free secretI, secretR. + query attacker:secretI; + attacker:secretR. +') + +(* Identity protection. + The predicate member: must be removed, because it is not supported + for observational equivalence proofs. So we use a version without cache. + Only compliant principals are allowed to connect to R. *) + +ifdef(`IDRSECRACT',` + (* Identity protection for R against active adversaries *) + private free kRminus0, kRminus3, kRminus1, kRminus2. + noninterf kRminus0 among (kRminus1, kRminus2), + kRminus3 among (kRminus1, kRminus2). + not kRminus1. + not kRminus2. + define(`NOCACHE') +') +ifdef(`IDSECR',` + (* Identity protection for both R and I against passive adversaries *) + private fun honest/1. + reduc ishonest(Pk(honest(x))) = true. + + private free hRminus0, hRminus3, hIminus0, hIminus3, + hminus1, hminus2, hminus3, hminus4. + noninterf hRminus0 among (hminus1, hminus2, hminus3, hminus4), + hRminus3 among (hminus1, hminus2, hminus3, hminus4), + hIminus0 among (hminus1, hminus2, hminus3, hminus4), + hIminus3 among (hminus1, hminus2, hminus3, hminus4). + not hminus1. + not hminus2. + not hminus3. + not hminus4. + not honest(hminus1). + not honest(hminus2). + not honest(hminus3). + not honest(hminus4). + not hAminus. + not honest(hAminus). + define(`NOCACHE') +') + +(* Secrecy assumptions *) + +ifdef(`IDSECR',, +not kAminus phase 0. +) +not d. +ifdef(`NOCACHE',, +not f. +) + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI = + ! + in(exponent, (dI, xI)); + ! + in(init, (IDRp, saI)); (* Init message *) + event init(init, IDRp, saI); + new NI; + event mess1(IDA, NI, xI, init, IDRp, saI); + out(c, cons1(NI, xI)); + in(c, cons2(=NI, NR, xR, grpinfoR, tR)); + event mess2rec(IDA, NI, NR, xR, grpinfoR, tR, xI, IDRp, saI); + event enddosi(IDA, NI); + let h = exp(xR, dI) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, grpinfoR)) in + let eI = E(Ke, (IDA, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + event mess3(IDA, NI, NR, xI, xR, tR, eI, hI, grpinfoR, IDRp, saI, Kv); + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (IDRl, saR, sR) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR)) = true then + event mess4rec(IDA, eR, hR, connect, IDRl, IDRp, saI, saR, Kv); + event connect(connect, IDRl, IDRp, saI, saR, Kv); + out(connect, (IDRl, IDRp, saI, saR, Kv)); + ( +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDRl); + event connecthonest(connect, IDRl, IDRp, saI, saR, Kv) + ) + | +) + ( +ifdef(`SECRECY', + in(honestC, =IDRl); + out(c, E(Kv, secretI)); +) + 0 + ) + ). + +(* Responder + The process processR corresponds to R^A in the figure. *) + +ifdef(`NOCACHE',` + +let processR = + new KR; + ! + in(exponent, (dR, xR)); + ! + in(c, cons1(NI, xI)); + event mess1rec(IDA, NI, xI); + new NR; + new tR; + event mess2(IDA, NI, NR, xI, xR, grpinfoR, tR); + out(c, cons2(NI, NR, xR, grpinfoR, tR)); + new l; + ( + ( + ! + in(c, cons3(=NI,=NR,xI,=xR,=tR,eI,hI)); + out(l, (xI,eI,hI)) + ) + | + ( + in(l, (xI,eI,hI)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + processR4 + ) + ). + +',` + +let processR = + new KR; + ( + ( + ! + in(exponent, (dR, xR)); + (* R_1^A *) + ! + in(c, cons1(NI, xI)); + event mess1rec(IDA, NI, xI); + new NR; + let tR = H(KR, (xR, NR, NI)) in + event mess2(IDA, NI, NR, xI, xR, grpinfoR, tR); + out(c, cons2(NI, NR, xR, grpinfoR, tR)) + ) + | + (* R_3^A *) + new f; + ( + out(f, emptyset) + | + ( + ! + in(c, cons3(NI,NR,xI,xR,tR,eI,hI)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + if tR = H(KR, (xR, NR, NI)) then + in(f, cache); + ( + out(f, consset(tR, cache)) + | + if member:tR,cache then 0 else + new l; + ( + ( + ! + in(exponent, (dR, =xR)); + out(l, dR) + ) + | + ( + in(l, dR); + processR4 + ) + ) + ) + ) + ) + ). + +') + +let processR4 = + event enddosr(IDA, NI, NR); + let h = exp(xI,dR) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + if H(Ka, (constI, eI)) = hI then + let (IDIl, IDRp, saI, sI) = D(Ke,eI) in +ifdef(`IDSECR', + if ishonest(IDIl) = true then +, +ifdef(`IDRSECRACT', + (* Only honest hosts are allowed to connect to R in this case *) + in(honestC, =IDIl); +,`` + if member:IDIl,SIA then +'')) + if V(sI, IDIl, (NI, NR, xI, xR, grpinfoR)) = true then + event accept(accept, IDIl, IDRp, saI, saR, Kv); + out(accept, (IDIl, IDRp, saI, saR, Kv)); + ( +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDIl); + event accepthonest(accept, IDIl, IDRp, saI, saR, Kv) + ) + | +) + ( + let sR = S(kAminus, (NI, NR, xI, xR)) in + let eR = E(Ke, (IDA, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + event mess4(IDA, IDIl, eR, hR, NI, NR, xI, xR, tR, eI, hI); + out(c, cons4(eR, hR)); +ifdef(`SECRECY', + in(honestC, =IDIl); + out(c, E(Kv, secretR)); +) + 0 + ) + ). + + +(* Whole JFK system. *) + +ifdef(`IDRSECRACT', +(* Version for identity protection with active adversaries *) + +process + new exponent; + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new initI; (* private channel used to launch principals playing role I *) + new initR; (* private channel used to launch principals playing role R *) + new honestC; (* private channel used to simulate the set C of honest principals *) + let IDR1 = Pk(kRminus1) in + let IDR2 = Pk(kRminus2) in + out(pub, IDR1); + out(pub, IDR2); + ( + ( ! out(honestC, IDR1) ) + | + ( ! out(honestC, IDR2) ) + | + ( + (* Create principal playing role R, with secret key kRminus0 *) + in(channelSIAR1, SIA0); + let IDR0 = Pk(kRminus0) in + new accept0; + ( + (! in(accept0, x)) + | out(initR, (kRminus0, IDR0, accept0, SIA0)) + ) + ) + | + ( + (* Create principal playing role R, with secret key kRminus3 *) + in(channelSIAR2, SIA3); + let IDR3 = Pk(kRminus3) in + new accept3; + ( + (! in(accept3, x)) + | out(initR, (kRminus3, IDR3, accept3, SIA3)) + ) + ) + | + ( + ! + new kAminus; + let IDA = Pk(kAminus) in + new connect; new accept; new init; new channelSIA; + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA); + ( + (! in(accept, x)) + | (! in(connect, x)) + | (! out(honestC, IDA)) + | out(initI, (kAminus, IDA, init, connect)) + | out(initR, (kAminus, IDA, accept, SIA)) + ) + ) + | + (! in(initI, (kAminus, IDA, init, connect)); processI) + | + (! in(initR, (kAminus, IDA, accept, SIA)); processR) + ) + + +, +ifdef(`IDSECR', +(* Version for identity protection with passive adversaries *) + +process + new exponent; + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new initI; (* private channel used to launch principals playing role I *) + new initR; (* private channel used to launch principals playing role R *) + let kminus1 = honest(hminus1) in + let ID1 = Pk(kminus1) in + let kminus2 = honest(hminus2) in + let ID2 = Pk(kminus2) in + out(pub, ID1); + out(pub, ID2); + ( + ( + (* Create principal playing role R, with secret key kRminus0 *) + in(channelSIAR1, SIA0); + let kRminus0 = honest(hRminus0) in + let IDR0 = Pk(kRminus0) in + new accept0; + ( + (! in(accept0, x)) + | out(initR, (kRminus0, IDR0, accept0, SIA0)) + ) + ) + | + ( + (* Create principal playing role R, with secret key kRminus3 *) + in(channelSIAR2, SIA3); + let kRminus3 = honest(hRminus3) in + let IDR3 = Pk(kRminus3) in + new accept3; + ( + (! in(accept3, x)) + | out(initR, (kRminus3, IDR3, accept3, SIA3)) + ) + ) + | + ( + (* Create principal playing role I, with secret key kIminus0 *) + let kIminus0 = honest(hIminus0) in + let IDI0 = Pk(kIminus0) in + new connect0; new init0; + out(pub, init0); + ( + (! in(connect0, x)) + | out(initI, (kIminus0, IDI0, init0, connect0)) + ) + ) + | + ( + (* Create principal playing role I, with secret key kIminus3 *) + let kIminus3 = honest(hIminus3) in + let IDI3 = Pk(kIminus3) in + new connect3; new init3; + out(pub, init3); + ( + (! in(connect3, x)) + | out(initI, (kIminus3, IDI3, init3, connect3)) + ) + ) + | + ( + ! + new hAminus; + let kAminus = honest(hAminus) in + let IDA = Pk(kAminus) in + new connect; new accept; new init; new channelSIA; + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA); + ( + (! in(accept, x)) + | (! in(connect, x)) + | out(initI, (kAminus, IDA, init, connect)) + | out(initR, (kAminus, IDA, accept, SIA)) + ) + ) + | + ( + new c; (* c is now private: passive attacker, can listen but not + send on c *) + ( + (!in(c,x); out(pub,x); out(c,x)) + | (! in(initI, (kAminus, IDA, init, connect)); processI) + | (! in(initR, (kAminus, IDA, accept, SIA)); processR) + ) + ) + ) + +, +(* Standard version of the process *) + +process + + new exponent; + new honestC; (* private channel used to simulate the set C of honest principals *) + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + ! + new kAminus; + let IDA = Pk(kAminus) in + new connect; new accept; new init; new channelSIA; +ifdef(`SECRECY', + (* Do not give accept and connect to the adversary when proving secrecy of Kv: + These messages contain Kv! Instead, input on these channels here. *) + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + ( phase 1; out(pub, kAminus) ) + | (! in(accept, x)) + | (! in(connect, x)) + | (! out(honestC, IDA) ) (* IDA is in C *) + | processI + | processR + ) +, + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + (! out(honestC, IDA) ) (* IDA is in C *) + | processI + | processR + ) +) + +)) diff --git a/preinstallTTool/linux/proverif/examples/pi/jfk/JFKr-coresec b/preinstallTTool/linux/proverif/examples/pi/jfk/JFKr-coresec new file mode 100644 index 0000000000000000000000000000000000000000..c7296d9e7cbea282c8b5f05c1634fbfa363fd689 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/jfk/JFKr-coresec @@ -0,0 +1,228 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +(* Exponential and Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S/2. +fun Pk/1. +data true/0. +reduc V(S(k,v), Pk(k),v) = true. +reduc RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +reduc RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E/2. +reduc D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H/2. + +(* Sets + +data consset/2. +data emptyset/0. +pred member/2. +clauses + member:x,consset(x,y); + member:x,y -> member:x,consset(z,y). +*) + +(* Tags *) + +data tagE/0. data tagA/0. data tagV/0. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +data cons1/2. data cons2/5. data cons3/7. data cons4/2. + +(* More constants *) + +data constI/0. data constR/0. data saR/0. + +(* Free names *) + +free c. (* Public channel *) +free pub, genprinc, getexponential, grpinfoR, init0, getprinc0. + +(* Secrecy assumptions *) + +not kAminus phase 0. +not d. + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI = + ! + in(exponent, (dI, xI)); + ! + in(init, dummy); (* Init message *) + new NI; + out(c, cons1(NI, xI)); + in(c, cons2(=NI, NR, xR, grpinfoR, tR)); + let h = exp(xR, dI) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, grpinfoR)) in + out(getI, (dummy, NI, NR, xI, xR, tR, Ka, Ke, Kv, sI)). + +(* Responder + The process processR corresponds to R^A in the figure. *) + +let processR = + ! + in(exponent, (dR, xR)); + ! + in(c, cons1(NI, xI)); + new NR; + new tR; + out(c, cons2(NI, NR, xR, grpinfoR, tR)); + new l; + ( + ( + ! + in(c, cons3(=NI,=NR,xI,=xR,=tR,eI,hI)); + out(l, (xI,eI,hI)) + ) + | + ( + in(l, (xI,eI,hI)); + processR4 + ) + ). + +let processR4 = + out(d0, (NR, IDA)) | + let h = exp(xI,dR) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sR = S(kAminus, (NI, NR, xI, xR)) in + out(getR, (NI, NR, xI, xR, tR, eI, hI, Ka, Ke, Kv, sR)). + +(* Whole JFK system. *) + +process + new exponent; + new cp; + new ids; + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + ( + ! + new kAminus; + let IDA = Pk(kAminus) in + new init; new getI; new getR; + out(getprinc0, (IDA, getI, getR, init)); + ( processI | processR | (!out(cp, IDA)) | (!out(ids, (kAminus, IDA)))) + ) + | + ( + in(ids, (kAIminus, IDAI)); + in(ids, (kARminus, IDAR)); + in(exponent, (dI,xI)); + in(exponent, (dR,xR)); (* with in(pub, (NR, xR)) instead, attack for xR = g, so h = exp(g, dI) = xI. *) + in(init0, (IDRp, saI,=IDAI,=IDAR,=xI,=xR)); + new NI; + new NR; (* we could use instead in(pub, NR); *) + new TR; + new NeI; new NhI; new NeR; new NhR; new NKv; + let h = exp(xR,dI) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sR = S(kARminus, (NI, NR, xI, xR)) in + let eR = E(Ke, (IDAR, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + let sI = S(kAIminus, (NI, NR, xI, xR, grpinfoR)) in + let eI = E(Ke, (IDAI, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + out(pub, (NI, NR, TR, + choice[eI, NeI], + choice[hI, NhI], + choice[eR, NeR], + choice[hR, NhR], + choice[Kv, NKv])) + ) + + + +(* Context: + +new getprinc0; +( + [] +| + ! + in(getprinc0, (IDA, getI, getR, init)); + new connect; new accept; new channelSIA; + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( processI2 | processR2 ) +) + +let processI2 = + ! + in(getI, ((IDRp, saI), NI, NR, xI, xR, tR, Ka, Ke, Kv, sI)); + let eI = E(Ke, (IDA, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (IDRl, saR, sR) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR)) = true then + out(connect, (IDRl, IDRp, saI, saR, Kv)). + +let processR2 = + ! + in(getR, (NI, NR, xI, xR, tR, eI, hI, Ka, Ke, Kv, sR)); + if H(Ka, (constI, eI)) = hI then + let (IDIl, IDRp, saI, sI) = D(Ke,eI) in + if member:IDIl,SIA then + if V(sI, IDIl, (NI, NR, xI, xR, grpinfoR)) = true then + out(accept, (IDIl, IDRp, saI, saR, Kv)); + let eR = E(Ke, (IDA, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + out(c, cons4(eR, hR)). + +By putting the above process inside the above context, we get the +full JFK script. (version without cache) + +*) diff --git a/preinstallTTool/linux/proverif/examples/pi/jfk/gen b/preinstallTTool/linux/proverif/examples/pi/jfk/gen new file mode 100755 index 0000000000000000000000000000000000000000..2599fedce92a07ceb3042dfc9b2e1027a673697d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/jfk/gen @@ -0,0 +1,57 @@ +#!/bin/sh + +if [ -x ../../../xtime ] +then + if [ .$1 = . ] + then + PROG=../../../xtime + else + PROG="../../../xtime -repeat 10 -o /dev/null" + fi +else + PROG= +fi + +ANALYZER=../../../proverif + +( +echo JFKr +for i in SECRECY EVCACHE EVNOCACHE IDRSECRACT IDSECR +do + +echo $i +m4 -D$i JFKr > prot-JFKr-$i +$PROG $ANALYZER -in pi prot-JFKr-$i > prot-JFKr-$i.result +egrep '(RESULT|goal reachable)' prot-JFKr-$i.result +grep system prot-JFKr-$i.result | grep user + +done + +echo +echo JFKi +for i in SECRECY EVCACHE EVNOCACHE IDISECR +do + +echo $i +m4 -D$i JFKi > prot-JFKi-$i +$PROG $ANALYZER -in pi prot-JFKi-$i > prot-JFKi-$i.result +egrep '(RESULT|goal reachable)' prot-JFKi-$i.result +grep system prot-JFKi-$i.result | grep user + +done + +echo +echo Proof of Lemma 9 + +$PROG $ANALYZER -in pi tokenlemma > tokenlemma.result +grep 'RESULT' tokenlemma.result +grep system tokenlemma.result | grep user + +echo +echo Proof of Lemma 10 + +$PROG $ANALYZER -in pi JFKr-coresec > JFKr-coresec.result +grep 'RESULT' JFKr-coresec.result +grep system JFKr-coresec.result | grep user + +) | tee results diff --git a/preinstallTTool/linux/proverif/examples/pi/jfk/tokenlemma b/preinstallTTool/linux/proverif/examples/pi/jfk/tokenlemma new file mode 100644 index 0000000000000000000000000000000000000000..08c764727077b31c3abb172140998d21597362e5 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/jfk/tokenlemma @@ -0,0 +1,45 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +(* Keyed hash function *) + +fun H/2. + +(* Free names *) + +free c. (* Public channel *) + +(* Queries: properties to prove *) + +process + new KR; + ! + in(c, V); + new N; + out(c, choice[N, H(KR, (N,V))]) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/basic1 b/preinstallTTool/linux/proverif/examples/pi/noninterf/basic1 new file mode 100644 index 0000000000000000000000000000000000000000..c47be6c01aedd38bd280b511bce887002b142189 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/basic1 @@ -0,0 +1,36 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +fun hash/1. + +free c. +private free x,n. + +noninterf x among (n, hash(n)). + +process + out(c, x) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/basic2 b/preinstallTTool/linux/proverif/examples/pi/noninterf/basic2 new file mode 100644 index 0000000000000000000000000000000000000000..5b33aaaea725cda3b7fff00462ea6bb981129a8d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/basic2 @@ -0,0 +1,36 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +fun hash/1. + +free c. +private free x,n,m. + +noninterf x among (n, hash(m)). + +process + out(c, (m, x)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/dh-fs b/preinstallTTool/linux/proverif/examples/pi/noninterf/dh-fs new file mode 100644 index 0000000000000000000000000000000000000000..4b34d52b5c572df1e6c5f21af465e504ad3281db --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/dh-fs @@ -0,0 +1,44 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Fails because cannot handle the equational theory + precisely enough. Use choice to prove this example successfully + (see examples/choice/dh-fs) +*) + +data g/0. +fun exp/2. + +equation exp(exp(g,x),y) = exp(exp(g,y),x). + +free c. +private free x,n,m,s. + +noninterf x among (exp(exp(g,m),n), exp(g,s)). + +process + out(c, (exp(g,m), exp(g,n), x)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/eqtest b/preinstallTTool/linux/proverif/examples/pi/noninterf/eqtest new file mode 100644 index 0000000000000000000000000000000000000000..a8198711b4ef816e8f0dc3e537ca8d9dfd5885e6 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/eqtest @@ -0,0 +1,48 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Shared-key cryptography *) + +fun encrypt/2. +fun decrypt/2. +equation decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun pair/2. +fun ispair/1. +fun true/1. +fun k/0. +equation ispair(pair(x,y)) = true(k). + +free c. + +private free secret. +noninterf secret. + +process new x1; new x2; + out(c, encrypt(pair(x1,x2), secret)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco-bug b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco-bug new file mode 100644 index 0000000000000000000000000000000000000000..9e0e87385a863a0c4bf516902cfe8e986e62798d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco-bug @@ -0,0 +1,85 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + Non-interference true. + Not a bug, because in fact no term { _ }_k will ever be sent on + the network! (Each process waits on such a term before sending its own) +*) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. + +private free secretA, secretB. +noninterf secretA, secretB. + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + in(c, m); + let s = sdecrypt(m,k) in + out(c, sencrypt(secretA, k)). + + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + in(c, m); + let s = sdecrypt(m,k) in + out(c, sencrypt(secretB, k)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco1 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco1 new file mode 100644 index 0000000000000000000000000000000000000000..fc58e346a32c039e9a7cdddeaa818b1057bd6f5d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco1 @@ -0,0 +1,86 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. + +private free secretA, secretB. +noninterf secretA, secretB. + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + ( + in(c, m); + let s = sdecrypt(m,k) in 0 + ) + | + out(c, sencrypt(secretA, k)). + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + ( + in(c, m); + let s = sdecrypt(m,k) in 0 + ) + | + out(c, sencrypt(secretB, k)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco2 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco2 new file mode 100644 index 0000000000000000000000000000000000000000..629fe14386a57db02b2f159e53384fad910c0968 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco2 @@ -0,0 +1,76 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. + +private free secretB. +noninterf secretB. + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + in(c, m); + let s = sdecrypt(m,k) in 0. + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + out(c, sencrypt(secretB, k)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco3 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco3 new file mode 100644 index 0000000000000000000000000000000000000000..8cd493a691bc3b71cc56a89649d0b953d7bb8302 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco3 @@ -0,0 +1,88 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Probabilistic Shared-key cryptography *) + +fun sencrypt/3. +reduc sdecrypt(sencrypt(x,y,r),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. + +private free secretA, secretB. +noninterf secretA, secretB. + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + ( + in(c, m); + let s = sdecrypt(m,k) in 0 + ) + | + new r; + out(c, sencrypt(secretA, k, r)). + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + ( + in(c, m); + let s = sdecrypt(m,k) in 0 + ) + | + new r; + out(c, sencrypt(secretB, k, r)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco4 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco4 new file mode 100644 index 0000000000000000000000000000000000000000..8862c125d0b38aeff1a17e77e06495243f041bfc --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco4 @@ -0,0 +1,93 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Probabilistic Shared-key cryptography *) + +fun sencrypt/3. +reduc sdecrypt(sencrypt(x,y,r),y) = x. + +data secrcst/0. + +(* Secrecy assumptions *) + +not skA. +not skB. + +data ok/0. +data error/0. +free n2. + +private free secretA1, secretA2, secretB. +noninterf secretA1 among (ok, n2), secretA2 among (error, n2). + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + in(c, m); + let (=secrcst, s) = sdecrypt(m,k) in + ( + new r2; + out(c, sencrypt(secretA1, k, r2)) (* secretA1 takes values "ok" or n2 *) + ) + else + ( + new r3; + out(c, sencrypt(secretA2, k, r3)) (* secretA2 takes values "error" or n2 *) + ). + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + new r; + out(c, sencrypt((secrcst, secretB), k, r)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco5 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco5 new file mode 100644 index 0000000000000000000000000000000000000000..da3a7ad6d75c59f61486329387addd9b154bad4a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco5 @@ -0,0 +1,89 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +data c1/0. +data c2/0. + +(* Secrecy assumptions *) + +not skA. +not skB. + +private free secretA, secretB. +noninterf secretA, secretB. + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + ( + in(c, m); + let s = sdecrypt(m,k) in 0 + ) + | + out(c, sencrypt((c1, secretA), k)). + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + ( + in(c, m); + let s = sdecrypt(m,k) in 0 + ) + | + out(c, sencrypt((c2, secretB), k)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco6 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco6 new file mode 100644 index 0000000000000000000000000000000000000000..ea6a66d1b40eea2d3bd2f427b1a298a6846ed084 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco6 @@ -0,0 +1,84 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Probabilistic Shared-key cryptography *) + +fun sencrypt/3. +reduc sdecrypt(sencrypt(x,y,r),y) = x. + +data secrcst/0. + +(* Secrecy assumptions *) + +not skA. +not skB. + +free n1. + +private free secretB, secretB1. +noninterf secretB1 among ((secrcst, secretB), n1). + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + in(c, m); + new r2; + new n2; + out(c, sencrypt(n2, k, r2)). + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + new r; + out(c, sencrypt(secretB1, k, r)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco7 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco7 new file mode 100644 index 0000000000000000000000000000000000000000..2a3065fe6ed040d254c062f694ba5b5bfcca4dfd --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco7 @@ -0,0 +1,92 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Deterministic Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +data secrcst/0. + +(* Secrecy assumptions *) + +not skA. +not skB. + +data ok/0. +data error/0. +free n2. +free n3. + +private free secretA1, secretA2, secretB. +noninterf secretA1 among (ok, n2), secretA2 among (error, n3). + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + in(c, m); + let (=secrcst, s) = sdecrypt(m,k) in + ( + out(c, sencrypt(secretA1, k)) (* secretA1 takes values "ok" or n2 *) + ) + else + ( + out(c, sencrypt(secretA2, k)) (* secretA2 takes values "error" or n3 *) + ). + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + new r; + out(c, sencrypt((secrcst, secretB), k)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco8 b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco8 new file mode 100644 index 0000000000000000000000000000000000000000..f42b55b51843c998ee6d9b8fd779d1c3a68a184c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pidenning-sacco8 @@ -0,0 +1,82 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Probabilistic public key cryptography *) + +fun pk/1. +fun encrypt/3. +reduc decrypt(encrypt(x,pk(y),r),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Deterministic Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +data secrcst/0. + +(* Secrecy assumptions *) + +not skA. +not skB. + +free n1. + +private free secretB, secretB1. +noninterf secretB1 among ((secrcst, secretB), n1). + +let processA = + in(c, pk2); + new k; new r; + out(c, (encrypt(sign((pkA, pk2, k), skA), pk2, r))); + if pk2 = pkB then + in(c, m); + new n2; + out(c, sencrypt(n2, k)). + +let processB = + in(c, km); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k) = checksign(ks, pkA) in + out(c, sencrypt(secretB1, k)). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/pineedham-corr-orig b/preinstallTTool/linux/proverif/examples/pi/noninterf/pineedham-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..f721d981694580b4bb12aa927015e2012c408c9a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/pineedham-corr-orig @@ -0,0 +1,125 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Host *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Signatures *) + +fun sign/2. +reduc checksign(sign(x,y),pk(y)) = x. +reduc getmess(sign(x,y)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretANa, secretANb, secretBNa, secretBNb. +noninterf secretANa, secretANb, secretBNa, secretBNb. +noninterf secretANa, secretANb. +noninterf secretBNa, secretBNb. + +let processA = + (* Choose the other host *) + in(c,hostX); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms); + let (pkX,=hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na; + out(c, encrypt((Na, hostA), pkX)); + in(c, m); + let (=Na, NX2, =hostX) = decrypt(m, skA) in + out(c, encrypt(NX2, pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB = + (* Message 1 *) + in(c, m); + let (NY, hostY) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms); + let (pkY,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3); + if Nb = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS = in(c,m); + let (a,b) = m in + let sb = getkey(b) in + out(c,sign((pk(sb),b),skS)). + +process new skA; let pkA = pk(skA) in + out(c, pkA); + new skB; let pkB = pk(skB) in + out(c, pkB); + new skS; let pkS = pk(skS) in + out(c, pkS); + let hostA = host(skA) in + out(c, hostA); + let hostB = host(skB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees b/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees new file mode 100644 index 0000000000000000000000000000000000000000..4d877fef6017488220456ac5ab305ce850666c8e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees @@ -0,0 +1,90 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +Correct +*) + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +free c. + +private free secretA, secretB. +noninterf secretA. +noninterf secretB. +noninterf secretA, secretB. + +let processA = in(c, hostB0); + new C; new Na; + out(c, (C, hostA, hostB0, encrypt((Na, C, hostA, hostB0), kA))); + in(c, (=C, m2)); + let (=Na, k) = decrypt(m2, kA) in + (* OK *) + if hostB0 = hostB then + out(c, encrypt(secretA, k)). + + +let processB = + in(c, (C1, hostA1, =hostB, m2)); + new Nb; + out(c, (C1, hostA1, hostB, m2, encrypt((Nb, C1, hostA1, hostB), kB))); + in(c, (=C1, m3, m4)); + let (=Nb, k) = decrypt(m4, kB) in + out(c, (C1, m3)); + (* OK *) + if hostA1 = hostA then + out(c, encrypt(secretB, k)). + + +let processS = in(c, (C1, hostA1, hostB1, m2, m3)); + let (Na1, =C1, =hostA1, =hostB1) = decrypt(m2, getkey(hostA1)) in + let (Nb1, =C1, =hostA1, =hostB1) = decrypt(m3, getkey(hostB1)) in + new k; + out(c, (C1, encrypt((Na1, k), getkey(hostA1)), + encrypt((Nb1, k), getkey(hostB1)))). + + +process new kA; new kB; + let hostA = host(kA) in + let hostB = host(kB) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees-key b/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees-key new file mode 100644 index 0000000000000000000000000000000000000000..2bc9b850896e0e9853677a1d77c44085af0a93cb --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees-key @@ -0,0 +1,86 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +Correct +*) + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +free c. + +private free secretkey. +noninterf secretkey. + +let processA = in(c, hostB0); + new C; new Na; + out(c, (C, hostA, hostB0, encrypt((Na, C, hostA, hostB0), kA))); + in(c, (=C, m2)); + let (=Na, k) = decrypt(m2, kA) in 0. + + +let processB = + in(c, (C1, hostA1, =hostB, m2)); + new Nb; + out(c, (C1, hostA1, hostB, m2, encrypt((Nb, C1, hostA1, hostB), kB))); + in(c, (=C1, m3, m4)); + let (=Nb, k) = decrypt(m4, kB) in + out(c, (C1, m3)). + + +let processS = in(c, (C1, hostA1, hostB1, m2, m3)); + let (Na1, =C1, =hostA1, =hostB1) = decrypt(m2, getkey(hostA1)) in + let (Nb1, =C1, =hostA1, =hostB1) = decrypt(m3, getkey(hostB1)) in + if (hostA1,hostB1) = (hostA,hostB) then + (let k2 = secretkey in + out(c, (C1, encrypt((Na1, k2), getkey(hostA1)), + encrypt((Nb1, k2), getkey(hostB1))))) + else + new k; + out(c, (C1, encrypt((Na1, k), getkey(hostA1)), + encrypt((Nb1, k), getkey(hostB1)))). + +process new kA; new kB; + let hostA = host(kA) in + let hostB = host(kB) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees-proba b/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees-proba new file mode 100644 index 0000000000000000000000000000000000000000..fce6d2a0dab374c049fdb8603c4b87c7b493d46a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/piotwayrees-proba @@ -0,0 +1,92 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +Correct +*) + +(* Shared-key cryptography *) + +fun encrypt/3. +reduc decrypt(encrypt(m,k,z),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +free c. + +private free secretA, secretB. +noninterf secretA, secretB. + +let processA = + in(c, hostB0); + new C; new Na; new randomenc1; + out(c, (C, hostA, hostB0, encrypt((Na, C, hostA, hostB0), kA, randomenc1))); + in(c, (=C, m2)); + let (=Na, k) = decrypt(m2, kA) in + (* OK *) + if hostB0 = hostB then + new randomenc2; + out(c, encrypt(secretA, k, randomenc2)). + + +let processB = + in(c, (C1, hostA1, =hostB, m2)); + new Nb; new randomenc3; + out(c, (C1, hostA1, hostB, m2, encrypt((Nb, C1, hostA1, hostB), kB, randomenc3))); + in(c, (=C1, m3, m4)); + let (=Nb, k) = decrypt(m4, kB) in + out(c, (C1, m3)); + (* OK *) + if hostA1 = hostA then + new randomenc4; + out(c, encrypt(secretB, k, randomenc4)). + + +let processS = + in(c, (C1, hostA1, hostB1, m2, m3)); + let (Na1, =C1, =hostA1, =hostB1) = decrypt(m2, getkey(hostA1)) in + let (Nb1, =C1, =hostA1, =hostB1) = decrypt(m3, getkey(hostB1)) in + new k; new randomenc5; new randomenc6; + out(c, (C1, encrypt((Na1, k), getkey(hostA1), randomenc5), + encrypt((Nb1, k), getkey(hostB1), randomenc6))). + + +process new kA; new kB; + let hostA = host(kA) in + let hostB = host(kB) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/piskeme b/preinstallTTool/linux/proverif/examples/pi/noninterf/piskeme new file mode 100644 index 0000000000000000000000000000000000000000..00c13bc2eb65f8d9e65b65209fe48c77212be431 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/piskeme @@ -0,0 +1,104 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* SKEME *) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) + +fun f/2. +fun g/1. +equation f(x,g(y)) = f(y,g(x)). + +(* Keyed hash function *) + +fun keyhash/2. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not x. +not y. + +private free secretA, secretB. +noninterf secretA, secretB. +noninterf secretA. +noninterf secretB. + +(* A *) + +let processA = in(c, pkX); + new x; new Ka; + out(c, (encrypt((pkA, Ka), pkX), g(x))); + in(c, (m1, m2, m3)); + let Kb = decrypt(m1, skA) in + let K0 = hash((Ka, Kb)) in + if m3 = keyhash((g(x), m2, pkX, pkA), K0) then + let sh = hash(f(x, m2)) in + out(c, keyhash((m2, g(x), pkA, pkX), K0)); + (* OK *) + if pkX = pkB then out(c, sencrypt(secretA, sh)). + +(* B *) + +let processB = in(c, (m1, m2)); + let (pkAr, Ka) = decrypt(m1, skB) in + new Kb; + let K0 = hash((Ka, Kb)) in + new y; + let sh = hash(f(y, m2)) in + out(c, (encrypt(Kb, pkAr), g(y), keyhash((m2, g(y), pkB, pkAr), K0))); + in(c, m3); + if m3 = keyhash((g(y), m2, pkAr, pkB), K0) then + (* OK *) + if pkAr = pkA then out(c, sencrypt(secretB, sh)). + + +process + +new skA; let pkA = pk(skA) in +out(c, pkA); +new skB; let pkB = pk(skB) in +out(c, pkB); +((!processA) | (!processB)) + diff --git a/preinstallTTool/linux/proverif/examples/pi/noninterf/piyahalom-orig b/preinstallTTool/linux/proverif/examples/pi/noninterf/piyahalom-orig new file mode 100644 index 0000000000000000000000000000000000000000..b7c32dab011a5e5b406cc4c4ab94a8856d795a09 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/noninterf/piyahalom-orig @@ -0,0 +1,90 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +free c. + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not kas. +not kbs. + +private free secretA, secretB. + +noninterf secretA, secretB. +noninterf secretA. +noninterf secretB. + +let processA = + new Na; + out(c, (host(kas), Na)); + in(c, (cert1, cert2)); + let (b, k, =Na, nb) = decrypt(cert1, kas) in + out(c, (cert2, encrypt(nb, k))); + (* OK *) + if b = host(kbs) then + out(c, encrypt(secretA, k)). + +let processB = + in(c, (a,na)); + new Nb; + out(c, (host(kbs), encrypt((a, na, Nb), kbs))); + in(c, (cert2, m)); + let (=a, k) = decrypt(cert2, kbs) in + if Nb = decrypt(m, k) then + (* OK *) + if a = host(kas) then + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h2, m)); + let k2 = getkey(h2) in + let (h1, n1, n2) = decrypt(m, k2) in + let k1 = getkey(h1) in + new k; + out(c, (encrypt((h2, k, n1, n2), k1), encrypt((h1, k), k2))). + + +process new kas; new kbs; + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/diffie-hellman-active b/preinstallTTool/linux/proverif/examples/pi/secr-auth/diffie-hellman-active new file mode 100644 index 0000000000000000000000000000000000000000..8dd418dde71159094b72379a1abaaa00d99699e2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/diffie-hellman-active @@ -0,0 +1,87 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Signed Diffie-Hellman + A -> B : { e^n0 }skA, pkA (n0 fresh) + B -> A : { e^n1 }skB (n1 fresh) + A and B compute the key as k = (e^n0)^n1 = (e^n1)^n0 + A -> B : { s }k + + *) + +free c. +private free s. + +(* Signatures *) + +fun sign/2. +fun pk/1. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Shared key cryptography *) + +fun enc/2. +reduc dec(enc(x,y),y) = x. + +(* Diffie-Hellman functions *) + +fun f/2. +fun g/1. +equation f(x,g(y)) = f(y,g(x)). + +(* Test whether s is secret *) + +query attacker:s. + +(* The process *) + +let p0 = in(c, pkX); + new n0; + out(c,(sign(g(n0), skA), pkA)); + in(c,m1); + let x1 = checksign(m1, pkX) in + let k = f(n0,x1) in + if pkX = pkB then + out(c, enc(s,k)). + +let p1 = in(c, (m0, pkY)); + let x0 = checksign(m0, pkY) in + new n1; + let k = f(n1,x0) in + out(c,sign(g(n1), skB)); + in (c,m); + let s2 = dec(m,k) in 0. + +process + new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + ((!p0) | (!p1)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/diffie-hellman-passive b/preinstallTTool/linux/proverif/examples/pi/secr-auth/diffie-hellman-passive new file mode 100644 index 0000000000000000000000000000000000000000..91003a852bb13fda420b38b4b4ab8a4026b20a8c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/diffie-hellman-passive @@ -0,0 +1,68 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Diffie-Hellman without signatures + Only resists passive attacks + A -> B : e^n0 + B -> A : e^n1 + A and B compute the key as k = (e^n0)^n1 = (e^n1)^n0 + A -> B : {s}k +*) + +free c. +private free s. + +(* Passive adversary *) +param attacker = passive. + +(* Shared key cryptography *) + +fun enc/2. +reduc dec(enc(x,y),y) = x. + +(* Diffie-Hellman functions *) + +fun f/2. +fun g/1. +equation f(x,g(y)) = f(y,g(x)). + +(* Test whether s is secret *) + +query attacker:s. + +(* The process *) + +let p0 = new n0; + (out(c,g(n0)) | in(c,x1); let k = f(n0,x1) in out(c, enc(s,k))). + +let p1 = new n1; + (out(c,g(n1)) | in(c,x0); + let k = f(n1,x0) in + in (c,m); + let s2 = dec(m,k) in 0). + +process p0 | p1 diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/jfktest b/preinstallTTool/linux/proverif/examples/pi/secr-auth/jfktest new file mode 100644 index 0000000000000000000000000000000000000000..f99e0fe6b14fab25b60f85309ef4b316f1b65bbe --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/jfktest @@ -0,0 +1,224 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +param redundantHypElim = true. + +(* Exponential and Diffie-Hellman *) + +data g/0. +fun exp/2. +equation exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S/2. +fun Pk/1. +data true/0. +fun V/3. +fun RecoverKey/1. +fun RecoverText/1. +equation V(S(k,v), Pk(k),v) = true. +equation RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +equation RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E/2. +fun D/2. +equation D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H/2. + +(* Sets *) + +data consset/2. +data emptyset/0. +pred member/2. +clauses + member:x,consset(x,y); + member:x,y -> member:x,consset(z,y). + +(* Tags *) + +data tagE/0. data tagA/0. data tagV/0. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +data cons1/2. data cons2/5. data cons3/7. data cons4/2. + +(* More constants *) + +data constI/0. data constR/0. data saR/0. + +(* Free names *) + +free c. (* Public channel *) +free pub, getprinc, getexponential, grpinfoR. + +(* Queries: properties to prove *) + +(* Correspondence assertions *) + + query ev:princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA) ==> + XkAminus = kAminus[!1 = sid] + & XIDA = Pk(XkAminus) + & XinitA = init[!1 = sid]. + + query ev:princ(kAminus, Pk(kAminus), XinitA, XacceptA, XconnectA, XSIA). + + query let XkAminus = kAminus; + ev:princ(XkAminus, Pk(XkAminus), XinitA, XacceptA, XconnectA, XSIA). + +not kAminus phase 0. +not d. +not f. + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI = + ! + in(exponent, (dI, xI)); + ! + in(init, (IDRp, saI)); (* Init message *) + event init(init, IDRp, saI); + new NI; + event mess1(IDA, NI, xI, init, IDRp, saI); + event begindosi(NI); + out(c, cons1(NI, xI)); + in(c, cons2(=NI, NR, xR, grpinfoR, tR)); + event enddosi(NI); + let h = exp(xR, dI) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, grpinfoR)) in + let eI = E(Ke, (IDA, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + event mess3(IDA, NI, NR, xI, xR, tR, eI, hI, grpinfoR, IDRp, saI, Kv); + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (IDRl, saR, sR) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR)) = true then + event mess4rec(IDA, eR, hR); + ( + ( + event connect(connect, IDRl, IDRp, saI, saR, Kv); + out(connect, (IDRl, IDRp, saI, saR, Kv)); + 0 + ) + ). + +(* Responder + The process processR corresponds to R^A in the figure. *) + +let processR = + new KR; + ! + in(exponent, (dR, xR)); + ( + ( + ! + in(c, cons1(NI, xI)); + new NR; + let tR = H(KR, (xR, NR, NI)) in + event begindosr(NI, NR); + event mess2(IDA, NI, xI, NR, xR, grpinfoR, tR); + out(c, cons2(NI, NR, xR, grpinfoR, tR)) + ) + | + new f; + ( + out(f, emptyset) + | + ( + ! + in(c, cons3(NI,NR,xI,xR,tR,eI,hI)); + if tR = H(KR, (xR, NR, NI)) then + in(f, cache); + ( + out(f, consset(tR, cache)) + | + if member:tR,cache then 0 else processR4 + ) + ) + ) + ). + +let processR4 = + event enddosr(NI, NR); + let h = exp(xI,dR) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + if H(Ka, (constI, eI)) = hI then + let (IDIl, IDRp, saI, sI) = D(Ke,eI) in + if member:IDIl,SIA then + if V(sI, IDIl, (NI, NR, xI, xR, grpinfoR)) = true then + ( + ( + event accept(accept, IDIl, IDRp, saI, saR, Kv); + out(accept, (IDIl, IDRp, saI, saR, Kv)); + let sR = S(kAminus, (NI, NR, xI, xR)) in + let eR = E(Ke, (IDA, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + event mess4(IDA, IDIl, eR, hR, NI, NR, xI, xR, tR, eI, hI); + out(c, cons4(eR, hR)); + 0 + ) + ). + + +(* Whole JFK system. *) + +(* Standard version of the process *) + +process + + new exponent; + ( ! new d; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new honestC; (* private channel used to simulate the set C of honest principals *) + ! + new kAminus; + let IDA = Pk(kAminus) in + new connect; new accept; new init; new channelSIA; + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + ( ! out(honestC, IDA) ) (* IDA is in C *) + | ( ! processI ) + | ( ! processR ) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-corr-orig b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..984254d85e463af783d63a1b6f26b7e0c27947b2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-corr-orig @@ -0,0 +1,109 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Host name / key + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + in(c, (cert1, cert2)); + let (=hostA, =pkA) = checksign(cert1, pkS) in + let (h2, pk2) = checksign(cert2, pkS) in + event beginBparam(hostA, h2); + new k; + event beginBkey(hostA, h2, k); + out(c, (cert1, cert2, encrypt(sign((hostA, h2, k), skA), pk2))); + if h2 = hostB then + out(c, sencrypt(secretA, k)). + +let processB = + in(c, (cert1, cert2, km)); + let (h1, pk1) = checksign(cert1, pkS) in + let (=hostB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let (=h1, =hostB, k) = checksign(ks, pk1) in + if h1 = hostA then + event endBparam(h1, hostB); + event endBkey(h1, hostB, k); + out(c, sencrypt(secretB, k)). + +let processS = + in(c, (h1,h2)); + let s1 = getkey(h1) in + let s2 = getkey(h2) in + out(c, (sign((h1, s1), skS), sign((h2, s2), skS))). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + new skS; + let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-orig b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-orig new file mode 100644 index 0000000000000000000000000000000000000000..3befa021823a722fc4167b1fae589c96da0e80a8 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-orig @@ -0,0 +1,110 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Host name / key + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + in(c, (cert1, cert2)); + let (=hostA, =pkA) = checksign(cert1, pkS) in + let (h2, pk2) = checksign(cert2, pkS) in + event beginBparam(hostA, h2); + new k; + event beginBkey(hostA, h2, k); + out(c, (cert1, cert2, encrypt(sign(k, skA), pk2))); + if h2 = hostB then + out(c, sencrypt(secretA, k)). + +let processB = + in(c, (cert1, cert2, km)); + let (h1, pk1) = checksign(cert1, pkS) in + let (=hostB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let k = checksign(ks, pk1) in + if h1 = hostA then + event endBparam(h1, hostB); + event endBkey(h1, hostB, k); + out(c, sencrypt(secretB, k)). + +let processS = + in(c, (h1,h2)); + let s1 = getkey(h1) in + let s2 = getkey(h2) in + out(c, (sign((h1, s1), skS), sign((h2, s2), skS))). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + new skS; + let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-orig-tagged b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-orig-tagged new file mode 100644 index 0000000000000000000000000000000000000000..11fd47597c0e364140b0eac57a8fc93b067588b4 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-orig-tagged @@ -0,0 +1,114 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Host name / key + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +data c0/0. +data c1/0. +data c2/0. +data c3/0. + +let processA = + in(c, (cert1, cert2)); + let (=c0, =hostA, =pkA) = checksign(cert1, pkS) in + let (=c1, h2, pk2) = checksign(cert2, pkS) in + event beginBparam(hostA, h2); + new k; + event beginBkey(hostA, h2, k); + out(c, (cert1, cert2, encrypt((c2, sign((c3, k), skA)), pk2))); + if h2 = hostB then + out(c, sencrypt(secretA, k)). + +let processB = + in(c, (cert1, cert2, km)); + let (=c0, h1, pk1) = checksign(cert1, pkS) in + let (=c1, =hostB, =pkB) = checksign(cert2, pkS) in + let (=c2, ks) = decrypt(km,skB) in + let (=c3, k) = checksign(ks, pk1) in + if h1 = hostA then + event endBparam(h1, hostB); + event endBkey(h1, hostB, k); + out(c, sencrypt(secretB, k)). + +let processS = + in(c, (h1,h2)); + let s1 = getkey(h1) in + let s2 = getkey(h2) in + out(c, (sign((c0, h1, s1), skS), sign((c1, h2, s2), skS))). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + new skS; + let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-test b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-test new file mode 100644 index 0000000000000000000000000000000000000000..9b75e5e77899e697efed0750e811236496223657 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pidenning-sacco-test @@ -0,0 +1,110 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco *) + +free c. + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Host name / key + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretB. +query attacker:secretA[h2 = host(pk(skB))]. +query attacker:secretA[cert2 = sign((host(pk(skB)), x), skS)]; + attacker:secretB. +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + in(c, (cert1, cert2)); + let (=hostA, =pkA) = checksign(cert1, pkS) in + let (h2, pk2) = checksign(cert2, pkS) in + event beginBparam(hostA, h2); + new k; + event beginBkey(hostA, h2, k); + out(c, (cert1, cert2, encrypt(sign((hostA, h2, k), skA), pk2))); + new secretA; + out(c, sencrypt(secretA, k)). + +let processB = + in(c, (cert1, cert2, km)); + let (h1, pk1) = checksign(cert1, pkS) in + let (=hostB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let (=h1, =hostB, k) = checksign(ks, pk1) in + if h1 = hostA then + event endBparam(h1, hostB); + event endBkey(h1, hostB, k); + out(c, sencrypt(secretB, k)). + +let processS = + in(c, (h1,h2)); + let s1 = getkey(h1) in + let s2 = getkey(h2) in + out(c, (sign((h1, s1), skS), sign((h2, s2), skS))). + +process new skA; + let pkA = pk(skA) in + out(c, pkA); + new skB; + let pkB = pk(skB) in + out(c, pkB); + new skS; + let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-corr-orig b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-corr-orig new file mode 100644 index 0000000000000000000000000000000000000000..63204b11d364a0e56d14354e20cb9ed6a2bda554 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-corr-orig @@ -0,0 +1,151 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +Needham-Schroeder public key protocol +Corrected version by Lowe + + ? -> A : pkB +Message 1: A -> S : (A, B) +Message 2: S -> A : { B, pkB }_skS +Message 3: A -> B : { N_A, A }_pkB +Message 4: B -> S : (B, A) +Message 5: S -> B : { A, pkA }_skS +Message 6: B -> A : { N_A, N_B, B }_pkA +Message 7: A -> B : { N_B }_pkB + +The heart of the protocol is messages 3, 6, 7. + +*) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Host names + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Signatures *) + +fun sign/2. +reduc checksign(sign(x,y),pk(y)) = x. +reduc getmess(sign(x,y)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretANa, secretANb, secretBNa, secretBNb. +query attacker:secretANa; + attacker:secretANb; + attacker:secretBNa; + attacker:secretBNb. +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x1,x2,x3,x4,x5,x6) ==> evinj:beginBfull(x1,x2,x3,x4,x5,x6). +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endAfull(x1,x2,x3,x4,x5,x6) ==> evinj:beginAfull(x1,x2,x3,x4,x5,x6). + +let processA = + (* Choose the other host *) + in(c,hostX); + event beginBparam(hostX); + (* Message 1: Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + (* Message 2 *) + in(c, ms); + let (pkX,=hostX) = checksign(ms,pkS) in + (* Message 3 *) + new Na; + out(c, encrypt((Na, hostA), pkX)); + (* Message 6 *) + in(c, m); + let (=Na, NX2, =hostX) = decrypt(m, skA) in + event beginBfull(Na, hostA, hostX, pkX, pkA, NX2); + (* Message 7 *) + out(c, encrypt(NX2, pkX)); + (* OK *) + if hostX = hostB then + event endAparam(hostA); + event endAfull(Na, hostA, hostX, pkX, pkA, NX2); + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB = + (* Message 3 *) + in(c, m); + let (NY, hostY) = decrypt(m, skB) in + event beginAparam(hostY); + (* Message 4: Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + (* Message 5 *) + in(c,ms); + let (pkY,=hostY) = checksign(ms,pkS) in + (* Message 6 *) + new Nb; + event beginAfull(NY, hostY, hostB, pkB, pkY, Nb); + out(c, encrypt((NY, Nb, hostB), pkY)); + (* Message 7 *) + in(c, m3); + if Nb = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + event endBparam(hostB); + event endBfull(NY, hostY, hostB, pkB, pkA, Nb); + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS = in(c,m); + let (a,b) = m in + let sb = getkey(b) in + out(c,sign((sb,b),skS)). + +process new skA; let pkA = pk(skA) in + out(c, pkA); + new skB; let pkB = pk(skB) in + out(c, pkB); + new skS; let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-orig b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-orig new file mode 100644 index 0000000000000000000000000000000000000000..2ce7bf57c638e87c350f6d94cd0d203eb0693249 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-orig @@ -0,0 +1,149 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +Needham-Schroeder public key protocol + +Message 1: A -> S : (A, B) +Message 2: S -> A : { pkB, B }skS +Message 3: A -> B : { Na, A }pkB +Message 4: B -> S : (B, A) +Message 5: S -> B : { pkA, A }skS +Message 6: B -> A : { Na, Nb }pkA +Message 7: A -> B : { Nb }pkB + +The heart of the protocol is messages 3, 6, 7. + +*) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Host names + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Signatures *) + +fun sign/2. +reduc checksign(sign(x,y),pk(y)) = x. +reduc getmess(sign(x,y)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretANa, secretANb, secretBNa, secretBNb. +query attacker:secretANa; + attacker:secretANb; + attacker:secretBNa; + attacker:secretBNb. +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x1,x2,x3,x4,x5,x6) ==> evinj:beginBfull(x1,x2,x3,x4,x5,x6). +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endAfull(x1,x2,x3,x4,x5,x6) ==> evinj:beginAfull(x1,x2,x3,x4,x5,x6). + +let processA = + (* Choose the other host *) + in(c,hostX); + event beginBparam(hostX); + (* Message 1: Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + (* Message 2 *) + in(c, ms); + let (pkX,=hostX) = checksign(ms,pkS) in + (* Message 3 *) + new Na; + out(c, encrypt((Na, hostA), pkX)); + (* Message 6 *) + in(c, m); + let (=Na, NX2) = decrypt(m, skA) in + event beginBfull(Na, hostA, hostX, pkX, pkA, NX2); + (* Message 7 *) + out(c, encrypt(NX2, pkX)); + (* OK *) + if hostX = hostB then + event endAparam(hostA); + event endAfull(Na, hostA, hostX, pkX, pkA, NX2); + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB = + (* Message 3 *) + in(c, m); + let (NY, hostY) = decrypt(m, skB) in + event beginAparam(hostY); + (* Message 4: Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + (* Message 5 *) + in(c,ms); + let (pkY,=hostY) = checksign(ms,pkS) in + (* Message 6 *) + new Nb; + event beginAfull(NY, hostY, hostB, pkB, pkY, Nb); + out(c, encrypt((NY, Nb), pkY)); + (* Message 7 *) + in(c, m3); + if Nb = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + event endBparam(hostB); + event endBfull(NY, hostY, hostB, pkB, pkA, Nb); + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS = in(c,m); + let (a,b) = m in + let sb = getkey(b) in + out(c,sign((sb,b),skS)). + +process new skA; let pkA = pk(skA) in + out(c, pkA); + new skB; let pkB = pk(skB) in + out(c, pkB); + new skS; let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-orig-tagged b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-orig-tagged new file mode 100644 index 0000000000000000000000000000000000000000..6821f466ae2ba4b589b3b1e47a4b013c52aec2bf --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-orig-tagged @@ -0,0 +1,144 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +Message 1: A -> B : { Na, A }pkB +Message 2: B -> A : { Na, Nb }pkA +Message 3: A -> B : { Nb }pkB + +*) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Host names + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Signatures *) + +fun sign/2. +reduc checksign(sign(x,y),pk(y)) = x. +reduc getmess(sign(x,y)) = x. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +private free secretANa, secretANb, secretBNa, secretBNb. +query attacker:secretANa; + attacker:secretANb; + attacker:secretBNa; + attacker:secretBNb. +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x1,x2,x3,x4,x5,x6) ==> evinj:beginBfull(x1,x2,x3,x4,x5,x6). +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endAfull(x1,x2,x3,x4,x5,x6) ==> evinj:beginAfull(x1,x2,x3,x4,x5,x6). + +data c0/0. +data c1/0. +data c2/0. +data c3/0. + +let processA = + (* Choose the other host *) + in(c,hostX); + event beginBparam(hostX); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms); + let (=c0,pkX,=hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na; + out(c, encrypt((c1, Na, hostA), pkX)); + (* Message 2 *) + in(c, m); + let (=c2, =Na, NX2) = decrypt(m, skA) in + event beginBfull(Na, hostA, hostX, pkX, pkA, NX2); + (* Message 3 *) + out(c, encrypt((c3, NX2), pkX)); + (* OK *) + if hostX = hostB then + event endAparam(hostA); + event endAfull(Na, hostA, hostX, pkX, pkA, NX2); + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB = + (* Message 1 *) + in(c, m); + let (=c1, NY, hostY) = decrypt(m, skB) in + event beginAparam(hostY); + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms); + let (=c0,pkY,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb; + event beginAfull(NY, hostY, hostB, pkB, pkY, Nb); + (* Message 3 *) + out(c, encrypt((c2, NY, Nb), pkY)); + in(c, m3); + if (c3, Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + event endBparam(hostB); + event endBfull(NY, hostY, hostB, pkB, pkA, Nb); + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS = in(c,m); + let (a,b) = m in + let sb = getkey(b) in + out(c,sign((c0, sb, b),skS)). + +process new skA; let pkA = pk(skA) in + out(c, pkA); + new skB; let pkB = pk(skB) in + out(c, pkB); + new skS; let pkS = pk(skS) in + out(c, pkS); + let hostA = host(pkA) in + out(c, hostA); + let hostB = host(pkB) in + out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4 b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4 new file mode 100644 index 0000000000000000000000000000000000000000..1c60610e84ddaf88c63ed230cd010b828e1c0c49 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4 @@ -0,0 +1,111 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham-Schroeder shared key corrected *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +(* Secrecy assumptions *) + +not Kas. +not Kbs. + +query attacker:secretA[]; + attacker:secretB[]. +query evinj:endAparam(x,y) ==> evinj:beginAparam(x,y). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + new secretA; + in(c, h); + in(c, bm); + event beginBparam(A,h); + new Na; + out(c,(A, h, Na, bm)); + in(c,m2); + let (=Na, =h, k, m) = decrypt(m2, Kas) in + event beginBkey(A, h, k); + out(c,m); + in(c, m3); + let (=c0, n) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B then + event endAparam(A, h); + event endAkey(A, h, k); + out(c, encrypt(secretA, k)). + +let processB = + new secretB; + in(c,h); + event beginAparam(h, B); + new J; + out(c, encrypt((h, J), Kbs)); + in(c,m4); + let (k,=h,=J) = decrypt(m4,Kbs) in + event beginAkey(h, B, k); + new Nb; + out(c, encrypt((c0, Nb), k)); + in(c,m5); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A then + event endBparam(h, B); + event endBkey(h, B, k); + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h1,h2,n,bm)); + let ks1 = getkey(h1) in + let ks2 = getkey(h2) in + let (=h1,j) = decrypt(bm, ks2) in + new k; + out(c, encrypt((n, h2, k, encrypt((k,h1,j),ks2)), ks1)). + +process + new Kas; + new Kbs; + let A = host(Kas) in + let B = host(Kbs) in + out(c, A); + out(c, B); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4-comp b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4-comp new file mode 100644 index 0000000000000000000000000000000000000000..11df6f3d3b410e17a49ee23df0074624dc4a1580 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4-comp @@ -0,0 +1,112 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +param keyCompromise = strict. +(* Needham-Schroeder shared key corrected *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +(* Secrecy assumptions *) + +not Kas. +not Kbs. + +query attacker:secretA[]; + attacker:secretB[]. +query evinj:endAparam(x,y) ==> evinj:beginAparam(x,y). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + new secretA; + in(c, h); + in(c, bm); + event beginBparam(A,h); + new Na; + out(c,(A, h, Na, bm)); + in(c,m2); + let (=Na, =h, k, m) = decrypt(m2, Kas) in + event beginBkey(A, h, k); + out(c,m); + in(c, m3); + let (=c0, n) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B then + event endAparam(A, h); + event endAkey(A, h, k); + out(c, encrypt(secretA, k)). + +let processB = + new secretB; + in(c,h); + event beginAparam(h, B); + new J; + out(c, encrypt((h, J), Kbs)); + in(c,m4); + let (k,=h,=J) = decrypt(m4,Kbs) in + event beginAkey(h, B, k); + new Nb; + out(c, encrypt((c0, Nb), k)); + in(c,m5); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A then + event endBparam(h, B); + event endBkey(h, B, k); + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h1,h2,n,bm)); + let ks1 = getkey(h1) in + let ks2 = getkey(h2) in + let (=h1,j) = decrypt(bm, ks2) in + new k; + out(c, encrypt((n, h2, k, encrypt((k,h1,j),ks2)), ks1)). + +process + new Kas; + new Kbs; + let A = host(Kas) in + let B = host(Kbs) in + out(c, A); + out(c, B); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4-compapprox b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4-compapprox new file mode 100644 index 0000000000000000000000000000000000000000..d2f669469afa868f53d189497e79a225196e2fc5 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-corr4-compapprox @@ -0,0 +1,112 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +param keyCompromise = approx. +(* Needham-Schroeder shared key corrected *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +(* Secrecy assumptions *) + +not Kas. +not Kbs. + +query attacker:secretA[]; + attacker:secretB[]. +query evinj:endAparam(x,y) ==> evinj:beginAparam(x,y). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + new secretA; + in(c, h); + in(c, bm); + event beginBparam(A,h); + new Na; + out(c,(A, h, Na, bm)); + in(c,m2); + let (=Na, =h, k, m) = decrypt(m2, Kas) in + event beginBkey(A, h, k); + out(c,m); + in(c, m3); + let (=c0, n) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B then + event endAparam(A, h); + event endAkey(A, h, k); + out(c, encrypt(secretA, k)). + +let processB = + new secretB; + in(c,h); + event beginAparam(h, B); + new J; + out(c, encrypt((h, J), Kbs)); + in(c,m4); + let (k,=h,=J) = decrypt(m4,Kbs) in + event beginAkey(h, B, k); + new Nb; + out(c, encrypt((c0, Nb), k)); + in(c,m5); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A then + event endBparam(h, B); + event endBkey(h, B, k); + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h1,h2,n,bm)); + let ks1 = getkey(h1) in + let ks2 = getkey(h2) in + let (=h1,j) = decrypt(bm, ks2) in + new k; + out(c, encrypt((n, h2, k, encrypt((k,h1,j),ks2)), ks1)). + +process + new Kas; + new Kbs; + let A = host(Kas) in + let B = host(Kbs) in + out(c, A); + out(c, B); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4 b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4 new file mode 100644 index 0000000000000000000000000000000000000000..b0fd5a157d67dac4b0d6df187dc6f795dc0e52d3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4 @@ -0,0 +1,107 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham-Schroeder shared key *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +(* Secrecy assumptions *) + +not Kas. +not Kbs. + +query attacker:secretA[]; + attacker:secretB[]. +query evinj:endAparam(x,y) ==> evinj:beginAparam(x,y). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + + +let processA = + new secretA; + in(c, h); + event beginBparam(A,h); + new Na; + out(c,(A, h, Na)); + in(c,m2); + let (=Na, =h, k, m) = decrypt(m2, Kas) in + event beginBkey(A, h, k); + out(c,m); + in(c, m3); + let (=c0, n) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B then + event endAparam(A, h); + event endAkey(A, h, k); + out(c, encrypt(secretA, k)). + +let processB = + new secretB; + in(c,m4); + let (k,h) = decrypt(m4,Kbs) in + event beginAparam(h, B); + event beginAkey(h, B, k); + new Nb; + out(c, encrypt((c0, Nb), k)); + in(c,m5); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A then + event endBparam(h, B); + event endBkey(h, B, k); + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h1,h2,n)); + let ks1 = getkey(h1) in + let ks2 = getkey(h2) in + new k; + out(c, encrypt((n, h2, k, encrypt((k,h1),ks2)), ks1)). + +process + new Kas; + new Kbs; + let A = host(Kas) in + let B = host(Kbs) in + out(c, A); + out(c, B); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4-comp b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4-comp new file mode 100644 index 0000000000000000000000000000000000000000..7cf941fec9f7a6ff55b8ceb40b6cb2e690a3f002 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4-comp @@ -0,0 +1,108 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +param keyCompromise = strict. +(* Needham-Schroeder shared key *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +(* Secrecy assumptions *) + +not Kas. +not Kbs. + +query attacker:secretA[]; + attacker:secretB[]. +query evinj:endAparam(x,y) ==> evinj:beginAparam(x,y). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + + +let processA = + new secretA; + in(c, h); + event beginBparam(A,h); + new Na; + out(c,(A, h, Na)); + in(c,m2); + let (=Na, =h, k, m) = decrypt(m2, Kas) in + event beginBkey(A, h, k); + out(c,m); + in(c, m3); + let (=c0, n) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B then + event endAparam(A, h); + event endAkey(A, h, k); + out(c, encrypt(secretA, k)). + +let processB = + new secretB; + in(c,m4); + let (k,h) = decrypt(m4,Kbs) in + event beginAparam(h, B); + event beginAkey(h, B, k); + new Nb; + out(c, encrypt((c0, Nb), k)); + in(c,m5); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A then + event endBparam(h, B); + event endBkey(h, B, k); + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h1,h2,n)); + let ks1 = getkey(h1) in + let ks2 = getkey(h2) in + new k; + out(c, encrypt((n, h2, k, encrypt((k,h1),ks2)), ks1)). + +process + new Kas; + new Kbs; + let A = host(Kas) in + let B = host(Kbs) in + out(c, A); + out(c, B); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4-compapprox b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4-compapprox new file mode 100644 index 0000000000000000000000000000000000000000..3e9ac181b05d2635bfe714bce55ff2a5196f88e3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/pineedham-shr-orig4-compapprox @@ -0,0 +1,108 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +param keyCompromise = approx. +(* Needham-Schroeder shared key *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* constants 0 and 1 *) + +data c0/0. +data c1/0. + +(* Secrecy assumptions *) + +not Kas. +not Kbs. + +query attacker:secretA[]; + attacker:secretB[]. +query evinj:endAparam(x,y) ==> evinj:beginAparam(x,y). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + + +let processA = + new secretA; + in(c, h); + event beginBparam(A,h); + new Na; + out(c,(A, h, Na)); + in(c,m2); + let (=Na, =h, k, m) = decrypt(m2, Kas) in + event beginBkey(A, h, k); + out(c,m); + in(c, m3); + let (=c0, n) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B then + event endAparam(A, h); + event endAkey(A, h, k); + out(c, encrypt(secretA, k)). + +let processB = + new secretB; + in(c,m4); + let (k,h) = decrypt(m4,Kbs) in + event beginAparam(h, B); + event beginAkey(h, B, k); + new Nb; + out(c, encrypt((c0, Nb), k)); + in(c,m5); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A then + event endBparam(h, B); + event endBkey(h, B, k); + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h1,h2,n)); + let ks1 = getkey(h1) in + let ks2 = getkey(h2) in + new k; + out(c, encrypt((n, h2, k, encrypt((k,h1),ks2)), ks1)). + +process + new Kas; + new Kbs; + let A = host(Kas) in + let B = host(Kbs) in + out(c, A); + out(c, B); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotway-rees-paulson-err b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotway-rees-paulson-err new file mode 100644 index 0000000000000000000000000000000000000000..e654a7db647bae92c1ff36714f6ca6c02a604aad --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotway-rees-paulson-err @@ -0,0 +1,97 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Flawed version, quoted by Paulson TR443 Inductive... *) + +free c. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not kA. +not kB. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + in(c, hostB0); + event beginBparam(hostB0); + new Na; + out(c, (Na, hostA, hostB0, encrypt((Na, hostA, hostB0), kA))); + in(c, (=Na, m2)); + let (=Na, k) = decrypt(m2, kA) in + event beginBkey(hostA, hostB0, k); + (* OK *) + if hostB0 = hostB then + event endAparam(hostA); + event endAkey(hostA, hostB0, k); + out(c, encrypt(secretA, k)). + +let processB = + in(c, (na, hostA1, =hostB, z)); + event beginAparam(hostA1); + new Nb; + out(c, (na, hostA1, hostB, z, Nb, encrypt((na, hostA1, hostB), kB))); + in(c, (=na, m3, m4)); + let (=Nb, k) = decrypt(m4, kB) in + event beginAkey(hostA1, hostB, k); + out(c, (na, m3)); + (* OK *) + if hostA1 = hostA then + event endBparam(hostB); + event endBkey(hostA1, hostB, k); + out(c, encrypt(secretB, k)). + +let processS = in(c, (Na1, hostA1, hostB1, m2, Nb1, m3)); + let (=Na1, =hostA1, =hostB1) = decrypt(m2, getkey(hostA1)) in + let (=Na1, =hostA1, =hostB1) = decrypt(m3, getkey(hostB1)) in + new k; + out(c, (Na1, encrypt((Na1, k), getkey(hostA1)), + encrypt((Nb1, k), getkey(hostB1)))). + + +process new kA; new kB; + let hostA = host(kA) in + let hostB = host(kB) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotwayrees b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotwayrees new file mode 100644 index 0000000000000000000000000000000000000000..9a2a818a9efd2a156f43aba86760289d68277d34 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotwayrees @@ -0,0 +1,140 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +Correct + +Full agreement is wrong, the adversary can make B see something else as +{ Na, C, A, B }_kA, but it is not a real attack. + +The protocol should rather be written: +A -> B,S: C, A, B +A -> S: { Na, C, A, B }_kA +B -> S: { Nb, C, A, B }_kB +S -> A: { Na, k }_kA +S -> B: { Nb, k }_kB + +Bparam injective agreement is wrong: +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +I -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb', C, A, B }_kB) +S -> B: (C, { Na, k' }_kA, { Nb', k' }_kB) +B -> : (C, { Na, k' }_kA) + +Moreover, A and B can get different keys k ! +(Strand spaces: Proving Security Protocols Correct, +Thayer, Herzog, Gutmman, JCS 99, p 36) +ThayerFabregaHerzogGuttman-JCS1999.ps.gz + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) ===> B has key k +I -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> I: (C, { Na, k' }_kA, { Nb, k' }_kB) +I -> A: (C, { Na, k' }_kA) ===> A has key k' + +*) + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not kA. +not kB. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + in(c, hostB0); + event beginBparam(hostB0); + new C; new Na; + out(c, (C, hostA, hostB0, encrypt((Na, C, hostA, hostB0), kA))); + in(c, (=C, m2)); + let (=Na, k) = decrypt(m2, kA) in + event beginBkey(hostA, hostB0, k); + (* OK *) + if hostB0 = hostB then + event endAparam(hostA); + event endAkey(hostA, hostB0, k); + out(c, encrypt(secretA, k)). + + +let processB = + in(c, (C1, hostA1, =hostB, m2)); + event beginAparam(hostA1); + new Nb; + out(c, (C1, hostA1, hostB, m2, encrypt((Nb, C1, hostA1, hostB), kB))); + in(c, (=C1, m3, m4)); + let (=Nb, k) = decrypt(m4, kB) in + event beginAkey(hostA1, hostB, k); + out(c, (C1, m3)); + (* OK *) + if hostA1 = hostA then + event endBparam(hostB); + event endBkey(hostA1, hostB, k); + out(c, encrypt(secretB, k)). + + +let processS = in(c, (C1, hostA1, hostB1, m2, m3)); + let (Na1, =C1, =hostA1, =hostB1) = decrypt(m2, getkey(hostA1)) in + let (Nb1, =C1, =hostA1, =hostB1) = decrypt(m3, getkey(hostB1)) in + new k; + out(c, (C1, encrypt((Na1, k), getkey(hostA1)), + encrypt((Nb1, k), getkey(hostB1)))). + + +process new kA; new kB; + let hostA = host(kA) in + let hostB = host(kB) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotwayreesabadi b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotwayreesabadi new file mode 100644 index 0000000000000000000000000000000000000000..ff549ddefed28e631a11e30e34f37f3dc42e3f04 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piotwayreesabadi @@ -0,0 +1,116 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* Otway Rees protocol. + Version of Abadi and Needham, Prudent engineering practice... + +A -> B: (A, B, Na) +B -> S: (A, B, Na, Nb) +S -> B: ({ Na, A, B, k }_kA, { Nb, A, B, k }_kB) +B -> A: { Na, A, B, k }_kA + +Attack +I -> B : (A,B,v217) +B -> S : (A,B,v217,Nb[(A,B,v217),v215]) +S -> B : (...., encrypt((Nb[(A,B,v217),v215],A,B,k[(A,B,v217,Nb[(A,B,v217),v215]),v219]),kB[])) +B says end(B) + +Attack +A -> I : (A, B, Na) +I -> S : (A, B, Na, v217) +S -> I : ({ Na, A, B, k }_kA, {v217, , A, B, k }_kB) +I -> A : { Na, A, B, k }_kA + +*) + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not kA. +not kB. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + in(c, hostB0); + new Na; + event beginBparam(hostB0); + out(c, (hostA, hostB0, Na)); + in(c, m); + let (=Na, =hostA, =hostB0, k) = decrypt(m, kA) in + event beginBkey(hostA, hostB0, k); + (* OK *) + if hostB0 = hostB then + event endAparam(hostA); + event endAkey(hostA, hostB0, k); + out(c, encrypt(secretA, k)). + + +let processB = + in(c, (hostA1, =hostB, m2)); + event beginAparam(hostA1); + new Nb; + out(c, (hostA1, hostB, m2, Nb)); + in(c, (m3, m4)); + let (=Nb, =hostA1, =hostB, k) = decrypt(m4, kB) in + event beginAkey(hostA1, hostB, k); + out(c, m3); + (* OK *) + if hostA1 = hostA then + event endBparam(hostB); + event endBkey(hostA1, hostB, k); + out(c, encrypt(secretB, k)). + + +let processS = in(c, m); + let (hostA1, hostB1, Na1, Nb1) = m in + new k; + out(c, (encrypt((Na1, hostA1, hostB1, k), getkey(hostA1)), + encrypt((Nb1, hostA1, hostB1, k), getkey(hostB1)))). + + +process new kA; new kB; + let hostA = host(kA) in + let hostB = host(kB) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piskeme b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piskeme new file mode 100644 index 0000000000000000000000000000000000000000..4c3b47fd1b9433ce1bfad9e31b4048606b666336 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piskeme @@ -0,0 +1,111 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* SKEME *) + +(* Public key cryptography *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)),y) = x. + +(* Hash function *) + +fun hash/1. + +(* Diffie-Hellman *) + +fun f/2. +fun g/1. +equation f(x,g(y)) = f(y,g(x)). + +(* Keyed hash function *) + +fun keyhash/2. + +(* Shared-key cryptography *) + +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker:skA. +not attacker:skB. +not attacker:x[]. +not attacker:y[]. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(t) ==> evinj:beginAparam(t). +query evinj:endAkey(t,z) ==> evinj:beginAkey(t,z). +query evinj:endBparam(t) ==> evinj:beginBparam(t). +query evinj:endBkey(t,z) ==> evinj:beginBkey(t,z). + +(* A *) + +let processA = in(c, pkX); + event beginBparam(pkX); + new x; new Ka; + out(c, (encrypt((pkA, Ka), pkX), g(x))); + in(c, (m1, m2, m3)); + let Kb = decrypt(m1, skA) in + let K0 = hash((Ka, Kb)) in + if m3 = keyhash((g(x), m2, pkX, pkA), K0) then + let sh = hash(f(x, m2)) in + event beginBkey(pkX, sh); + out(c, keyhash((m2, g(x), pkA, pkX), K0)); + (* OK *) + if pkX = pkB then event endAparam(pkA); event endAkey(pkA, sh); out(c, sencrypt(secretA, sh)). + +(* B *) + +let processB = in(c, (m1, m2)); + let (pkAr, Ka) = decrypt(m1, skB) in + event beginAparam(pkAr); + new Kb; + let K0 = hash((Ka, Kb)) in + new y; + let sh = hash(f(y, m2)) in + event beginAkey(pkAr, sh); + out(c, (encrypt(Kb, pkAr), g(y), keyhash((m2, g(y), pkB, pkAr), K0))); + in(c, m3); + if m3 = keyhash((g(y), m2, pkAr, pkB), K0) then + (* OK *) + if pkAr = pkA then event endBparam(pkB); event endBkey(pkB, sh); out(c, sencrypt(secretB, sh)). + + +process + +new skA; let pkA = pk(skA) in +out(c, pkA); +new skB; let pkB = pk(skB) in +out(c, pkB); +((!processA) | (!processB)) + diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam new file mode 100644 index 0000000000000000000000000000000000000000..72d36a5ce6d868fa4ed4f126d5b2925d9718560c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam @@ -0,0 +1,95 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +WooLam shared-key auth protocol (1997) + +A -> B : A +B -> A : N (fresh) +A -> B : { A,B,N }_kAS +B -> S : { A,B,{ A,B,N }_kAS }_kBS +S -> B : { A,B,N }_kBS +B: verify { A,B,N }_kBS = the message from S + +Terminates with an attack + +*) + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not kBS. +not kAS. + +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x,y,z) ==> evinj:beginBfull(x,y,z). + + +let processA = + in(c, hostB2); (* Choose the B host *) + event beginBparam(hostB2); + out(c,hostA); in(c,n); + event beginBfull(hostB2, hostA, n); + out(c, encrypt((hostA, hostB2, n), kAS)). + +let processB = + in(c, hostA2); + new N; + out(c, N); + in(c, m); + out(c, encrypt((hostA2, hostB, m), kBS)); + in(c, m2); + let (=hostA2, =hostB, =N) = decrypt(m2, kBS) in + (* OK *) + if hostA2 = hostA then + event endBparam(hostB); + event endBfull(hostB, hostA2, N). + + +let processS = + in(c, hostB0);(* Choose the B host *) + in(c,m); + let (hostA1, =hostB0, m2) = decrypt(m, getkey(hostB0)) in + let (=hostA1, =hostB0, n) = decrypt(m2, getkey(hostA1)) in + out(c, encrypt((hostA1, hostB0, n), getkey(hostB0))). + +process new kAS; new kBS; + let hostA = host(kAS) in + let hostB = host(kBS) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam-corr3 b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam-corr3 new file mode 100644 index 0000000000000000000000000000000000000000..40e2357c4c39c07c8dd20e29613941e60e17e57d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam-corr3 @@ -0,0 +1,101 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +WooLam shared-key auth protocol +Corrections of Gordon, Jeffrey CSFW'01 + +A -> B : A +B -> A : N (fresh) +A -> B : { m3, B, N }_kAS +B -> S : A,B,{ m3, B, N }_kAS +S -> B : { m5, A, N }_kBS +B: verify { m5, A, N }_kBS = the message from S + +Correct. + +Full agreement is wrong because the adversary can make B see something +different from { m3, B, N }_kAS (even though the server and A correctly see it) +so this is no real attack. + +*) + +(* Tags *) + +data m3/0. +data m5/0. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not kBS. +not kAS. + +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x,y,z) ==> evinj:beginBfull(x,y,z). + +let processA = + in(c, hostB2); (* Choose the B host *) + event beginBparam(hostB2); + out(c,hostA); in(c,n); + event beginBfull(hostB2, hostA, n); + out(c, encrypt((m3, hostB2, n), kAS)). + +let processB = + in(c, hostA2); + new N; + out(c, N); + in(c, m); + out(c, (hostA2, hostB, m)); + in(c, m2); + let (=m5, =hostA2, =N) = decrypt(m2, kBS) in + (* OK *) + if hostA2 = hostA then + event endBparam(hostB); + event endBfull(hostB, hostA2, N). + +let processS = + in(c,(hostA1, hostB1, m2)); + let (=m3, =hostB1, n) = decrypt(m2, getkey(hostA1)) in + out(c, encrypt((m5, hostA1, n), getkey(hostB1))). + +process new kAS; new kBS; + let hostA = host(kAS) in + let hostB = host(kBS) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam-orig2 b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam-orig2 new file mode 100644 index 0000000000000000000000000000000000000000..096d2c64ab0372c23cf46f0b5a8414b1a70778f7 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolam-orig2 @@ -0,0 +1,101 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +WooLam shared-key auth protocol (1992, computer) +Version of Gordon, Jeffrey, CSFW 2001 + +A -> B : A +B -> A : N (fresh) +A -> B : { m3, N }_kAS +B -> S : { m4, A,{ m3, N }_kAS }_kBS +S -> B : { m5, N }_kBS +B: verify { m5, N }_kBS = the message from S + +Terminates with attack. + +*) + +(* Tags *) + +data m3/0. +data m4/0. +data m5/0. + +(* Shared-key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(m,k),k) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not kBS. +not kAS. + +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x,y,z) ==> evinj:beginBfull(x,y,z). + +let processA = + in(c, hostB2); (* Choose the B host *) + event beginBparam(hostB2); + out(c,hostA); + in(c,n); + event beginBfull(hostB2, hostA, n); + out(c, encrypt((m3, n), kAS)). + +let processB = + in(c, hostA2); + new N; + out(c, N); + in(c, m); + out(c, encrypt((m4, hostA2, m), kBS)); + in(c, m2); + let (=m5, =N) = decrypt(m2, kBS) in + (* OK *) + if hostA2 = hostA then + event endBparam(hostB); + event endBfull(hostB, hostA2, N). + +let processS = + in(c, hostB0);(* Choose the B host *) + in(c,m); + let (=m4, hostA1, m2) = decrypt(m, getkey(hostB0)) in + let (=m3, n) = decrypt(m2, getkey(hostA1)) in + out(c, encrypt((m5, n), getkey(hostB0))). + +process new kAS; new kBS; + let hostA = host(kAS) in + let hostB = host(kBS) in + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolampk b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolampk new file mode 100644 index 0000000000000000000000000000000000000000..938f27dcac4f2bd3b51a5f59a728393c28ecf98a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolampk @@ -0,0 +1,94 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +Woo and Lam public-key auth protocol (1997) + +A -> B: A +B -> A: N +A -> B: { A, B, N }_skA +B -> S: A +S -> B: A, { A, pkA }_skS + +Correct + +*) + +(* Signatures *) + +fun pk/1. +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Host name / key *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x,y,z) ==> evinj:beginBfull(x,y,z). + +let processA = in(c, hostB0); (* Choose B *) + event beginBparam(hostB0); + out(c, hostA); + in(c,n); + event beginBfull(hostA, n, hostB0); + out(c,sign((hostA, hostB0, n),skA)). + +let processB = in(c, hostA0); + new n; out(c,n); + in(c,m); + out(c, hostA0); + in(c, (=hostA0, m4)); + let (=hostA0, pkA2) = checksign(m4, pkS) in + let (=hostA0, =hostB, =n) = checksign(m,pkA2) in + (* OK *) + if hostA0 = hostA then + event endBparam(hostB); + event endBfull(hostA0, n, hostB). + +let processS = in(c, hostA); + out(c, (hostA, sign((hostA, getkey(hostA)), skS))). + +process new skA; new skB; new skS; + let pkA = pk(skA) in + let pkB = pk(skB) in + let pkS = pk(skS) in + let hostA = host(pkA) in + let hostB = host(pkB) in + out(c, pkA); out(c, pkB); out(c, pkS); + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolampk-orig b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolampk-orig new file mode 100644 index 0000000000000000000000000000000000000000..fcaf8cfe0cd60f9d4d5fb04f9e59548297c3e01d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piwoolampk-orig @@ -0,0 +1,101 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +Woo and Lam public-key auth protocol (1992, computer) + +A -> B: A +B -> A: N +A -> B: { N }_skA +B -> S: A +S -> B: A, { A, pkA }_skS + +Terminates with attack + +Full agreement is true, but there is an attack ! +(Indeed, the messages never mention B.) + +If we include B as a pseudo first message sent to A, then full agreement +is false. +*) + +(* Signatures *) + +fun pk/1. +fun sign/2. +reduc getmess(sign(m,k)) = m. +reduc checksign(sign(m,k), pk(k)) = m. + +(* Host name / key + The server has a table (host name, public key), which we + represent by the function getkey. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Secrecy assumptions *) + +not skA. +not skB. +not skS. + +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBfull(x,y,z) ==> evinj:beginBfull(x,y,z). + +let processA = in(c, hostB0); (* Choose B *) + event beginBparam(hostB0); + out(c, hostA); + in(c,n); + event beginBfull(hostB0, hostA, n); + out(c,sign(n,skA)). + +let processB = in(c, hostA0); + new n; out(c,n); + in(c,m); + out(c, hostA0); + in(c, (=hostA0, m4)); + let (=hostA0, pkA2) = checksign(m4, pkS) in + if n = checksign(m,pkA2) then + (* OK *) + if hostA0 = hostA then + event endBparam(hostB); + event endBfull(hostB, hostA0, n). + +let processS = in(c, hostA); + out(c, (hostA, sign((hostA, getkey(hostA)), skS))). + +process new skA; new skB; new skS; + let pkA = pk(skA) in + let pkB = pk(skB) in + let pkS = pk(skS) in + let hostA = host(pkA) in + let hostB = host(pkB) in + out(c, pkA); out(c, pkB); out(c, pkS); + out(c, hostA); out(c, hostB); + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom new file mode 100644 index 0000000000000000000000000000000000000000..3270c4f4f452a3d5e840b71a850f5d3742745df0 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom @@ -0,0 +1,102 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +A -> B : A, N_A +B -> S : B, N_B, { A, N_A }_Kbs +S -> A : N_B, { B, K_ab, N_A }_Kas, { A, K_ab, N_B }_Kbs +A -> B : { A, K_ab, N_B }_Kbs, { N_B }_Kab + +No agreement on N_A, but agreement on N_B and on the session key K_ab. + +*) + +(* Table of host names/keys shared with the server + The constructor host maps keys to host names. + The private destructor getkey maps host names to keys. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not kas. +not kbs. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBkey(x,y,z,t) ==> evinj:beginBkey(x,y,z,t). + +let processA = + new Na; + out(c, (host(kas), Na)); + in(c, (nb, m1, m2)); + let (b, kab, na2) = decrypt(m1, kas) in + event beginBparam(b); + if na2 = Na then + event beginBkey(b, host(kas), nb, kab); + out(c, (m2, encrypt(nb, kab))); + (* OK *) + if b = host(kbs) then + event endAparam(host(kas)); + out(c, encrypt(secretA, kab)). + +let processB = + in(c, (a, na)); + event beginAparam(a); + new Nb; + out(c, (host(kbs), Nb, encrypt((a,na), kbs))); + in(c, (m3, m4)); + let (=a, kab, =Nb) = decrypt(m3, kbs) in + if Nb = decrypt(m4, kab) then + (* OK *) + if a = host(kas) then + event endBparam(host(kbs)); + event endBkey(host(kbs), a, Nb, kab); + out(c, encrypt(secretB, kab)). + +let processS = + in(c, (b, nb, m5)); + let kbs2 = getkey(b) in + let (a, na) = decrypt(m5,kbs2) in + let kas2 = getkey(a) in + new kab; + out(c, (nb, encrypt((b, kab, na), kas2), encrypt((a, kab, nb), kbs2))). + + +process new kas; new kbs; + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid new file mode 100644 index 0000000000000000000000000000000000000000..bd4a065dccb287e65a793f90000891b45ae0a1dc --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid @@ -0,0 +1,123 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +A -> B : A, N_A +B -> S : B, N_B, { A, N_A }_Kbs +S -> A : N_B, { B, K_ab, N_A }_Kas, { A, K_ab, N_B }_Kbs +A -> B : { A, K_ab, N_B }_Kbs, { N_B }_Kab + +Full agreement is wrong (the adversary can arrange so that A does not see +{ A, K_ab, N_B }_Kbs). + +No agreement on N_A, but agreement on N_B and on the session key K_ab. + +Attack of Syverson for evinj:endAparam(x) ==> evinj:beginAparam(x). +*) + +(* Table of host names/keys shared with the server + The constructor host maps keys to host names. + The private destructor getkey maps host names to keys. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not kas. +not kbs. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBkey(x,y,z,t) ==> evinj:beginBkey(x,y,z,t). + +let processA = + new Na; + out(c, (host(kas), Na)); + in(c, (nb, m1, m2)); + let (b, kab, na2) = decrypt(m1, kas) in + event beginBparam(b); + event beginBkey(b, host(kas), nb, kab); + if na2 = Na then + out(c, (m2, encrypt(nb, kab))); + (* OK *) + if b = host(kbs) then + event endAparam(host(kas)); + out(c, encrypt(secretA, kab)). + +let processB = + in(c, (a, na)); + event beginAparam(a); + new Nb; + out(c, (host(kbs), Nb, encrypt((a, na), kbs))); + in(c, (m3, m4)); + let (=a, kab, =Nb) = decrypt(m3, kbs) in + if Nb = decrypt(m4, kab) then + (* OK *) + if a = host(kas) then + event endBparam(host(kbs)); + event endBkey(host(kbs), a, Nb, kab); + out(c, encrypt(secretB, kab)). + +let processBasA = + new Na; + out(c, (host(kbs), Na)); + in(c, (nb, m1, m2)); + let (b, kab, =Na) = decrypt(m1, kbs) in + out(c, (m2, encrypt(nb, kab))). + +let processAasB = + in(c, (a, na)); + new Nb; + out(c, (host(kas), Nb, encrypt((a,na), kas))); + in(c, m2); + let (m3, m4) = m2 in + let (=a, kab, =Nb) = decrypt(m3, kas) in + if Nb = decrypt(m4, kab) then + 0. (* OK *) + +let processS = + in(c, (b, nb, m5)); + let kbs2 = getkey(b) in + let (a, na) = decrypt(m5,kbs2) in + let kas2 = getkey(a) in + new kab; + out(c, (nb, encrypt((b, kab, na), kas2), encrypt((a, kab, nb), kbs2))). + + +process new kas; new kbs; + ((!processA) | (!processB) | (!processBasA) | (!processAasB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid-nicecoding b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid-nicecoding new file mode 100644 index 0000000000000000000000000000000000000000..8862d910c27d6fe44ce8a9fc119454df782e156a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid-nicecoding @@ -0,0 +1,147 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +A -> B : A, N_A +B -> S : B, N_B, { A, N_A }_Kbs +S -> A : N_B, { B, K_ab, N_A }_Kas, { A, K_ab, N_B }_Kbs +A -> B : { A, K_ab, N_B }_Kbs, { N_B }_Kab + +Full agreement is wrong (the adversary can arrange so that A does not see +{ A, K_ab, N_B }_Kbs). + +No agreement on N_A, but agreement on N_B and on the session key K_ab. + +Attack of Syverson for evinj:endAparam(x) ==> evinj:beginAparam(x). +*) + +(* Table of host names/keys shared with the server + The constructor host maps keys to host names. + The private destructor getkey maps host names to keys. + + The adversary can create any number of dishonest participants + by generating a fresh key k and computing host(k) to get the + corresponding identity. + *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not kas. + +(* honestParticipants is a private channel on which we send the name of + the honest participants; we use this information to test whether + a participant is honest *) +private free honestParticipants. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. + +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBkey(x,y,z,t) ==> evinj:beginBkey(x,y,z,t). + +(* Role of the initiator with identity A and key kas shared with S *) + +let processInitiator = + new Na; + out(c, (A, Na)); + in(c, (nb, m1, m2)); + let (b, kab, na2) = decrypt(m1, kas) in + event beginBparam(b); + event beginBkey(b, A, nb, kab); + if na2 = Na then + out(c, (m2, encrypt(nb, kab))); + (* OK protocol finished + If the interlocutor is honest, execute the events endAparam + and send a test message to check that the key kab is secret *) + in(honestParticipants, =b); + event endAparam(A); + out(c, encrypt(secretA, kab)). + +(* Role of the responder with identity A and key kas shared with S *) + +let processResponder = + in(c, (a, na)); + event beginAparam(a); + new Nb; + out(c, (A, Nb, encrypt((a, na), kas))); + in(c, (m3, m4)); + let (=a, kab, =Nb) = decrypt(m3, kas) in + if Nb = decrypt(m4, kab) then + (* OK protocol finished + If the interlocutor is honest, execute the events endBparam + and endBkey, and send a test message to check that the key kab + is secret *) + in(honestParticipants, =a); + event endBparam(A); + event endBkey(A, a, Nb, kab); + out(c, encrypt(secretB, kab)). + +(* Server *) + +let processS = + in(c, (b, nb, m5)); + let kbs2 = getkey(b) in + let (a, na) = decrypt(m5,kbs2) in + let kas2 = getkey(a) in + new kab; + out(c, (nb, encrypt((b, kab, na), kas2), encrypt((a, kab, nb), kbs2))). + +(* Start process *) + +process +(* First replication: create an unbounded number of honest principals *) +( + ! + (* Create a principal of key kas shared with S and identity A *) + new kas; let A = host(kas) in + ( + (* The attacker knows the host names (but not the secret keys) *) + out(c, A) | + (* This principal is honest: we send its name on channel + "honestParticipants" to record that fact *) + (!out(honestParticipants, A)) | + (* Launch an unbounded number of sessions of the initiator A *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder A *) + (!processResponder) + ) +) +| +(* Launch an unbounded number of sessions of the server *) +(!processS) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid-nicecoding2 b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid-nicecoding2 new file mode 100644 index 0000000000000000000000000000000000000000..aa919551c50d7dff14d31a81fe73f1c71577fdd3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-bid-nicecoding2 @@ -0,0 +1,176 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c. +(* + +A -> B : A, N_A +B -> S : B, N_B, { A, N_A }_Kbs +S -> A : N_B, { B, K_ab, N_A }_Kas, { A, K_ab, N_B }_Kbs +A -> B : { A, K_ab, N_B }_Kbs, { N_B }_Kab + +Full agreement is wrong (the adversary can arrange so that A does not see +{ A, K_ab, N_B }_Kbs). + +No agreement on N_A, but agreement on N_B and on the session key K_ab. + +Attack of Syverson for evinj:endAparam(x) ==> evinj:beginAparam(x). +*) + +(* Shared key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not Kas. +not Kbs. + +(* 2 honest host names A and B *) + +free A, B. + +(* "eqor(x,A,B) = true" means "x = A or x = B" + A more elegant syntax might be added in the future *) + +data true/0. +reduc eqor(x,x,y) = true; + eqor(x,y,x) = true. + +(* map(x,A,Kas,B,Kbs) is Kas when x = A and Kbs when x = B + Otherwise it fails *) + +reduc map(x,x,y,z,t) = y; + map(x,z,t,x,y) = y. + +(* the table host names/keys is sent on private channel keytable + The key table consists of pairs + (host, key shared between the host and the server) *) +private free keytable. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. + +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endBparam(x) ==> evinj:beginBparam(x). +query evinj:endBkey(x,y,z,t) ==> evinj:beginBkey(x,y,z,t). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA. + The destructor map checks that xA is honest (i.e. is A or B) + and computes its corresponding key. + + There is room for choice here. One could also write: + in(c, xA); + if eqor(xA, A, B) = true then + in(keytable, (=xA, kas)); + + or if we had an extended syntax similar to the one of CryptoVerif: + in(c, xA); + if (xA = A) || (xB = B) then + let kas = (if xA = A then Kas else Kbs) in + *) + in(c, xA); + let kas = map(xA,A,Kas,B,Kbs) in + (* Real start of the role *) + new Na; + out(c, (xA, Na)); + in(c, (nb, m1, m2)); + let (b, kab, na2) = decrypt(m1, kas) in + event beginBparam(b); + event beginBkey(b, xA, nb, kab); + if na2 = Na then + out(c, (m2, encrypt(nb, kab))); + (* OK protocol finished + If the interlocutor is honest, execute the events endAparam + and send a test message to check that the key kab is secret *) + if eqor(b, A, B) = true then + event endAparam(xA); + out(c, encrypt(secretA, kab)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + The destructor map checks that xB is honest (i.e. is A or B) + and computes its corresponding key. *) + in(c, xB); + let kbs = map(xB,A,Kas,B,Kbs) in + (* Real start of the role *) + in(c, (a, na)); + event beginAparam(a); + new Nb; + out(c, (xB, Nb, encrypt((a, na), kbs))); + in(c, (m3, m4)); + let (=a, kab, =Nb) = decrypt(m3, kbs) in + if Nb = decrypt(m4, kab) then + (* OK protocol finished + If the interlocutor is honest, execute the events endBparam + and endBkey, and send a test message to check that the key kab + is secret *) + if eqor(a, A, B) = true then + event endBparam(xB); + event endBkey(xB, a, Nb, kab); + out(c, encrypt(secretB, kab)). + +(* Server *) + +let processS = + in(c, (b, nb, m5)); + in(keytable, (=b, kbs2)); (* get the key of b from the key table *) + let (a, na) = decrypt(m5,kbs2) in + in(keytable, (=a, kas2)); (* get the key of a from the key table *) + new kab; + out(c, (nb, encrypt((b, kab, na), kas2), encrypt((a, kab, nb), kbs2))). + +(* Key registration *) + +let processK = + in(c, (h,k)); + if h = A then (!out(keytable, (A, Kas))) else + if h = B then (!out(keytable, (B, Kbs))) else + (!out(keytable, (h,k))). + + +(* Start process *) + +process + new Kas; new Kbs; + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-orig b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-orig new file mode 100644 index 0000000000000000000000000000000000000000..dac4f32bbb4f28e5b29c386cc14cefecc494482e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-orig @@ -0,0 +1,100 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +free c. + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not kas. +not kbs. + +private free secretA, secretB. +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(x,y) ==> evinj:beginAparam(x,y). +query evinj:endAkey(x,y,z) ==> evinj:beginAkey(x,y,z). +query evinj:endBparam(x,y) ==> evinj:beginBparam(x,y). +query evinj:endBkey(x,y,z) ==> evinj:beginBkey(x,y,z). + +let processA = + new Na; + out(c, (host(kas), Na)); + in(c, (cert1, cert2)); + let (b, k, =Na, nb) = decrypt(cert1, kas) in + event beginBparam(host(kas), b); + event beginBkey(host(kas), b, k); + out(c, (cert2, encrypt(nb, k))); + (* OK *) + if b = host(kbs) then + event endAparam(host(kas), b); + event endAkey(host(kas), b, k); + out(c, encrypt(secretA, k)). + +let processB = + in(c, (a,na)); + event beginAparam(a,host(kbs)); + new Nb; + out(c, (host(kbs), encrypt((a, na, Nb), kbs))); + in(c, (cert2, m)); + let (=a, k) = decrypt(cert2, kbs) in + event beginAkey(a, host(kbs), k); + if Nb = decrypt(m, k) then + (* OK *) + if a = host(kas) then + event endBparam(a, host(kbs)); + event endBkey(a, host(kbs), k); + out(c, encrypt(secretB, k)). + +let processS = + in(c, (h2, m)); + let k2 = getkey(h2) in + let (h1, n1, n2) = decrypt(m, k2) in + let k1 = getkey(h1) in + new k; + out(c, (encrypt((h2, k, n1, n2), k1), encrypt((h1, k), k2))). + + +process new kas; new kbs; + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-paulson b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-paulson new file mode 100644 index 0000000000000000000000000000000000000000..a2cc9e8ac513c5f5b5b299bf251ee849fddf38b4 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/piyahalom-paulson @@ -0,0 +1,102 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +A -> B : A, N_A +B -> S : B, N_B, { c1, A, N_A }_Kbs +S -> A : { B, K_ab, N_A, N_B }_Kas, { c2, A, K_ab }_Kbs +A -> B : { c2, A, K_ab }_Kbs, { N_B }_Kab + +*) + +free c. + +param keyCompromise = strict. +(* param injectiveAg = true. *) + +fun host/1. +private reduc getkey(host(x)) = x. + +(* Shared key cryptography *) + +fun encrypt/2. +reduc decrypt(encrypt(x,y),y) = x. + +(* tags *) + +data c1/0. +data c2/0. + +(* Secrecy assumptions *) + +not kas. +not kbs. + +query attacker:secretA; + attacker:secretB. +query evinj:endAparam(x) ==> evinj:beginAparam(x). +query evinj:endBkey(x,y,z,t) ==> evinj:beginBkey(x,y,z,t). + +let processA = + new secretA; + new Na; + out(c, (host(kas), Na)); + in(c, (nb, m1, m2)); + let (b, kab, =Na, =nb) = decrypt(m1, kas) in + event beginBkey(b, host(kas), nb, kab); + out(c, (m2, encrypt(nb, kab))); + (* OK *) + if b = host(kbs) then + event endAparam(host(kas)); + out(c, encrypt(secretA, kab)). + +let processB = + new secretB; + in(c, (a, na)); + event beginAparam(a); + new Nb; + out(c, (host(kbs), Nb, encrypt((c1,a,na), kbs))); + in(c, (m3, m4)); + let (=c2, =a, kab) = decrypt(m3, kbs) in + if Nb = decrypt(m4, kab) then + (* OK *) + if a = host(kas) then + event endBkey(host(kbs), a, Nb, kab); + out(c, encrypt(secretB, kab)). + +let processS = + in(c, (b, nb, m5)); + let kbs2 = getkey(b) in + let (=c1, a, na) = decrypt(m5,kbs2) in + let kas2 = getkey(a) in + new kab; + out(c, (encrypt((b, kab, na, nb), kas2), encrypt((c2, a, kab), kbs2))). + + +process new kas; new kbs; + ((!processA) | (!processB) | (!processS)) diff --git a/preinstallTTool/linux/proverif/examples/pi/secr-auth/ssh-transport b/preinstallTTool/linux/proverif/examples/pi/secr-auth/ssh-transport new file mode 100644 index 0000000000000000000000000000000000000000..d55628ee0753e4085f09223923354444d665ca9c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/secr-auth/ssh-transport @@ -0,0 +1,165 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SSH v2 *) + +(* In fact, we consider a simplified version of SSH, without negociation. + We assume that the chosen parameters are + - the standard Diffie-Hellman key exchange + - a symmetric encryption algorithm (different from none) + - a mac algorithm (different from none) + - no compression + We do not consider key re-exchange. + + Only the transport layer protocol of SSH is considered. + We do not consider the SSH authentication protocol. + + In the computation of the mac, we ignore the sequence of the + messages (difficult to model in our framework). Also note + that the mac is really useful only when the encryption is malleable, + and we model a perfect encryption that is not malleable. + *) + +free c. + +(* Public key cryptography *) + +fun pk/1. +fun penc/2. +reduc pdec(y, penc(pk(y),x)) = x. + +(* Shared key cryptography *) + +fun enc/2. +reduc dec(y, enc(y,x)) = x. + +(* Hash function *) + +fun H/1. + +(* Non-message revealing signatures *) + +fun nmrsign/2. +data true/0. +reduc checknmrsign(pk(y), nmrsign(y,x), x) = true. + +(* Diffie-Hellman *) + +fun f/2. +fun g/1. +equation f(x,g(y)) = f(y,g(x)). + +(* Mac *) + +fun mac/2. + +(* Constants *) + +data KEXDHINIT/0. +data KEXDHREPLY/0. + +data keyEncStoC/0. +data keyEncCtoS/0. +data keyMacStoC/0. +data keyMacCtoS/0. + +(* Secrecy assumptions *) + +not dhsecretC. +not dhsecretS. +not SSigKey. + +private free secretC. +query attacker:secretC. + +let processC = + (* Send a secret if we are connected to a honest server *) + if ServerVerKey = SVerKey then + out(CsecchannelToS, secretC). + +let processClient = + new dhsecretC; + let dhpublicC = g(dhsecretC) in + out(c, (KEXDHINIT, dhpublicC)); + in(c, (=KEXDHREPLY, ServerVerKey, dhpublicS, sign)); + let K = f(dhsecretC, dhpublicS) in + let h = H((ServerVerKey, dhpublicC, dhpublicS, K)) in + if checknmrsign(ServerVerKey, sign, h) = true then + let enckeyCtoS = H((K, h, keyEncCtoS)) in + let enckeyStoC = H((K, h, keyEncStoC)) in + let mackeyCtoS = H((K, h, keyMacCtoS)) in + let mackeyStoC = H((K, h, keyMacStoC)) in + + new CsecchannelToS; + new CsecchannelFromS; + + (! in(CsecchannelToS, m2payload); + out(c, (enc(enckeyCtoS, m2payload), mac(mackeyCtoS, m2payload))) + ) + | + (! in (c,(m4enc, m4mac)); + let m4payload = dec(enckeyStoC, m4enc) in + if m4mac = mac(mackeyStoC, m4payload) then + out(CsecchannelFromS, m4payload)) + | + processC. + +let processS = 0. + +let processServer = + in(c, (=KEXDHINIT, dhpublicC)); + new dhsecretS; + let dhpublicS = g(dhsecretS) in + let K = f(dhsecretS, dhpublicC) in + let h = H((SVerKey, dhpublicC, dhpublicS, K)) in + out(c, (KEXDHREPLY, SVerKey, dhpublicS, nmrsign(SSigKey, h))); + let enckeyCtoS = H((K, h, keyEncCtoS)) in + let enckeyStoC = H((K, h, keyEncStoC)) in + let mackeyCtoS = H((K, h, keyMacCtoS)) in + let mackeyStoC = H((K, h, keyMacStoC)) in + + new SsecchannelToC; + new SsecchannelFromC; + + (! in(SsecchannelToC, m3payload); + out(c, (enc(enckeyStoC, m3payload), mac(mackeyStoC, m3payload))) + ) + | + (! in(c, (m2enc,m2mac)); + let m2payload = dec(enckeyCtoS, m2enc) in + if m2mac = mac(mackeyCtoS, m2payload) then + out(SsecchannelFromC, m2payload) + ) + | + processS. + +process + new SSigKey; + let SVerKey = pk(SSigKey) in + out(c, SVerKey); + ((!processClient) | (!processServer)) + diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/attack b/preinstallTTool/linux/proverif/examples/pi/weaksecr/attack new file mode 100644 index 0000000000000000000000000000000000000000..84f3566d9b7e4bfaf723e7c0b591cc7e2714e3c5 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/attack @@ -0,0 +1,50 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + + + +free c. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +fun hash/1. + +private free w. +weaksecret w. + +process + new s; + let pk = pk(s) in + out(c, pk); + out(c, penc(hash(w), pk)) + + diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/augmentedeke1 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/augmentedeke1 new file mode 100644 index 0000000000000000000000000000000000000000..f552b56a564c2921973eb6f4b038268a51510a10 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/augmentedeke1 @@ -0,0 +1,123 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 + One knows whether one decrypts { challengeA, challengeB }_K + and similar messages correctly. *) + + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Hash function *) + +fun h/1. + +(* One-way function *) + +fun F/2. + +(* Predicate *) + +data true/0. +reduc T(h(x), F(x,y), y) = true. + +(* Host *) + +data host/2. + + +free hostA, hostB. +private free P. +weaksecret P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), h(P)))); + in(c, (m1, m2)); + let gRB = dec(m1, h(P)) in + let K = f(RA, gRB) in + let (challengeB) = sdec(m2, K) in + new challengeA; + out(c, senc((challengeA, challengeB), K)); + in(c, m3); + if (challengeA) = sdec(m3, K) then + out(c, senc(F(P,K), K)). + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, h(P)) in + new RB; + let K = f(RB, gRA) in + new challengeB; + out(c, (enc(g(RB), h(P)), senc(challengeB, K))); + in(c, m4); + let (challengeA, =challengeB) = sdec(m4, K) in + out(c, senc(challengeA, K)); + in(c, m5); + let fr = sdec(m5, K) in + if T(h(P), fr, K) = true then + 0. + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + (!let hostX = hostB in processA) + | (!let hostX = hostA in processB) + | (!processAtalkingX) | (!processBtalkingX) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/augmentedeke2 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/augmentedeke2 new file mode 100644 index 0000000000000000000000000000000000000000..a0d9b4db603538b08fc3f0f0453f01d1313fbb87 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/augmentedeke2 @@ -0,0 +1,123 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 + One does not know whether one decrypts { challengeA, challengeB }_K + and similar messages correctly. *) + + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Hash function *) + +fun h/1. + +(* One-way function *) + +fun F/2. + +(* Predicate *) + +data true/0. +reduc T(h(x), F(x,y), y) = true. + +(* Host *) + +data host/2. + + +free hostA, hostB. +private free P. +weaksecret P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), h(P)))); + in(c, (m1, m2)); + let gRB = dec(m1, h(P)) in + let K = f(RA, gRB) in + let (challengeB) = dec(m2, K) in + new challengeA; + out(c, enc((challengeA, challengeB), K)); + in(c, m3); + if (challengeA) = dec(m3, K) then + out(c, enc(F(P,K), K)). + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, h(P)) in + new RB; + let K = f(RB, gRA) in + new challengeB; + out(c, (enc(g(RB), h(P)), enc(challengeB, K))); + in(c, m4); + let (challengeA, =challengeB) = dec(m4, K) in + out(c, enc(challengeA, K)); + in(c, m5); + let fr = dec(m5, K) in + if T(h(P), fr, K) = true then + 0. + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + (!let hostX = hostB in processA) + | (!let hostX = hostA in processB) + | (!processAtalkingX) | (!processBtalkingX) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/eke1 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/eke1 new file mode 100644 index 0000000000000000000000000000000000000000..b2d5037af21f276354d0e539cf9a1c0321155ee8 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/eke1 @@ -0,0 +1,78 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 2.1 *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +free hostA. +private free P. +weaksecret P. + +let processA = + new sEA; + let EA = pk(sEA) in + out(c, (hostA, enc(EA, P))); + in(c,m2); + let R = pdec(dec(m2,P),sEA) in + new challengeA; + out(c, enc((challengeA), R)); + in(c, m4); + let (=challengeA, challengeB) = dec(m4, R) in + out(c, enc((challengeB), R)). + + +let processB = + in(c, (=hostA, m)); + let EA = dec(m, P) in + new R; + out(c, enc(penc(R, EA), P)); + in(c,m3); + let (challengeA) = dec(m3, R) in + new challengeB; + out(c, enc((challengeA, challengeB), R)); + in(c, m5); + if dec(m5, R) = (challengeB) then + 0. + +process + + (!processA) | (!processB) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/eke2 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/eke2 new file mode 100644 index 0000000000000000000000000000000000000000..520a612ef80bf06fcc1d525fecf6b8d5a9399f79 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/eke2 @@ -0,0 +1,107 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 2.1 + Version in which A and B talk to anybody *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +(* Host name -> password *) + +fun passwdA/1. (* passwdA(hostX) = the password that X shares with A *) +fun passwdB/1. (* passwdB(hostX) = the password that X shares with B *) + +free hostA, hostB. +private free P. +weaksecret P. +(* query ev:Asays(x,y,z) ==> ev:Bsays(x,y,z). *) + +let processA = + new sEA; + let EA = pk(sEA) in + out(c, (hostA, enc(EA, P))); + in(c,m2); + let R = pdec(dec(m2,P),sEA) in + new challengeA; + out(c, senc((challengeA), R)); + in(c, m4); + let (=challengeA, challengeB) = sdec(m4, R) in + out(c, senc((challengeB), R)) (*; + if hostX = hostB then + event Asays(hostA, hostX, R)*). + + +let processB = + in(c, (=hostX, m)); + let EA = dec(m, P) in + new R; + (* event Bsays(hostX, hostB, R); *) + out(c, enc(penc(R, EA), P)); + in(c,m3); + let (challengeA) = sdec(m3, R) in + new challengeB; + out(c, senc((challengeA, challengeB), R)); + in(c, m5); + if sdec(m5, R) = (challengeB) then + 0. + +let processAtalkingX = + in(c, hostX); + (* if hostX = hostB then 0 else *) + let P = passwdA(hostX) in + processA. + +let processBtalkingX = + in(c, hostX); + (* if hostX = hostA then 0 else *) + let P = passwdB(hostX) in + processB. + +process + + (!let hostX = hostB in processA) | (!let hostX = hostA in processB) | (!processAtalkingX) | (!processBtalkingX) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/ekedh1 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/ekedh1 new file mode 100644 index 0000000000000000000000000000000000000000..92785862aa8c57ebf00fb602451d18d9fc3ab1b2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/ekedh1 @@ -0,0 +1,102 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 3.1 + Version in which A and B talk to anybody *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Host name -> password *) + +fun passwdA/1. (* passwdA(hostX) = the password that X shares with A *) +fun passwdB/1. (* passwdB(hostX) = the password that X shares with B *) + +param verboseRules = yes. + +free hostA, hostB. +private free P. +weaksecret P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), P))); + in(c,(m2,m3)); + let gRB = dec(m2,P) in + let K = f(RA, gRB) in + let challengeB = sdec(m3, K) in + new challengeA; + out(c, senc((challengeA,challengeB), K)); + in(c, m4); + if (challengeA) = sdec(m4, K) then + 0. + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, P) in + new RB; + let K = f(RB, gRA) in + new challengeB; + out(c, (enc(g(RB), P), senc(challengeB, K))); + in(c,m3); + let (challengeA,=challengeB) = sdec(m3, K) in + out(c, senc((challengeA), K)). + +let processAtalkingX = + in(c, hostX); + let P = passwdA(hostX) in + processA. + +let processBtalkingX = + in(c, hostX); + let P = passwdB(hostX) in + processB. + +process + + (!let hostX = hostB in processA) | (!let hostX = hostA in processB) | (!processAtalkingX) | (!processBtalkingX) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/ekedh2 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/ekedh2 new file mode 100644 index 0000000000000000000000000000000000000000..d700944bb15205fc0c2b357941ea0fc9b10f5e46 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/ekedh2 @@ -0,0 +1,103 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 3.1 + Version in which A and B talk to anybody *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Host *) + +data host/2. + +param verboseRules = yes. + +free hostA, hostB. +private free P. +weaksecret P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), P))); + in(c,(m2,m3)); + let gRB = dec(m2,P) in + let K = f(RA, gRB) in + let challengeB = sdec(m3, K) in + new challengeA; + out(c, senc((challengeA,challengeB), K)); + in(c, m4); + if (challengeA) = sdec(m4, K) then + 0. + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, P) in + new RB; + let K = f(RB, gRA) in + new challengeB; + out(c, (enc(g(RB), P), senc(challengeB, K))); + in(c,m3); + let (challengeA,=challengeB) = sdec(m3, K) in + out(c, senc((challengeA), K)). + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + + (!let hostX = hostB in processA) | (!let hostX = hostA in processB) | (!processAtalkingX) | (!processBtalkingX) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl1 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl1 new file mode 100644 index 0000000000000000000000000000000000000000..b25029ff44921faa8501ee4028b2513375edbc09 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl1 @@ -0,0 +1,125 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Kerberos, modified by Gong et al, + Version taken from Delaune, Jacquemard, LSV-04-1 + + Here there is an obvious attack because message under the passwords + are tuples that can be recognized. *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +(* From passwd to host names, for host different from A and B *) + +data host/1. + +param verboseRules = yes. + +(* PA = pw(A,S), PB = pw(B, S) *) + +free hostA, hostB. +private free PA, PB. +weaksecret PA. +weaksecret PB. + +let processA = + in(c, hostX); + new N1; + new N2; + new Ca; + new Ta; + out(c, penc((hostA, hostX, N1, N2, Ca, enc(Ta, PA)), pkS)); + in(c, (m1, m2)); + let (=N1, m3) = dec(m1, PA) in + let K = sdec(m3, N2) in + out(c, m2). + +let processB = + in(c, m4); + let (hostY, K, Ts) = dec(m4, PB) in + 0. + +let pS = + let Ta = dec(m6, pX) in + out(c, (enc((N1, senc(K, N2)), pX), enc((hostX, K, Ts), pY))). + +let processS = + in(c, m5); + let (hostX, hostY, N1, N2, Ca, m6) = pdec(m5, skS) in + new K; + new Ts; + if hostX = hostA then + (let pX = PA in + if hostY = hostA then + (let pY = PA in pS) + else if hostY = hostB then + (let pY = PB in pS) + else + (let host(pY) = hostY in pS)) + else if hostX = hostB then + (let pX = PB in + if hostY = hostA then + (let pY = PA in pS) + else if hostY = hostB then + (let pY = PB in pS) + else + (let host(pY) = hostY in pS)) + else + (let host(pX) = hostX in + if hostY = hostA then + (let pY = PA in pS) + else if hostY = hostB then + (let pY = PB in pS) + else + (let host(pY) = hostY in pS)). + + +process new skS; + let pkS = pk(skS) in + out(c, pkS); + (!processA) | (!processB) | (!processS) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl2 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl2 new file mode 100644 index 0000000000000000000000000000000000000000..36275ceff7385dd4c33446634d5c86cdc4293c5c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl2 @@ -0,0 +1,149 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Kerberos, modified by Gong et al, + Version taken from Delaune, Jacquemard, LSV-04-1 + + The unrecognizable tuples lead to non-termination. + Try to solve this! *) + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +(* From passwd to host names, for host different from A and B *) + +data host/1. + +(* Unrecognizable pairs and triples. + An implementation is concatenation, when the elements have known lengths *) + +fun pair/2. +fun fst/1. +fun snd/1. +equation fst(pair(x,y)) = x. +equation snd(pair(x,y)) = y. +equation pair(fst(x), snd(x)) = x. + +fun triple/3. +fun fst3/1. +fun snd3/1. +fun thd3/1. +equation fst3(triple(x,y,z)) = x. +equation snd3(triple(x,y,z)) = y. +equation thd3(triple(x,y,z)) = z. +equation triple(fst3(x),snd3(x),thd3(x)) = x. + +param verboseRules = yes. + +(* PA = pw(A,S), PB = pw(B, S) *) + +free hostA, hostB. +private free PA, PB. +weaksecret PA. +weaksecret PB. + +let processA = + in(c, hostX); + new N1; + new N2; + new Ca; + new Ta; + out(c, penc((hostA, hostX, N1, N2, Ca, enc(Ta, PA)), pkS)); + in(c, (m1, m2)); + let p1 = dec(m1, PA) in + if N1 = fst(p1) then + let m3 = snd(p1) in + let K = sdec(m3, N2) in + out(c, m2). + +let processB = + in(c, m4); + let t1 = dec(m4, PB) in + let hostY = fst3(t1) in + let k = snd3(t1) in + let ts = thd3(t1) in + 0. + +let pS = + let Ta = dec(m6, pX) in + out(c, (enc(pair(N1, senc(K, N2)), pX), enc(triple(hostX, K, Ts), pY))). + +let processS = + in(c, m5); + let (hostX, hostY, N1, N2, Ca, m6) = pdec(m5, skS) in + new K; + new Ts; + if hostX = hostA then + (let pX = PA in + if hostY = hostA then + (let pY = PA in pS) + else if hostY = hostB then + (let pY = PB in pS) + else + (let host(pY) = hostY in pS)) + else if hostX = hostB then + (let pX = PB in + if hostY = hostA then + (let pY = PA in pS) + else if hostY = hostB then + (let pY = PB in pS) + else + (let host(pY) = hostY in pS)) + else + (let host(pX) = hostX in + if hostY = hostA then + (let pY = PA in pS) + else if hostY = hostB then + (let pY = PB in pS) + else + (let host(pY) = hostY in pS)). + + +process new skS; + let pkS = pk(skS) in + out(c, pkS); + (!processA) | (!processB) | (!processS) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl3 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl3 new file mode 100644 index 0000000000000000000000000000000000000000..0ee44f3df8694a78fc80876cca62243328875faa --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl3 @@ -0,0 +1,118 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Kerberos, modified by Gong et al, + Version taken from Delaune, Jacquemard, LSV-04-1 + + The unrecognizable tuples lead to non-termination. + Try to solve this! + + Simplified version of kerberos-gl2 to investigate the termination + problem. *) + +(* param selFun = NounifsetMaxsize. *) +param movenew = false. +(* param verboseRules = yes. *) + + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Public key cryptography *) + +fun penc/2. +fun pk/1. +reduc pdec(penc(x,pk(y)),y) = x. + +(* Unrecognizable pairs and triples. + An implementation is concatenation, when the elements have known lengths *) + +fun pair/2. +fun fst/1. +fun snd/1. +equation fst(pair(x,y)) = x. +equation snd(pair(x,y)) = y. +equation pair(fst(x), snd(x)) = x. + + +fun triple/2. +fun fst3/1. +fun snd3/1. +equation fst3(triple(x,y)) = x. +equation snd3(triple(x,y)) = y. +equation triple(fst3(x),snd3(x)) = x. + +(* PA = pw(A,S), PB = pw(B, S) *) + +free hostA, hostB. +private free PA, PB. +weaksecret PA. +weaksecret PB. + +let processA = + in(c, hostX); + new N1; + new N2; + out(c, penc((hostA, hostX, N1, N2), pkS)); + in(c, (m1, m2)); + let p1 = dec(m1, PA) in + if N1 = fst(p1) then + let m3 = snd(p1) in + let K = sdec(m3, N2) in + out(c, m2). + +let processB = + in(c, m4); + let t1 = dec(m4, PB) in + let hostY = fst3(t1) in + let k = snd3(t1) in + 0. + +let processS = + in(c, m5); + let (=hostA, =hostB, N1, N2) = pdec(m5, skS) in + new K; + out(c, (enc(pair(N1, senc(K, N2)), PA), enc(triple(hostA, K), PB))). + +process new skS; + let pkS = pk(skS) in + out(c, pkS); + (!processA) | (!processB) | (!processS) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl4 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl4 new file mode 100644 index 0000000000000000000000000000000000000000..d4bbebf4ca2ffc4a308d0ea85754e3f59e885a0f --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/kerberos-gl4 @@ -0,0 +1,134 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Kerberos, modified by Gong et al, + Version taken from Delaune, Jacquemard, LSV-04-1 + The unrecognizable tuples lead to non-termination. + Try to solve this! + Simplified version of kerberos-gl2 to investigate the termination + problem. *) + +(* param selFun = NounifsetMaxsize. *) +param verboseRules = yes. + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +(* equation enc(dec(x,y),y) = x. *) + +(* Unrecognizable pairs. + An implementation is concatenation, when the elements have known lengths *) + +fun pair/2. +fun fst/1. +(* fun snd/1. *) +equation fst(pair(x,y)) = x. +(* equation snd(pair(x,y)) = y. *) +(* equation pair(fst(x), snd(x)) = x. *) + +private free PA. +not PA. +not K. +weaksecret PA. + +process !in(c, N1); new K; out(c, enc(pair(N1, K), PA)) + +(* Here is a commented output + +Equations encoded as destructors: +dec(enc(x_18,y_19),y_19) => x_18 +fst(pair(x_20,y_21)) => x_20 + +-- Weak secret: PA +Starting rules: +Rule 1: attacker:v_25 & attacker:v_24 -> attacker:pair(v_25,v_24) +Rule 2: attacker:v_26 -> attacker:fst(v_26) +Rule 3: attacker:pair(x_27,y_28) -> attacker:x_27 +Rule 4: attacker:v_30 & attacker:v_29 -> attacker:enc(v_30,v_29) +Rule 5: attacker:v_32 & attacker:v_31 -> attacker:dec(v_32,v_31) +Rule 6: attacker:enc(x_33,y_34) & attacker:y_34 -> attacker:x_33 +Rule 10: attacker:v_39 -> attacker_guess:v_39,v_39 [selected conclusion] +Rule 11: attacker_guess:PA[],weaksecretcst() +Rule 14: attacker_guess:v_48,v_50 & attacker_guess:v_49,v_51 -> attacker_guess:pair(v_48,v_49),pair(v_50,v_51) +Rule 15: attacker_guess:v_53,v_54 -> attacker_guess:fst(v_53),fst(v_54) +Rule 16: attacker_guess:v_55,pair(x_56,y_57) -> attacker_guess:fst(v_55),x_56 +Rule 17: attacker_guess:pair(x_58,y_59),v_60 -> attacker_guess:x_58,fst(v_60) +Rule 18: attacker_guess:pair(x_61,y_62),pair(x_63,y_64) -> attacker_guess:x_61,x_63 +Rule 19: attacker_guess:v_67,v_69 & attacker_guess:v_68,v_70 -> attacker_guess:enc(v_67,v_68),enc(v_69,v_70) +Rule 20: attacker_guess:v_73,v_75 & attacker_guess:v_74,v_76 -> attacker_guess:dec(v_73,v_74),dec(v_75,v_76) +Rule 21: attacker_guess:v_77,enc(x_79,y_80) & attacker_guess:v_78,y_80 -> attacker_guess:dec(v_77,v_78),x_79 +Rule 22: attacker_guess:enc(x_81,y_82),v_83 & attacker_guess:y_82,v_84 -> attacker_guess:x_81,dec(v_83,v_84) +Rule 23: attacker_guess:enc(x_85,y_86),enc(x_87,y_88) & attacker_guess:y_86,y_88 -> attacker_guess:x_85,x_87 +Rule 24: attacker:v_93 -> attacker:enc(pair(v_93,K[v_93,sid_94]),PA[]) + +Completing... + +10 + 22: attacker:enc(x_267,y_268) & attacker_guess:y_268,v_269 -> attacker_guess:x_267,dec(enc(x_267,y_268),v_269) + +24 + (10 + 22): attacker:v_452 & attacker_guess:PA[],v_453 -> attacker_guess:pair(v_452,K[v_452,sid_454]),dec(enc(pair(v_452,K[v_452,sid_454]),PA[]),v_453) + +11 + (24 + (10 + 22)): attacker:v_536 -> attacker_guess:pair(v_536,K[v_536,sid_537]),dec(enc(pair(v_536,K[v_536,sid_537]),PA[]),weaksecretcst()) + +A = (11 + (24 + (10 + 22))) + 17: attacker:x_588 -> attacker_guess:x_588,fst(dec(enc(pair(x_588,K[x_588,sid_589]),PA[]),weaksecretcst())) + +A + 22: attacker:enc(x_618,y_619) & attacker_guess:y_619,v_620 -> attacker_guess:x_618,dec(fst(dec(enc(pair(enc(x_618,y_619),K[enc(x_618,y_619),sid_621]),PA[]),weaksecretcst())),v_620) + +A + 17: attacker:pair(x_628,y_629) -> attacker_guess:x_628,fst(fst(dec(enc(pair(pair(x_628,y_629),K[pair(x_628,y_629),sid_630]),PA[]),weaksecretcst()))) + +24 + (A + 22): attacker:v_637 & attacker_guess:PA[],v_638 -> attacker_guess:pair(v_637,K[v_637,sid_639]),dec(fst(dec(enc(pair(enc(pair(v_637,K[v_637,sid_639]),PA[]),K[enc(pair(v_637,K[v_637,sid_639]),PA[]),sid_640]),PA[]),weaksecretcst())),v_638) + +A'1 = 4 + (A + 22): attacker:x_657 & attacker:y_658 -> attacker_guess:x_657,dec(fst(dec(enc(pair(enc(x_657,y_658),K[enc(x_657,y_658),sid_659]),PA[]),weaksecretcst())),y_658) + +A'2 = 1 + (A + 17): attacker:x_672 & attacker:y_673 -> attacker_guess:x_672,fst(fst(dec(enc(pair(pair(x_672,y_673),K[pair(x_672,y_673),sid_674]),PA[]),weaksecretcst()))) + +11 + (24 + (A + 22)): attacker:v_695 -> attacker_guess:pair(v_695,K[v_695,sid_696]),dec(fst(dec(enc(pair(enc(pair(v_695,K[v_695,sid_696]),PA[]),K[enc(pair(v_695,K[v_695,sid_696]),PA[]),sid_697]),PA[]),weaksecretcst())),weaksecretcst()) + +A'3 = (11 + (24 + (A + 22))) + 17: attacker:v_695 -> attacker_guess:v_695,fst(dec(fst(dec(enc(pair(enc(pair(v_695,K[v_695,sid_696]),PA[]),K[enc(pair(v_695,K[v_695,sid_696]),PA[]),sid_697]),PA[]),weaksecretcst())),weaksecretcst())) + +A'1, A'2, A'3 are of the same form as A. We can apply again 4+( +22) +1+( +17), and 11+(24+( +22))+17 as many times as we want to them. ==> Loop! + + +More generally, assume you have + 1: att(x) -> attg(x, M(x)) +as well as g/g' converse symbols (like pair/fst, pair/snd, enc/dec) so + 2: attg(g(y),z) -> attg(y, g'(z)) +and 3: att(y) -> att(g(y)) +By resolution +3 + (1 + 2): att(y) -> attg(y, g'(M(g(y)))) +so we have a loop... +Try to adjust the selection function to select the conclusion in 2? +No, it leads to non-termination because of unification with +rules ... -> bad. + +*) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/pihandshake b/preinstallTTool/linux/proverif/examples/pi/weaksecr/pihandshake new file mode 100644 index 0000000000000000000000000000000000000000..e63ccfdfadae8fca729dd21167e5b6d6d30aeeed --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/pihandshake @@ -0,0 +1,57 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Handshake protocol. + Taken from Delaune, Jacquemard, LSV-04-1 *) + +(* shared-key encryption as equation *) + +fun encrypt/2. +fun decrypt/2. +equation decrypt(encrypt(x,y),y) = x. +equation encrypt(decrypt(x,y),y) = x. + +(* addition of one *) + +fun f/1. + +free c. +private free pw. + +weaksecret pw. + +let processA = + new N; + out(c, encrypt(N, pw)). + +let processB = + in(c, x); + let y = decrypt(x, pw) in + out(c, encrypt(f(y), pw)). + +process + ((!processA) | (!processB)) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/piterm b/preinstallTTool/linux/proverif/examples/pi/weaksecr/piterm new file mode 100644 index 0000000000000000000000000000000000000000..e6249ae4e6eb06f842ad0c4f93ce295c460f8148 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/piterm @@ -0,0 +1,63 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Handshake protocol. + Simplified from Delaune, Jacquemard, LSV-04-1 + +Termination problem: + +Rule 12: attacker_guess:encrypt(x_42,y_43),v_44 & attacker_guess:y_43,v_45 -> attacker_guess:x_42,decrypt(v_44,v_45) + +v_93 <> encrypt(v_90,v_92) & attacker_guess:v_89,v_90 & attacker_guess:v_91,v_92 & attacker_guess:encrypt(v_89,v_91),v_93 -> bad: + +v_167 <> encrypt(encrypt(v_163,v_165),v_168) & attacker_guess:v_162,v_163 & attacker_guess:v_164,v_165 & attacker_guess:encrypt(encrypt(v_162,v_164),y_166),v_167 & attacker_guess:y_166,v_168 -> bad: + +etc leads to a loop... + +Or with another selection function + +attacker_guess:x_115,v_116 & attacker_guess:y_117,v_118 & attacker_guess:y_117,v_119 -> attacker_guess:x_115,decrypt(encrypt(v_116,v_118),v_119) +a + +leads to a similar loop... + +*) + +(* shared-key encryption as equation *) + +fun encrypt/2. +fun decrypt/2. +equation decrypt(encrypt(x,y),y) = x. + +free c. +private free pw. +weaksecret pw. + +process + new pw; + new N; + out(c, encrypt(N, pw)) diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/pivote b/preinstallTTool/linux/proverif/examples/pi/weaksecr/pivote new file mode 100644 index 0000000000000000000000000000000000000000..2c6c195c35b941c0848d8665de91da0c21697c27 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/pivote @@ -0,0 +1,49 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Naive vote protocol + Taken from Delaune, Jacquemard, LSV-04-1 *) + +(* public key encryption *) + +fun pk/1. +fun encrypt/2. +reduc decrypt(encrypt(x,pk(y)), y) = x. + +free c. +private free v. + +weaksecret v. + +let processA = + out(c, encrypt(v, pkS)). + +process + new skS; + let pkS = pk(skS) in + out(c, pkS); + !processA diff --git a/preinstallTTool/linux/proverif/examples/pi/weaksecr/signedaugmentedeke2 b/preinstallTTool/linux/proverif/examples/pi/weaksecr/signedaugmentedeke2 new file mode 100644 index 0000000000000000000000000000000000000000..f5c630334ec184ca3084b341d87bc696483abf0d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pi/weaksecr/signedaugmentedeke2 @@ -0,0 +1,116 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 *) + + +free c. + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc/2. +fun dec/2. +equation dec(enc(x,y),y) = x. +equation enc(dec(x,y),y) = x. + +(* Symmetric cryptography + One knows whether decryption succeeds or not *) + +fun senc/2. +reduc sdec(senc(x,y),y) = x. + +(* Diffie-Hellman *) + +fun g/1. +fun f/2. +equation f(x,g(y)) = f(y,g(x)). + +(* Signature *) + +fun pk/1. +fun sign/2. +data true/0. +reduc verif(sign(x,y), pk(y),x) = true. +reduc getmess(sign(x,y)) = x. + +(* Host *) + +data host/2. + + +free hostA, hostB. +private free P. +weaksecret P. + +let processA = + new RA; + out(c, (hostA, enc(g(RA), pk(P)))); + in(c, (m1, m2)); + let gRB = dec(m1, pk(P)) in + let K = f(RA, gRB) in + let (challengeB) = dec(m2, K) in + new challengeA; + out(c, enc((challengeA, challengeB), K)); + in(c, m3); + if (challengeA) = dec(m3, K) then + out(c, enc(sign(K,P), K)). + + +let processB = + in(c, (=hostX, m)); + let gRA = dec(m, pk(P)) in + new RB; + let K = f(RB, gRA) in + new challengeB; + out(c, (enc(g(RB), pk(P)), enc(challengeB, K))); + in(c, m4); + let (challengeA, =challengeB) = dec(m4, K) in + out(c, enc(challengeA, K)); + in(c, m5); + let fr = dec(m5, K) in + if verif(fr,pk(P),K) = true then + 0. + +let processAtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PA in + processA. + +let processBtalkingX = + in(c, (PA,PB)); + let hostX = host(PA,PB) in + let P = PB in + processB. + +process + (!let hostX = hostB in processA) + | (!let hostX = hostA in processB) + | (!processAtalkingX) | (!processBtalkingX) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/EKE.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/EKE.pv new file mode 100644 index 0000000000000000000000000000000000000000..3a7b8cc59d90d9c207821c53a02ef36d07b912bb --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/EKE.pv @@ -0,0 +1,135 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 2.1 *) + + +(* There is an attack if one is able to distinguish a public +key from another bitstring. (The adversary decrypts the first +message with the candidate password and tests whether the +result is a public key.) *) +(*set ignoreTypes = true.*) + +free c: channel. + +type host. +type passwd. +type nonce. +type pkey. +type skey. +type key. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. +fun pkey_to_bitstring(pkey):bitstring [data, typeConverter]. + +(* Symmetric encryption + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc(bitstring, passwd): bitstring. +fun dec(bitstring, passwd): bitstring. +equation forall x: bitstring, y: passwd; dec(enc(x,y),y) = x. +equation forall x: bitstring, y: passwd; enc(dec(x,y),y) = x. + +(* Symmetric encryption + One knows whether decryption succeeds or not *) + +fun senc(bitstring, key): bitstring. +reduc forall x: bitstring, y: key; sdec(senc(x,y),y) = x. + +(* Public key encryption *) + +fun penc(key, pkey): bitstring. +fun pk(skey): pkey. +reduc forall x: key, y: skey; pdec(penc(x,pk(y)),y) = x. + +(* Host names *) + +const A, B: host. + + + +free PAB, PAA, PBB: passwd [private]. + +(* Initiator with identity hostA talking to responder with identity hostX *) + +let processA(hostA: host, hostX: host, P: passwd) = + new sEA: skey; + let EA = pk(sEA) in + out(c, (hostA, enc(pkey_to_bitstring(EA), P))); + in(c,m2: bitstring); + let R = pdec(dec(m2,P),sEA) in + new challengeA: nonce; + out(c, senc(nonce_to_bitstring(challengeA), R)); + in(c, m4: bitstring); + let (=challengeA, challengeB: nonce) = sdec(m4, R) in + out(c, senc(nonce_to_bitstring(challengeB), R)). + +(* Responder with identity hostB talking to initiator with identity hostX *) + +let processB(hostB: host, hostX: host, P: passwd) = + in(c, (=hostX, m: bitstring)); + let pkey_to_bitstring(EA) = dec(m, P) in + new R: key; + out(c, enc(penc(R, EA), P)); + in(c,m3: bitstring); + let nonce_to_bitstring(challengeA) = sdec(m3, R) in + new challengeB: nonce; + out(c, senc((challengeA, challengeB), R)); + in(c, m5: bitstring); + if sdec(m5, R) = nonce_to_bitstring(challengeB) then + 0. + +(* The code for A or B talking to other participants can be considered +as part of the adversary, since it does not share secrets with the +code for A or B talking to A or B. (The only secret is the password.) + +The code for A talking to A (and for B talking to B) could also be +separated from the rest, since it does not share secrets with the code +for A talking to B and for B talking to A. + +Here, I made the choice that A and B use the same password when A +talks to B and when B talks to A. It would be easy to write the other +option in which they use a different password in each direction. *) + +process + (!processA(A, A, PAA)) | + (!processB(A, A, PAA)) | + (!processA(B, B, PBB)) | + (!processB(B, B, PBB)) | + (!processA(A, B, PAB)) | + (!processB(A, B, PAB)) | + (!processA(B, A, PAB)) | + (!processB(B, A, PAB)) | + (* This is equivalent to the query "weaksecret PAB", but formulated with "choice" instead. *) + (phase 1; + new w: passwd; + out(c, choice[w, PAB])) + + + + diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr1-host-getkey.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr1-host-getkey.pv new file mode 100644 index 0000000000000000000000000000000000000000..d965249da2d264db44c74f8f3613a7f2226e2468 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr1-host-getkey.pv @@ -0,0 +1,139 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c:channel. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +type skey. +type pkey. +type host. +type nonce. + +(* Public key encryption *) + +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. +reduc forall x:bitstring, y:skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Host *) + +fun fhost(skey):host. +reduc forall x:skey; getkey(fhost(x)) = x [private]. + +(* Signatures *) + +fun sign(bitstring,skey):bitstring. +reduc forall x:bitstring, y:skey; checksign(sign(x,y),pk(y)) = x. +reduc forall x:bitstring, y:skey; getmess(sign(x,y)) = x. + +(* Shared-key encryption *) + +fun sencrypt(bitstring, nonce):bitstring. +reduc forall x:bitstring, y:nonce; sdecrypt(sencrypt(x,y),y) = x. + + +fun nonce2bitstring(nonce):bitstring [data,typeConverter]. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +free secretBNa, secretBNb: bitstring [private]. + +let processA(hostA:host, hostB:host, pkA:pkey, skA:skey, pkS:pkey, secretANa:bitstring, secretANb:bitstring) = + (* Choose the other host *) + in(c,hostX:host); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms:bitstring); + let (pkX:pkey, =hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na:nonce; + out(c, encrypt((Na, hostA), pkX)); + in(c, m:bitstring); + let (=Na, NX2:nonce, =hostX) = decrypt(m, skA) in + out(c, encrypt(nonce2bitstring(NX2), pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB(hostA:host, hostB:host, pkB:pkey, skB:skey, pkS:pkey, secretBNa:bitstring, secretBNb:bitstring) = + (* Message 1 *) + in(c, m:bitstring); + let (NY:nonce, hostY:host) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms:bitstring); + let (pkY:pkey,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb:nonce; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3:bitstring); + if nonce2bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS(skS:skey) = + in(c,m:bitstring); + let (a:host,b:host) = m in + let sb = getkey(b) in + out(c,sign((pk(sb),b),skS)). + +process in(c, xANa:bitstring); + in(c, yANa:bitstring); + in(c, xANb:bitstring); + in(c, yANb:bitstring); + let secretANa = choice[xANa, yANa] in + let secretANb = choice[xANb, yANb] in + new skA:skey; let pkA = pk(skA) in + out(c, pkA); + new skB:skey; let pkB = pk(skB) in + out(c, pkB); + new skS:skey; let pkS = pk(skS) in + out(c, pkS); + let hostA = fhost(skA) in + out(c, hostA); + let hostB = fhost(skB) in + out(c, hostB); + ((!processA(hostA, hostB, pkA, skA, pkS, secretANa, secretANb)) | + (!processB(hostA, hostB, pkB, skB, pkS, secretBNa, secretBNb)) | + (!processS(skS))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr1.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr1.pv new file mode 100644 index 0000000000000000000000000000000000000000..662acf5cb325dc0784c848e3c99561038c8158e6 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr1.pv @@ -0,0 +1,148 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c:channel. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +set traceDisplay = long. + +type skey. +type pkey. +type host. +type nonce. + +(* Public key encryption *) + +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. +reduc forall x:bitstring, y:skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Host names *) + +const hostA, hostB: host. + +(* Table host/keys *) + +table keys(host, pkey). + +(* Signatures *) + +fun sign(bitstring,skey):bitstring. +reduc forall x:bitstring, y:skey; checksign(sign(x,y),pk(y)) = x. +reduc forall x:bitstring, y:skey; getmess(sign(x,y)) = x. + +(* Shared-key encryption *) + +fun sencrypt(bitstring, nonce):bitstring. +reduc forall x:bitstring, y:nonce; sdecrypt(sencrypt(x,y),y) = x. + + +fun nonce2bitstring(nonce):bitstring [data,typeConverter]. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +free secretBNa, secretBNb: bitstring [private]. + +let processA(pkA:pkey, skA:skey, pkS:pkey, secretANa:bitstring, secretANb:bitstring) = + (* Choose the other host *) + in(c,hostX:host); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms:bitstring); + let (pkX:pkey, =hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na:nonce; + out(c, encrypt((Na, hostA), pkX)); + in(c, m:bitstring); + let (=Na, NX2:nonce, =hostX) = decrypt(m, skA) in + out(c, encrypt(nonce2bitstring(NX2), pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB(pkB:pkey, skB:skey, pkS:pkey, secretBNa:bitstring, secretBNb:bitstring) = + (* Message 1 *) + in(c, m:bitstring); + let (NY:nonce, hostY:host) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms:bitstring); + let (pkY:pkey,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb:nonce; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3:bitstring); + if nonce2bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processK(pkA:pkey, pkB:pkey) = + in(c, (h:host, k:pkey)); + if (h <> hostA) && (h <> hostB) then + insert keys(h,k). + +let processS(skS:skey) = + in(c,m:bitstring); + let (a:host,b:host) = m in + get keys(=b, pkb) in + out(c,sign((pkb,b),skS)). + +process new skA:skey; let pkA = pk(skA) in + out(c, pkA); + new skB:skey; let pkB = pk(skB) in + out(c, pkB); + new skS:skey; let pkS = pk(skS) in + out(c, pkS); + insert keys(hostA, pkA); + insert keys(hostB, pkB); + ((!processK(pkA, pkB)) | + in(c, xANa:bitstring); + in(c, yANa:bitstring); + in(c, xANb:bitstring); + in(c, yANb:bitstring); + let secretANa = choice[xANa, yANa] in + let secretANb = choice[xANb, yANb] in + ((!processA(pkA, skA, pkS, secretANa, secretANb)) | + (!processB(pkB, skB, pkS, secretBNa, secretBNb)) | + (!processS(skS)))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2-host-getkey.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2-host-getkey.pv new file mode 100644 index 0000000000000000000000000000000000000000..5854de97658fa0a921edc430d698ce831bb861da --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2-host-getkey.pv @@ -0,0 +1,143 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c:channel. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +type skey. +type pkey. +type host. +type nonce. + +(* Public key encryption *) + +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. +reduc forall x:bitstring, y:skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Host *) + +fun fhost(skey):host. +reduc forall x:skey; getkey(fhost(x)) = x [private]. + +(* Signatures *) + +fun sign(bitstring,skey):bitstring. +reduc forall x:bitstring, y:skey; checksign(sign(x,y),pk(y)) = x. +reduc forall x:bitstring, y:skey; getmess(sign(x,y)) = x. + +(* Shared-key encryption *) + +fun sencrypt(bitstring, nonce):bitstring. +reduc forall x:bitstring, y:nonce; sdecrypt(sencrypt(x,y),y) = x. + + +fun nonce2bitstring(nonce):bitstring [data,typeConverter]. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +let processA(hostA:host, hostB:host, pkA:pkey, skA:skey, pkS:pkey, secretANa:bitstring, secretANb:bitstring) = + (* Choose the other host *) + in(c,hostX:host); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms:bitstring); + let (pkX:pkey, =hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na:nonce; + out(c, encrypt((Na, hostA), pkX)); + in(c, m:bitstring); + let (=Na, NX2:nonce, =hostX) = decrypt(m, skA) in + out(c, encrypt(nonce2bitstring(NX2), pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB(hostA:host, hostB:host, pkB:pkey, skB:skey, pkS:pkey, secretBNa:bitstring, secretBNb:bitstring) = + (* Message 1 *) + in(c, m:bitstring); + let (NY:nonce, hostY:host) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms:bitstring); + let (pkY:pkey,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb:nonce; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3:bitstring); + if nonce2bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processS(skS:skey) = + in(c,m:bitstring); + let (a:host,b:host) = m in + let sb = getkey(b) in + out(c,sign((pk(sb),b),skS)). + +process in(c, xANa:bitstring); + in(c, yANa:bitstring); + in(c, xANb:bitstring); + in(c, yANb:bitstring); + in(c, xBNa:bitstring); + in(c, yBNa:bitstring); + in(c, xBNb:bitstring); + in(c, yBNb:bitstring); + let secretANa = choice[xANa, yANa] in + let secretANb = choice[xANb, yANb] in + let secretBNa = choice[xBNa, yBNa] in + let secretBNb = choice[xBNb, yBNb] in + new skA:skey; let pkA = pk(skA) in + out(c, pkA); + new skB:skey; let pkB = pk(skB) in + out(c, pkB); + new skS:skey; let pkS = pk(skS) in + out(c, pkS); + let hostA = fhost(skA) in + out(c, hostA); + let hostB = fhost(skB) in + out(c, hostB); + ((!processA(hostA, hostB, pkA, skA, pkS, secretANa, secretANb)) | + (!processB(hostA, hostB, pkB, skB, pkS, secretBNa, secretBNb)) | + (!processS(skS))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2-proba.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2-proba.pv new file mode 100644 index 0000000000000000000000000000000000000000..d9cec5289fb022086d01e4e79af824fe917baaba --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2-proba.pv @@ -0,0 +1,156 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c:channel. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +set traceDisplay = long. + +type skey. +type pkey. +type host. +type nonce. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Host names *) + +const hostA, hostB: host. + +(* Table host/keys *) + +table keys(host, pkey). + +(* Signatures *) + +fun sign(bitstring,skey):bitstring. +reduc forall x:bitstring, y:skey; checksign(sign(x,y),pk(y)) = x. +reduc forall x:bitstring, y:skey; getmess(sign(x,y)) = x. + +(* Probabilistic shared key encryption *) + +type sseed. +fun internal_sencrypt(bitstring,nonce,sseed): bitstring. +reduc forall x: bitstring, y: nonce, r: sseed; sdecrypt(internal_sencrypt(x,y,r),y) = x. +letfun sencrypt(x: bitstring, y: nonce) = new r: sseed; internal_sencrypt(x,y,r). + +fun nonce2bitstring(nonce):bitstring [data,typeConverter]. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +let processA(pkA:pkey, skA:skey, pkS:pkey, secretANa:bitstring, secretANb:bitstring) = + (* Choose the other host *) + in(c,hostX:host); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms:bitstring); + let (pkX:pkey, =hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na:nonce; + out(c, encrypt((Na, hostA), pkX)); + in(c, m:bitstring); + let (=Na, NX2:nonce, =hostX) = decrypt(m, skA) in + out(c, encrypt(nonce2bitstring(NX2), pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB(pkB:pkey, skB:skey, pkS:pkey, secretBNa:bitstring, secretBNb:bitstring) = + (* Message 1 *) + in(c, m:bitstring); + let (NY:nonce, hostY:host) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms:bitstring); + let (pkY:pkey,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb:nonce; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3:bitstring); + if nonce2bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processK(pkA:pkey, pkB:pkey) = + in(c, (h:host, k:pkey)); + if (h <> hostA) && (h <> hostB) then + insert keys(h,k). + +let processS(skS:skey) = + in(c,m:bitstring); + let (a:host,b:host) = m in + get keys(=b, pkb) in + out(c,sign((pkb,b),skS)). + +process new skA:skey; let pkA = pk(skA) in + out(c, pkA); + new skB:skey; let pkB = pk(skB) in + out(c, pkB); + new skS:skey; let pkS = pk(skS) in + out(c, pkS); + insert keys(hostA, pkA); + insert keys(hostB, pkB); + ((!processK(pkA, pkB)) | + in(c, xANa:bitstring); + in(c, yANa:bitstring); + in(c, xANb:bitstring); + in(c, yANb:bitstring); + in(c, xBNa:bitstring); + in(c, yBNa:bitstring); + in(c, xBNb:bitstring); + in(c, yBNb:bitstring); + let secretANa = choice[xANa, yANa] in + let secretANb = choice[xANb, yANb] in + let secretBNa = choice[xBNa, yBNa] in + let secretBNb = choice[xBNb, yBNb] in + ((!processA(pkA, skA, pkS, secretANa, secretANb)) | + (!processB(pkB, skB, pkS, secretBNa, secretBNb)) | + (!processS(skS)))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2.pv new file mode 100644 index 0000000000000000000000000000000000000000..4aa60581b5237c29600d95e94c4ed9b2e4d99e07 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/NeedhamSchroederPK-corr2.pv @@ -0,0 +1,152 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +free c:channel. +(* + +? -> A : pkB +A -> B : { N_A, A }_pkB +B -> S : (B,A) +S -> B : { A, pkA }_sS +B -> A : { N_A, N_B, pkB }_pkA +A -> B : { N_B }_pkB + +*) + +set traceDisplay = long. + +type skey. +type pkey. +type host. +type nonce. + +(* Public key encryption *) + +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. +reduc forall x:bitstring, y:skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Host names *) + +const hostA, hostB: host. + +(* Table host/keys *) + +table keys(host, pkey). + +(* Signatures *) + +fun sign(bitstring,skey):bitstring. +reduc forall x:bitstring, y:skey; checksign(sign(x,y),pk(y)) = x. +reduc forall x:bitstring, y:skey; getmess(sign(x,y)) = x. + +(* Shared-key encryption *) + +fun sencrypt(bitstring, nonce):bitstring. +reduc forall x:bitstring, y:nonce; sdecrypt(sencrypt(x,y),y) = x. + + +fun nonce2bitstring(nonce):bitstring [data,typeConverter]. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +let processA(pkA:pkey, skA:skey, pkS:pkey, secretANa:bitstring, secretANb:bitstring) = + (* Choose the other host *) + in(c,hostX:host); + (* Get the public key certificate for the other host *) + out(c, (hostA, hostX)); + in(c, ms:bitstring); + let (pkX:pkey, =hostX) = checksign(ms,pkS) in + (* Message 1 *) + new Na:nonce; + out(c, encrypt((Na, hostA), pkX)); + in(c, m:bitstring); + let (=Na, NX2:nonce, =hostX) = decrypt(m, skA) in + out(c, encrypt(nonce2bitstring(NX2), pkX)); + (* OK *) + if hostX = hostB then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +let processB(pkB:pkey, skB:skey, pkS:pkey, secretBNa:bitstring, secretBNb:bitstring) = + (* Message 1 *) + in(c, m:bitstring); + let (NY:nonce, hostY:host) = decrypt(m, skB) in + (* Get the public key certificate for the other host *) + out(c, (hostB, hostY)); + in(c,ms:bitstring); + let (pkY:pkey,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb:nonce; + (* Message 3 *) + out(c, encrypt((NY, Nb, hostB), pkY)); + in(c, m3:bitstring); + if nonce2bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = hostA then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +let processK(pkA:pkey, pkB:pkey) = + in(c, (h:host, k:pkey)); + if (h <> hostA) && (h <> hostB) then + insert keys(h,k). + +let processS(skS:skey) = + in(c,m:bitstring); + let (a:host,b:host) = m in + get keys(=b, pkb) in + out(c,sign((pkb,b),skS)). + +process new skA:skey; let pkA = pk(skA) in + out(c, pkA); + new skB:skey; let pkB = pk(skB) in + out(c, pkB); + new skS:skey; let pkS = pk(skS) in + out(c, pkS); + insert keys(hostA, pkA); + insert keys(hostB, pkB); + ((!processK(pkA, pkB)) | + in(c, xANa:bitstring); + in(c, yANa:bitstring); + in(c, xANb:bitstring); + in(c, yANb:bitstring); + in(c, xBNa:bitstring); + in(c, yBNa:bitstring); + in(c, xBNb:bitstring); + in(c, yBNb:bitstring); + let secretANa = choice[xANa, yANa] in + let secretANb = choice[xANb, yANb] in + let secretBNa = choice[xBNa, yBNa] in + let secretBNb = choice[xBNb, yBNb] in + ((!processA(pkA, skA, pkS, secretANa, secretANb)) | + (!processB(pkB, skB, pkS, secretBNa, secretBNb)) | + (!processS(skS)))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/basic1.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/basic1.pv new file mode 100644 index 0000000000000000000000000000000000000000..8b754931aab76527bb2086ac8ebc7c9daa38a1a9 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/basic1.pv @@ -0,0 +1,36 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type nonce. + +fun hash(nonce): nonce. + +free c: channel. + +process + new n: nonce; + out(c, choice[n, hash(n)]) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/basic2.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/basic2.pv new file mode 100644 index 0000000000000000000000000000000000000000..fa883653a9a8b914ec76b3dc79943c91dbcd3bb4 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/basic2.pv @@ -0,0 +1,36 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type nonce. + +fun hash(nonce): nonce. + +free c: channel. + +process + new n: nonce; new m: nonce; + out(c, (m, choice[n, hash(m)])) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/dh-fs.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/dh-fs.pv new file mode 100644 index 0000000000000000000000000000000000000000..19cc39e44e10304ab55f66975b779c4da3906d49 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/dh-fs.pv @@ -0,0 +1,42 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type G. +type exponent. + +(* Diffie-Hellman *) + +const g: G [data]. +fun exp(G, exponent): G. + +equation forall x: exponent, y: exponent; exp(exp(g,x),y) = exp(exp(g,y),x). + +free c: channel. + +process + new a1: exponent; new a2: exponent; new a3: exponent; + out(c, (exp(g,a1), exp(g,a2), choice[exp(exp(g,a1),a2), exp(g,a3)])) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/epassportUK_biprocess.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/epassportUK_biprocess.pv new file mode 100644 index 0000000000000000000000000000000000000000..ba50ca7659b13ba10723039cd27ae7f4a6d27969 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/epassportUK_biprocess.pv @@ -0,0 +1,95 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* ePassport Protocol + Taken from Myrto Ryan, CSF'10 *) + +(* set simplifyProcess = interactive. *) + +fun enc(bitstring, bitstring): bitstring. +fun mac(bitstring,bitstring): bitstring. + +(* Symetric decryption *) + +reduc forall x: bitstring, y:bitstring; dec(enc(x,y),y) = x. + + +(* addition of one *) + +free c: channel. +free d_k:channel [private]. +free get_challenge: bitstring. +free error_6A80: bitstring. +free error: bitstring [private]. + +let reader(c_k:channel) = + in(c_k, x_k:bitstring); + let (ke:bitstring,km:bitstring) = x_k in + out(c, get_challenge); + in(c,nt:bitstring); + new nr:bitstring; + new kr:bitstring; + let m:bitstring = enc((nr,nt,kr),ke) in + out(c,(m,mac(m,km))); + in(c,y:bitstring). + +let passportUK(c_k:channel, ke:bitstring, km:bitstring) = + out(c_k,(ke,km)); + in(c,x:bitstring); + if x = get_challenge + then + new nt:bitstring; + out(c,nt); + in(c,y:bitstring); + + let (m_e:bitstring,m_m:bitstring) = y in + if mac(m_e,km) = m_m + then + let (nr:bitstring,nt':bitstring,kr:bitstring) = dec(m_e,ke) in + if nt = nt' + then + new kt:bitstring; + let m:bitstring = enc((nt,nr,kt),ke) in + out(c,(m,mac(m,km))) + else 0 + else + out(c,error_6A80) + else + out(c, error_6A80) + else + out(c,error_6A80). + + +process + new c_k:channel; + ( + !reader(c_k) + | + !new ke1:bitstring; new km1:bitstring; + !new ke2:bitstring; new km2:bitstring; + passportUK(c_k,choice[ke1,ke2],choice[km1,km2]) + ) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/epassportUK_processes.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/epassportUK_processes.pv new file mode 100644 index 0000000000000000000000000000000000000000..d631fb362163192cafd821a4201b7f32674a742c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/epassportUK_processes.pv @@ -0,0 +1,90 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* ePassport Protocol + Taken from Myrto Ryan, CSF'10 *) + +(* set simplifyProcess = interactive. *) + +fun enc(bitstring, bitstring): bitstring. +fun mac(bitstring,bitstring): bitstring. + +(* Symetric decryption *) + +reduc forall x: bitstring, y:bitstring; dec(enc(x,y),y) = x. + + +(* addition of one *) + +free c: channel. +free d_k:channel [private]. +free get_challenge: bitstring. +free error_6A80: bitstring. +free error: bitstring [private]. + +let reader(c_k:channel) = + in(c_k, x_k:bitstring); + let (ke:bitstring,km:bitstring) = x_k in + out(c, get_challenge); + in(c,nt:bitstring); + new nr:bitstring; + new kr:bitstring; + let m:bitstring = enc((nr,nt,kr),ke) in + out(c,(m,mac(m,km))); + in(c,y:bitstring). + +let passportUK(c_k:channel, ke:bitstring, km:bitstring) = + out(c_k,(ke,km)); + in(c,x:bitstring); + if x = get_challenge + then + new nt:bitstring; + out(c,nt); + in(c,y:bitstring); + + let (m_e:bitstring,m_m:bitstring) = y in + if mac(m_e,km) = m_m + then + let (nr:bitstring,nt':bitstring,kr:bitstring) = dec(m_e,ke) in + if nt = nt' + then + new kt:bitstring; + let m:bitstring = enc((nt,nr,kt),ke) in + out(c,(m,mac(m,km))) + else 0 + else + out(c,error_6A80) + else + out(c, error_6A80) + else + out(c,error_6A80). + + +equivalence + new c_k:channel;(!reader(c_k) | !new ke:bitstring; new km:bitstring; passportUK(c_k,ke,km)) + + new c_k:channel;(!reader(c_k) | !new ke:bitstring; new km:bitstring; !passportUK(c_k,ke,km)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/handshake.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/handshake.pv new file mode 100644 index 0000000000000000000000000000000000000000..140ab9c99a644940894d96f169a984690ff06be6 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/handshake.pv @@ -0,0 +1,61 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Handshake protocol. + Taken from Delaune, Jacquemard, CSFW'04 *) + +type passwd. +type nonce. + +(* shared-key encryption as equation *) + +fun encrypt(nonce, passwd): nonce. +fun decrypt(nonce, passwd): nonce. +equation forall x: nonce, y: passwd; decrypt(encrypt(x,y),y) = x. +equation forall x: nonce, y: passwd; encrypt(decrypt(x,y),y) = x. + +(* addition of one *) + +fun incr(nonce): nonce. + +free c: channel. +free pw: passwd [private]. + +let processA = + new N: nonce; + out(c, encrypt(N, pw)). + +let processB = + in(c, x: nonce); + let y = decrypt(x, pw) in + out(c, encrypt(incr(y), pw)). + +process + ((!processA) | (!processB) | + (phase 1; + new w: passwd; + out(c, choice[w,pw]))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/macs.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/macs.pv new file mode 100644 index 0000000000000000000000000000000000000000..1950029b20684f14633977a6b85333e170db8f9f --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/macs.pv @@ -0,0 +1,64 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Comparing an abstract MAC primitive to its implementation using + hashes of blocks, as explained in "mobile values", section 6. + This example amounts to a change of signature, with + the implementation signature having additional equations for the + benefit of the attacker. *) + +type key. +type block. + +fun mac(key, bitstring): bitstring. (* MAC specification, with no equation. *) +fun impl(key, bitstring): bitstring [private]. (* choice of a MAC implementation *) + +fun f(key, bitstring): bitstring. (* variable-length keyed hash *) +fun h(bitstring, block): bitstring. (* keyed-hash for a single block *) + +(* +The first, broken implementation uses +equation impl(k,x) = f(k,x). + +The second, correct implementation uses +equation impl(k,x) = f(k,f(k,x)). +*) + +equation forall k: key, x: bitstring; impl(k,x) = f(k,f(k,x)). + +equation forall x: key, y: bitstring, z: block; h(f(x,y),z) = f(x,(y,z)). + +free c, c1, c2: channel. + +process + new k: key; + ( + ( !in(c1, x: bitstring); out(c,(x,choice[mac(k,x),impl(k,x)]))) + | + ( in(c,(x: bitstring, m: bitstring)); + if choice[mac(k,x),impl(k,x)] = m then out(c2,x)) + ) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_bounded_biprocess.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_bounded_biprocess.pv new file mode 100644 index 0000000000000000000000000000000000000000..a842285e0019e671571560b94931bb6d2a63583c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_bounded_biprocess.pv @@ -0,0 +1,70 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Private Authentication + Taken from Delaune, Jacquemard, CSFW'04 *) + +(* set simplifyProcess = interactive. *) + +(* shared-key encryption as equation *) + +fun aenc(bitstring, bitstring): bitstring. +fun pk(bitstring): bitstring. + +reduc forall x: bitstring, y: bitstring; adec(aenc(x,pk(y)),y) = x. + +(* declaration of public name*) + +free c: channel. + +(* declaration of biprocess *) + +let processA(sk_a:bitstring,sk_b:bitstring) = + new n_a: bitstring; + out(c, aenc((n_a,pk(sk_a)),pk(sk_b))); + in(c, x:bitstring); + 0. + +let processB(sk_b:bitstring,sk_a:bitstring) = + in(c, x:bitstring); + new n_b:bitstring; + + let (n_a:bitstring,pub_a:bitstring) = adec(x, sk_b) in + if pub_a = pk(sk_a) + then + out(c,aenc((n_a,n_b,pk(sk_b)),pk(sk_a))) + else + out(c,aenc(n_b,pk(sk_b))) + else + out(c,aenc(n_b,pk(sk_b))). + +let system(sk_a:bitstring,sk_b:bitstring) = !processA(sk_a,sk_b) | !processB(sk_b,sk_a). + +process + new sk_a:bitstring; new sk_b:bitstring; new sk_c:bitstring; + !out(c,pk(sk_a));out(c,pk(sk_b));out(c,pk(sk_c)); + system(choice[sk_a,sk_c],sk_b) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_bounded_processes.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_bounded_processes.pv new file mode 100644 index 0000000000000000000000000000000000000000..b7e296eaddcc9e86e0b398e42b087f3ce0401a00 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_bounded_processes.pv @@ -0,0 +1,74 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Private Authentication + Taken from Delaune, Jacquemard, CSFW'04 *) + +(*set simplifyProcess = interactive.*) + +(* shared-key encryption as equation *) + +fun aenc(bitstring, bitstring): bitstring. +fun pk(bitstring): bitstring. + +reduc forall x: bitstring, y: bitstring; adec(aenc(x,pk(y)),y) = x. + +(* declaration of public name*) + +free c: channel. + +(* declaration of biprocess *) + +let processA(sk_a:bitstring,sk_b:bitstring) = + new n_a: bitstring; + out(c, aenc((n_a,pk(sk_a)),pk(sk_b))); + in(c, x:bitstring); + 0. + +let processB(sk_b:bitstring,sk_a:bitstring) = + in(c, x:bitstring); + new n_b:bitstring; + + let (n_a:bitstring,pub_a:bitstring) = adec(x, sk_b) in + if pub_a = pk(sk_a) + then + out(c,aenc((n_a,n_b,pk(sk_b)),pk(sk_a))) + else + out(c,aenc(n_b,pk(sk_b))) + else + out(c,aenc(n_b,pk(sk_b))). + +let system(sk_a:bitstring,sk_b:bitstring) = !processA(sk_a,sk_b) | !processB(sk_b,sk_a). + + +equivalence + new sk_a:bitstring; new sk_b:bitstring; new sk_c:bitstring; + out(c,pk(sk_a));out(c,pk(sk_b));out(c,pk(sk_c)); system(sk_a,sk_b) + + new sk_a:bitstring; new sk_b:bitstring; new sk_c:bitstring; + out(c,pk(sk_a));out(c,pk(sk_b));out(c,pk(sk_c)); system(sk_c,sk_b) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_unbound.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_unbound.pv new file mode 100644 index 0000000000000000000000000000000000000000..2543a34802a33773d701a844f38acbfb27de6797 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/private_authentication_unbound.pv @@ -0,0 +1,81 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Private Authentication + Taken from Delaune, Jacquemard, CSFW'04 *) + +(*set simplifyProcess = interactive.*) + +(* shared-key encryption as equation *) + +fun aenc(bitstring, bitstring): bitstring. +fun pk(bitstring): bitstring. + +reduc forall x: bitstring, y: bitstring; adec(aenc(x,pk(y)),y) = x. + +(* declaration of public name*) + +free c: channel. + +(* declaration of biprocess *) + +let processA(sk_a:bitstring,sk_b:bitstring) = + new n_a: bitstring; + out(c, aenc((n_a,pk(sk_a)),pk(sk_b))); + in(c, x:bitstring); + 0. + +let processB(sk_b:bitstring,sk_a:bitstring) = + in(c, x:bitstring); + new n_b:bitstring; + + let (n_a:bitstring,pub_a:bitstring) = adec(x, sk_b) in + if pub_a = pk(sk_a) + then + out(c,aenc((n_a,n_b,pk(sk_b)),pk(sk_a))) + else + out(c,aenc(n_b,pk(sk_b))) + else + out(c,aenc(n_b,pk(sk_b))). + +let system(sk_a:bitstring,sk_b:bitstring) = processA(sk_a,sk_b) | processB(sk_b,sk_a). + +equivalence + new sk_b:bitstring; new sk_a:bitstring; out(c,pk(sk_b)); out(c,pk(sk_a)); + ( + (! new sk_c:bitstring;! system(sk_c,sk_b)) + | + (! new sk_c:bitstring;! system(sk_c,sk_b)) + ) + + new sk_b:bitstring; new sk_a:bitstring; out(c,pk(sk_b)); out(c,pk(sk_a)); + ( + (! new sk_c:bitstring;! system(sk_c,sk_b)) + | + !system(sk_a,sk_b) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/proba-pk.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/proba-pk.pv new file mode 100644 index 0000000000000000000000000000000000000000..8ed23fcd63097a3ee1cd7ffe12649e2a2dbca09b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/proba-pk.pv @@ -0,0 +1,54 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type skey. +type pkey. +type seed. +type block. +type encblock. + +(* Probabilistic public-key encryption *) + +fun pk(skey): pkey. +fun enc(block, pkey, seed): encblock. +fun dec(encblock, skey): block. +equation forall x: block, y: skey, z: seed; dec(enc(x, pk(y), z), y) = x. + + +free c,c2: channel. + +process + new s: skey; + ( + out(c, pk(s)) + | + ! + in(c2, x: block); + new a: seed; + new r: encblock; + out(c, choice[enc(x, pk(s), a), r]) + ) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/vote.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/vote.pv new file mode 100644 index 0000000000000000000000000000000000000000..c31d73843f088f34aa1fc8b24d941abbd6ccc309 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/vote.pv @@ -0,0 +1,51 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Naive vote protocol + Taken from Delaune, Jacquemard, LSV-04-1 *) + +type skey. +type pkey. + +(* public key encryption *) + +fun pk(skey):pkey. +fun encrypt(bitstring,pkey):bitstring. +reduc forall x:bitstring, y:skey; decrypt(encrypt(x,pk(y)), y) = x. + +free c:channel. +free v:bitstring [private]. + +process + (new skS:skey; + let pkS = pk(skS) in + out(c, pkS); + !out(c, encrypt(v, pkS))) + | + (phase 1; + new w:bitstring; + out(c, choice[w,v])) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-auth.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-auth.pv new file mode 100644 index 0000000000000000000000000000000000000000..b6a5c6415122699afdc02f26c76abdea59f9c585 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-auth.pv @@ -0,0 +1,67 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Wide Mouth Frog protocol. + Example taken from Abadi, Gordon, A Calculus for Cryptographic + Protocols. The Spi Calculus. SRC research report 149. + Pages 14-- +*) + +type key. + +fun key_to_bitstring(key): bitstring [data, typeConverter]. + +(* Shared-key encryption *) + +fun encrypt(bitstring, key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +free c,e: channel. + +let processA(Kas: key, M: bitstring) = + new Kab: key; + out(c, encrypt(key_to_bitstring(Kab), Kas)); + out(c, encrypt(M, Kab)). + +let processS(Kas: key, Ksb: key) = + in(c, x: bitstring); + let key_to_bitstring(y) = decrypt(x, Kas) in + out(c, encrypt(key_to_bitstring(y), Ksb)). + +let processB(Ksb: key, M: bitstring) = + in(c, x: bitstring); + let key_to_bitstring(y) = decrypt(x, Ksb) in + in(c, z: bitstring); + let w = decrypt(z,y) in + out(e, choice[w,M]). + + +process + in(c, M: bitstring); + new Kas: key; + new Ksb: key; + (processA(Kas, M) | processS(Kas, Ksb) | processB(Ksb, M)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-tagged-strongsecrecyKeyA.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-tagged-strongsecrecyKeyA.pv new file mode 100644 index 0000000000000000000000000000000000000000..1fc6bbe7d9af15a19f0776f9f45fddd47abe4723 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-tagged-strongsecrecyKeyA.pv @@ -0,0 +1,104 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type coins. +type host. +type key. +type tag. + +free c: channel. + +(* +A -> S : A, { c0, B, Kab }_{Kas} +S -> B : { c1, A, Kab }_{Kbs} +I added tags to distinguish the two encryptions. +*) + +not attacker(new Kas). +not attacker(new Kbs). + +(* Shared key encryption *) + +fun encrypt(bitstring, key, coins):bitstring. +reduc forall x:bitstring, y:key, r:coins; decrypt(encrypt(x,y,r),y) = x. + +(* Host names *) +free A, B:host. + +(* Tags to distinguish the first from the second encryption *) +free c0,c1:tag. + +(* Channel on which the table of keys is sent *) +table keytable(host, key). + +let processInit = + (* Start honest initiator xI (A or B) wishing to talk to (honest or dishonest) xR. + Kis is the key of xI *) + in(c, (xI: host, xR:host )); + if xI = A || xI = B then + get keytable(=xI, Kis) in + (* Real initiator role *) + new Kab: key; + new r: coins; + out(c, (xI, encrypt((c0, xR, Kab), Kis, r))); + (* OK *) + if xR = A || xR = B then + new Kab':key; + out(c, choice[Kab, Kab']). + +let processS = + in(c, (a:host, m:bitstring)); + get keytable(=a, kas) in + let (=c0, b:host, kab:key) = decrypt(m,kas) in + get keytable(=b, kbs) in + new r: coins; + out(c, encrypt((c1, a, kab), kbs, r)). + +let processK = + in(c, (h:host,k:key)); + if h <> A && h <> B then insert keytable(h,k). + +let processResp = + (* Start honest responder of identity xR, which can be A or B. + Krs is its corresponding key *) + in(c, xR:host); + if xR = A || xR = B then + get keytable(=xR, Krs) in + (* Real responder role *) + in(c, m:bitstring); + let (=c1, a:host, kab:key) = decrypt(m, Krs) in + (* OK *) + 0. + +process + new Kas:key; new Kbs:key; + insert keytable(A, Kas); + insert keytable(B, Kbs); + ((!processInit) | + (!processResp) | + (!processS) | + (!processK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-tagged-strongsecrecyKeyB.pv b/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-tagged-strongsecrecyKeyB.pv new file mode 100644 index 0000000000000000000000000000000000000000..4ed200028ccea96294fa2c336b45b4a21584ce3a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/choice/wmf-tagged-strongsecrecyKeyB.pv @@ -0,0 +1,104 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type coins. +type host. +type key. +type tag. + +free c: channel. + +(* +A -> S : A, { c0, B, Kab }_{Kas} +S -> B : { c1, A, Kab }_{Kbs} +I added tags to distinguish the two encryptions. +*) + +not attacker(new Kas). +not attacker(new Kbs). + +(* Shared key encryption *) + +fun encrypt(bitstring, key, coins):bitstring. +reduc forall x:bitstring, y:key, r:coins; decrypt(encrypt(x,y,r),y) = x. + +(* Host names *) +free A, B:host. + +(* Tags to distinguish the first from the second encryption *) +free c0,c1:tag. + +(* Channel on which the table of keys is sent *) +table keytable(host, key). + +let processInit = + (* Start honest initiator xI (A or B) wishing to talk to (honest or dishonest) xR. + Kis is the key of xI *) + in(c, (xI: host, xR:host )); + if xI = A || xI = B then + get keytable(=xI, Kis) in + (* Real initiator role *) + new Kab: key; + new r: coins; + out(c, (xI, encrypt((c0, xR, Kab), Kis, r))); + (* OK *) + 0. + +let processS = + in(c, (a:host, m:bitstring)); + get keytable(=a, kas) in + let (=c0, b:host, kab:key) = decrypt(m,kas) in + get keytable(=b, kbs) in + new r: coins; + out(c, encrypt((c1, a, kab), kbs, r)). + +let processK = + in(c, (h:host,k:key)); + if h <> A && h <> B then insert keytable(h,k). + +let processResp = + (* Start honest responder of identity xR, which can be A or B. + Krs is its corresponding key *) + in(c, xR:host); + if xR = A || xR = B then + get keytable(=xR, Krs) in + (* Real responder role *) + in(c, m:bitstring); + let (=c1, a:host, kab:key) = decrypt(m, Krs) in + (* OK *) + if a = A || a = B then + new Kab': key; + out(c, choice[kab, Kab']). + +process + new Kas:key; new Kbs:key; + insert keytable(A, Kas); + insert keytable(B, Kbs); + ((!processInit) | + (!processResp) | + (!processS) | + (!processK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/ffgg/ffgg.ml b/preinstallTTool/linux/proverif/examples/pitype/ffgg/ffgg.ml new file mode 100644 index 0000000000000000000000000000000000000000..76780049b83b6b35b830127a00461f709e3df665 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/ffgg/ffgg.ml @@ -0,0 +1,109 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + + +let ffgg n = + print_string "(* Generated script of the protocol f^ng^n for n = "; + print_int n; + print_string " + See Jonathan Millen, A Necessarily Parallel Attack, + Workshop on Formal Methods and Security Protocols (FMSP'99) + July 99. *) + +type skey. +type pkey. +type host. +type nonce. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Host names *) + +const A, B: host. + + +free c: channel. +free M: nonce [private]. + +query attacker(M). + +let processA(pkB: pkey) = + out(c, A); + in(c,(=B"; + for i = 1 to n do + print_string ", n"; + print_int i; + print_string ": nonce" + done; + print_string "));\n\tout(c, (A, encrypt(("; + for i = 1 to n do + print_string "n"; + print_int i; + print_string ", " + done; + print_string "M ), pkB))).\n\nlet processB(skB: skey, pkB: pkey) = \n\tin(c, =A);\n"; + for i = 1 to n do + print_string "new n"; + print_int i; + print_string ": nonce; " + done; + print_string "\n\tout(c, (B"; + for i = 1 to n do + print_string ", n"; + print_int i + done; + print_string "));\n\tin(c, (=A, mes: bitstring));\n\tlet (=n1"; + for i = 1 to n do + print_string ", x"; + print_int i; + print_string ": nonce" + done; + print_string ") = decrypt(mes, skB) in\n\tout(c, (n1, x1, encrypt(("; + for i = 1 to n do + print_string "x"; + print_int i; + print_string ", " + done; + print_string "n1), pkB))). + +process + new skB: skey; let pkB = pk(skB) in + out(c, pkB); + ((!processA(pkB)) | (!processB(skB, pkB))) +" + + +let _ = + try + ffgg (int_of_string (Sys.argv.(1))) + with _ -> + print_string "Error. Usage: ffgg n\nwhere n is an integer\n" diff --git a/preinstallTTool/linux/proverif/examples/pitype/ffgg/gen b/preinstallTTool/linux/proverif/examples/pitype/ffgg/gen new file mode 100755 index 0000000000000000000000000000000000000000..db96e58efb1df5eb5ddcfd9ca771f3583e356fe6 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/ffgg/gen @@ -0,0 +1,35 @@ +#!/bin/sh + +if [ -x ../../../xtime ] +then + PROG=../../../xtime +else + PROG=time +fi + +ocamlc -o ffgg ffgg.ml + +for i in 10 50 100 150 200 +do + ./ffgg $i > ffgg$i.pv + (echo "set traceDisplay = long."; cat ffgg$i.pv) > ffgg$i-long.pv + (echo "set reconstructTrace = no."; cat ffgg$i.pv) > ffgg$i-notrace.pv +done + +( + +for i in 10 50 100 150 200 +do + echo FFGG$i + echo -n "No trace: " + $PROG ../../../proverif ffgg$i-notrace.pv > ffgg$i.out.notrace + grep user ffgg$i.out.notrace + echo -n "Short display: " + $PROG ../../../proverif ffgg$i.pv > ffgg$i.out + grep user ffgg$i.out +# echo -n "Long display: " +# $PROG ../../../proverif ffgg$i-long.pv > ffgg$i.out.long +# grep user ffgg$i.out.long +done + +) | tee results diff --git a/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKi b/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKi new file mode 100644 index 0000000000000000000000000000000000000000..3040dbf267306d6c0d634a99783baf94cef52c43 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKi @@ -0,0 +1,529 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKi *) + +set redundantHypElim = beginOnly. + +type G. +type texponent. +type skey. +type pkey. +type key. +type tag. +type nonce. +type grpinfo. +type sainfo. + +fun G_to_key(G):key [data, typeConverter]. + +(* Exponential and Diffie-Hellman *) + +const g: G. +fun exp(G, texponent): G. +equation forall y: texponent, z: texponent; exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S(skey, bitstring): bitstring. +fun Pk(skey): pkey. +fun V(bitstring, pkey, bitstring): bool. +fun RecoverKey(bitstring): pkey. +fun RecoverText(bitstring): bitstring. +equation forall k: skey, v: bitstring; V(S(k,v), Pk(k),v) = true. +equation forall k: skey, v: bitstring; RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +equation forall k: skey, v: bitstring; RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E(key, bitstring): bitstring. +fun D(key, bitstring): bitstring. +equation forall k: key, v: bitstring; D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H(key, bitstring): key. + +(* Sets *) + +type keyset. +fun consset(key, keyset): keyset [data]. +const emptyset: keyset [data]. +pred member(key, keyset). +clauses + forall x: key, y: keyset; member(x,consset(x,y)); + forall x: key, y: keyset, z: key; member(x,y) -> member(x,consset(z,y)). + +type idset. +fun considset(pkey, idset): idset [data]. +const emptyidset: idset [data]. +pred memberid(pkey, idset). +clauses + forall x: pkey, y: idset; memberid(x,considset(x,y)); + forall x: pkey, y: idset, z: pkey; memberid(x,y) -> memberid(x,considset(z,y)). + +(* Tags *) + +const tagE, tagA, tagV: tag [data]. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +fun cons1(nonce, G, pkey): bitstring [data]. +fun cons2(nonce, nonce, G, grpinfo, pkey, bitstring, key): bitstring [data] . +fun cons3(nonce, nonce, G, G, key, bitstring, key): bitstring [data]. +fun cons4(bitstring, key): bitstring [data]. + +(* More constants *) + +const constI, constR: tag [data]. + +(* Free names *) + +free c: channel. (* Public channel *) +free pub, getprinc, getexponential: channel. + +(* Queries: properties to prove *) + +(* Correspondence assertions *) + +event princ(skey, pkey, channel, channel, channel, idset). +event enddosi(pkey, nonce). +event enddosr(pkey, nonce, nonce). +event initev(channel, idset, pkey, sainfo). +event mess1(pkey, nonce, G, pkey, channel, idset, sainfo). +event mess1rec(pkey, nonce, G, pkey). +event mess2(pkey, nonce, nonce, G, G, grpinfo, bitstring, key, pkey). +event mess2rec(pkey, nonce, nonce, G, grpinfo, pkey, bitstring, key, G, pkey, sainfo). +event mess3(pkey, nonce, nonce, G, G, key, bitstring, key, grpinfo, pkey, sainfo, key). +event mess3rec(pkey, nonce, nonce, G, G, key, bitstring, key). +event mess4(pkey, pkey, bitstring, key, nonce, nonce, G, G, key, bitstring, key). +event mess4rec(pkey, bitstring, key, channel, pkey, sainfo, sainfo, key). +event acceptev(channel, pkey, sainfo, sainfo, key). +event accepthonest(channel, pkey, sainfo, sainfo, key). +event connectev(channel, pkey, sainfo, sainfo, key). +event connecthonest(channel, pkey, sainfo, sainfo, key). + +ifdef(`EVCACHE',` + (* Denial of service for I. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XNI: nonce, XNR: nonce, XxR: G, XgrpinfoR: grpinfo, XIDB: pkey, XsR2: bitstring, XtR: key, XxI: G, XIDRp: pkey, XsaI: sainfo, Xautorid: idset; + inj-event(enddosi(XIDA, XNI)) ==> + (inj-event(mess2rec(XIDA, XNI, XNR, XxR, XgrpinfoR, XIDB, XsR2, XtR, XxI, XIDRp, XsaI)) ==> + (inj-event(mess1(XIDA, XNI, XxI, XIDRp, XinitA, Xautorid, XsaI)) ==> + inj-event(initev(XinitA, Xautorid, XIDRp, XsaI)))) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)). + + (* First part of Property 1 of Theorem 3. *) + query XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XIDA: pkey, XsaI: sainfo, XsaR: sainfo, XKv: key; + event(acceptev(XacceptB, XIDA, XsaI, XsaR, XKv)) ==> + event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)) + && memberid(XIDA,XSIB). + + (* First part of Property 2 of Theorem 3. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XIDB: pkey, XIDRp: pkey, XsaI: sainfo, XsaR: sainfo, XKv: key, Xautorid: idset; + inj-event(connectev(XconnectA, XIDB, XsaI, XsaR, XKv)) ==> + inj-event(initev(XinitA, Xautorid, XIDRp, XsaI)) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && memberid(XIDB, Xautorid). + + (* Second part of Property 2 of Theorem 3. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XsaI: sainfo, XsaR: sainfo, XKv: key; + inj-event(connecthonest(XconnectA, XIDB, XsaI, XsaR, XKv)) ==> + inj-event(acceptev(XacceptB, XIDA, XsaI, XsaR, XKv) ) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)). + + (* Certificates that the attacker can have *) + query x: bitstring; attacker(S(new kAminus, x)). + + define(`HONESTEVENTS') +') + + +ifdef(`EVNOCACHE',` + (* To prove these injective correspondences, you need to replace the caching + of message 3 with a version without caching *) + + (* Denial of service for R. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XNI: nonce, XNR: nonce, XxI: G, XxR: G, XtR: key, XeI: bitstring, XhI: key, XxIp: G, XgR: grpinfo, XS: bitstring, XIDRpp: pkey; + inj-event(enddosr(XIDA, XNI, XNR)) ==> + event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && (inj-event(mess3rec(XIDA, XNI, XNR, XxI, XxR, XtR, XeI, XhI)) ==> + (inj-event(mess2(XIDA, XNI, XNR, XxIp, XxR, XgR, XS, XtR, XIDRpp)) ==> + inj-event(mess1rec(XIDA, XNI, XxIp, XIDRpp)))). + + (* Second part of Property 1 of Theorem 3. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XsaI: sainfo, XsaR: sainfo, XKv: key, Xautorid: idset, XIDRp: pkey; + inj-event(accepthonest(XacceptB, XIDA, XsaI, XsaR, XKv)) ==> + inj-event(initev(XinitA, Xautorid, XIDRp, XsaI)) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)). + + (* Reordering *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XIDRp: pkey, XsaI: sainfo, XsaR: sainfo, XKv: key, XeR: bitstring, XhR: key, XNI: nonce, XNR: nonce, XxI: G, XxR: G, XtR: key, XeI: bitstring, XhI: key, XtRp: key, XgR: grpinfo, XxIp: G, XIDRpp: pkey, Xautorid: idset; + inj-event(connecthonest(XconnectA, XIDB, XsaI, XsaR, XKv)) ==> + event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)) + &&(inj-event(mess4rec(XIDA, XeR, XhR, XconnectA, XIDB, XsaI, XsaR, XKv)) ==> + (inj-event(mess4(XIDB, XIDA, XeR, XhR, XNI, XNR, XxI, XxR, XtR, XeI, XhI)) ==> + (inj-event(acceptev(XacceptB, XIDA, XsaI, XsaR, XKv)) ==> + (inj-event(mess3rec(XIDB, XNI, XNR, XxI, XxR, XtR, XeI, XhI)) ==> + (inj-event(mess3(XIDA, XNI, XNR, XxI, XxR, XtRp, XeI, XhI, XgR, XIDRp, XsaI, XKv)) ==> + (inj-event(mess2rec(XIDA, XNI, XNR, XxR, XgR, XIDB, S(XkBminus, (XxR, XgR)), XtRp, XxI, XIDRp, XsaI)) ==> + (inj-event(mess2(XIDB, XNI, XNR, XxIp, XxR, XgR, S(XkBminus, (XxR, XgR)), XtR, XIDRpp)) ==> + inj-event(mess1rec(XIDB, XNI, XxIp, XIDRpp))) + && (inj-event(mess1(XIDA, XNI, XxI, XIDRp, XinitA, Xautorid, XsaI)) ==> + inj-event(initev(XinitA, Xautorid, XIDRp, XsaI))))))))). + + (* Note the presence of XtRp in events mess3 and mess2rec and + XxIp and XIDRpp in events mess2 and mess1rec, instead of + XtR, XxI, and XIDRp respectively *) + + define(`NOCACHE') + define(`HONESTEVENTS') +') + +(* Secrecy *) + +ifdef(`SECRECY',` + (* Secrecy of the exchanged key Kv, from the point of view of I and R *) + free secretI, secretR: bitstring [private]. + query attacker(secretI); + attacker(secretR). +') + +(* Identity protection. + The predicate member must be removed, because it is not supported + for observational equivalence proofs. So we use a version without cache. + Only compliant principals are allowed to connect to R. *) + +(* What we would really like is: + - the hosts IDI0/IDI3 only talk to a subset of honest hosts, and the same subset + - the other initiators can talk to any responder (honest or dishonest) + - if a responder talks to IDI0 or IDI3, then it also talks to the other one + (result independent of whether it is hminus1 or hminus2) +*) + +ifdef(`IDISECR',` + (* Identity protection for I against active adversaries *) + type harg. + fun honest(harg): skey [private]. + reduc forall x: harg; ishonest(Pk(honest(x))) = true. + + free hIminus0, hIminus3, hminus1, hminus2: harg [private]. + noninterf hIminus0 among (hminus1, hminus2), + hIminus3 among (hminus1, hminus2). + not attacker(hminus1). + not attacker(hminus2). + not attacker(new hAminus). + define(`NOCACHE') +') + + +(* Secrecy assumptions *) + +ifdef(`IDISECR',, +not attacker(new kAminus) phase 0. +) +not attacker(new d). +ifdef(`NOCACHE',, +not attacker(new f). +) + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI(exponent: channel, init: channel, connect: channel, honestC: channel, IDA: pkey, kAminus: skey) = + ! + in(exponent, (dI: texponent, xI: G)); + ! + in(init, (autorid: idset, IDRp: pkey, saI: sainfo)); (* Init message *) + event initev(init, autorid, IDRp, saI); + new NI: nonce; + event mess1(IDA, NI, xI, IDRp, init, autorid, saI); + out(c, cons1(NI, xI, IDRp)); + in(c, cons2(=NI, NR, xR, grpinfoR, IDRl, sR2, tR)); + event mess2rec(IDA, NI, NR, xR, grpinfoR, IDRl, sR2, tR, xI, IDRp, saI); +ifdef(`IDISECR', + (* Only honest hosts are allowed to connect to I in this case *) + if ishonest(IDRl) then +,` + if memberid(IDRl,autorid) then +') + event enddosi(IDA, NI); + if V(sR2, IDRl, (xR, grpinfoR)) = true then + let h = G_to_key(exp(xR, dI)) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, IDRl, saI)) in + let eI = E(Ke, (IDA, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + event mess3(IDA, NI, NR, xI, xR, tR, eI, hI, grpinfoR, IDRp, saI, Kv); + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (sR: bitstring, saR: sainfo) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR, IDA, saI, saR)) = true then + event mess4rec(IDA, eR, hR, connect, IDRl, saI, saR, Kv); +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDRl); + event connecthonest(connect, IDRl, saI, saR, Kv) + ) + | +) + event connectev(connect, IDRl, saI, saR, Kv); + out(connect, (IDRl, saI, saR, Kv)); +ifdef(`SECRECY', + in(honestC, =IDRl); + out(c, E(Kv, secretI)); +) + 0. + +(* Responder + The process processR corresponds to R^A in the figure. *) + +free grpinfoR: grpinfo. +const saR: sainfo [data]. + +let processR4(accept: channel, honestC: channel, IDA: pkey, kAminus: skey, NI: nonce, NR: nonce, xI: G, xR: G, dR: texponent, tR: key, eI: bitstring, hI: key, SIA: idset) = + event enddosr(IDA, NI, NR); + let h = G_to_key(exp(xI,dR)) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + if H(Ka, (constI, eI)) = hI then + let (IDIl: pkey, saI: sainfo, sI: bitstring) = D(Ke,eI) in +ifdef(`IDISECR', + if ishonest(IDIl) then +,` + if memberid(IDIl,SIA) then +') + if V(sI, IDIl, (NI, NR, xI, xR, IDA, grpinfoR)) = true then +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDIl); + event accepthonest(accept, IDIl, saI, saR, Kv) + ) + | +) + event acceptev(accept, IDIl, saI, saR, Kv); + out(accept, (IDIl, saI, saR, Kv)); + ( + ( + let sR = S(kAminus, (NI, NR, xI, xR, IDIl, saI, saR)) in + let eR = E(Ke, (sR, saR)) in + let hR = H(Ka, (constR, eR)) in + event mess4(IDA, IDIl, eR, hR, NI, NR, xI, xR, tR, eI, hI); + out(c, cons4(eR, hR)); +ifdef(`SECRECY', + in(honestC, =IDIl); + out(c, E(Kv, secretR)); +) + 0 + ) + ). + + +ifdef(`NOCACHE',` + +let processR(exponent: channel, accept: channel, honestC: channel, IDA: pkey, kAminus: skey, SIA: idset) = + new KR: key; + ! + in(exponent, (dR: texponent, xR: G)); + ! + in(c, cons1(NI, xI, IDRp)); + event mess1rec(IDA, NI, xI, IDRp); + new NR: nonce; + new tR: key; + event mess2(IDA, NI, NR, xI, xR, grpinfoR, S(kAminus, (xR, grpinfoR)), tR, IDRp); + out(c, cons2(NI, NR, xR, grpinfoR, IDA, S(kAminus, (xR, grpinfoR)), tR)); + new l: channel; + ( + ( + ! + in(c, cons3(=NI,=NR,xI,=xR,=tR,eI,hI)); + out(l, (xI,eI,hI)) + ) + | + ( + in(l, (xI: G,eI: bitstring,hI: key)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + processR4(accept, honestC, IDA, kAminus, NI, NR, xI, xR, dR, tR, eI, hI, SIA) + ) + ). + +',` + +let processR(exponent: channel, accept: channel, honestC: channel, IDA: pkey, kAminus: skey, SIA: idset) = + new KR: key; + ( + ( + ! + in(exponent, (dR: texponent, xR: G)); + ! + in(c, cons1(NI, xI, IDRp)); + new NR: nonce; + let tR = H(KR, (xR, NR, NI)) in + event mess2(IDA, NI, NR, xI, xR, grpinfoR, S(kAminus, (xR, grpinfoR)), tR, IDRp); + out(c, cons2(NI, NR, xR, grpinfoR, IDA, S(kAminus, (xR, grpinfoR)), tR)) + ) + | + new f: channel; + ( + out(f, emptyset) + | + ( + ! + in(c, cons3(NI,NR,xI,xR,tR,eI,hI)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + if tR = H(KR, (xR, NR, NI)) then + in(f, cache: keyset); + ( + out(f, consset(tR, cache)) + | + if member(tR,cache) then 0 else + new l: channel; + ( + ( + ! + in(exponent, (dR: texponent, =xR)); + out(l, dR) + ) + | + ( + in(l, dR: texponent); + processR4(accept, honestC, IDA, kAminus, NI, NR, xI, xR, dR, tR, eI, hI, SIA) + ) + ) + ) + ) + ) + ). + +') + + + +(* Whole JFK system. *) + +ifdef(`IDISECR', +(* Version for identity protection with active adversaries *) + +process + new exponent: channel; + ( ! new d: texponent; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new honestC: channel; + let kminus1 = honest(hminus1) in + let ID1 = Pk(kminus1) in + let kminus2 = honest(hminus2) in + let ID2 = Pk(kminus2) in + out(pub, ID1); + out(pub, ID2); + ( + ( + (* Create principal playing role I, with secret key kIminus0 *) + let kIminus0 = honest(hIminus0) in + let IDI0 = Pk(kIminus0) in + new connect0: channel; new init0: channel; + out(pub, init0); + ( + (! in(connect0, x: bitstring)) + | processI(exponent, init0, connect0, honestC, IDI0, kIminus0) + ) + ) + | + ( + (* Create principal playing role I, with secret key kIminus3 *) + let kIminus3 = honest(hIminus3) in + let IDI3 = Pk(kIminus3) in + new connect3: channel; new init3: channel; + out(pub, init3); + ( + (! in(connect3, x: bitstring)) + | processI(exponent, init3, connect3, honestC, IDI3, kIminus3) + ) + ) + | + ( + ! + new hAminus: harg; + let kAminus = honest(hAminus) in + let IDA = Pk(kAminus) in + new connect: channel; new accept: channel; new init: channel; new channelSIA: channel; + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA: idset); + ( + (! in(accept, x: bitstring)) + | (! in(connect, x: bitstring)) + | processI(exponent, init, connect, honestC, IDA, kAminus) + | processR(exponent, accept, honestC, IDA, kAminus, SIA) + ) + ) + ) + +, +(* Standard version of the process *) + +process + + new exponent: channel; + ( ! new d: texponent; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new honestC: channel; (* private channel used to simulate the set C of honest principals *) + ! + new kAminus: skey; + let IDA = Pk(kAminus) in + new connect: channel; new accept: channel; new init: channel; new channelSIA: channel; +ifdef(`SECRECY', + (* Do not give accept and connect to the adversary when proving secrecy of Kv: + These messages contain Kv! Instead, input on these channels here. *) + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA: idset); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + ( phase 1; out(pub, kAminus) ) + | (! in(accept, x: bitstring)) + | (! in(connect, x: bitstring)) + | (! out(honestC, IDA) ) (* IDA is in C *) + | processI(exponent, init, connect, honestC, IDA, kAminus) + | processR(exponent, accept, honestC, IDA, kAminus, SIA) + ) +, + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA: idset); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + (! out(honestC, IDA) ) (* IDA is in C *) + | processI(exponent, init, connect, honestC, IDA, kAminus) + | processR(exponent, accept, honestC, IDA, kAminus, SIA) + ) +) + +) diff --git a/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKr b/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKr new file mode 100644 index 0000000000000000000000000000000000000000..e6b8f9d32abf1ea545f055920ed30799dd5c6397 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKr @@ -0,0 +1,629 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +set redundantHypElim = beginOnly. + +type G. +type texponent. +type skey. +type pkey. +type key. +type tag. +type nonce. +type grpinfo. +type sainfo. + +fun G_to_key(G):key [data, typeConverter]. + +(* Exponential and Diffie-Hellman *) + +const g: G. +fun exp(G, texponent): G. +equation forall y: texponent, z: texponent; exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S(skey, bitstring): bitstring. +fun Pk(skey): pkey. +fun V(bitstring, pkey, bitstring): bool. +fun RecoverKey(bitstring): pkey. +fun RecoverText(bitstring): bitstring. +equation forall k: skey, v: bitstring; V(S(k,v), Pk(k),v) = true. +equation forall k: skey, v: bitstring; RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +equation forall k: skey, v: bitstring; RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E(key, bitstring): bitstring. +fun D(key, bitstring): bitstring. +equation forall k: key, v: bitstring; D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H(key, bitstring): key. + +(* Sets *) + +type keyset. +fun consset(key, keyset): keyset [data]. +const emptyset: keyset [data]. +pred member(key, keyset). +clauses + forall x: key, y: keyset; member(x,consset(x,y)); + forall x: key, y: keyset, z: key; member(x,y) -> member(x,consset(z,y)). + +type idset. +fun considset(pkey, idset): idset [data]. +const emptyidset: idset [data]. +pred memberid(pkey, idset). +clauses + forall x: pkey, y: idset; memberid(x,considset(x,y)); + forall x: pkey, y: idset, z: pkey; memberid(x,y) -> memberid(x,considset(z,y)). + +(* Tags *) + +const tagE, tagA, tagV: tag [data]. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +fun cons1(nonce, G): bitstring [data]. +fun cons2(nonce, nonce, G, grpinfo, key): bitstring [data] . +fun cons3(nonce, nonce, G, G, key, bitstring, key): bitstring [data]. +fun cons4(bitstring, key): bitstring [data]. + +(* More constants *) + +const constI, constR: tag [data]. + +(* Queries: properties to prove *) + +(* Correspondence assertions *) + +event princ(skey, pkey, channel, channel, channel, idset). +event enddosi(pkey, nonce). +event enddosr(pkey, nonce, nonce). +event initev(channel, pkey, sainfo). +event mess1(pkey, nonce, G, channel, pkey, sainfo). +event mess1rec(pkey, nonce, G). +event mess2(pkey, nonce, nonce, G, G, grpinfo, key). +event mess2rec(pkey, nonce, nonce, G, grpinfo, key, G, pkey, sainfo). +event mess3(pkey, nonce, nonce, G, G, key, bitstring, key, grpinfo, pkey, sainfo, key). +event mess3rec(pkey, nonce, nonce, G, G, key, bitstring, key). +event mess4(pkey, pkey, bitstring, key, nonce, nonce, G, G, key, bitstring, key). +event mess4rec(pkey, bitstring, key, channel, pkey, pkey, sainfo, sainfo, key). +event acceptev(channel, pkey, pkey, sainfo, sainfo, key). +event accepthonest(channel, pkey, pkey, sainfo, sainfo, key). +event connectev(channel, pkey, pkey, sainfo, sainfo, key). +event connecthonest(channel, pkey, pkey, sainfo, sainfo, key). + +ifdef(`EVCACHE',` + (* Denial of service for I. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XNI: nonce, XNR: nonce, XxR: G, XgrpinfoR: grpinfo, XtR: key, XxI: G, XIDRp: pkey, XsaI: sainfo; + inj-event(enddosi(XIDA, XNI)) ==> + (inj-event(mess2rec(XIDA, XNI, XNR, XxR, XgrpinfoR, XtR, XxI, XIDRp, XsaI)) ==> + (inj-event(mess1(XIDA, XNI, XxI, XinitA, XIDRp, XsaI)) ==> + inj-event(initev(XinitA, XIDRp, XsaI)))) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)). + + (* First part of Property 1 of Theorem 3. *) + query XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XIDA: pkey, XIDRp : pkey, XsaI: sainfo, XsaR: sainfo, XKv: key; + event(acceptev(XacceptB, XIDA, XIDRp, XsaI, XsaR, XKv)) ==> + event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)) + && memberid(XIDA,XSIB). + + (* First part of Property 2 of Theorem 3. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XIDB: pkey, XIDRp: pkey, XsaI: sainfo, XsaR: sainfo, XKv: key; + inj-event(connectev(XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv)) ==> + inj-event(initev(XinitA, XIDRp, XsaI)) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)). + + (* Second part of Property 2 of Theorem 3. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XIDRp: pkey, XsaI: sainfo, XsaR: sainfo, XKv: key; + inj-event(connecthonest(XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv)) ==> + inj-event(acceptev(XacceptB, XIDA, XIDRp, XsaI, XsaR, XKv)) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)). + + (* Certificates that the attacker can have *) + query x: bitstring; attacker(S(new kAminus, x)). + + define(`HONESTEVENTS') +') + + +ifdef(`EVNOCACHE',` + (* To prove these injective correspondences, you need to replace the caching + of message 3 with a version without caching *) + + (* Denial of service for R. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XNI: nonce, XNR: nonce, XxI: G, XxR: G, XtR: key, XeI: bitstring, XhI: key, XxIp: G, XgrpinfoR: grpinfo; + inj-event(enddosr(XIDA, XNI, XNR)) ==> + event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && (inj-event(mess3rec(XIDA, XNI, XNR, XxI, XxR, XtR, XeI, XhI)) ==> + (inj-event(mess2(XIDA, XNI, XNR, XxIp, XxR, XgrpinfoR, XtR)) ==> + inj-event(mess1rec(XIDA, XNI, XxIp)))). + + (* Second part of Property 1 of Theorem 3. *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XIDRp: pkey, XsaI: sainfo, XsaR: sainfo, XKv: key; + inj-event(accepthonest(XacceptB, XIDA, XIDRp, XsaI, XsaR, XKv)) ==> + inj-event(initev(XinitA, XIDRp, XsaI)) + && event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)). + + (* Reordering *) + query XkAminus: skey, XIDA: pkey, XinitA: channel, XacceptA: channel, XconnectA: channel, XSIA: idset, XkBminus: skey, XIDB: pkey, XinitB: channel, XacceptB: channel, XconnectB: channel, XSIB: idset, XIDRp: pkey, XsaI: sainfo, XsaR: sainfo, XKv: key, XeR: bitstring, XhR: key, XNI: nonce, XNR: nonce, XxI: G, XxR: G, XtR: key, XeI: bitstring, XhI: key, XtRp: key, XgR: grpinfo, XxIp: G; + inj-event(connecthonest(XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv)) ==> + event(princ(XkAminus, XIDA, XinitA, XacceptA, XconnectA, XSIA)) + && event(princ(XkBminus, XIDB, XinitB, XacceptB, XconnectB, XSIB)) + &&(inj-event(mess4rec(XIDA, XeR, XhR, XconnectA, XIDB, XIDRp, XsaI, XsaR, XKv)) ==> + (inj-event(mess4(XIDB, XIDA, XeR, XhR, XNI, XNR, XxI, XxR, XtR, XeI, XhI)) ==> + (inj-event(acceptev(XacceptB, XIDA, XIDRp, XsaI, XsaR, XKv)) ==> + (inj-event(mess3rec(XIDB, XNI, XNR, XxI, XxR, XtR, XeI, XhI)) ==> + (inj-event(mess3(XIDA, XNI, XNR, XxI, XxR, XtRp, XeI, XhI, XgR, XIDRp, XsaI, XKv)) ==> + (inj-event(mess2rec(XIDA, XNI, XNR, XxR, XgR, XtRp, XxI, XIDRp, XsaI)) ==> + (inj-event(mess2(XIDB, XNI, XNR, XxIp, XxR, XgR, XtR)) ==> + inj-event(mess1rec(XIDB, XNI, XxIp))) + &&(inj-event(mess1(XIDA, XNI, XxI, XinitA, XIDRp, XsaI)) ==> + inj-event(initev(XinitA, XIDRp, XsaI))))))))). + + (* Note the presence of XtRp in events mess3 and mess2rec + and XxIp in events mess2 and mess1rec, instead of + XtR and XxI respectively *) + + define(`NOCACHE') + define(`HONESTEVENTS') +') + + +(* Secrecy *) + +ifdef(`SECRECY',` + (* Secrecy of the exchanged key Kv, from the point of view of I and R *) + free secretI, secretR: bitstring [private]. + query attacker(secretI); + attacker(secretR). +') + +(* Identity protection. + The predicate member must be removed, because it is not supported + for observational equivalence proofs. So we use a version without cache. + Only compliant principals are allowed to connect to R. *) + +ifdef(`IDRSECRACT',` + (* Identity protection for R against active adversaries *) + free kRminus0, kRminus3, kRminus1, kRminus2: skey [private]. + noninterf kRminus0 among (kRminus1, kRminus2), + kRminus3 among (kRminus1, kRminus2). + not attacker(kRminus1). + not attacker(kRminus2). + define(`NOCACHE') +') +ifdef(`IDSECR',` + (* Identity protection for both R and I against passive adversaries *) + type harg. + fun honest(harg): skey [private]. + reduc forall x: harg; ishonest(Pk(honest(x))) = true. + + free hRminus0, hRminus3, hIminus0, hIminus3, + hminus1, hminus2, hminus3, hminus4: harg [private]. + noninterf hRminus0 among (hminus1, hminus2, hminus3, hminus4), + hRminus3 among (hminus1, hminus2, hminus3, hminus4), + hIminus0 among (hminus1, hminus2, hminus3, hminus4), + hIminus3 among (hminus1, hminus2, hminus3, hminus4). + not attacker(hminus1). + not attacker(hminus2). + not attacker(hminus3). + not attacker(hminus4). + not attacker(honest(hminus1)). + not attacker(honest(hminus2)). + not attacker(honest(hminus3)). + not attacker(honest(hminus4)). + not attacker(new hAminus). + not attacker(honest(new hAminus)). + define(`NOCACHE') +') + +(* Secrecy assumptions *) + +ifdef(`IDSECR',, +not attacker(new kAminus) phase 0. +) +not attacker(new d). +ifdef(`NOCACHE',, +not attacker(new f). +) + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI(c: channel, exponent: channel, init: channel, connect: channel, honestC: channel, IDA: pkey, kAminus: skey) = + ! + in(exponent, (dI: texponent, xI: G)); + ! + in(init, (IDRp: pkey, saI: sainfo)); (* Init message *) + event initev(init, IDRp, saI); + new NI: nonce; + event mess1(IDA, NI, xI, init, IDRp, saI); + out(c, cons1(NI, xI)); + in(c, cons2(=NI, NR, xR, grpinfoR, tR)); + event mess2rec(IDA, NI, NR, xR, grpinfoR, tR, xI, IDRp, saI); + event enddosi(IDA, NI); + let h = G_to_key(exp(xR, dI)) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, grpinfoR)) in + let eI = E(Ke, (IDA, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + event mess3(IDA, NI, NR, xI, xR, tR, eI, hI, grpinfoR, IDRp, saI, Kv); + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (IDRl:pkey, saR: sainfo, sR: bitstring) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR)) then + event mess4rec(IDA, eR, hR, connect, IDRl, IDRp, saI, saR, Kv); + event connectev(connect, IDRl, IDRp, saI, saR, Kv); + out(connect, (IDRl, IDRp, saI, saR, Kv)); + ( +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDRl); + event connecthonest(connect, IDRl, IDRp, saI, saR, Kv) + ) + | +) + ( +ifdef(`SECRECY', + in(honestC, =IDRl); + out(c, E(Kv, secretI)); +) + 0 + ) + ). + +(* Responder + The process processR corresponds to R^A in the figure. *) + +free grpinfoR: grpinfo. +const saR: sainfo [data]. + +let processR4(c: channel, accept: channel, honestC: channel, IDA: pkey, kAminus: skey, NI: nonce, NR: nonce, xI: G, xR: G, dR: texponent, tR: key, eI: bitstring, hI: key, SIA: idset) = + event enddosr(IDA, NI, NR); + let h = G_to_key(exp(xI,dR)) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + if H(Ka, (constI, eI)) = hI then + let (IDIl: pkey, IDRp: pkey, saI: sainfo, sI: bitstring) = D(Ke,eI) in +ifdef(`IDSECR', + if ishonest(IDIl) then +, +ifdef(`IDRSECRACT', + (* Only honest hosts are allowed to connect to R in this case *) + in(honestC, =IDIl); +,`` + if memberid(IDIl,SIA) then +'')) + if V(sI, IDIl, (NI, NR, xI, xR, grpinfoR)) then + event acceptev(accept, IDIl, IDRp, saI, saR, Kv); + out(accept, (IDIl, IDRp, saI, saR, Kv)); + ( +ifdef(`HONESTEVENTS', + ( + in(honestC, =IDIl); + event accepthonest(accept, IDIl, IDRp, saI, saR, Kv) + ) + | +) + ( + let sR = S(kAminus, (NI, NR, xI, xR)) in + let eR = E(Ke, (IDA, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + event mess4(IDA, IDIl, eR, hR, NI, NR, xI, xR, tR, eI, hI); + out(c, cons4(eR, hR)); +ifdef(`SECRECY', + in(honestC, =IDIl); + out(c, E(Kv, secretR)); +) + 0 + ) + ). + + +ifdef(`NOCACHE',` + +let processR(c: channel, exponent: channel, accept: channel, honestC: channel, IDA: pkey, kAminus: skey, SIA: idset) = + new KR: key; + ! + in(exponent, (dR: texponent, xR: G)); + ! + in(c, cons1(NI, xI)); + event mess1rec(IDA, NI, xI); + new NR: nonce; + new tR: key; + event mess2(IDA, NI, NR, xI, xR, grpinfoR, tR); + out(c, cons2(NI, NR, xR, grpinfoR, tR)); + new l: channel; + ( + ( + ! + in(c, cons3(=NI,=NR,xI,=xR,=tR,eI,hI)); + out(l, (xI,eI,hI)) + ) + | + ( + in(l, (xI: G,eI: bitstring,hI: key)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + processR4(c, accept, honestC, IDA, kAminus, NI, NR, xI, xR, dR, tR, eI, hI, SIA) + ) + ). + +',` + +let processR(c: channel, exponent: channel, accept: channel, honestC: channel, IDA: pkey, kAminus: skey, SIA: idset) = + new KR: key; + ( + ( + ! + in(exponent, (dR: texponent, xR: G)); + (* R_1^A *) + ! + in(c, cons1(NI, xI)); + event mess1rec(IDA, NI, xI); + new NR: nonce; + let tR = H(KR, (xR, NR, NI)) in + event mess2(IDA, NI, NR, xI, xR, grpinfoR, tR); + out(c, cons2(NI, NR, xR, grpinfoR, tR)) + ) + | + (* R_3^A *) + new f: channel; + ( + out(f, emptyset) + | + ( + ! + in(c, cons3(NI,NR,xI,xR,tR,eI,hI)); + event mess3rec(IDA, NI, NR, xI, xR, tR, eI, hI); + if tR = H(KR, (xR, NR, NI)) then + in(f, cache: keyset); + ( + out(f, consset(tR, cache)) + | + if member(tR,cache) then 0 else + new l: channel; + ( + ( + ! + in(exponent, (dR: texponent, =xR)); + out(l, dR) + ) + | + ( + in(l, dR: texponent); + processR4(c, accept, honestC, IDA, kAminus, NI, NR, xI, xR, dR, tR, eI, hI, SIA) + ) + ) + ) + ) + ) + ). + +') + + +(* Free names *) + +free c: channel. (* Public channel *) +free pub, getprinc, getexponential, channelSIAR1, channelSIAR2: channel. + +(* Whole JFK system. *) + +ifdef(`IDRSECRACT', +(* Version for identity protection with active adversaries *) + +process + new exponent: channel; + ( ! new d: texponent; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new honestC: channel; (* private channel used to simulate the set C of honest principals *) + let IDR1 = Pk(kRminus1) in + let IDR2 = Pk(kRminus2) in + out(pub, IDR1); + out(pub, IDR2); + ( + ( ! out(honestC, IDR1) ) + | + ( ! out(honestC, IDR2) ) + | + ( + (* Create principal playing role R, with secret key kRminus0 *) + in(channelSIAR1, SIA0: idset); + let IDR0 = Pk(kRminus0) in + new accept0: channel; + ( + (! in(accept0, x: bitstring)) + | processR(c, exponent, accept0, honestC, IDR0, kRminus0, SIA0) + ) + ) + | + ( + (* Create principal playing role R, with secret key kRminus3 *) + in(channelSIAR2, SIA3: idset); + let IDR3 = Pk(kRminus3) in + new accept3: channel; + ( + (! in(accept3, x: bitstring)) + | processR(c, exponent, accept3, honestC, IDR3, kRminus3, SIA3) + ) + ) + | + ( + ! + new kAminus: skey; + let IDA = Pk(kAminus) in + new connect: channel; new accept: channel; new init: channel; new channelSIA: channel; + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA: idset); + ( + (! in(accept, x: bitstring)) + | (! in(connect, x: bitstring)) + | (! out(honestC, IDA)) + | processI(c, exponent, init, connect, honestC, IDA, kAminus) + | processR(c, exponent, accept, honestC, IDA, kAminus, SIA) + ) + ) + ) + + +, +ifdef(`IDSECR', +(* Version for identity protection with passive adversaries *) + +process + new exponent: channel; + new honestC: channel; (* private channel used to simulate the set C of honest principals *) + ( ! new d: texponent; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + new c: channel; (* c is now private: passive attacker, can listen but not + send on c *) + ( ! in(c,x: bitstring); out(pub,x); out(c,x)) + | + let kminus1 = honest(hminus1) in + let ID1 = Pk(kminus1) in + let kminus2 = honest(hminus2) in + let ID2 = Pk(kminus2) in + out(pub, ID1); + out(pub, ID2); + ( + ( + (* Create principal playing role R, with secret key kRminus0 *) + in(channelSIAR1, SIA0: idset); + let kRminus0 = honest(hRminus0) in + let IDR0 = Pk(kRminus0) in + new accept0: channel; + ( + (! in(accept0, x: bitstring)) + | processR(c, exponent, accept0, honestC, IDR0, kRminus0, SIA0) + ) + ) + | + ( + (* Create principal playing role R, with secret key kRminus3 *) + in(channelSIAR2, SIA3: idset); + let kRminus3 = honest(hRminus3) in + let IDR3 = Pk(kRminus3) in + new accept3: channel; + ( + (! in(accept3, x: bitstring)) + | processR(c, exponent, accept3, honestC, IDR3, kRminus3, SIA3) + ) + ) + | + ( + (* Create principal playing role I, with secret key kIminus0 *) + let kIminus0 = honest(hIminus0) in + let IDI0 = Pk(kIminus0) in + new connect0: channel; new init0: channel; + out(pub, init0); + ( + (! in(connect0, x: bitstring)) + | processI(c, exponent, init0, connect0, honestC, IDI0, kIminus0) + ) + ) + | + ( + (* Create principal playing role I, with secret key kIminus3 *) + let kIminus3 = honest(hIminus3) in + let IDI3 = Pk(kIminus3) in + new connect3: channel; new init3: channel; + out(pub, init3); + ( + (! in(connect3, x: bitstring)) + | processI(c, exponent, init3, connect3, honestC, IDI3, kIminus3) + ) + ) + | + ( + ! + new hAminus: harg; + let kAminus = honest(hAminus) in + let IDA = Pk(kAminus) in + new connect: channel; new accept: channel; new init: channel; new channelSIA: channel; + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA: idset); + ( + (! in(accept, x: bitstring)) + | (! in(connect, x: bitstring)) + | processI(c, exponent, init, connect, honestC, IDA, kAminus) + | processR(c, exponent, accept, honestC, IDA, kAminus, SIA) + ) + ) + ) + +, +(* Standard version of the process *) + +process + + new exponent: channel; + new honestC: channel; (* private channel used to simulate the set C of honest principals *) + ( ! new d: texponent; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + ! + new kAminus: skey; + let IDA = Pk(kAminus) in + new connect: channel; new accept: channel; new init: channel; new channelSIA: channel; +ifdef(`SECRECY', + (* Do not give accept and connect to the adversary when proving secrecy of Kv: + These messages contain Kv! Instead, input on these channels here. *) + out(getprinc, (IDA, init, channelSIA)); + in(channelSIA, SIA: idset); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + ( phase 1; out(pub, kAminus) ) + | (! in(accept, x: bitstring)) + | (! in(connect, x: bitstring)) + | (! out(honestC, IDA) ) (* IDA is in C *) + | processI(c, exponent, init, connect, honestC, IDA, kAminus) + | processR(c, exponent, accept, honestC, IDA, kAminus, SIA) + ) +, + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA: idset); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( + (! out(honestC, IDA) ) (* IDA is in C *) + | processI(c, exponent, init, connect, honestC, IDA, kAminus) + | processR(c, exponent, accept, honestC, IDA, kAminus, SIA) + ) +) + +)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKr-coresec.pv b/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKr-coresec.pv new file mode 100644 index 0000000000000000000000000000000000000000..5341276e63811c4c520f595a098073106f4eb152 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/jfk/JFKr-coresec.pv @@ -0,0 +1,245 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +type G. +type texponent. +type skey. +type pkey. +type key. +type tag. +type nonce. +type grpinfo. +type sainfo. + +fun G_to_key(G):key [data, typeConverter]. + +(* Exponential and Diffie-Hellman *) + +const g: G. +fun exp(G, texponent): G. +equation forall y: texponent, z: texponent; exp(exp(g,y),z) = exp(exp(g,z),y). + +(* Signature *) + +fun S(skey, bitstring): bitstring. +fun Pk(skey): pkey. +reduc forall k: skey, v: bitstring; V(S(k,v), Pk(k),v) = true. +reduc forall k: skey, v: bitstring; RecoverKey(S(k,v)) = Pk(k). (* For the attacker *) +reduc forall k: skey, v: bitstring; RecoverText(S(k,v)) = v. (* For the attacker *) + +(* Shared-key encryption *) + +fun E(key, bitstring): bitstring. +reduc forall k: key, v: bitstring; D(k,E(k,v)) = v. + +(* Keyed hash function *) + +fun H(key, bitstring): key. + +(* Tags *) + +const tagE, tagA, tagV: tag [data]. + +(* Constructors for JFK's formatted messages + Selectors are implicit when using "data" *) + +fun cons1(nonce, G): bitstring [data]. +fun cons2(nonce, nonce, G, grpinfo, key): bitstring [data] . +fun cons3(nonce, nonce, G, G, key, bitstring, key): bitstring [data]. +fun cons4(bitstring, key): bitstring [data]. + +(* More constants *) + +const constI, constR: tag [data]. +const saR: sainfo [data]. + +(* Free names *) + +free c: channel. (* Public channel *) +free d0: channel. +free pub, genprinc, getexponential, init0, getprinc0: channel. + +(* Secrecy assumptions *) + +not attacker(new kAminus) phase 0. +not attacker(new d). + +(* Initiator + The process processI corresponds to I^A in the figure. *) + +let processI(exponent: channel, init: channel, getI: channel, kAminus: skey) = + ! + in(exponent, (dI: texponent, xI: G)); + ! + in(init, dummy: bitstring); (* Init message *) + new NI: nonce; + out(c, cons1(NI, xI)); + in(c, cons2(=NI, NR, xR, grpinfoR, tR)); + let h = G_to_key(exp(xR, dI)) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sI = S(kAminus, (NI, NR, xI, xR, grpinfoR)) in + out(getI, (dummy, NI, NR, xI, xR, tR, Ka, Ke, Kv, sI)). + +(* Responder + The process processR corresponds to R^A in the figure. *) + +free grpinfoR: grpinfo. + +let processR(exponent: channel, getR: channel, IDA: pkey, kAminus: skey) = + ! + in(exponent, (dR: texponent, xR: G)); + ! + in(c, cons1(NI, xI)); + new NR: nonce; + new tR: key; + out(c, cons2(NI, NR, xR, grpinfoR, tR)); + new l: channel; + ( + ( + ! + in(c, cons3(=NI,=NR,xI,=xR,=tR,eI,hI)); + out(l, (xI,eI,hI)) + ) + | + ( + in(l, (xI: G,eI: bitstring,hI: key)); + ( + out(d0, (NR, IDA)) | + let h = G_to_key(exp(xI,dR)) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sR = S(kAminus, (NI, NR, xI, xR)) in + out(getR, (NI, NR, xI, xR, tR, eI, hI, Ka, Ke, Kv, sR)) + ) + ) + ). + +(* Whole JFK system. *) + +process + new exponent: channel; + new cp: channel; + new ids: channel; + ( ! new d: texponent; let x = exp(g,d) in out(getexponential, x); ! out(exponent, (d,x)) ) + | + ( + ! + new kAminus: skey; + let IDA = Pk(kAminus) in + new init: channel; new getI: channel; new getR: channel; + out(getprinc0, (IDA, getI, getR, init)); + ( processI(exponent, init, getI, kAminus) | + processR(exponent, getR, IDA, kAminus) | + (!out(cp, IDA)) | (!out(ids, (kAminus, IDA)))) + ) + | + ( + in(ids, (kAIminus: skey, IDAI: pkey)); + in(ids, (kARminus: skey, IDAR: pkey)); + in(exponent, (dI: texponent,xI: G)); + in(exponent, (dR: texponent,xR: G)); (* with in(pub, (NR, xR)) instead, attack for xR = g, so h = exp(g, dI) = xI. *) + in(init0, (IDRp: pkey, saI: sainfo,=IDAI,=IDAR,=xI,=xR)); + new NI: nonce; + new NR: nonce; (* we could use instead in(pub, NR); *) + new TR: key; + new NeI: bitstring; new NhI: key; new NeR: bitstring; new NhR: key; new NKv: key; + let h = G_to_key(exp(xR,dI)) in + let Ka = H(h, (NI, NR, tagA)) in + let Ke = H(h, (NI, NR, tagE)) in + let Kv = H(h, (NI, NR, tagV)) in + let sR = S(kARminus, (NI, NR, xI, xR)) in + let eR = E(Ke, (IDAR, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + let sI = S(kAIminus, (NI, NR, xI, xR, grpinfoR)) in + let eI = E(Ke, (IDAI, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + out(pub, (NI, NR, TR, + choice[eI, NeI], + choice[hI, NhI], + choice[eR, NeR], + choice[hR, NhR], + choice[Kv, NKv])) + ) + + + +(* + +Let us name S' the above process. +Let us define the context C as follows: + +new getprinc0; +( + [] +| + ! + in(getprinc0, (IDA, getI, getR, init)); + new connect; new accept; new channelSIA; + out(getprinc, (IDA, init, accept, connect, channelSIA)); + in(channelSIA, SIA); + event princ(kAminus, IDA, init, accept, connect, SIA); + ( processI2 | processR2 ) +) + +let processI2 = + ! + in(getI, ((IDRp, saI), NI, NR, xI, xR, tR, Ka, Ke, Kv, sI)); + let eI = E(Ke, (IDA, IDRp, saI, sI)) in + let hI = H(Ka, (constI, eI)) in + out(c, cons3(NI, NR, xI, xR, tR, eI, hI)); + in(c, cons4(eR, hR)); + if H(Ka, (constR, eR)) = hR then + let (IDRl, saR, sR) = D(Ke, eR) in + if V(sR, IDRl, (NI, NR, xI, xR)) = true then + out(connect, (IDRl, IDRp, saI, saR, Kv)). + +let processR2 = + ! + in(getR, (NI, NR, xI, xR, tR, eI, hI, Ka, Ke, Kv, sR)); + if H(Ka, (constI, eI)) = hI then + let (IDIl, IDRp, saI, sI) = D(Ke,eI) in + if member:IDIl,SIA then + if V(sI, IDIl, (NI, NR, xI, xR, grpinfoR)) = true then + out(accept, (IDIl, IDRp, saI, saR, Kv)); + let eR = E(Ke, (IDA, saR, sR)) in + let hR = H(Ka, (constR, eR)) in + out(c, cons4(eR, hR)). + +The full JFKr script S (version without cache) is weakly observationally +equivalent to C[S'] (more precisely, fst(S) is equivalent to +fst(C[S']) and snd(S) is equivalent to snd(C[S'])). This is proved by +eliminating communications on the private channel getprinc and on each +instance of getI and getR. ProVerif shows that S' satisfies +equivalence, then so does C[S'] by the contextual property of +equivalence, then fst(S) is weakly observationally equivalent to snd(S). + +*) diff --git a/preinstallTTool/linux/proverif/examples/pitype/jfk/gen b/preinstallTTool/linux/proverif/examples/pitype/jfk/gen new file mode 100755 index 0000000000000000000000000000000000000000..716e9f064484caf1d3c94b9afc1622190970532e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/jfk/gen @@ -0,0 +1,58 @@ +#!/bin/sh + +if [ -x ../../../xtime ] +then + if [ .$1 = . ] + then + PROG=../../../xtime + else + PROG="../../../xtime -repeat 10 -o /dev/null" + fi +else + PROG= +fi + +ANALYZER=../../../proverif + +( +echo JFKi +for i in SECRECY EVCACHE EVNOCACHE IDISECR +do + +echo $i +m4 -D$i JFKi > prot-JFKi-$i.pv +$PROG $ANALYZER prot-JFKi-$i.pv > prot-JFKi-$i.result +egrep '(RESULT|goal reachable)' prot-JFKi-$i.result +grep system prot-JFKi-$i.result | grep user + +done + +echo +echo JFKr +for i in SECRECY EVCACHE EVNOCACHE IDRSECRACT IDSECR +do + +echo $i +m4 -D$i JFKr > prot-JFKr-$i.pv +$PROG $ANALYZER prot-JFKr-$i.pv > prot-JFKr-$i.result +egrep '(RESULT|goal reachable)' prot-JFKr-$i.result +grep system prot-JFKr-$i.result | grep user + +done + + +echo +echo Proof of Lemma 9 + +$PROG $ANALYZER tokenlemma.pv > tokenlemma.result +grep 'RESULT' tokenlemma.result +grep system tokenlemma.result | grep user + +echo +echo Proof of Lemma 10 + +$PROG $ANALYZER JFKr-coresec.pv > JFKr-coresec.result +grep 'RESULT' JFKr-coresec.result +grep system JFKr-coresec.result | grep user + +) | tee results diff --git a/preinstallTTool/linux/proverif/examples/pitype/jfk/tokenlemma.pv b/preinstallTTool/linux/proverif/examples/pitype/jfk/tokenlemma.pv new file mode 100644 index 0000000000000000000000000000000000000000..63344b68bac8c59f858ddfbce3cd67b0a7c7e3c7 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/jfk/tokenlemma.pv @@ -0,0 +1,50 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* JFKr *) + +type key. +type nonce. +type nonce_G. + +(* Keyed hash function *) + +fun H(key, bitstring): key. + +(* Free names *) + +free c: channel. (* Public channel *) + +(* Queries: properties to prove *) + +process + new KR: key; + ! + in(c, V: nonce_G); + new N: nonce; + new t: key; + out(c, choice[t, H(KR, (N,V))]) diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco1.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco1.pv new file mode 100644 index 0000000000000000000000000000000000000000..98eb5b558a1b72cb337dfdc19621f3a2ce41530b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco1.pv @@ -0,0 +1,109 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +noninterf secretA, secretB. + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + if pk2 = pkB then + ( + in(c, m: bitstring); + let s = sdecrypt(m,k) + ) + | + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + ( + in(c, m: bitstring); + let s = sdecrypt(m,k) + ) + | + out(c, sencrypt(secretB, k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco2.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco2.pv new file mode 100644 index 0000000000000000000000000000000000000000..8aaac10a010ea8b5de65139b302c316885876b44 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco2.pv @@ -0,0 +1,99 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +free secretB: bitstring [private]. +noninterf secretB. + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + in(c, m: bitstring); + let s = sdecrypt(m,k). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + out(c, sencrypt(secretB, k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco3.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco3.pv new file mode 100644 index 0000000000000000000000000000000000000000..ffc97d4c1a1a37e70ae88042084dac734ae96bb3 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco3.pv @@ -0,0 +1,111 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Probabilistic shared key encryption *) + +type sseed. +fun internal_sencrypt(bitstring,key,sseed): bitstring. +reduc forall x: bitstring, y: key, r: sseed; sdecrypt(internal_sencrypt(x,y,r),y) = x. +letfun sencrypt(x: bitstring, y: key) = new r: sseed; internal_sencrypt(x,y,r). + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +noninterf secretA, secretB. + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + if pk2 = pkB then + ( + in(c, m: bitstring); + let s = sdecrypt(m,k) + ) + | + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + ( + in(c, m: bitstring); + let s = sdecrypt(m,k) + ) + | + out(c, sencrypt(secretB, k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco4.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco4.pv new file mode 100644 index 0000000000000000000000000000000000000000..46973565d8747cb991940d0d087cb9709052394a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco4.pv @@ -0,0 +1,111 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Probabilistic shared key encryption *) + +type sseed. +fun internal_sencrypt(bitstring,key,sseed): bitstring. +reduc forall x: bitstring, y: key, r: sseed; sdecrypt(internal_sencrypt(x,y,r),y) = x. +letfun sencrypt(x: bitstring, y: key) = new r: sseed; internal_sencrypt(x,y,r). + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +const secrcst, ok, error, n2: bitstring. + +free secretA1, secretA2, secretB: bitstring [private]. +noninterf secretA1 among (ok, n2), secretA2 among (error, n2), secretB. + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + if pk2 = pkB then + in(c, m: bitstring); + let (=secrcst, s:bitstring) = sdecrypt(m,k) in + ( + out(c, sencrypt(secretA1, k)) (* secretA1 takes values "ok" or n2 *) + ) + else + ( + out(c, sencrypt(secretA2, k)) (* secretA2 takes values "error" or n2 *) + ). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + out(c, sencrypt((secrcst, secretB), k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco5.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco5.pv new file mode 100644 index 0000000000000000000000000000000000000000..631fbada8a281c536a7dc85bc96cbea4427aed64 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco5.pv @@ -0,0 +1,114 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. +type tag. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Tags *) + +const c1, c2: tag [data]. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +noninterf secretA, secretB. + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + if pk2 = pkB then + ( + in(c, m: bitstring); + let s = sdecrypt(m,k) + ) + | + out(c, sencrypt((c1, secretA), k)). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + ( + in(c, m: bitstring); + let s = sdecrypt(m,k) + ) + | + out(c, sencrypt((c2, secretB), k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco6.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco6.pv new file mode 100644 index 0000000000000000000000000000000000000000..c97c7bf263d6fb5a6971708f6275bee1ca3ad539 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco6.pv @@ -0,0 +1,105 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Probabilistic shared key encryption *) + +type sseed. +fun internal_sencrypt(bitstring,key,sseed): bitstring. +reduc forall x: bitstring, y: key, r: sseed; sdecrypt(internal_sencrypt(x,y,r),y) = x. +letfun sencrypt(x: bitstring, y: key) = new r: sseed; internal_sencrypt(x,y,r). + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +const n1, secrcst: bitstring. + +free secretB, secretB1: bitstring [private]. +noninterf secretB1 among ((secrcst, secretB), n1). + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + if pk2 = pkB then + in(c, m: bitstring); + new n2: bitstring; + out(c, sencrypt(n2, k)). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + out(c, sencrypt(secretB1, k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco7.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco7.pv new file mode 100644 index 0000000000000000000000000000000000000000..ee239377eb13bb780abe159b94cd9fe5be6d4fa4 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco7.pv @@ -0,0 +1,109 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +const secrcst, ok, error, n2, n3: bitstring. + +free secretA1, secretA2, secretB: bitstring [private]. +noninterf secretA1 among (ok, n2), secretA2 among (error, n3), secretB. + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + if pk2 = pkB then + in(c, m: bitstring); + let (=secrcst, s:bitstring) = sdecrypt(m,k) in + ( + out(c, sencrypt(secretA1, k)) (* secretA1 takes values "ok" or n2 *) + ) + else + ( + out(c, sencrypt(secretA2, k)) (* secretA2 takes values "error" or n3 *) + ). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + out(c, sencrypt((secrcst, secretB), k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco8.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco8.pv new file mode 100644 index 0000000000000000000000000000000000000000..85c6e93d330d9db2c69e7abecc8bfc05202dd83e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/DenningSacco8.pv @@ -0,0 +1,103 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). + +(* Queries *) + +const n1, secrcst: bitstring. + +free secretB, secretB1: bitstring [private]. +noninterf secretB1 among ((secrcst, secretB), n1). + +(* Initiator *) + +let processInitiator(skA: sskey, pkA: spkey, pkB: pkey) = + in(c, pk2: pkey); + new k: key; + out(c, encrypt(sign((pkA, pk2, k), skA), pk2)); + if pk2 = pkB then + in(c, m: bitstring); + new n2: bitstring; + out(c, sencrypt(n2, k)). + +(* Responder *) + +let processResponder(skB: skey, pkB: pkey, pkA: spkey) = + in(c, km: bitstring); + let ks = decrypt(km,skB) in + let (=pkA, =pkB, k:key) = checksign(ks, pkA) in + out(c, sencrypt(secretB1, k)). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processInitiator(skA, pkA, pkB)) | + (!processResponder(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/NeedhamSchroederPK-corr.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/NeedhamSchroederPK-corr.pv new file mode 100644 index 0000000000000000000000000000000000000000..0b8775f849488d4dba4ce382e3411c5f0739dc11 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/NeedhamSchroederPK-corr.pv @@ -0,0 +1,193 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +Needham-Schroeder public key protocol +Corrected version by Lowe + + ? -> A : pkB +Message 1: A -> S : (A, B) +Message 2: S -> A : { B, pkB }_skS +Message 3: A -> B : { N_A, A }_pkB +Message 4: B -> S : (B, A) +Message 5: S -> B : { A, pkA }_skS +Message 6: B -> A : { N_A, N_B, B }_pkA +Message 7: A -> B : { N_B }_pkB + +The heart of the protocol is messages 3, 6, 7. + +*) + +free c: channel. + +type host. +type nonce. +type pkey. +type skey. +type spkey. +type sskey. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,nonce): bitstring. +reduc forall x: bitstring, y: nonce; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs (host, public key) *) +table keys(host, pkey). + +(* Queries *) + +free secretANa, secretANb, secretBNa, secretBNb: bitstring [private]. +noninterf secretANa, secretANb, secretBNa, secretBNb. +noninterf secretANa, secretANb. +noninterf secretBNa, secretBNb. + +(* Role of the initiator with identity xA and secret key skxA *) + +let processInitiator(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, hostX: host)); + if xA = A || xA = B then + let skxA = if xA = A then skA else skB in + let pkxA = pk(skxA) in + (* Real start of the role *) + (* Message 1: Get the public key certificate for the other host *) + out(c, (xA, hostX)); + (* Message 2 *) + in(c, ms: bitstring); + let (pkX: pkey, =hostX) = checksign(ms,pkS) in + (* Message 3 *) + new Na: nonce; + out(c, encrypt((Na, xA), pkX)); + (* Message 6 *) + in(c, m: bitstring); + let (=Na, NX2: nonce, =hostX) = decrypt(m, skA) in + (* Message 7 *) + out(c, encrypt(nonce_to_bitstring(NX2), pkX)); + (* OK *) + if hostX = B || hostX = A then + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +(* Role of the responder with identity xB and secret key skxB *) + +let processResponder(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + let skxB = if xB = A then skA else skB in + let pkxB = pk(skxB) in + (* Real start of the role *) + (* Message 3 *) + in(c, m: bitstring); + let (NY: nonce, hostY: host) = decrypt(m, skxB) in + (* Message 4: Get the public key certificate for the other host *) + out(c, (xB, hostY)); + (* Message 5 *) + in(c,ms: bitstring); + let (pkY: pkey,=hostY) = checksign(ms,pkS) in + (* Message 6 *) + new Nb: nonce; + out(c, encrypt((NY, Nb, xB), pkY)); + (* Message 7 *) + in(c, m3: bitstring); + if nonce_to_bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = A || hostY = B then + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + + +(* Server *) + +let processS(skS: sskey) = + in(c,(a: host, b: host)); + get keys(=b, sb) in + out(c,sign((sb,b),skS)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: pkey)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + insert keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the server *) + (!processS(skS)) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees-key.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees-key.pv new file mode 100644 index 0000000000000000000000000000000000000000..40f23a0c7635c17bd02671bacf60eb86d4fef29f --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees-key.pv @@ -0,0 +1,147 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +*) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretkey: key [private]. +noninterf secretkey. + +(* Role of the initiator with identity xA and key kA shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + get keys(=xA, kA) in + (* Real start of the role *) + new C: nonce; + new Na: nonce; + out(c, (C, xA, xB0, encrypt((Na, C, xA, xB0), kA))); + in(c, (=C, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA). + +(* Role of the responder with identity xB and key kB shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (C1: nonce, xA1: host, =xB, m2: bitstring)); + new Nb: nonce; + out(c, (C1, xA1, xB, m2, encrypt((Nb, C1, xA1, xB), kB))); + in(c, (=C1, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + out(c, (C1, m3)). + +(* Server *) + +let processS = + in(c, (C1: nonce, xA1: host, xB1: host, m2: bitstring, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (Na1: nonce, =C1, =xA1, =xB1) = decrypt(m2, kA1) in + let (Nb1: nonce, =C1, =xA1, =xB1) = decrypt(m3, kB1) in + if (xA1, xB1) = (A, B) then + ( + let k = secretkey in + out(c, (C1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))) + ) + else + ( + new k: key; + out(c, (C1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))) + ). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees-proba.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees-proba.pv new file mode 100644 index 0000000000000000000000000000000000000000..096fa4de6db6967b9d68b3b1f118e57d41e31969 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees-proba.pv @@ -0,0 +1,148 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +*) + +free c: channel. + +type key. +type host. +type nonce. + +(* Probabilistic shared key encryption *) + +type sseed. +fun internal_encrypt(bitstring,key,sseed): bitstring. +reduc forall x: bitstring, y: key, r: sseed; decrypt(internal_encrypt(x,y,r),y) = x. +letfun encrypt(x: bitstring, y: key) = new r: sseed; internal_encrypt(x,y,r). + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +noninterf secretA. +noninterf secretB. +noninterf secretA, secretB. + +(* Role of the initiator with identity xA and key kA shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + get keys(=xA, kA) in + (* Real start of the role *) + new C: nonce; + new Na: nonce; + out(c, (C, xA, xB0, encrypt((Na, C, xA, xB0), kA))); + in(c, (=C, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA) in + (* OK *) + if xB0 = A || xB0 = B then + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kB shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (C1: nonce, xA1: host, =xB, m2: bitstring)); + new Nb: nonce; + out(c, (C1, xA1, xB, m2, encrypt((Nb, C1, xA1, xB), kB))); + in(c, (=C1, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + out(c, (C1, m3)); + (* OK *) + if xA1 = A || xA1 = B then + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (C1: nonce, xA1: host, xB1: host, m2: bitstring, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (Na1: nonce, =C1, =xA1, =xB1) = decrypt(m2, kA1) in + let (Nb1: nonce, =C1, =xA1, =xB1) = decrypt(m3, kB1) in + new k: key; + out(c, (C1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees.pv new file mode 100644 index 0000000000000000000000000000000000000000..352f4cee3194ab82b353521c95a823e409b7620f --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/OtwayRees.pv @@ -0,0 +1,146 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +*) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +noninterf secretA. +noninterf secretB. +noninterf secretA, secretB. + +(* Role of the initiator with identity xA and key kA shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + get keys(=xA, kA) in + (* Real start of the role *) + new C: nonce; + new Na: nonce; + out(c, (C, xA, xB0, encrypt((Na, C, xA, xB0), kA))); + in(c, (=C, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA) in + (* OK *) + if xB0 = A || xB0 = B then + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kB shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (C1: nonce, xA1: host, =xB, m2: bitstring)); + new Nb: nonce; + out(c, (C1, xA1, xB, m2, encrypt((Nb, C1, xA1, xB), kB))); + in(c, (=C1, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + out(c, (C1, m3)); + (* OK *) + if xA1 = A || xA1 = B then + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (C1: nonce, xA1: host, xB1: host, m2: bitstring, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (Na1: nonce, =C1, =xA1, =xB1) = decrypt(m2, kA1) in + let (Nb1: nonce, =C1, =xA1, =xB1) = decrypt(m3, kB1) in + new k: key; + out(c, (C1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/Skeme-proba.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Skeme-proba.pv new file mode 100644 index 0000000000000000000000000000000000000000..50a825576989073dc2aecaa7771b968c41ee34e5 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Skeme-proba.pv @@ -0,0 +1,126 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +free c: channel. + +type nonce. +type pkey. +type skey. +type key. +type exponent. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. + +(* Probabilistic public key encryption *) + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; + decrypt(internal_encrypt(x,pk(y),r),y) = x. +letfun encrypt(x: bitstring, y:pkey) = new r: seed; internal_encrypt(x,y,r). + +(* Hash function *) + +fun hash(bitstring):key. + +(* Diffie-Hellman *) + +const g: bitstring. +fun exp(bitstring, exponent): bitstring. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Keyed hash function *) + +fun keyhash(bitstring, key):bitstring. + +(* Probabilistic shared key encryption *) + +type sseed. +fun internal_sencrypt(bitstring,key,sseed): bitstring. +reduc forall x: bitstring, y: key, r: sseed; sdecrypt(internal_sencrypt(x,y,r),y) = x. +letfun sencrypt(x: bitstring, y: key) = new r: sseed; internal_sencrypt(x,y,r). + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new x). +not attacker(new y). + +free secretA, secretB: bitstring [private]. +noninterf secretA, secretB. +noninterf secretA. +noninterf secretB. + +(* A *) + +let processA(skA: skey, pkA: pkey, pkB: pkey) = + in(c, pkX: pkey); + new x: exponent; + let gx = exp(g,x) in + new Ka: nonce; + out(c, (encrypt((pkA, Ka), pkX), gx)); + in(c, (m1: bitstring, m2: bitstring, m3: bitstring)); + let nonce_to_bitstring(Kb) = decrypt(m1, skA) in + let K0 = hash((Ka, Kb)) in + if m3 = keyhash((gx, m2, pkX, pkA), K0) then + let sh = hash(exp(m2, x)) in + out(c, keyhash((m2, gx, pkA, pkX), K0)); + (* OK *) + if pkX = pkB then + out(c, sencrypt(secretA, sh)). + +(* B *) + +let processB(skB: skey, pkB: pkey, pkA: pkey) = + in(c, (m1: bitstring, m2: bitstring)); + let (pkAr: pkey, Ka: nonce) = decrypt(m1, skB) in + new Kb: nonce; + let K0 = hash((Ka, Kb)) in + new y: exponent; + let gy = exp(g,y) in + let sh = hash(exp(m2, y)) in + out(c, (encrypt(nonce_to_bitstring(Kb), pkAr), gy, keyhash((m2, gy, pkB, pkAr), K0))); + in(c, m3: bitstring); + if m3 = keyhash((gy, m2, pkAr, pkB), K0) then + (* OK *) + if pkAr = pkA then + out(c, sencrypt(secretB, sh)). + + +process + new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processA(skA, pkA, pkB)) | (!processB(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/Skeme.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Skeme.pv new file mode 100644 index 0000000000000000000000000000000000000000..c1dc2ffced78cf1625c782ef770f6d43a42086b9 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Skeme.pv @@ -0,0 +1,121 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +free c: channel. + +type nonce. +type pkey. +type skey. +type key. +type exponent. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Hash function *) + +fun hash(bitstring):key. + +(* Diffie-Hellman *) + +const g: bitstring. +fun exp(bitstring, exponent): bitstring. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Keyed hash function *) + +fun keyhash(bitstring, key):bitstring. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new x). +not attacker(new y). + +free secretA, secretB: bitstring [private]. +noninterf secretA, secretB. +noninterf secretA. +noninterf secretB. + +(* A *) + +let processA(skA: skey, pkA: pkey, pkB: pkey) = + in(c, pkX: pkey); + new x: exponent; + let gx = exp(g,x) in + new Ka: nonce; + out(c, (encrypt((pkA, Ka), pkX), gx)); + in(c, (m1: bitstring, m2: bitstring, m3: bitstring)); + let nonce_to_bitstring(Kb) = decrypt(m1, skA) in + let K0 = hash((Ka, Kb)) in + if m3 = keyhash((gx, m2, pkX, pkA), K0) then + let sh = hash(exp(m2, x)) in + out(c, keyhash((m2, gx, pkA, pkX), K0)); + (* OK *) + if pkX = pkB then + out(c, sencrypt(secretA, sh)). + +(* B *) + +let processB(skB: skey, pkB: pkey, pkA: pkey) = + in(c, (m1: bitstring, m2: bitstring)); + let (pkAr: pkey, Ka: nonce) = decrypt(m1, skB) in + new Kb: nonce; + let K0 = hash((Ka, Kb)) in + new y: exponent; + let gy = exp(g,y) in + let sh = hash(exp(m2, y)) in + out(c, (encrypt(nonce_to_bitstring(Kb), pkAr), gy, keyhash((m2, gy, pkB, pkAr), K0))); + in(c, m3: bitstring); + if m3 = keyhash((gy, m2, pkAr, pkB), K0) then + (* OK *) + if pkAr = pkA then + out(c, sencrypt(secretB, sh)). + + +process + new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processA(skA, pkA, pkB)) | (!processB(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/Yahalom-proba.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Yahalom-proba.pv new file mode 100644 index 0000000000000000000000000000000000000000..78a4342f2a4784d8a1efe5a12ae90e0ff50f001e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Yahalom-proba.pv @@ -0,0 +1,151 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +(* Loops if types are ignored. To avoid looping, the arguments of +the random numbers generated for encryption should probably be removed. *) +set ignoreTypes = false. + +free c: channel. + +type key. +type host. +type nonce. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Probabilistic shared key encryption *) + +type sseed. +fun internal_encrypt(bitstring,key,sseed): bitstring. +reduc forall x: bitstring, y: key, r: sseed; decrypt(internal_encrypt(x,y,r),y) = x. +letfun encrypt(x: bitstring, y: key) = new r: sseed; internal_encrypt(x,y,r). + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +noninterf secretA, secretB. +noninterf secretA. +noninterf secretB. + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, xA: host); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + new Na: nonce; + out(c, (xA, Na)); + in(c, (cert1: bitstring, cert2: bitstring)); + let (b: host, k: key, =Na, nb: nonce) = decrypt(cert1, kas) in + out(c, (cert2, encrypt(nonce_to_bitstring(nb), k))); + (* OK *) + if b = A || b = B then + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, (a: host, na: nonce)); + new Nb: nonce; + out(c, (xB, encrypt((a, na, Nb), kbs))); + in(c, (cert2: bitstring, m: bitstring)); + let (=a, k: key) = decrypt(cert2, kbs) in + if nonce_to_bitstring(Nb) = decrypt(m, k) then + (* OK *) + if a = A || a = B then + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h2: host, m: bitstring)); + get keys(=h2, k2) in (* get the key of h2 from the key table *) + let (h1: host, n1: nonce, n2: nonce) = decrypt(m, k2) in + get keys(=h1, k1) in (* get the key of h1 from the key table *) + new k: key; + out(c, (encrypt((h2, k, n1, n2), k1), encrypt((h1, k), k2))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/Yahalom.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Yahalom.pv new file mode 100644 index 0000000000000000000000000000000000000000..7afb16b21a4cd0a970d6f4628dcf1681b1377bbe --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/Yahalom.pv @@ -0,0 +1,145 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +free c: channel. + +type key. +type host. +type nonce. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +noninterf secretA, secretB. +noninterf secretA. +noninterf secretB. + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, xA: host); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + new Na: nonce; + out(c, (xA, Na)); + in(c, (cert1: bitstring, cert2: bitstring)); + let (b: host, k: key, =Na, nb: nonce) = decrypt(cert1, kas) in + out(c, (cert2, encrypt(nonce_to_bitstring(nb), k))); + (* OK *) + if b = A || b = B then + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, (a: host, na: nonce)); + new Nb: nonce; + out(c, (xB, encrypt((a, na, Nb), kbs))); + in(c, (cert2: bitstring, m: bitstring)); + let (=a, k: key) = decrypt(cert2, kbs) in + if nonce_to_bitstring(Nb) = decrypt(m, k) then + (* OK *) + if a = A || a = B then + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h2: host, m: bitstring)); + get keys(=h2, k2) in (* get the key of h2 from the key table *) + let (h1: host, n1: nonce, n2: nonce) = decrypt(m, k2) in + get keys(=h1, k1) in (* get the key of h1 from the key table *) + new k: key; + out(c, (encrypt((h2, k, n1, n2), k1), encrypt((h1, k), k2))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/basic1.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/basic1.pv new file mode 100644 index 0000000000000000000000000000000000000000..058fa4a830440fddf191e5721933222f6d6a6224 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/basic1.pv @@ -0,0 +1,36 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +fun hash(bitstring): bitstring. + +free c: channel. +free x, n: bitstring [private]. + +noninterf x among (n, hash(n)). + +process + out(c, x) diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/basic2.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/basic2.pv new file mode 100644 index 0000000000000000000000000000000000000000..e30accbceba63b5000e5791005c048e58ed31843 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/basic2.pv @@ -0,0 +1,36 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +fun hash(bitstring): bitstring. + +free c: channel. +free x,n,m: bitstring [private]. + +noninterf x among (n, hash(m)). + +process + out(c, (m, x)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/dh-fs.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/dh-fs.pv new file mode 100644 index 0000000000000000000000000000000000000000..de2914eeb5493b3ad676ce77d1ac41e13b43ee26 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/dh-fs.pv @@ -0,0 +1,48 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Fails because cannot handle the equational theory + precisely enough. Use choice to prove this example successfully + (see examples/choice/dh-fs) +*) + +type G. +type exponent. + +const g: G [data]. +fun exp(G, exponent): G. + +equation forall x: exponent, y: exponent; exp(exp(g,x),y) = exp(exp(g,y),x). + +free c: channel. +free x: G [private]. +free n,m,s: exponent [private]. + +noninterf x among (exp(exp(g,m),n), exp(g,s)). + +process + out(c, (exp(g,m), exp(g,n), x)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/noninterf/wmf-tagged.pv b/preinstallTTool/linux/proverif/examples/pitype/noninterf/wmf-tagged.pv new file mode 100644 index 0000000000000000000000000000000000000000..e2e309b065942dac93e48b51749c86fde715a741 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/noninterf/wmf-tagged.pv @@ -0,0 +1,124 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Wide Mouth Frog protocol *) + +(* set ignoreTypes = none. *) + +type coins. +type host. +type key. +type tag. + +free c: channel. + +(* +A -> S : A, { c0, B, Kab }_{Kas} +S -> B : { c1, A, Kab }_{Kbs} +I added tags to distinguish the two encryptions. +*) + +(* Shared key encryption *) + +fun internal_encrypt(bitstring, key, coins):bitstring. +reduc forall x:bitstring, y:key, r:coins; decrypt(internal_encrypt(x,y,r),y) = x. +letfun encrypt(x: bitstring, k: key) = new r: coins; internal_encrypt(x,k,r). + +(* Host names *) +free A, B:host. + +(* Tags to distinguish the first from the second encryption *) +free c0,c1:tag. + +(* Table of keys *) +table keys(host, key). + +(* Queries *) + +event beginBkey(host,host,key). +event endBkey(host,host,key). +query xA:host, xB:host, xkAB:key; event(endBkey(xA, xB, xkAB)) ==> event(beginBkey(xA, xB, xkAB)). + +free secretInit, secretResp:bitstring [private]. +noninterf secretInit. +noninterf secretResp. + +(* Initiator *) + +let processInit = + (* Start honest initiator xI (A or B) wishing to talk to (honest or dishonest) xR. + Kis is the key of xI *) + in(c, (xI: host, xR:host )); + if xI = A || xI = B then + get keys(=xI, Kis: key) in + (* Real initiator role *) + new Kab: key; + event beginBkey(xI, xR, Kab); + out(c, (xI, encrypt((c0, xR, Kab), Kis))); + (* OK *) + if xR = A || xR = B then + out(c, encrypt(secretInit, Kab)). + +(* Server *) + +let processS = + in(c, (a:host, m:bitstring)); + get keys(=a, kas: key) in + let (=c0, b:host, kab:key) = decrypt(m,kas) in + get keys(=b, kbs: key) in + out(c, encrypt((c1, a, kab), kbs)). + +(* Key registration *) + +let processK = + in(c, (h:host,k:key)); + if h <> A && h <> B then insert keys(h,k). + +(* Responder *) + +let processResp = + (* Start honest responder of identity xR, which can be A or B. + Krs is its corresponding key *) + in(c, xR:host); + if xR = A || xR = B then + get keys(=xR, Krs: key) in + (* Real responder role *) + in(c, m:bitstring); + let (=c1, a:host, kab:key) = decrypt(m, Krs) in + (* OK *) + if a = A || a = B then + event endBkey(a, xR, kab); + out(c, encrypt(secretResp, kab)). + +process + new Kas:key; new Kbs:key; + insert keys(A, Kas); + insert keys(B, Kbs); + ((!processInit) | + (!processResp) | + (!processS) | + (!processK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-corr.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-corr.pv new file mode 100644 index 0000000000000000000000000000000000000000..86db664c8b066c2a84796d7a38b2247b48399e7a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-corr.pv @@ -0,0 +1,180 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new sskA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/encryption keys + The key table consists of pairs (host, public key) *) +table enc_keys(host, pkey). + +(* the table host names/signature verification keys + The key table consists of pairs (host, public key) *) +table sign_keys(host, spkey). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endBparam(host,host). +event beginBparam(host,host). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Initiator *) + +let processInitiator(pkS: spkey, sskA: sskey, sskB: sskey) = + (* The attacker starts the initiator by choosing identity xA + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host)); + if xA = A || xA = B then + let sskA = if xA = A then sskA else sskB in + let spkA = spk(sskA) in + (* Real start of the role *) + in(c, (cert1: bitstring, cert2: bitstring)); + let (=xA, =spkA) = checksign(cert1, pkS) in + let (h2: host, pk2: pkey) = checksign(cert2, pkS) in + event beginBparam(xA, h2); + new k: key; + event beginBkey(xA, h2, k); + out(c, (cert1, cert2, encrypt(sign((xA, h2, k), sskA), pk2))); + if h2 = B then + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + let skB = if xB = A then skA else skB in + let pkB = pk(skB) in + (* Real start of the role *) + in(c, (cert1: bitstring, cert2: bitstring, km: bitstring)); + let (h1: host, pk1: spkey) = checksign(cert1, pkS) in + let (=xB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let (=h1, =xB, k: key) = checksign(ks, pk1) in + if h1 = A then + event endBparam(h1, xB); + event endBkey(h1, xB, k); + out(c, sencrypt(secretB, k)). + +(* Server *) + +let processS(skS: sskey) = + in(c, (h1: host,h2: host)); + get sign_keys(=h1, pk1) in + get enc_keys(=h2, pk2) in + out(c, (sign((h1, pk1), skS), sign((h2, pk2), skS))). + +(* Signature key registration *) + +let process_signK = + in(c, (h: host, pk: spkey)); + if h <> A && h <> B then insert sign_keys(h, pk). + +(* Encryption key registration *) + +let process_encK = + in(c, (h: host, pk: pkey)); + if h <> A && h <> B then insert enc_keys(h, pk). + +(* Main process *) + +process (* Signature and encryption keys for A *) + new sskA: sskey; + let spkA = spk(sskA) in + out(c, spkA); + insert sign_keys(A, spkA); + new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + insert enc_keys(A, pkA); + (* Signature and encryption keys for B *) + new sskB: sskey; + let spkB = spk(sskB) in + out(c, spkB); + insert sign_keys(B, spkB); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert enc_keys(B, pkB); + + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ((!processInitiator(pkS, sskA, sskB)) | + (!processResponder(pkS, skA, skB)) | + (!processS(skS)) | + (!process_signK) | (!process_encK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-corr.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-corr.pv new file mode 100644 index 0000000000000000000000000000000000000000..436548285fe4c4539d30b1123cf2066b291b7691 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-corr.pv @@ -0,0 +1,153 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/encryption keys + The key table consists of pairs (host, public key) *) +table enc_keys(host, pkey). + +(* the table host names/signature verification keys + The key table consists of pairs (host, public key) *) +table sign_keys(host, spkey). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endBparam(host,host). +event beginBparam(host,host). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Initiator *) + +let processInitiator(pkS: spkey, xA: host, skA: sskey, pkA: spkey) = + in(c, (cert1: bitstring, cert2: bitstring)); + let (=xA, =pkA) = checksign(cert1, pkS) in + let (h2: host, pk2: pkey) = checksign(cert2, pkS) in + event beginBparam(xA, h2); + new k: key; + event beginBkey(xA, h2, k); + out(c, (cert1, cert2, encrypt(sign((A, h2, k), skA), pk2))); + if h2 = B then + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(pkS: spkey, xB: host, skB: skey, pkB: pkey) = + in(c, (cert1: bitstring, cert2: bitstring, km: bitstring)); + let (h1: host, pk1: spkey) = checksign(cert1, pkS) in + let (=xB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let (=h1, =xB, k:key) = checksign(ks, pk1) in + if h1 = A then + event endBparam(h1, xB); + event endBkey(h1, xB, k); + out(c, sencrypt(secretB, k)). + +(* Server *) + +let processS(skS: sskey) = + in(c, (h1: host,h2: host)); + get sign_keys(=h1, pk1) in + get enc_keys(=h2, pk2) in + out(c, (sign((h1, pk1), skS), sign((h2, pk2), skS))). + +(* Signature key registration *) + +let process_signK = + in(c, (h: host, pk: spkey)); + if h <> A then insert sign_keys(h, pk). + +(* Encryption key registration *) + +let process_encK = + in(c, (h: host, pk: pkey)); + if h <> B then insert enc_keys(h, pk). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + insert sign_keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert enc_keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ((!processInitiator(pkS, A, skA, pkA)) | + (!processResponder(pkS, B, skB, pkB)) | + (!processS(skS)) | + (!process_signK) | (!process_encK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-tagged.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-tagged.pv new file mode 100644 index 0000000000000000000000000000000000000000..ca508268968880222c22e6da64a2ce05b790d095 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-tagged.pv @@ -0,0 +1,158 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. +type tag. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* Tags *) + +const c0, c1, c2, c3: tag [data]. + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/encryption keys + The key table consists of pairs (host, public key) *) +table enc_keys(host, pkey). + +(* the table host names/signature verification keys + The key table consists of pairs (host, public key) *) +table sign_keys(host, spkey). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endBparam(host,host). +event beginBparam(host,host). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Initiator *) + +let processInitiator(pkS: spkey, xA: host, skA: sskey, pkA: spkey) = + in(c, (cert1: bitstring, cert2: bitstring)); + let (=c0, =xA, =pkA) = checksign(cert1, pkS) in + let (=c1, h2: host, pk2: pkey) = checksign(cert2, pkS) in + event beginBparam(xA, h2); + new k: key; + event beginBkey(xA, h2, k); + out(c, (cert1, cert2, encrypt((c2, sign((c3, k), skA)), pk2))); + if h2 = B then + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(pkS: spkey, xB: host, skB: skey, pkB: pkey) = + in(c, (cert1: bitstring, cert2: bitstring, km: bitstring)); + let (=c0, h1: host, pk1: spkey) = checksign(cert1, pkS) in + let (=c1, =xB, =pkB) = checksign(cert2, pkS) in + let (=c2, ks: bitstring) = decrypt(km,skB) in + let (=c3, k:key) = checksign(ks, pk1) in + if h1 = A then + event endBparam(h1, xB); + event endBkey(h1, xB, k); + out(c, sencrypt(secretB, k)). + +(* Server *) + +let processS(skS: sskey) = + in(c, (h1: host,h2: host)); + get sign_keys(=h1, pk1) in + get enc_keys(=h2, pk2) in + out(c, (sign((c0, h1, pk1), skS), sign((c1, h2, pk2), skS))). + +(* Signature key registration *) + +let process_signK = + in(c, (h: host, pk: spkey)); + if h <> A then insert sign_keys(h, pk). + +(* Encryption key registration *) + +let process_encK = + in(c, (h: host, pk: pkey)); + if h <> B then insert enc_keys(h, pk). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + insert sign_keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert enc_keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ((!processInitiator(pkS, A, skA, pkA)) | + (!processResponder(pkS, B, skB, pkB)) | + (!processS(skS)) | + (!process_signK) | (!process_encK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-test.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-test.pv new file mode 100644 index 0000000000000000000000000000000000000000..b74794115b3dda17db3a209274da8788be3170e8 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid-test.pv @@ -0,0 +1,154 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/encryption keys + The key table consists of pairs (host, public key) *) +table enc_keys(host, pkey). + +(* the table host names/signature verification keys + The key table consists of pairs (host, public key) *) +table sign_keys(host, spkey). + +(* Queries *) + +free secretB: bitstring [private]. +query attacker(new secretA[h2 = B]). +query x: pkey; attacker(new secretA[cert2 = sign((B, x), new skS)]); + attacker(secretB). + +event endBparam(host,host). +event beginBparam(host,host). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Initiator *) + +let processInitiator(pkS: spkey, xA: host, skA: sskey, pkA: spkey) = + in(c, (cert1: bitstring, cert2: bitstring)); + let (=xA, =pkA) = checksign(cert1, pkS) in + let (h2: host, pk2: pkey) = checksign(cert2, pkS) in + event beginBparam(xA, h2); + new k: key; + event beginBkey(xA, h2, k); + out(c, (cert1, cert2, encrypt(sign((A, h2, k), skA), pk2))); + new secretA: bitstring; + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(pkS: spkey, xB: host, skB: skey, pkB: pkey) = + in(c, (cert1: bitstring, cert2: bitstring, km: bitstring)); + let (h1: host, pk1: spkey) = checksign(cert1, pkS) in + let (=xB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let (=h1, =xB, k:key) = checksign(ks, pk1) in + if h1 = A then + event endBparam(h1, xB); + event endBkey(h1, xB, k); + out(c, sencrypt(secretB, k)). + +(* Server *) + +let processS(skS: sskey) = + in(c, (h1: host,h2: host)); + get sign_keys(=h1, pk1) in + get enc_keys(=h2, pk2) in + out(c, (sign((h1, pk1), skS), sign((h2, pk2), skS))). + +(* Signature key registration *) + +let process_signK = + in(c, (h: host, pk: spkey)); + if h <> A then insert sign_keys(h, pk). + +(* Encryption key registration *) + +let process_encK = + in(c, (h: host, pk: pkey)); + if h <> B then insert enc_keys(h, pk). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + insert sign_keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert enc_keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ((!processInitiator(pkS, A, skA, pkA)) | + (!processResponder(pkS, B, skB, pkB)) | + (!processS(skS)) | + (!process_signK) | (!process_encK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid.pv new file mode 100644 index 0000000000000000000000000000000000000000..fd911959dd54479be38753c42e6fa51369932463 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco-unid.pv @@ -0,0 +1,155 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +fun key_to_bitstring(key):bitstring [data,typeConverter]. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/encryption keys + The key table consists of pairs (host, public key) *) +table enc_keys(host, pkey). + +(* the table host names/signature verification keys + The key table consists of pairs (host, public key) *) +table sign_keys(host, spkey). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endBparam(host,host). +event beginBparam(host,host). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Initiator *) + +let processInitiator(pkS: spkey, xA: host, skA: sskey, pkA: spkey) = + in(c, (cert1: bitstring, cert2: bitstring)); + let (=xA, =pkA) = checksign(cert1, pkS) in + let (h2: host, pk2: pkey) = checksign(cert2, pkS) in + event beginBparam(xA, h2); + new k: key; + event beginBkey(xA, h2, k); + out(c, (cert1, cert2, encrypt(sign(key_to_bitstring(k), skA), pk2))); + if h2 = B then + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(pkS: spkey, xB: host, skB: skey, pkB: pkey) = + in(c, (cert1: bitstring, cert2: bitstring, km: bitstring)); + let (h1: host, pk1: spkey) = checksign(cert1, pkS) in + let (=xB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let key_to_bitstring(k) = checksign(ks, pk1) in + if h1 = A then + event endBparam(h1, xB); + event endBkey(h1, xB, k); + out(c, sencrypt(secretB, k)). + +(* Server *) + +let processS(skS: sskey) = + in(c, (h1: host,h2: host)); + get sign_keys(=h1, pk1) in + get enc_keys(=h2, pk2) in + out(c, (sign((h1, pk1), skS), sign((h2, pk2), skS))). + +(* Signature key registration *) + +let process_signK = + in(c, (h: host, pk: spkey)); + if h <> A then insert sign_keys(h, pk). + +(* Encryption key registration *) + +let process_encK = + in(c, (h: host, pk: pkey)); + if h <> B then insert enc_keys(h, pk). + +(* Main process *) + +process new skA: sskey; + let pkA = spk(skA) in + out(c, pkA); + insert sign_keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert enc_keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ((!processInitiator(pkS, A, skA, pkA)) | + (!processResponder(pkS, B, skB, pkB)) | + (!processS(skS)) | + (!process_signK) | (!process_encK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco.pv new file mode 100644 index 0000000000000000000000000000000000000000..e3baf7318ca0c88f2a8871b1023c65bd1f85e3d5 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DenningSacco.pv @@ -0,0 +1,183 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Denning-Sacco + In this model, I separate the keys for encryption and the + keys for signature, which complicates the model. *) + +free c: channel. + +type host. +type key. +type pkey. +type skey. +type spkey. +type sskey. + +fun key_to_bitstring(key):bitstring [data,typeConverter]. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new sskA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/encryption keys + The key table consists of pairs (host, public key) *) +table enc_keys(host, pkey). + +(* the table host names/signature verification keys + The key table consists of pairs (host, public key) *) +table sign_keys(host, spkey). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endBparam(host,host). +event beginBparam(host,host). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Initiator *) + +let processInitiator(pkS: spkey, sskA: sskey, sskB: sskey) = + (* The attacker starts the initiator by choosing identity xA + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host)); + if xA = A || xA = B then + let sskA = if xA = A then sskA else sskB in + let spkA = spk(sskA) in + (* Real start of the role *) + in(c, (cert1: bitstring, cert2: bitstring)); + let (=xA, =spkA) = checksign(cert1, pkS) in + let (h2: host, pk2: pkey) = checksign(cert2, pkS) in + event beginBparam(xA, h2); + new k: key; + event beginBkey(xA, h2, k); + out(c, (cert1, cert2, encrypt(sign(key_to_bitstring(k), sskA), pk2))); + if h2 = B then + out(c, sencrypt(secretA, k)). + +(* Responder *) + +let processResponder(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + let skB = if xB = A then skA else skB in + let pkB = pk(skB) in + (* Real start of the role *) + in(c, (cert1: bitstring, cert2: bitstring, km: bitstring)); + let (h1: host, pk1: spkey) = checksign(cert1, pkS) in + let (=xB, =pkB) = checksign(cert2, pkS) in + let ks = decrypt(km,skB) in + let key_to_bitstring(k) = checksign(ks, pk1) in + if h1 = A then + event endBparam(h1, xB); + event endBkey(h1, xB, k); + out(c, sencrypt(secretB, k)). + +(* Server *) + +let processS(skS: sskey) = + in(c, (h1: host,h2: host)); + get sign_keys(=h1, pk1) in + get enc_keys(=h2, pk2) in + out(c, (sign((h1, pk1), skS), sign((h2, pk2), skS))). + +(* Signature key registration *) + +let process_signK = + in(c, (h: host, pk: spkey)); + if h <> A && h <> B then insert sign_keys(h, pk). + +(* Encryption key registration *) + +let process_encK = + in(c, (h: host, pk: pkey)); + if h <> A && h <> B then + insert enc_keys(h, pk). + +(* Main process *) + +process (* Signature and encryption keys for A *) + new sskA: sskey; + let spkA = spk(sskA) in + out(c, spkA); + insert sign_keys(A, spkA); + new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + insert enc_keys(A, pkA); + (* Signature and encryption keys for B *) + new sskB: sskey; + let spkB = spk(sskB) in + out(c, spkB); + insert sign_keys(B, spkB); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert enc_keys(B, pkB); + + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ((!processInitiator(pkS, sskA, sskB)) | + (!processResponder(pkS, skA, skB)) | + (!processS(skS)) | + (!process_signK) | (!process_encK)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DiffieHellman-active.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DiffieHellman-active.pv new file mode 100644 index 0000000000000000000000000000000000000000..f29aa4deb9d66a3524cef912853126fe00221bdc --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DiffieHellman-active.pv @@ -0,0 +1,94 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Signed Diffie-Hellman + A -> B : { e^n0 }skA, pkA (n0 fresh) + B -> A : { e^n1 }skB (n1 fresh) + A and B compute the key as k = (e^n0)^n1 = (e^n1)^n0 + A -> B : { s }k + + *) + +free c: channel. + +type pkey. +type skey. +type G. +type exponent. + +(* Signatures *) + +fun sign(G, skey): bitstring. +fun pk(skey):pkey. +reduc forall m: G, k: skey; getmess(sign(m,k)) = m. +reduc forall m: G, k: skey; checksign(sign(m,k), pk(k)) = m. + +(* Shared key encryption *) + +fun enc(bitstring, G): bitstring. +reduc forall x: bitstring, y: G; dec(enc(x,y),y) = x. + +(* Diffie-Hellman *) + +const g: G. +fun exp(G, exponent): G. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Test whether s is secret *) + +free s: bitstring [private]. +query attacker(s). + +(* The process *) + +let p0(skA: skey, pkA: pkey, pkB: pkey) = + in(c, pkX: pkey); + new n0: exponent; + out(c,(sign(exp(g, n0), skA), pkA)); + in(c,m1: bitstring); + let x1 = checksign(m1, pkX) in + let k = exp(x1, n0) in + if pkX = pkB then + out(c, enc(s,k)). + +let p1(skB: skey, pkB: pkey, pkA: pkey) = + in(c, (m0: bitstring, pkY: pkey)); + let x0 = checksign(m0, pkY) in + new n1: exponent; + let k = exp(x0, n1) in + out(c,sign(exp(g, n1), skB)); + in (c,m: bitstring); + let s2 = dec(m,k) in 0. + +process + new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!p0(skA, pkA, pkB)) | (!p1(skB, pkB, pkA))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DiffieHellman-passive.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DiffieHellman-passive.pv new file mode 100644 index 0000000000000000000000000000000000000000..aab8f149659b9e82cbede47157d160bb8fa3583c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/DiffieHellman-passive.pv @@ -0,0 +1,71 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Diffie-Hellman without signatures + Only resists passive attacks + A -> B : e^n0 + B -> A : e^n1 + A and B compute the key as k = (e^n0)^n1 = (e^n1)^n0 + A -> B : {s}k +*) + +free c: channel. + +type G. +type exponent. + +(* Passive adversary *) +set attacker = passive. + +(* Shared key encryption *) + +fun enc(bitstring, G): bitstring. +reduc forall x: bitstring, y: G; dec(enc(x,y),y) = x. + +(* Diffie-Hellman *) + +const g: G. +fun exp(G, exponent): G. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Test whether s is secret *) + +free s: bitstring [private]. +query attacker(s). + +(* The process *) + +let p0 = new n0: exponent; + (out(c,exp(g, n0)) | in(c,x1:G); let k = exp(x1,n0) in out(c, enc(s,k))). + +let p1 = new n1: exponent; + (out(c,exp(g, n1)) | in(c,x0:G); + let k = exp(x0,n1) in + in (c,m: bitstring); + let s2 = dec(m,k) in 0). + +process p0 | p1 diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK-corr.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK-corr.pv new file mode 100644 index 0000000000000000000000000000000000000000..741295cfa7c75754d19e144e295447a57a10617b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK-corr.pv @@ -0,0 +1,219 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +Needham-Schroeder public key protocol +Corrected version by Lowe + + ? -> A : pkB +Message 1: A -> S : (A, B) +Message 2: S -> A : { B, pkB }_skS +Message 3: A -> B : { N_A, A }_pkB +Message 4: B -> S : (B, A) +Message 5: S -> B : { A, pkA }_skS +Message 6: B -> A : { N_A, N_B, B }_pkA +Message 7: A -> B : { N_B }_pkB + +The heart of the protocol is messages 3, 6, 7. + +*) + +free c: channel. + +type host. +type nonce. +type pkey. +type skey. +type spkey. +type sskey. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,nonce): bitstring. +reduc forall x: bitstring, y: nonce; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs (host, public key) *) +table keys(host, pkey). + +(* Queries *) + +free secretANa, secretANb, secretBNa, secretBNb: bitstring [private]. +query attacker(secretANa); + attacker(secretANb); + attacker(secretBNa); + attacker(secretBNb). + +event beginBparam(host, host). +event endBparam(host, host). +event beginAparam(host, host). +event endAparam(host, host). +event beginBfull(host, host, pkey, pkey, nonce, nonce). +event endBfull(host, host, pkey, pkey, nonce, nonce). +event beginAfull(host, host, pkey, pkey, nonce, nonce). +event endAfull(host, host, pkey, pkey, nonce, nonce). + + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x1: host, x2: host, x3: pkey, x4: pkey, x5: nonce, x6: nonce; + inj-event(endBfull(x1,x2,x3,x4,x5,x6)) ==> inj-event(beginBfull(x1,x2,x3,x4,x5,x6)). +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x1: host, x2: host, x3: pkey, x4: pkey, x5: nonce, x6: nonce; + inj-event(endAfull(x1,x2,x3,x4,x5,x6)) ==> inj-event(beginAfull(x1,x2,x3,x4,x5,x6)). + +(* Role of the initiator with identity xA and secret key skxA *) + +let processInitiator(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, hostX: host)); + if xA = A || xA = B then + let skxA = if xA = A then skA else skB in + let pkxA = pk(skxA) in + (* Real start of the role *) + event beginBparam(xA, hostX); + (* Message 1: Get the public key certificate for the other host *) + out(c, (xA, hostX)); + (* Message 2 *) + in(c, ms: bitstring); + let (pkX: pkey, =hostX) = checksign(ms,pkS) in + (* Message 3 *) + new Na: nonce; + out(c, encrypt((Na, xA), pkX)); + (* Message 6 *) + in(c, m: bitstring); + let (=Na, NX2: nonce, =hostX) = decrypt(m, skA) in + event beginBfull(xA, hostX, pkX, pkxA, Na, NX2); + (* Message 7 *) + out(c, encrypt(nonce_to_bitstring(NX2), pkX)); + (* OK *) + if hostX = B || hostX = A then + event endAparam(xA, hostX); + event endAfull(xA, hostX, pkX, pkxA, Na, NX2); + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +(* Role of the responder with identity xB and secret key skxB *) + +let processResponder(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + let skxB = if xB = A then skA else skB in + let pkxB = pk(skxB) in + (* Real start of the role *) + (* Message 3 *) + in(c, m: bitstring); + let (NY: nonce, hostY: host) = decrypt(m, skxB) in + event beginAparam(hostY, xB); + (* Message 4: Get the public key certificate for the other host *) + out(c, (xB, hostY)); + (* Message 5 *) + in(c,ms: bitstring); + let (pkY: pkey,=hostY) = checksign(ms,pkS) in + (* Message 6 *) + new Nb: nonce; + event beginAfull(hostY, xB, pkxB, pkY, NY, Nb); + out(c, encrypt((NY, Nb, xB), pkY)); + (* Message 7 *) + in(c, m3: bitstring); + if nonce_to_bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = A || hostY = B then + event endBparam(hostY, xB); + event endBfull(hostY, xB, pkxB, pkY, NY, Nb); + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + + +(* Server *) + +let processS(skS: sskey) = + in(c,(a: host, b: host)); + get keys(=b, sb) in + out(c,sign((sb,b),skS)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: pkey)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + insert keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the server *) + (!processS(skS)) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK-tagged.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK-tagged.pv new file mode 100644 index 0000000000000000000000000000000000000000..bce4002c7431e13631885953afff12928c2c1699 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK-tagged.pv @@ -0,0 +1,221 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +Needham-Schroeder public key protocol + +Message 1: A -> S : (A, B) +Message 2: S -> A : { pkB, B }skS +Message 3: A -> B : { Na, A }pkB +Message 4: B -> S : (B, A) +Message 5: S -> B : { pkA, A }skS +Message 6: B -> A : { Na, Nb }pkA +Message 7: A -> B : { Nb }pkB + +The heart of the protocol is messages 3, 6, 7. +Tags added to distinguish messages. + +*) + +free c: channel. + +type host. +type nonce. +type pkey. +type skey. +type spkey. +type sskey. +type tag. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,nonce): bitstring. +reduc forall x: bitstring, y: nonce; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs (host, public key) *) +table keys(host, pkey). + +(* Queries *) + +free secretANa, secretANb, secretBNa, secretBNb: bitstring [private]. +query attacker(secretANa); + attacker(secretANb); + attacker(secretBNa); + attacker(secretBNb). + +event beginBparam(host, host). +event endBparam(host, host). +event beginAparam(host, host). +event endAparam(host, host). +event beginBfull(host, host, pkey, pkey, nonce, nonce). +event endBfull(host, host, pkey, pkey, nonce, nonce). +event beginAfull(host, host, pkey, pkey, nonce, nonce). +event endAfull(host, host, pkey, pkey, nonce, nonce). + + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x1: host, x2: host, x3: pkey, x4: pkey, x5: nonce, x6: nonce; + inj-event(endBfull(x1,x2,x3,x4,x5,x6)) ==> inj-event(beginBfull(x1,x2,x3,x4,x5,x6)). +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x1: host, x2: host, x3: pkey, x4: pkey, x5: nonce, x6: nonce; + inj-event(endAfull(x1,x2,x3,x4,x5,x6)) ==> inj-event(beginAfull(x1,x2,x3,x4,x5,x6)). + +(* Tags *) + +const c0:tag [data]. +const c1:tag [data]. +const c2:tag [data]. +const c3:tag [data]. + +(* Role of the initiator with identity xA and secret key skxA *) + +let processInitiator(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, hostX: host)); + if xA = A || xA = B then + let skxA = if xA = A then skA else skB in + let pkxA = pk(skxA) in + (* Real start of the role *) + event beginBparam(xA, hostX); + (* Get the public key certificate for the other host *) + out(c, (xA, hostX)); + in(c, ms: bitstring); + let (=c0,pkX: pkey,=hostX) = checksign(ms,pkS) in + (* Message 3 *) + new Na: nonce; + out(c, encrypt((c1, Na, xA), pkX)); + (* Message 6 *) + in(c, m: bitstring); + let (=c2, =Na, NX2: nonce) = decrypt(m, skxA) in + event beginBfull(xA, hostX, pkX, pkxA, Na, NX2); + (* Message 7 *) + out(c, encrypt((c3, NX2), pkX)); + (* OK *) + if hostX = B || hostX = A then + event endAparam(xA, hostX); + event endAfull(xA, hostX, pkX, pkxA, Na, NX2); + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +(* Role of the responder with identity xB and secret key skxB *) + +let processResponder(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + let skxB = if xB = A then skA else skB in + let pkxB = pk(skxB) in + (* Real start of the role *) + (* Message 3 *) + in(c, m: bitstring); + let (=c1, NY: nonce, hostY: host) = decrypt(m, skxB) in + event beginAparam(hostY, xB); + (* Get the public key certificate for the other host *) + out(c, (xB, hostY)); + in(c,ms: bitstring); + let (=c0,pkY: pkey,=hostY) = checksign(ms,pkS) in + (* Message 2 *) + new Nb: nonce; + event beginAfull(hostY, xB, pkxB, pkY, NY, Nb); + (* Message 3 *) + out(c, encrypt((c2, NY, Nb), pkY)); + in(c, m3: bitstring); + if (c3, Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = A || hostY = B then + event endBparam(hostY, xB); + event endBfull(hostY, xB, pkxB, pkY, NY, Nb); + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +(* Server *) + +let processS(skS: sskey) = + in(c,(a: host, b: host)); + get keys(=b, sb) in + out(c,sign((c0,sb,b),skS)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: pkey)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + insert keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the server *) + (!processS(skS)) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK.pv new file mode 100644 index 0000000000000000000000000000000000000000..be35c9c194b422239d30b625f4a5613811abfc74 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederPK.pv @@ -0,0 +1,219 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +Needham-Schroeder public key protocol + +Message 1: A -> S : (A, B) +Message 2: S -> A : { pkB, B }skS +Message 3: A -> B : { Na, A }pkB +Message 4: B -> S : (B, A) +Message 5: S -> B : { pkA, A }skS +Message 6: B -> A : { Na, Nb }pkA +Message 7: A -> B : { Nb }pkB + +The heart of the protocol is messages 3, 6, 7. + +*) + +(* Loops if types are ignored *) +set ignoreTypes = false. + +free c: channel. + +type host. +type nonce. +type pkey. +type skey. +type spkey. +type sskey. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Signatures *) + +fun spk(sskey): spkey. +fun sign(bitstring, sskey): bitstring. +reduc forall m: bitstring, k: sskey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: sskey; checksign(sign(m,k), spk(k)) = m. + +(* Shared key encryption *) + +fun sencrypt(bitstring,nonce): bitstring. +reduc forall x: bitstring, y: nonce; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs (host, public key) *) +table keys(host, pkey). + +(* Queries *) + +free secretANa, secretANb, secretBNa, secretBNb: bitstring [private]. +query attacker(secretANa); + attacker(secretANb); + attacker(secretBNa); + attacker(secretBNb). + +event beginBparam(host, host). +event endBparam(host, host). +event beginAparam(host, host). +event endAparam(host, host). +event beginBfull(host, host, pkey, pkey, nonce, nonce). +event endBfull(host, host, pkey, pkey, nonce, nonce). +event beginAfull(host, host, pkey, pkey, nonce, nonce). +event endAfull(host, host, pkey, pkey, nonce, nonce). + + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x1: host, x2: host, x3: pkey, x4: pkey, x5: nonce, x6: nonce; + inj-event(endBfull(x1,x2,x3,x4,x5,x6)) ==> inj-event(beginBfull(x1,x2,x3,x4,x5,x6)). +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x1: host, x2: host, x3: pkey, x4: pkey, x5: nonce, x6: nonce; + inj-event(endAfull(x1,x2,x3,x4,x5,x6)) ==> inj-event(beginAfull(x1,x2,x3,x4,x5,x6)). + +(* Role of the initiator with identity xA and secret key skxA *) + +let processInitiator(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, hostX: host)); + if xA = A || xA = B then + let skxA = if xA = A then skA else skB in + let pkxA = pk(skxA) in + (* Real start of the role *) + event beginBparam(xA, hostX); + (* Message 1: Get the public key certificate for the other host *) + out(c, (xA, hostX)); + (* Message 2 *) + in(c, ms: bitstring); + let (pkX: pkey, =hostX) = checksign(ms,pkS) in + (* Message 3 *) + new Na: nonce; + out(c, encrypt((Na, xA), pkX)); + (* Message 6 *) + in(c, m: bitstring); + let (=Na, NX2: nonce) = decrypt(m, skxA) in + event beginBfull(xA, hostX, pkX, pkxA, Na, NX2); + (* Message 7 *) + out(c, encrypt(nonce_to_bitstring(NX2), pkX)); + (* OK *) + if hostX = B || hostX = A then + event endAparam(xA, hostX); + event endAfull(xA, hostX, pkX, pkxA, Na, NX2); + out(c, sencrypt(secretANa, Na)); + out(c, sencrypt(secretANb, NX2)). + +(* Role of the responder with identity xB and secret key skxB *) + +let processResponder(pkS: spkey, skA: skey, skB: skey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + let skxB = if xB = A then skA else skB in + let pkxB = pk(skxB) in + (* Real start of the role *) + (* Message 3 *) + in(c, m: bitstring); + let (NY: nonce, hostY: host) = decrypt(m, skxB) in + event beginAparam(hostY, xB); + (* Message 4: Get the public key certificate for the other host *) + out(c, (xB, hostY)); + (* Message 5 *) + in(c,ms: bitstring); + let (pkY: pkey,=hostY) = checksign(ms,pkS) in + (* Message 6 *) + new Nb: nonce; + event beginAfull(hostY, xB, pkxB, pkY, NY, Nb); + out(c, encrypt((NY, Nb), pkY)); + (* Message 7 *) + in(c, m3: bitstring); + if nonce_to_bitstring(Nb) = decrypt(m3, skB) then + (* OK *) + if hostY = A || hostY = B then + event endBparam(hostY, xB); + event endBfull(hostY, xB, pkxB, pkY, NY, Nb); + out(c, sencrypt(secretBNa, NY)); + out(c, sencrypt(secretBNb, Nb)). + +(* Server *) + +let processS(skS: sskey) = + in(c,(a: host, b: host)); + get keys(=b, sb) in + out(c,sign((sb,b),skS)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: pkey)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + insert keys(A, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + insert keys(B, pkB); + new skS: sskey; + let pkS = spk(skS) in + out(c, pkS); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder(pkS, skA, skB)) | + (* Launch an unbounded number of sessions of the server *) + (!processS(skS)) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-comp.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-comp.pv new file mode 100644 index 0000000000000000000000000000000000000000..3eee05692f6b76a434dec773e159392742d3d36b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-comp.pv @@ -0,0 +1,166 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +set keyCompromise = strict. +(* Needham-Schroeder shared key *) + +free c: channel. + +type key. +type host. +type nonce. +type tag. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +query attacker(new secretA); + attacker(new secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* constants 0 and 1 *) + +const c0: tag [data]. +const c1: tag [data]. + + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* Session secret *) + new secretA: bitstring; + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, h: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + event beginBparam(xA,h); + new Na: nonce; + out(c,(xA, h, Na)); + in(c,m2: bitstring); + let (=Na, =h, k: key, m: bitstring) = decrypt(m2, kas) in + event beginBkey(xA, h, k); + out(c,m); + in(c, m3: bitstring); + let (=c0, n: nonce) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B || h = A then + event endAparam(xA, h); + event endAkey(xA, h, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* Session secret *) + new secretB: bitstring; + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c,m4: bitstring); + let (k: key,h: host) = decrypt(m4,kbs) in + event beginAparam(h, xB); + event beginAkey(h, xB, k); + new Nb: nonce; + out(c, encrypt((c0, Nb), k)); + in(c,m5: bitstring); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A || h = B then + event endBparam(h, xB); + event endBkey(h, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h1: host,h2: host,n: nonce)); + get keys(=h1, ks1) in + get keys(=h2, ks2) in + new k: key; + out(c, encrypt((n, h2, k, encrypt((k,h1),ks2)), ks1)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-compapprox.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-compapprox.pv new file mode 100644 index 0000000000000000000000000000000000000000..3baa58fde04b39818e81008554230f71590dd12b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-compapprox.pv @@ -0,0 +1,166 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +set keyCompromise = approx. +(* Needham-Schroeder shared key *) + +free c: channel. + +type key. +type host. +type nonce. +type tag. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +query attacker(new secretA); + attacker(new secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* constants 0 and 1 *) + +const c0: tag [data]. +const c1: tag [data]. + + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* Session secret *) + new secretA: bitstring; + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, h: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + event beginBparam(xA,h); + new Na: nonce; + out(c,(xA, h, Na)); + in(c,m2: bitstring); + let (=Na, =h, k: key, m: bitstring) = decrypt(m2, kas) in + event beginBkey(xA, h, k); + out(c,m); + in(c, m3: bitstring); + let (=c0, n: nonce) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B || h = A then + event endAparam(xA, h); + event endAkey(xA, h, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* Session secret *) + new secretB: bitstring; + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c,m4: bitstring); + let (k: key,h: host) = decrypt(m4,kbs) in + event beginAparam(h, xB); + event beginAkey(h, xB, k); + new Nb: nonce; + out(c, encrypt((c0, Nb), k)); + in(c,m5: bitstring); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A || h = B then + event endBparam(h, xB); + event endBkey(h, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h1: host,h2: host,n: nonce)); + get keys(=h1, ks1) in + get keys(=h2, ks2) in + new k: key; + out(c, encrypt((n, h2, k, encrypt((k,h1),ks2)), ks1)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr-comp.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr-comp.pv new file mode 100644 index 0000000000000000000000000000000000000000..009c6e12825c1805177bd0cadc10305ba01a5559 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr-comp.pv @@ -0,0 +1,172 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +set keyCompromise = strict. +(* Needham-Schroeder shared key corrected *) + +free c: channel. + +type key. +type host. +type nonce. +type tag. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +query attacker(new secretA); + attacker(new secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* constants 0 and 1 *) + +const c0: tag [data]. +const c1: tag [data]. + + + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* Session secret *) + new secretA: bitstring; + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, h: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + in(c, bm: bitstring); + event beginBparam(xA,h); + new Na: nonce; + out(c,(xA, h, Na, bm)); + in(c,m2: bitstring); + let (=Na, =h, k: key, m: bitstring) = decrypt(m2, kas) in + event beginBkey(xA, h, k); + out(c,m); + in(c, m3: bitstring); + let (=c0, n: nonce) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = A || h = B then + event endAparam(xA, h); + event endAkey(xA, h, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* Session secret *) + new secretB: bitstring; + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c,h: host); + event beginAparam(h, xB); + new J: nonce; + out(c, encrypt((h, J), kbs)); + in(c,m4: bitstring); + let (k: key,=h,=J) = decrypt(m4,kbs) in + event beginAkey(h, xB, k); + new Nb: nonce; + out(c, encrypt((c0, Nb), k)); + in(c,m5: bitstring); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A || h = B then + event endBparam(h, xB); + event endBkey(h, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h1: host,h2: host,n: nonce, bm: bitstring)); + get keys(=h1, ks1) in + get keys(=h2, ks2) in + let (=h1,j: nonce) = decrypt(bm, ks2) in + new k: key; + out(c, encrypt((n, h2, k, encrypt((k,h1,j),ks2)), ks1)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr-compapprox.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr-compapprox.pv new file mode 100644 index 0000000000000000000000000000000000000000..1eb32be8daf3f17ea7f16cc8fd6fa4b304a20a59 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr-compapprox.pv @@ -0,0 +1,172 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +set keyCompromise = approx. +(* Needham-Schroeder shared key corrected *) + +free c: channel. + +type key. +type host. +type nonce. +type tag. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +query attacker(new secretA); + attacker(new secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* constants 0 and 1 *) + +const c0: tag [data]. +const c1: tag [data]. + + + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* Session secret *) + new secretA: bitstring; + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, h: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + in(c, bm: bitstring); + event beginBparam(xA,h); + new Na: nonce; + out(c,(xA, h, Na, bm)); + in(c,m2: bitstring); + let (=Na, =h, k: key, m: bitstring) = decrypt(m2, kas) in + event beginBkey(xA, h, k); + out(c,m); + in(c, m3: bitstring); + let (=c0, n: nonce) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = A || h = B then + event endAparam(xA, h); + event endAkey(xA, h, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* Session secret *) + new secretB: bitstring; + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c,h: host); + event beginAparam(h, xB); + new J: nonce; + out(c, encrypt((h, J), kbs)); + in(c,m4: bitstring); + let (k: key,=h,=J) = decrypt(m4,kbs) in + event beginAkey(h, xB, k); + new Nb: nonce; + out(c, encrypt((c0, Nb), k)); + in(c,m5: bitstring); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A || h = B then + event endBparam(h, xB); + event endBkey(h, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h1: host,h2: host,n: nonce, bm: bitstring)); + get keys(=h1, ks1) in + get keys(=h2, ks2) in + let (=h1,j: nonce) = decrypt(bm, ks2) in + new k: key; + out(c, encrypt((n, h2, k, encrypt((k,h1,j),ks2)), ks1)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr.pv new file mode 100644 index 0000000000000000000000000000000000000000..890751d6e199927b95e90bbb432dc401036af26b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK-corr.pv @@ -0,0 +1,171 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham-Schroeder shared key corrected *) + +free c: channel. + +type key. +type host. +type nonce. +type tag. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +query attacker(new secretA); + attacker(new secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* constants 0 and 1 *) + +const c0: tag [data]. +const c1: tag [data]. + + + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* Session secret *) + new secretA: bitstring; + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, h: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + in(c, bm: bitstring); + event beginBparam(xA,h); + new Na: nonce; + out(c,(xA, h, Na, bm)); + in(c,m2: bitstring); + let (=Na, =h, k: key, m: bitstring) = decrypt(m2, kas) in + event beginBkey(xA, h, k); + out(c,m); + in(c, m3: bitstring); + let (=c0, n: nonce) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = A || h = B then + event endAparam(xA, h); + event endAkey(xA, h, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* Session secret *) + new secretB: bitstring; + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c,h: host); + event beginAparam(h, xB); + new J: nonce; + out(c, encrypt((h, J), kbs)); + in(c,m4: bitstring); + let (k: key,=h,=J) = decrypt(m4,kbs) in + event beginAkey(h, xB, k); + new Nb: nonce; + out(c, encrypt((c0, Nb), k)); + in(c,m5: bitstring); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A || h = B then + event endBparam(h, xB); + event endBkey(h, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h1: host,h2: host,n: nonce, bm: bitstring)); + get keys(=h1, ks1) in + get keys(=h2, ks2) in + let (=h1,j: nonce) = decrypt(bm, ks2) in + new k: key; + out(c, encrypt((n, h2, k, encrypt((k,h1,j),ks2)), ks1)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK.pv new file mode 100644 index 0000000000000000000000000000000000000000..4e3ddeb9063d879b52be1cdab4add2db9b074e3f --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/NeedhamSchroederSK.pv @@ -0,0 +1,165 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Needham-Schroeder shared key *) + +free c: channel. + +type key. +type host. +type nonce. +type tag. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +query attacker(new secretA); + attacker(new secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* constants 0 and 1 *) + +const c0: tag [data]. +const c1: tag [data]. + + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* Session secret *) + new secretA: bitstring; + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, h: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + event beginBparam(xA,h); + new Na: nonce; + out(c,(xA, h, Na)); + in(c,m2: bitstring); + let (=Na, =h, k: key, m: bitstring) = decrypt(m2, kas) in + event beginBkey(xA, h, k); + out(c,m); + in(c, m3: bitstring); + let (=c0, n: nonce) = decrypt(m3, k) in + out(c, encrypt((c1, n), k)); + if h = B || h = A then + event endAparam(xA, h); + event endAkey(xA, h, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* Session secret *) + new secretB: bitstring; + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c,m4: bitstring); + let (k: key,h: host) = decrypt(m4,kbs) in + event beginAparam(h, xB); + event beginAkey(h, xB, k); + new Nb: nonce; + out(c, encrypt((c0, Nb), k)); + in(c,m5: bitstring); + let (=c1, =Nb) = decrypt(m5,k) in + if h = A || h = B then + event endBparam(h, xB); + event endBkey(h, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h1: host,h2: host,n: nonce)); + get keys(=h1, ks1) in + get keys(=h2, ks2) in + new k: key; + out(c, encrypt((n, h2, k, encrypt((k,h1),ks2)), ks1)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Abadi.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Abadi.pv new file mode 100644 index 0000000000000000000000000000000000000000..817c3cab0a24038f7f3440b996fe822941531f3a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Abadi.pv @@ -0,0 +1,176 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Abadi and Needham, Prudent engineering practice... + +A -> B: (A, B, Na) +B -> S: (A, B, Na, Nb) +S -> B: ({ Na, A, B, k }_kA, { Nb, A, B, k }_kB) +B -> A: { Na, A, B, k }_kA + +Attack +I -> B : (A,B,v217) +B -> S : (A,B,v217,Nb[(A,B,v217),v215]) +S -> B : (...., encrypt((Nb[(A,B,v217),v215],A,B,k[(A,B,v217,Nb[(A,B,v217),v215]),v219]),kB[])) +B says end(B) + +Attack +A -> I : (A, B, Na) +I -> S : (A, B, Na, v217) +S -> I : ({ Na, A, B, k }_kA, {v217, , A, B, k }_kB) +I -> A : { Na, A, B, k }_kA + +*) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kA shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + get keys(=xA, kA) in + (* Real start of the role *) + new Na: nonce; + event beginBparam(xA, xB0); + out(c, (xA, xB0, Na)); + in(c, m: bitstring); + let (=Na, =xA, =xB0, k: key) = decrypt(m, kA) in + event beginBkey(xA, xB0, k); + (* OK *) + if xB0 = A || xB0 = B then + event endAparam(xA, xB0); + event endAkey(xA, xB0, k); + out(c, encrypt(secretA, k)). + + +(* Role of the responder with identity xB and key kB shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (xA1: host, =xB, m2: bitstring)); + event beginAparam(xA1, xB); + new Nb: nonce; + out(c, (xA1, xB, m2, Nb)); + in(c, (m3: bitstring, m4: bitstring)); + let (=Nb, =xA1, =xB, k: key) = decrypt(m4, kB) in + event beginAkey(xA1, xB, k); + out(c, m3); + (* OK *) + if xA1 = A || xA1 = B then + event endBparam(xA1, xB); + event endBkey(xA1, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (xA1: host, xB1: host, Na1: nonce, Nb1: nonce)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + new k: key; + out(c, (encrypt((Na1, xA1, xB1, k), kA1), + encrypt((Nb1, xA1, xB1, k), kB1))). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err-nonreflex.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err-nonreflex.pv new file mode 100644 index 0000000000000000000000000000000000000000..3f28320996d273f2cd6ab1cdb9aab148b19ea170 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err-nonreflex.pv @@ -0,0 +1,159 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Flawed version, quoted by Paulson TR443 Inductive... *) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if (xA = A || xA = B) && xB0 <> xA then + get keys(=xA, kA) in + (* Real start of the role *) + event beginBparam(xA, xB0); + new Na: nonce; + out(c, (Na, xA, xB0, encrypt((Na, xA, xB0), kA))); + in(c, (=Na, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA) in + event beginBkey(xA, xB0, k); + (* OK *) + if xB0 = B || xB0 = A then + event endAparam(xA, xB0); + event endAkey(xA, xB0, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (na: nonce, xA1: host, =xB, z: bitstring)); + event beginAparam(xA1, xB); + new Nb: nonce; + out(c, (na, xA1, xB, z, Nb, encrypt((na, xA1, xB), kB))); + in(c, (=na, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + event beginAkey(xA1, xB, k); + out(c, (na, m3)); + (* OK *) + if xA1 = A || xA1 = B then + event endBparam(xA1, xB); + event endBkey(xA1, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (Na1: nonce, xA1: host, xB1: host, m2: bitstring, Nb1: nonce, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (=Na1, =xA1, =xB1) = decrypt(m2, kA1) in + let (=Na1, =xA1, =xB1) = decrypt(m3, kB1) in + new k: key; + out(c, (Na1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err-unid.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err-unid.pv new file mode 100644 index 0000000000000000000000000000000000000000..9baaa5ad8dbdcd1685d1dd8f03a1da6048f127b1 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err-unid.pv @@ -0,0 +1,144 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Flawed version, quoted by Paulson TR443 Inductive... *) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kA shared with S *) + +let processInitiator(xA: host, kA: key) = + in(c, xB0: host); + event beginBparam(xA, xB0); + new Na: nonce; + out(c, (Na, xA, xB0, encrypt((Na, xA, xB0), kA))); + in(c, (=Na, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA) in + event beginBkey(xA, xB0, k); + (* OK *) + if xB0 = B || xB0 = A then + event endAparam(xA, xB0); + event endAkey(xA, xB0, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kB shared with S *) + +let processResponder(xB: host, kB: key) = + in(c, (na: nonce, xA1: host, =xB, z: bitstring)); + event beginAparam(xA1, xB); + new Nb: nonce; + out(c, (na, xA1, xB, z, Nb, encrypt((na, xA1, xB), kB))); + in(c, (=na, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + event beginAkey(xA1, xB, k); + out(c, (na, m3)); + (* OK *) + if xA1 = A || xA1 = B then + event endBparam(xA1, xB); + event endBkey(xA1, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (Na1: nonce, xA1: host, xB1: host, m2: bitstring, Nb1: nonce, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (=Na1, =xA1, =xB1) = decrypt(m2, kA1) in + let (=Na1, =xA1, =xB1) = decrypt(m3, kB1) in + new k: key; + out(c, (Na1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator(A, Kas)) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder(B, Kbs)) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err.pv new file mode 100644 index 0000000000000000000000000000000000000000..8c9ece6308a42889e741fd56b667daf310fd2183 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-Paulson-err.pv @@ -0,0 +1,159 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Flawed version, quoted by Paulson TR443 Inductive... *) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + get keys(=xA, kA) in + (* Real start of the role *) + event beginBparam(xA, xB0); + new Na: nonce; + out(c, (Na, xA, xB0, encrypt((Na, xA, xB0), kA))); + in(c, (=Na, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA) in + event beginBkey(xA, xB0, k); + (* OK *) + if xB0 = B || xB0 = A then + event endAparam(xA, xB0); + event endAkey(xA, xB0, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (na: nonce, xA1: host, =xB, z: bitstring)); + event beginAparam(xA1, xB); + new Nb: nonce; + out(c, (na, xA1, xB, z, Nb, encrypt((na, xA1, xB), kB))); + in(c, (=na, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + event beginAkey(xA1, xB, k); + out(c, (na, m3)); + (* OK *) + if xA1 = A || xA1 = B then + event endBparam(xA1, xB); + event endBkey(xA1, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (Na1: nonce, xA1: host, xB1: host, m2: bitstring, Nb1: nonce, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (=Na1, =xA1, =xB1) = decrypt(m2, kA1) in + let (=Na1, =xA1, =xB1) = decrypt(m3, kB1) in + new k: key; + out(c, (Na1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-nonreflex.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-nonreflex.pv new file mode 100644 index 0000000000000000000000000000000000000000..08b0f330a29619322974f306191448b236597db8 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees-nonreflex.pv @@ -0,0 +1,204 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +"Attack" when A/B can talk to themselves: the responder role does not +need to be run, the adversary can duplicate { Na, C, A, B }_kA. +This version excludes this case. + +Full agreement is wrong, the adversary can make B see something else as +{ Na, C, A, B }_kA, but it is not a real attack. + +The protocol should rather be written: +A -> B,S: C, A, B +A -> S: { Na, C, A, B }_kA +B -> S: { Nb, C, A, B }_kB +S -> A: { Na, k }_kA +S -> B: { Nb, k }_kB + +Bparam injective agreement is wrong: +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +I -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb', C, A, B }_kB) +S -> B: (C, { Na, k' }_kA, { Nb', k' }_kB) +B -> : (C, { Na, k' }_kA) + +Moreover, A and B can get different keys k ! +(Strand spaces: Proving Security Protocols Correct, +Thayer, Herzog, Gutmman, JCS 99, p 36) +ThayerFabregaHerzogGuttman-JCS1999.ps.gz + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) ===> B has key k +I -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> I: (C, { Na, k' }_kA, { Nb, k' }_kB) +I -> A: (C, { Na, k' }_kA) ===> A has key k' + +*) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kA shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if (xA = A || xA = B) && xB0 <> xA then + get keys(=xA, kA) in + (* Real start of the role *) + event beginBparam(xA, xB0); + new C: nonce; + new Na: nonce; + out(c, (C, xA, xB0, encrypt((Na, C, xA, xB0), kA))); + in(c, (=C, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA) in + event beginBkey(xA, xB0, k); + (* OK *) + if xB0 = A || xB0 = B then + event endAparam(xA, xB0); + event endAkey(xA, xB0, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kB shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (C1: nonce, xA1: host, =xB, m2: bitstring)); + event beginAparam(xA1, xB); + new Nb: nonce; + out(c, (C1, xA1, xB, m2, encrypt((Nb, C1, xA1, xB), kB))); + in(c, (=C1, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + event beginAkey(xA1, xB, k); + out(c, (C1, m3)); + (* OK *) + if xA1 = A || xA1 = B then + event endBparam(xA1, xB); + event endBkey(xA1, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (C1: nonce, xA1: host, xB1: host, m2: bitstring, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (Na1: nonce, =C1, =xA1, =xB1) = decrypt(m2, kA1) in + let (Nb1: nonce, =C1, =xA1, =xB1) = decrypt(m3, kB1) in + new k: key; + out(c, (C1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees.pv new file mode 100644 index 0000000000000000000000000000000000000000..0d357331e7eb4b9bcb3bfd7913b0c4515f9ac00c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/OtwayRees.pv @@ -0,0 +1,203 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Otway Rees protocol. + Version of Otway Rees, Operating Systems Review Vol 21 no 1, p 8-10, 1987 + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +"Attack" when A/B can talk to themselves: the responder role does not +need to be run, the adversary can duplicate { Na, C, A, B }_kA. + +Full agreement is wrong, the adversary can make B see something else as +{ Na, C, A, B }_kA, but it is not a real attack. + +The protocol should rather be written: +A -> B,S: C, A, B +A -> S: { Na, C, A, B }_kA +B -> S: { Nb, C, A, B }_kB +S -> A: { Na, k }_kA +S -> B: { Nb, k }_kB + +Bparam injective agreement is wrong: +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) +B -> A: (C, { Na, k }_kA) + +I -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb', C, A, B }_kB) +S -> B: (C, { Na, k' }_kA, { Nb', k' }_kB) +B -> : (C, { Na, k' }_kA) + +Moreover, A and B can get different keys k ! +(Strand spaces: Proving Security Protocols Correct, +Thayer, Herzog, Gutmman, JCS 99, p 36) +ThayerFabregaHerzogGuttman-JCS1999.ps.gz + +A -> B: (C, A, B, { Na, C, A, B }_kA) +B -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> B: (C, { Na, k }_kA, { Nb, k }_kB) ===> B has key k +I -> S: (C, A, B, { Na, C, A, B }_kA, { Nb, C, A, B }_kB) +S -> I: (C, { Na, k' }_kA, { Nb, k' }_kB) +I -> A: (C, { Na, k' }_kA) ===> A has key k' + +*) + +free c: channel. + +type key. +type host. +type nonce. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kA shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + get keys(=xA, kA) in + (* Real start of the role *) + event beginBparam(xA, xB0); + new C: nonce; + new Na: nonce; + out(c, (C, xA, xB0, encrypt((Na, C, xA, xB0), kA))); + in(c, (=C, m2: bitstring)); + let (=Na, k: key) = decrypt(m2, kA) in + event beginBkey(xA, xB0, k); + (* OK *) + if xB0 = A || xB0 = B then + event endAparam(xA, xB0); + event endAkey(xA, xB0, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kB shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kB) in + (* Real start of the role *) + in(c, (C1: nonce, xA1: host, =xB, m2: bitstring)); + event beginAparam(xA1, xB); + new Nb: nonce; + out(c, (C1, xA1, xB, m2, encrypt((Nb, C1, xA1, xB), kB))); + in(c, (=C1, m3: bitstring, m4: bitstring)); + let (=Nb, k: key) = decrypt(m4, kB) in + event beginAkey(xA1, xB, k); + out(c, (C1, m3)); + (* OK *) + if xA1 = A || xA1 = B then + event endBparam(xA1, xB); + event endBkey(xA1, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (C1: nonce, xA1: host, xB1: host, m2: bitstring, m3: bitstring)); + get keys(=xA1, kA1) in + get keys(=xB1, kB1) in + let (Na1: nonce, =C1, =xA1, =xB1) = decrypt(m2, kA1) in + let (Nb1: nonce, =C1, =xA1, =xB1) = decrypt(m3, kB1) in + new k: key; + out(c, (C1, encrypt((Na1, k), kA1), + encrypt((Nb1, k), kB1))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/SimplerYahalom-unid.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/SimplerYahalom-unid.pv new file mode 100644 index 0000000000000000000000000000000000000000..9a34f257537d436c844caacc89726a7c3988ec8c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/SimplerYahalom-unid.pv @@ -0,0 +1,158 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Simpler Yahalom protocol, as suggested in Burrows, Abadi, Needham, SRC039 +Unidirectional version: A and B each play a single role. +The attack of Syverson for evinj:endAparam(x) ==> evinj:beginAparam(x) +disappears in this case. + +A -> B: A, N_A +B -> S: B, N_B, { A, N_A }_Kbs +S -> A: N_B, { B, K_ab, N_A }_Kas, { A, K_ab, N_B }_Kbs +A -> B: { A, K_ab, N_B }_Kbs, { N_B }_Kab + +Full agreement is wrong (the adversary can arrange so that A does not see +{ A, K_ab, N_B }_Kbs). + +No agreement on N_A, but agreement on N_B and on the session key K_ab. + +*) + +free c: channel. + +type key. +type host. +type nonce. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host, host). +event endBparam(host, host). +event beginAparam(host, host). +event beginBparam(host, host). +event endBkey(host, host, nonce, key). +event beginBkey(host, host, nonce, key). + +query x: host, y: host; inj-event(endAparam(x, y)) ==> inj-event(beginAparam(x, y)). +query x: host, y: host; inj-event(endBparam(x, y)) ==> inj-event(beginBparam(x, y)). +query x: host, y: host, z: nonce, t: key; inj-event(endBkey(x,y,z,t)) ==> inj-event(beginBkey(x,y,z,t)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator(xA: host, kas: key) = + new Na: nonce; + out(c, (xA, Na)); + in(c, (nb: nonce, m1: bitstring, m2: bitstring)); + let (b: host, kab: key, na2: nonce) = decrypt(m1, kas) in + event beginBparam(b, xA); + event beginBkey(b, xA, nb, kab); + if na2 = Na then + out(c, (m2, encrypt(nonce_to_bitstring(nb), kab))); + (* OK protocol finished + If the interlocutor is honest, execute the events endAparam + and send a test message to check that the key kab is secret *) + if b = A || b = B then + event endAparam(xA, b); + out(c, encrypt(secretA, kab)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder(xB: host, kbs: key) = + in(c, (a: host, na: nonce)); + event beginAparam(a, xB); + new Nb: nonce; + out(c, (xB, Nb, encrypt((a, na), kbs))); + in(c, (m3: bitstring, m4: bitstring)); + let (=a, kab: key, =Nb) = decrypt(m3, kbs) in + if nonce_to_bitstring(Nb) = decrypt(m4, kab) then + (* OK protocol finished + If the interlocutor is honest, execute the events endBparam + and endBkey, and send a test message to check that the key kab + is secret *) + if a = A || a = B then + event endBparam(xB, a); + event endBkey(xB, a, Nb, kab); + out(c, encrypt(secretB, kab)). + +(* Server *) + +let processS = + in(c, (b: host, nb: nonce, m5: bitstring)); + get keys(=b, kbs2) in (* get the key of b from the key table *) + let (a: host, na: nonce) = decrypt(m5,kbs2) in + get keys(=a, kas2) in (* get the key of a from the key table *) + new kab: key; + out(c, (nb, encrypt((b, kab, na), kas2), encrypt((a, kab, nb), kbs2))). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator(A, Kas)) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder(B, Kbs)) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/SimplerYahalom.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/SimplerYahalom.pv new file mode 100644 index 0000000000000000000000000000000000000000..410d62ae4e63cf51ad979daeefcb97b9c2838c8e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/SimplerYahalom.pv @@ -0,0 +1,171 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Simpler Yahalom protocol, as suggested in Burrows, Abadi, Needham, SRC039 + +A -> B: A, N_A +B -> S: B, N_B, { A, N_A }_Kbs +S -> A: N_B, { B, K_ab, N_A }_Kas, { A, K_ab, N_B }_Kbs +A -> B: { A, K_ab, N_B }_Kbs, { N_B }_Kab + +Full agreement is wrong (the adversary can arrange so that A does not see +{ A, K_ab, N_B }_Kbs). + +No agreement on N_A, but agreement on N_B and on the session key K_ab. + +Attack of Syverson for evinj:endAparam(x) ==> evinj:beginAparam(x). +*) + +free c: channel. + +type key. +type host. +type nonce. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host, host). +event endBparam(host, host). +event beginAparam(host, host). +event beginBparam(host, host). +event endBkey(host, host, nonce, key). +event beginBkey(host, host, nonce, key). + +query x: host, y: host; inj-event(endAparam(x, y)) ==> inj-event(beginAparam(x, y)). +query x: host, y: host; inj-event(endBparam(x, y)) ==> inj-event(beginBparam(x, y)). +query x: host, y: host, z: nonce, t: key; inj-event(endBkey(x,y,z,t)) ==> inj-event(beginBkey(x,y,z,t)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, xA: host); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + new Na: nonce; + out(c, (xA, Na)); + in(c, (nb: nonce, m1: bitstring, m2: bitstring)); + let (b: host, kab: key, na2: nonce) = decrypt(m1, kas) in + event beginBparam(b, xA); + event beginBkey(b, xA, nb, kab); + if na2 = Na then + out(c, (m2, encrypt(nonce_to_bitstring(nb), kab))); + (* OK protocol finished + If the interlocutor is honest, execute the events endAparam + and send a test message to check that the key kab is secret *) + if b = A || b = B then + event endAparam(xA, b); + out(c, encrypt(secretA, kab)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, (a: host, na: nonce)); + event beginAparam(a, xB); + new Nb: nonce; + out(c, (xB, Nb, encrypt((a, na), kbs))); + in(c, (m3: bitstring, m4: bitstring)); + let (=a, kab: key, =Nb) = decrypt(m3, kbs) in + if nonce_to_bitstring(Nb) = decrypt(m4, kab) then + (* OK protocol finished + If the interlocutor is honest, execute the events endBparam + and endBkey, and send a test message to check that the key kab + is secret *) + if a = A || a = B then + event endBparam(xB, a); + event endBkey(xB, a, Nb, kab); + out(c, encrypt(secretB, kab)). + +(* Server *) + +let processS = + in(c, (b: host, nb: nonce, m5: bitstring)); + get keys(=b, kbs2) in (* get the key of b from the key table *) + let (a: host, na: nonce) = decrypt(m5,kbs2) in + get keys(=a, kas2) in (* get the key of a from the key table *) + new kab: key; + out(c, (nb, encrypt((b, kab, na), kas2), encrypt((a, kab, nb), kbs2))). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Skeme.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Skeme.pv new file mode 100644 index 0000000000000000000000000000000000000000..2887724bea5c64be68b57b5cd2189ff80bf72335 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Skeme.pv @@ -0,0 +1,142 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SKEME *) + +free c: channel. + +type nonce. +type pkey. +type skey. +type key. +type exponent. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. + +(* Public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)),y) = x. + +(* Hash function *) + +fun hash(bitstring):key. + +(* Diffie-Hellman *) + +const g: bitstring. +fun exp(bitstring, exponent): bitstring. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Keyed hash function *) + +fun keyhash(bitstring, key):bitstring. + +(* Shared key encryption *) + +fun sencrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; sdecrypt(sencrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new x). +not attacker(new y). + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(pkey). +event beginAparam(pkey). +event endBparam(pkey). +event beginBparam(pkey). +event endAkey(pkey, key). +event beginAkey(pkey, key). +event endBkey(pkey, key). +event beginBkey(pkey, key). + +query t: pkey; inj-event(endAparam(t)) ==> inj-event(beginAparam(t)). +query t: pkey, z: key; inj-event(endAkey(t,z)) ==> inj-event(beginAkey(t,z)). +query t: pkey; inj-event(endBparam(t)) ==> inj-event(beginBparam(t)). +query t: pkey, z: key; inj-event(endBkey(t,z)) ==> inj-event(beginBkey(t,z)). + +(* A *) + +let processA(skA: skey, pkA: pkey, pkB: pkey) = + in(c, pkX: pkey); + event beginBparam(pkX); + new x: exponent; + let gx = exp(g,x) in + new Ka: nonce; + out(c, (encrypt((pkA, Ka), pkX), gx)); + in(c, (m1: bitstring, m2: bitstring, m3: bitstring)); + let nonce_to_bitstring(Kb) = decrypt(m1, skA) in + let K0 = hash((Ka, Kb)) in + if m3 = keyhash((gx, m2, pkX, pkA), K0) then + let sh = hash(exp(m2, x)) in + event beginBkey(pkX, sh); + out(c, keyhash((m2, gx, pkA, pkX), K0)); + (* OK *) + if pkX = pkB then + event endAparam(pkA); + event endAkey(pkA, sh); + out(c, sencrypt(secretA, sh)). + +(* B *) + +let processB(skB: skey, pkB: pkey, pkA: pkey) = + in(c, (m1: bitstring, m2: bitstring)); + let (pkAr: pkey, Ka: nonce) = decrypt(m1, skB) in + event beginAparam(pkAr); + new Kb: nonce; + let K0 = hash((Ka, Kb)) in + new y: exponent; + let gy = exp(g,y) in + let sh = hash(exp(m2, y)) in + event beginAkey(pkAr, sh); + out(c, (encrypt(nonce_to_bitstring(Kb), pkAr), gy, keyhash((m2, gy, pkB, pkAr), K0))); + in(c, m3: bitstring); + if m3 = keyhash((gy, m2, pkAr, pkB), K0) then + (* OK *) + if pkAr = pkA then + event endBparam(pkB); + event endBkey(pkB, sh); + out(c, sencrypt(secretB, sh)). + + +process + new skA: skey; + let pkA = pk(skA) in + out(c, pkA); + new skB: skey; + let pkB = pk(skB) in + out(c, pkB); + ((!processA(skA, pkA, pkB)) | (!processB(skB, pkB, pkA))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamPK-corr.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamPK-corr.pv new file mode 100644 index 0000000000000000000000000000000000000000..ee3141065784694d0dc7f5dbf8d033362044dbd4 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamPK-corr.pv @@ -0,0 +1,144 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +Woo and Lam public-key auth protocol (1997) + +A -> B: A +B -> A: N +A -> B: { A, B, N }_skA +B -> S: A +S -> B: A, { A, pkA }_skS + +Correct + +*) + +free c: channel. + +type host. +type nonce. +type pkey. +type skey. + +(* Signatures *) + +fun pk(skey): pkey. +fun sign(bitstring, skey): bitstring. +reduc forall m: bitstring, k: skey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: skey; checksign(sign(m,k), pk(k)) = m. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs (host, public key) *) +table keys(host, pkey). + +(* Queries *) + +event beginBparam(host, host). +event endBparam(host, host). +event beginBfull(host, host, nonce). +event endBfull(host, host, nonce). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: nonce; inj-event(endBfull(x,y,z)) ==> inj-event(beginBfull(x,y,z)). + +(* Role of the initiator with identity xA and secret key skxA *) + +let processInitiator(skA: skey, skB: skey) = + (* The attacker starts the initiator by choosing identity xA + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + let skxA = if xA = A then skA else skB in + (* Real start of the role *) + event beginBparam(xA, xB0); + out(c, xA); + in(c,n: nonce); + event beginBfull(xA, xB0, n); + out(c,sign((xA, xB0, n),skxA)). + +(* Role of the responder with identity xB *) + +let processResponder(pkS: pkey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + (* Real start of the role *) + in(c, xA0: host); + new n: nonce; + out(c,n); + in(c,m: bitstring); + out(c, xA0); + in(c, (=xA0, m4: bitstring)); + let (=xA0, pkA2: pkey) = checksign(m4, pkS) in + let (=xA0, =xB, =n) = checksign(m,pkA2) in + (* OK *) + if xA0 = A || xA0 = B then + event endBparam(xA0, xB); + event endBfull(xA0, xB, n). + +(* Server *) + +let processS(skS: skey) = + in(c, xA: host); + get keys(=xA, pkA) in + out(c, (xA, sign((xA, pkA), skS))). + +(* Key registration *) + +let processK = + in(c, (h: host, k: pkey)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process new skA: skey; + new skB: skey; + new skS: skey; + let pkA = pk(skA) in + let pkB = pk(skB) in + let pkS = pk(skS) in + out(c, pkA); out(c, pkB); out(c, pkS); + insert keys(A, pkA); + insert keys(B, pkB); + ((!processInitiator(skA, skB)) | + (!processResponder(pkS)) | (!processS(skS))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamPK.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamPK.pv new file mode 100644 index 0000000000000000000000000000000000000000..25d44ebea09b7ddd1933e9343a32fc4a06a988e1 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamPK.pv @@ -0,0 +1,152 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +Woo and Lam public-key auth protocol (1992, computer) + +A -> B: A +B -> A: N +A -> B: { N }_skA +B -> S: A +S -> B: A, { A, pkA }_skS + +Terminates with attack + +Full agreement is true, but there is an attack ! +(Indeed, the messages never mention B.) + +If we include B as a pseudo first message sent to A, then full agreement +is false. +*) + +free c: channel. + +type host. +type nonce. +type pkey. +type skey. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Signatures *) + +fun pk(skey): pkey. +fun sign(bitstring, skey): bitstring. +reduc forall m: bitstring, k: skey; getmess(sign(m,k)) = m. +reduc forall m: bitstring, k: skey; checksign(sign(m,k), pk(k)) = m. + +(* Secrecy assumptions *) + +not attacker(new skA). +not attacker(new skB). +not attacker(new skS). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs (host, public key) *) +table keys(host, pkey). + +(* Queries *) + +event beginBparam(host, host). +event endBparam(host, host). +event beginBfull(host, host, nonce). +event endBfull(host, host, nonce). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: nonce; inj-event(endBfull(x,y,z)) ==> inj-event(beginBfull(x,y,z)). + + +(* Role of the initiator with identity xA and secret key skxA *) + +let processInitiator(skA: skey, skB: skey) = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB0. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB0: host)); + if xA = A || xA = B then + let skxA = if xA = A then skA else skB in + (* Real start of the role *) + event beginBparam(xA, xB0); + out(c, xA); + in(c,n: nonce); + event beginBfull(xA, xB0, n); + out(c,sign(nonce_to_bitstring(n),skxA)). + +(* Role of the responder with identity xB *) + +let processResponder(pkS: pkey) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B). *) + in(c, xB: host); + if xB = A || xB = B then + (* Real start of the role *) + in(c, xA0: host); + new n: nonce; + out(c,n); + in(c,m: bitstring); + out(c, xA0); + in(c, (=xA0, m4: bitstring)); + let (=xA0, pkA2: pkey) = checksign(m4, pkS) in + if nonce_to_bitstring(n) = checksign(m,pkA2) then + (* OK *) + if xA0 = A || xA0 = B then + event endBparam(xA0, xB); + event endBfull(xA0, xB, n). + +(* Server *) + +let processS(skS: skey) = + in(c, xA: host); + get keys(=xA, pkA) in + out(c, (xA, sign((xA, pkA), skS))). + +(* Key registration *) + +let processK = + in(c, (h: host, k: pkey)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process new skA: skey; + new skB: skey; + new skS: skey; + let pkA = pk(skA) in + let pkB = pk(skB) in + let pkS = pk(skS) in + out(c, pkA); out(c, pkB); out(c, pkS); + insert keys(A, pkA); + insert keys(B, pkB); + ((!processInitiator(skA, skB)) | + (!processResponder(pkS)) | (!processS(skS))) diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-GJ01.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-GJ01.pv new file mode 100644 index 0000000000000000000000000000000000000000..5dab430bd032b97ed613f1d1dd2ce023eb3bf67c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-GJ01.pv @@ -0,0 +1,159 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +WooLam shared-key auth protocol (1992, computer) +Version of Gordon, Jeffrey, CSFW 2001 + +A -> B : A +B -> A : N (fresh) +A -> B : { m3, N }_kAS +B -> S : { m4, A,{ m3, N }_kAS }_kBS +S -> B : { m5, N }_kBS +B: verify { m5, N }_kBS = the message from S + +Terminates with attack. + +*) + +free c: channel. + +type tag. +type host. +type nonce. +type key. + +(* Tags *) + +const m3: tag [data]. +const m4: tag [data]. +const m5: tag [data]. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +event beginBparam(host, host). +event endBparam(host, host). +event beginBfull(host, host, nonce). +event endBfull(host, host, nonce). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: nonce; inj-event(endBfull(x,y,z)) ==> inj-event(beginBfull(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB2. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB2: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + event beginBparam(xA,xB2); + out(c,xA); + in(c,n: nonce); + event beginBfull(xA, xB2, n); + out(c, encrypt((m3, n), kas)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, xA2: host); + new N: nonce; + out(c, N); + in(c, m: bitstring); + out(c, encrypt((m4, xA2, m), kbs)); + in(c, m2: bitstring); + let (=m5, =N) = decrypt(m2, kbs) in + (* OK *) + if xA2 = A || xA2 = B then + event endBparam(xA2, xB); + event endBfull(xA2, xB, N). + +(* Server *) + +let processS = + in(c, xB0: host);(* Choose the B host *) + get keys(=xB0, kbs) in + in(c,m: bitstring); + let (=m4, xA1: host, m2: bitstring) = decrypt(m, kbs) in + get keys(=xA1, kas) in + let (=m3, n: nonce) = decrypt(m2, kas) in + out(c, encrypt((m5, n), kbs)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-corr-GJ01.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-corr-GJ01.pv new file mode 100644 index 0000000000000000000000000000000000000000..10d25b590a22c6c0bf1bce6a35bf54be2ea98d5a --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-corr-GJ01.pv @@ -0,0 +1,160 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +WooLam shared-key auth protocol +Corrections of Gordon, Jeffrey CSFW'01 + +A -> B : A +B -> A : N (fresh) +A -> B : { m3, B, N }_kAS +B -> S : A,B,{ m3, B, N }_kAS +S -> B : { m5, A, N }_kBS +B: verify { m5, A, N }_kBS = the message from S + +Correct. + +Full agreement is wrong because the adversary can make B see something +different from { m3, B, N }_kAS (even though the server and A correctly see it) +so this is no real attack. + +*) + +free c: channel. + +type tag. +type host. +type nonce. +type key. + +(* Tags *) + +const m3: tag [data]. +const m5: tag [data]. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +event beginBparam(host, host). +event endBparam(host, host). +event beginBfull(host, host, nonce). +event endBfull(host, host, nonce). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: nonce; inj-event(endBfull(x,y,z)) ==> inj-event(beginBfull(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB2. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB2: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + event beginBparam(xA,xB2); + out(c,xA); + in(c,n: nonce); + event beginBfull(xA, xB2, n); + out(c, encrypt((m3, xB2, n), kas)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, xA2: host); + new N: nonce; + out(c, N); + in(c, m: bitstring); + out(c, (xA2, xB, m)); + in(c, m2: bitstring); + let (=m5, =xA2, =N) = decrypt(m2, kbs) in + (* OK *) + if xA2 = A || xA2 = B then + event endBparam(xA2, xB); + event endBfull(xA2, xB, N). + +(* Server *) + +let processS = + in(c, (xA1: host, xB1: host, m2: bitstring)); + get keys(=xB1, kbs) in + get keys(=xA1, kas) in + let (=m3, =xB1, n:nonce) = decrypt(m2, kas) in + out(c, encrypt((m5, xA1, n), kbs)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-host-getkey.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-host-getkey.pv new file mode 100644 index 0000000000000000000000000000000000000000..f2cd85dba07f990e0ec71057846cfae2fc4e3509 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK-host-getkey.pv @@ -0,0 +1,146 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +WooLam shared-key auth protocol (1997) + +A -> B : A +B -> A : N (fresh) +A -> B : { A,B,N }_kAS +B -> S : { A,B,{ A,B,N }_kAS }_kBS +S -> B : { A,B,N }_kBS +B: verify { A,B,N }_kBS = the message from S + +Terminates with an attack. +(Types are ignored, we use function symbols host/getkey to model the +table of keys, in order to obtain termination.) + +set ignoreTypes = true. +*) + +free c: channel. + +type host. +type nonce. +type key. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* the table host names/keys modeled by function symbols + The key table consists of pairs + (host, key shared between the host and the server) *) + +fun fhost(key):host. +reduc forall x: key; getkey(fhost(x)) = x [private]. + +(* Queries *) + +event beginBparam(host, host). +event endBparam(host, host). +event beginBfull(host, host, nonce). +event endBfull(host, host, nonce). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: nonce; inj-event(endBfull(x,y,z)) ==> inj-event(beginBfull(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator(A: host, B: host) = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB2. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB2: host)); + if xA = A || xA = B then + let kas = getkey(xA) in + (* Real start of the role *) + event beginBparam(xA, xB2); + out(c,xA); + in(c,n: nonce); + event beginBfull(xA, xB2, n); + out(c, encrypt((xA, xB2, n), kas)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder(A: host, B: host) = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + let kbs = getkey(xB) in + (* Real start of the role *) + in(c, xA2: host); + new N: nonce; + out(c, N); + in(c, m: bitstring); + out(c, encrypt((xA2, xB, m), kbs)); + in(c, m2: bitstring); + let (=xA2, =xB, =N) = decrypt(m2, kbs) in + (* OK *) + if xA2 = A || xA2 = B then + event endBparam(xA2, xB); + event endBfull(xA2, xB, N). + +(* Server *) + +let processS = + in(c, xB0: host);(* Choose the B host *) + let kbs = getkey(xB0) in + in(c,m: bitstring); + let (xA1: host, =xB0, m2: bitstring) = decrypt(m, kbs) in + let kas = getkey(xA1) in + let (=xA1, =xB0, n: nonce) = decrypt(m2, kas) in + out(c, encrypt((xA1, xB0, n), kbs)). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + let A = fhost(Kas) in + let B = fhost(Kbs) in + out(c, A); + out(c, B); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator(A, B)) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder(A, B)) | + (* Launch an unbounded number of sessions of the server *) + (!processS) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK.pv new file mode 100644 index 0000000000000000000000000000000000000000..bd58591ee55710ebd4b1f0496cb46ed2c3f3af27 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/WooLamSK.pv @@ -0,0 +1,161 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* + +WooLam shared-key auth protocol (1997) + +A -> B : A +B -> A : N (fresh) +A -> B : { A,B,N }_kAS +B -> S : { A,B,{ A,B,N }_kAS }_kBS +S -> B : { A,B,N }_kBS +B: verify { A,B,N }_kBS = the message from S + +The types avoid the attack. + +*) + +set ignoreTypes = false. + +(* When types are ignored, the verification does not terminate. +In fact, there is an attack against this protocol. +(See WooLamSK-host-getkey.pv for a version that terminates +with an attack, when types are ignored. It uses function symbols +host/getkey to represent the key table, for termination.) + set ignoreTypes = true. +*) + +free c: channel. + +type host. +type nonce. +type key. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +event beginBparam(host, host). +event endBparam(host, host). +event beginBfull(host, host, nonce). +event endBfull(host, host, nonce). + +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: nonce; inj-event(endBfull(x,y,z)) ==> inj-event(beginBfull(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA, + and its interlocutor xB2. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, (xA: host, xB2: host)); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + event beginBparam(xA, xB2); + out(c,xA); + in(c,n: nonce); + event beginBfull(xA, xB2, n); + out(c, encrypt((xA, xB2, n), kas)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, xA2: host); + new N: nonce; + out(c, N); + in(c, m: bitstring); + out(c, encrypt((xA2, xB, m), kbs)); + in(c, m2: bitstring); + let (=xA2, =xB, =N) = decrypt(m2, kbs) in + (* OK *) + if xA2 = A || xA2 = B then + event endBparam(xA2, xB); + event endBfull(xA2, xB, N). + +(* Server *) + +let processS = + in(c, xB0: host);(* Choose the B host *) + get keys(=xB0, kbs) in + in(c,m: bitstring); + let (xA1: host, =xB0, m2: bitstring) = decrypt(m, kbs) in + get keys(=xA1, kas) in + let (=xA1, =xB0, n: nonce) = decrypt(m2, kas) in + out(c, encrypt((xA1, xB0, n), kbs)). + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-Paulson.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-Paulson.pv new file mode 100644 index 0000000000000000000000000000000000000000..a66b47eab9f3cd56e498b3cc297dcec27ea1c6fa --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-Paulson.pv @@ -0,0 +1,166 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Yahalom protocol, version of Paulson + +A -> B : A, N_A +B -> S : B, N_B, { c1, A, N_A }_Kbs +S -> A : { B, K_ab, N_A, N_B }_Kas, { c2, A, K_ab }_Kbs +A -> B : { c2, A, K_ab }_Kbs, { N_B }_Kab + +*) + +set keyCompromise = strict. +(*set ignoreTypes = true.*) + +free c: channel. + +type key. +type host. +type nonce. +type tag. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* tags *) + +const c1:tag [data]. +const c2:tag [data]. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +query attacker(new secretA); + attacker(new secretB). + +event endAparam(host, host). +event beginAparam(host, host). +event endBkey(host, host, nonce, key). +event beginBkey(host, host, nonce, key). + + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: nonce, t: key; inj-event(endBkey(x,y,z,t)) ==> inj-event(beginBkey(x,y,z,t)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + new secretA: bitstring; + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, xA: host); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + new Na: nonce; + out(c, (xA, Na)); + in(c, (nb: nonce, m1: bitstring, m2: bitstring)); + let (b: host, kab: key, =Na, =nb) = decrypt(m1, kas) in + event beginBkey(xA, b, nb, kab); + out(c, (m2, encrypt(nonce_to_bitstring(nb), kab))); + (* OK *) + if b = A || b = B then + event endAparam(xA, b); + out(c, encrypt(secretA, kab)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + new secretB: bitstring; + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, (a: host, na: nonce)); + event beginAparam(a, xB); + new Nb: nonce; + out(c, (xB, Nb, encrypt((c1,a,na), kbs))); + in(c, (m3: bitstring, m4: bitstring)); + let (=c2, =a, kab: key) = decrypt(m3, kbs) in + if nonce_to_bitstring(Nb) = decrypt(m4, kab) then + (* OK *) + if a = A || a = B then + event endBkey(a, xB, Nb, kab); + out(c, encrypt(secretB, kab)). + +(* Server *) + +let processS = + in(c, (b: host, nb: nonce, m5: bitstring)); + get keys(=b, kbs2) in (* get the key of b from the key table *) + let (=c1, a: host, na: nonce) = decrypt(m5,kbs2) in + get keys(=a, kas2) in (* get the key of a from the key table *) + new kab: key; + out(c, (encrypt((b, kab, na, nb), kas2), encrypt((c2, a, kab), kbs2))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-block-cipher.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-block-cipher.pv new file mode 100644 index 0000000000000000000000000000000000000000..0effe5f3d0c2ec2bdca31a4ed79d6bf4b753c221 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-block-cipher.pv @@ -0,0 +1,168 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +free c: channel. + +type key. +type host. +type nonce. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Shared key encryption (block cipher defined by equations) *) + +fun encrypt(bitstring,key): bitstring. +fun decrypt(bitstring,key): bitstring. +equation forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. +equation forall x: bitstring, y: key; encrypt(decrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, xA: host); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + new Na: nonce; + out(c, (xA, Na)); + in(c, (cert1: bitstring, cert2: bitstring)); + let (b: host, k: key, =Na, nb: nonce) = decrypt(cert1, kas) in + event beginBparam(xA, b); + event beginBkey(xA, b, k); + out(c, (cert2, encrypt(nonce_to_bitstring(nb), k))); + (* OK *) + if b = A || b = B then + event endAparam(xA, b); + event endAkey(xA, b, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, (a: host, na: nonce)); + event beginAparam(a,xB); + new Nb: nonce; + out(c, (xB, encrypt((a, na, Nb), kbs))); + in(c, (cert2: bitstring, m: bitstring)); + let (=a, k: key) = decrypt(cert2, kbs) in + event beginAkey(a, xB, k); + if nonce_to_bitstring(Nb) = decrypt(m, k) then + (* OK *) + if a = A || a = B then + event endBparam(a, xB); + event endBkey(a, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h2: host, m: bitstring)); + get keys(=h2, k2) in (* get the key of h2 from the key table *) + let (h1: host, n1: nonce, n2: nonce) = decrypt(m, k2) in + get keys(=h1, k1) in (* get the key of h1 from the key table *) + new k: key; + out(c, (encrypt((h2, k, n1, n2), k1), encrypt((h1, k), k2))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-proba-enc.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-proba-enc.pv new file mode 100644 index 0000000000000000000000000000000000000000..e8220f48d6e4f438dfd56de6816f9a84f60ce23e --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom-proba-enc.pv @@ -0,0 +1,175 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +(* Loops if types are ignored. To avoid looping, the arguments of +the random numbers generated for encryption should probably be removed. *) +set ignoreTypes = false. + +free c: channel. + +type key. +type host. +type nonce. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Shared key encryption (probabilistic) *) + +type seed. +fun internal_encrypt(bitstring,key,seed): bitstring. +reduc forall x: bitstring, y: key, r: seed; decrypt(internal_encrypt(x,y,r),y) = x. +(* define a function for encryption that generates the seed and calls + the encryption function with it, so that we do not need to do that + for each encryption in the process *) +letfun encrypt(x: bitstring, k: key) = new r: seed; internal_encrypt(x, k, r). + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, xA: host); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + new Na: nonce; + out(c, (xA, Na)); + in(c, (cert1: bitstring, cert2: bitstring)); + let (b: host, k: key, =Na, nb: nonce) = decrypt(cert1, kas) in + event beginBparam(xA, b); + event beginBkey(xA, b, k); + out(c, (cert2, encrypt(nonce_to_bitstring(nb), k))); + (* OK *) + if b = A || b = B then + event endAparam(xA, b); + event endAkey(xA, b, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, (a: host, na: nonce)); + event beginAparam(a,xB); + new Nb: nonce; + out(c, (xB, encrypt((a, na, Nb), kbs))); + in(c, (cert2: bitstring, m: bitstring)); + let (=a, k: key) = decrypt(cert2, kbs) in + event beginAkey(a, xB, k); + if nonce_to_bitstring(Nb) = decrypt(m, k) then + (* OK *) + if a = A || a = B then + event endBparam(a, xB); + event endBkey(a, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h2: host, m: bitstring)); + get keys(=h2, k2) in (* get the key of h2 from the key table *) + let (h1: host, n1: nonce, n2: nonce) = decrypt(m, k2) in + get keys(=h1, k1) in (* get the key of h1 from the key table *) + new k: key; + out(c, (encrypt((h2, k, n1, n2), k1), encrypt((h1, k), k2))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom.pv new file mode 100644 index 0000000000000000000000000000000000000000..7352209ae8fd321599b7da01cd6049ed3087bb36 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/Yahalom.pv @@ -0,0 +1,166 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* +Yahalom protocol. Version of Burrows, Abadi, Needham, SRC039 + +Message 1 A -> B: A; Na +Message 2 B -> S: B; { A; Na; Nb }Kbs +Message 3 S -> A: { B; Kab; Na; Nb }Kas ; { A; Kab }Kbs +Message 4 A -> B: { A; Kab }Kbs ; { Nb }Kab + +*) + +free c: channel. + +type key. +type host. +type nonce. + +fun nonce_to_bitstring(nonce): bitstring [data,typeConverter]. + +(* Shared key encryption *) + +fun encrypt(bitstring,key): bitstring. +reduc forall x: bitstring, y: key; decrypt(encrypt(x,y),y) = x. + +(* Secrecy assumptions *) + +not attacker(new Kas). +not attacker(new Kbs). + +(* 2 honest host names A and B *) + +free A, B: host. + +(* the table host names/keys + The key table consists of pairs + (host, key shared between the host and the server) *) +table keys(host, key). + +(* Queries *) + +free secretA, secretB: bitstring [private]. +query attacker(secretA); + attacker(secretB). + +event endAparam(host,host). +event endBparam(host,host). +event beginAparam(host,host). +event beginBparam(host,host). +event endAkey(host, host, key). +event beginAkey(host, host, key). +event endBkey(host, host, key). +event beginBkey(host, host, key). + +query x: host, y: host; inj-event(endAparam(x,y)) ==> inj-event(beginAparam(x,y)). +query x: host, y: host, z: key; inj-event(endAkey(x,y,z)) ==> inj-event(beginAkey(x,y,z)). +query x: host, y: host; inj-event(endBparam(x,y)) ==> inj-event(beginBparam(x,y)). +query x: host, y: host, z: key; inj-event(endBkey(x,y,z)) ==> inj-event(beginBkey(x,y,z)). + +(* Role of the initiator with identity xA and key kas shared with S *) + +let processInitiator = + (* The attacker starts the initiator by choosing identity xA. + We check that xA is honest (i.e. is A or B) + and get its corresponding key. + *) + in(c, xA: host); + if xA = A || xA = B then + get keys(=xA, kas) in + (* Real start of the role *) + new Na: nonce; + out(c, (xA, Na)); + in(c, (cert1: bitstring, cert2: bitstring)); + let (b: host, k: key, =Na, nb: nonce) = decrypt(cert1, kas) in + event beginBparam(xA, b); + event beginBkey(xA, b, k); + out(c, (cert2, encrypt(nonce_to_bitstring(nb), k))); + (* OK *) + if b = A || b = B then + event endAparam(xA, b); + event endAkey(xA, b, k); + out(c, encrypt(secretA, k)). + +(* Role of the responder with identity xB and key kbs shared with S *) + +let processResponder = + (* The attacker starts the responder by choosing identity xB. + We check that xB is honest (i.e. is A or B) + and get its corresponding key. *) + in(c, xB: host); + if xB = A || xB = B then + get keys(=xB, kbs) in + (* Real start of the role *) + in(c, (a: host, na: nonce)); + event beginAparam(a,xB); + new Nb: nonce; + out(c, (xB, encrypt((a, na, Nb), kbs))); + in(c, (cert2: bitstring, m: bitstring)); + let (=a, k: key) = decrypt(cert2, kbs) in + event beginAkey(a, xB, k); + if nonce_to_bitstring(Nb) = decrypt(m, k) then + (* OK *) + if a = A || a = B then + event endBparam(a, xB); + event endBkey(a, xB, k); + out(c, encrypt(secretB, k)). + +(* Server *) + +let processS = + in(c, (h2: host, m: bitstring)); + get keys(=h2, k2) in (* get the key of h2 from the key table *) + let (h1: host, n1: nonce, n2: nonce) = decrypt(m, k2) in + get keys(=h1, k1) in (* get the key of h1 from the key table *) + new k: key; + out(c, (encrypt((h2, k, n1, n2), k1), encrypt((h1, k), k2))). + + +(* Key registration *) + +let processK = + in(c, (h: host, k: key)); + if h <> A && h <> B then insert keys(h,k). + +(* Start process *) + +process + new Kas: key; new Kbs: key; + insert keys(A, Kas); + insert keys(B, Kbs); + ( + (* Launch an unbounded number of sessions of the initiator *) + (!processInitiator) | + (* Launch an unbounded number of sessions of the responder *) + (!processResponder) | + (* Launch an unbounded number of sessions of the server *) + (!processS) | + (* Key registration process *) + (!processK) + ) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/secr-auth/ssh-transport.pv b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/ssh-transport.pv new file mode 100644 index 0000000000000000000000000000000000000000..5bf7bb8847d225579776889b505ad6e5b179697b --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/secr-auth/ssh-transport.pv @@ -0,0 +1,162 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* SSH v2 *) + +(* In fact, we consider a simplified version of SSH, without negociation. + We assume that the chosen parameters are + - the standard Diffie-Hellman key exchange + - a symmetric encryption algorithm (different from none) + - a mac algorithm (different from none) + - no compression + We do not consider key re-exchange. + + Only the transport layer protocol of SSH is considered. + We do not consider the SSH authentication protocol. + + In the computation of the mac, we ignore the sequence of the + messages (difficult to model in our framework). Also note + that the mac is really useful only when the encryption is malleable, + and we model a perfect encryption that is not malleable. + *) + +free c: channel. + +type key. +type tag. +type ktag. +type pkey. +type skey. +type G. +type exponent. + +(* Shared key encryption *) + +fun enc(key, bitstring): bitstring. +reduc forall x: bitstring, y: key; dec(y, enc(y,x)) = x. + +(* Hash function *) + +fun H(bitstring):key. + +(* Non-message revealing signatures *) + +fun pk(skey): pkey. +fun nmrsign(skey, key): bitstring. +reduc forall x: key, y: skey; checknmrsign(pk(y), nmrsign(y,x), x) = true. + +(* Diffie-Hellman *) + +const g: G. +fun exp(G, exponent): G. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Mac *) + +fun mac(key, bitstring): bitstring. + +(* Constants *) + +const KEXDHINIT, KEXDHREPLY: tag [data]. + +const keyEncStoC, keyEncCtoS, keyMacStoC, keyMacCtoS: ktag [data]. + +(* Secrecy assumptions *) + +not attacker(new dhsecretC). +not attacker(new dhsecretS). +not attacker(new SSigKey). + +free secretC: bitstring [private]. +query attacker(secretC). + + +let processClient(SVerKey: pkey) = + new dhsecretC: exponent; + let dhpublicC = exp(g, dhsecretC) in + out(c, (KEXDHINIT, dhpublicC)); + in(c, (=KEXDHREPLY, ServerVerKey: pkey, dhpublicS: G, sign: bitstring)); + let K = exp(dhpublicS, dhsecretC) in + let h = H((ServerVerKey, dhpublicC, dhpublicS, K)) in + if checknmrsign(ServerVerKey, sign, h) = true then + let enckeyCtoS = H((K, h, keyEncCtoS)) in + let enckeyStoC = H((K, h, keyEncStoC)) in + let mackeyCtoS = H((K, h, keyMacCtoS)) in + let mackeyStoC = H((K, h, keyMacStoC)) in + + new CsecchannelToS: channel; + new CsecchannelFromS: channel; + + (! in(CsecchannelToS, m2payload: bitstring); + out(c, (enc(enckeyCtoS, m2payload), mac(mackeyCtoS, m2payload))) + ) + | + (! in (c,(m4enc: bitstring, m4mac: bitstring)); + let m4payload = dec(enckeyStoC, m4enc) in + if m4mac = mac(mackeyStoC, m4payload) then + out(CsecchannelFromS, m4payload)) + | + ( + (* Send a secret if we are connected to a honest server *) + if ServerVerKey = SVerKey then + out(CsecchannelToS, secretC) + ). + + +let processServer(SSigKey: skey, SVerKey: pkey) = + in(c, (=KEXDHINIT, dhpublicC: G)); + new dhsecretS: exponent; + let dhpublicS = exp(g, dhsecretS) in + let K = exp(dhpublicC, dhsecretS) in + let h = H((SVerKey, dhpublicC, dhpublicS, K)) in + out(c, (KEXDHREPLY, SVerKey, dhpublicS, nmrsign(SSigKey, h))); + let enckeyCtoS = H((K, h, keyEncCtoS)) in + let enckeyStoC = H((K, h, keyEncStoC)) in + let mackeyCtoS = H((K, h, keyMacCtoS)) in + let mackeyStoC = H((K, h, keyMacStoC)) in + + new SsecchannelToC: channel; + new SsecchannelFromC: channel; + + (! in(SsecchannelToC, m3payload: bitstring); + out(c, (enc(enckeyStoC, m3payload), mac(mackeyStoC, m3payload))) + ) + | + (! in(c, (m2enc: bitstring,m2mac: bitstring)); + let m2payload = dec(enckeyCtoS, m2enc) in + if m2mac = mac(mackeyCtoS, m2payload) then + out(SsecchannelFromC, m2payload) + ) + | + 0. + +process + new SSigKey: skey; + let SVerKey = pk(SSigKey) in + out(c, SVerKey); + ((!processClient(SVerKey)) | (!processServer(SSigKey, SVerKey))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/AugmentedEKE1.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/AugmentedEKE1.pv new file mode 100644 index 0000000000000000000000000000000000000000..7e0468c6b7949650e9dfa39390b8f78eb183230d --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/AugmentedEKE1.pv @@ -0,0 +1,142 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 + One knows whether one decrypts { challengeA, challengeB }_K + and similar messages correctly. *) + + +free c: channel. + +type host. +type passwd. +type nonce. +type G. +type exponent. +type key. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. + +(* Diffie-Hellman *) + +const g: G. +fun exp(G, exponent): G. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Symmetric encryption + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc(G, key): G. +fun dec(G, key): G. +equation forall x: G, y: key; dec(enc(x,y),y) = x. +equation forall x: G, y: key; enc(dec(x,y),y) = x. + +(* Symmetric encryption + One knows whether decryption succeeds or not *) + +fun senc(bitstring, G): bitstring. +reduc forall x: bitstring, y: G; sdec(senc(x,y),y) = x. + +(* Hash function *) + +fun h(passwd):key. + +(* One-way function *) + +fun F(passwd, G): bitstring. + +(* Predicate *) + +reduc forall x: passwd, y: G; T(h(x), F(x,y), y) = true. + +(* Host names *) + +const A, B: host. + + + +free PAB, PAA, PBB: passwd [private]. +weaksecret PAB. +weaksecret PAA. +weaksecret PBB. + +(* Initiator with identity hostA talking to responder with identity hostX *) + +let processA(hostA: host, hostX: host, P: passwd) = + new RA: exponent; + out(c, (hostA, enc(exp(g, RA), h(P)))); + in(c, (m1: G, m2: bitstring)); + let gRB = dec(m1, h(P)) in + let K = exp(gRB, RA) in + let nonce_to_bitstring(challengeB) = sdec(m2, K) in + new challengeA: nonce; + out(c, senc((challengeA, challengeB), K)); + in(c, m3: bitstring); + if nonce_to_bitstring(challengeA) = sdec(m3, K) then + out(c, senc(F(P,K), K)). + +(* Responder with identity hostB talking to initiator with identity hostX *) + +let processB(hostB: host, hostX: host, P: passwd) = + in(c, (=hostX, m: G)); + let gRA = dec(m, h(P)) in + new RB: exponent; + let K = exp(gRA, RB) in + new challengeB: nonce; + out(c, (enc(exp(g, RB), h(P)), senc(nonce_to_bitstring(challengeB), K))); + in(c, m4: bitstring); + let (challengeA: nonce, =challengeB) = sdec(m4, K) in + out(c, senc(nonce_to_bitstring(challengeA), K)); + in(c, m5: bitstring); + let fr = sdec(m5, K) in + if T(h(P), fr, K) = true then + 0. + +(* The code for A or B talking to other participants can be considered +as part of the adversary, since it does not share secrets with the +code for A or B talking to A or B. (The only secret is the password.) + +The code for A talking to A (and for B talking to B) could also be +separated from the rest, since it does not share secrets with the code +for A talking to B and for B talking to A. + +Here, I made the choice that A and B use the same password when A +talks to B and when B talks to A. It would be easy to write the other +option in which they use a different password in each direction. *) + +process + (!processA(A, A, PAA)) | + (!processB(A, A, PAA)) | + (!processA(B, B, PBB)) | + (!processB(B, B, PBB)) | + (!processA(A, B, PAB)) | + (!processB(A, B, PAB)) | + (!processA(B, A, PAB)) | + (!processB(B, A, PAB)) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/AugmentedEKE2.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/AugmentedEKE2.pv new file mode 100644 index 0000000000000000000000000000000000000000..18f1e4a9eb2f90eb8d732727086964c71f914547 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/AugmentedEKE2.pv @@ -0,0 +1,144 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 + One does not know whether one decrypts { challengeA, challengeB }_K + and similar messages correctly. *) + +(* There is an attack if the adversary can distinguish a group element +in G from a random bitstring. (The adversary decrypts the first message +with h(P') for the guessed password P' and concludes that the guess is +good if the result is an element of G.) *) +(* set ignoreTypes = true. *) + +free c: channel. + +type host. +type passwd. +type nonce. +type G. +type exponent. +type key. + + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. +fun G_to_key(G): key [data, typeConverter]. +fun G_to_bitstring(G):bitstring [data, typeConverter]. + +(* Diffie-Hellman *) + +const g: G. +fun exp(G, exponent): G. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Symmetric cryptography + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc(bitstring, key): bitstring. +fun dec(bitstring, key): bitstring. +equation forall x: bitstring, y: key; dec(enc(x,y),y) = x. +equation forall x: bitstring, y: key; enc(dec(x,y),y) = x. + +(* Hash function *) + +fun h(passwd):key. + +(* One-way function *) + +fun F(passwd, key): bitstring. + +(* Predicate *) + +reduc forall x: passwd, y: key; T(h(x), F(x,y), y) = true. + +(* Host names *) + +const A, B: host. + + + +free PAB, PAA, PBB: passwd [private]. +weaksecret PAB. +weaksecret PAA. +weaksecret PBB. + +(* Initiator with identity hostA talking to responder with identity hostX *) + +let processA(hostA: host, hostX: host, P: passwd) = + new RA: exponent; + out(c, (hostA, enc(G_to_bitstring(exp(g, RA)), h(P)))); + in(c, (m1: bitstring, m2: bitstring)); + let G_to_bitstring(gRB) = dec(m1, h(P)) in + let K = G_to_key(exp(gRB, RA)) in + let nonce_to_bitstring(challengeB) = dec(m2, K) in + new challengeA: nonce; + out(c, enc((challengeA, challengeB), K)); + in(c, m3: bitstring); + if nonce_to_bitstring(challengeA) = dec(m3, K) then + out(c, enc(F(P,K), K)). + +(* Responder with identity hostB talking to initiator with identity hostX *) + +let processB(hostB: host, hostX: host, P: passwd) = + in(c, (=hostX, m: bitstring)); + let G_to_bitstring(gRA) = dec(m, h(P)) in + new RB: exponent; + let K = G_to_key(exp(gRA, RB)) in + new challengeB: nonce; + out(c, (enc(G_to_bitstring(exp(g, RB)), h(P)), enc(nonce_to_bitstring(challengeB), K))); + in(c, m4: bitstring); + let (challengeA: nonce, =challengeB) = dec(m4, K) in + out(c, enc(nonce_to_bitstring(challengeA), K)); + in(c, m5: bitstring); + let fr = dec(m5, K) in + if T(h(P), fr, K) = true then + 0. + +(* The code for A or B talking to other participants can be considered +as part of the adversary, since it does not share secrets with the +code for A or B talking to A or B. (The only secret is the password.) + +The code for A talking to A (and for B talking to B) could also be +separated from the rest, since it does not share secrets with the code +for A talking to B and for B talking to A. + +Here, I made the choice that A and B use the same password when A +talks to B and when B talks to A. It would be easy to write the other +option in which they use a different password in each direction. *) + +process + (!processA(A, A, PAA)) | + (!processB(A, A, PAA)) | + (!processA(B, B, PBB)) | + (!processB(B, B, PBB)) | + (!processA(A, B, PAB)) | + (!processB(A, B, PAB)) | + (!processA(B, A, PAB)) | + (!processB(B, A, PAB)) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/EKE-DH.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/EKE-DH.pv new file mode 100644 index 0000000000000000000000000000000000000000..0275b0ee107906a87a0c7dcc3dd6a6dedef299bb --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/EKE-DH.pv @@ -0,0 +1,121 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 3.1 *) + +free c: channel. + +type host. +type passwd. +type nonce. +type G. +type exponent. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. + +(* Diffie-Hellman *) + +const g: G. +fun exp(G, exponent): G. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Symmetric encryption + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc(G, passwd): G. +fun dec(G, passwd): G. +equation forall x: G, y: passwd; dec(enc(x,y),y) = x. +equation forall x: G, y: passwd; enc(dec(x,y),y) = x. + +(* Symmetric encryption + One knows whether decryption succeeds or not *) + +fun senc(bitstring, G): bitstring. +reduc forall x: bitstring, y: G; sdec(senc(x,y),y) = x. + +(* Host names *) + +const A, B: host. + + + +free PAB, PAA, PBB: passwd [private]. +weaksecret PAB. +weaksecret PAA. +weaksecret PBB. + +(* Initiator with identity hostA talking to responder with identity hostX *) + +let processA(hostA: host, hostX: host, P: passwd) = + new RA: exponent; + out(c, (hostA, enc(exp(g,RA), P))); + in(c,(m2: G,m3: bitstring)); + let gRB = dec(m2,P) in + let K = exp(gRB, RA) in + let nonce_to_bitstring(challengeB) = sdec(m3, K) in + new challengeA: nonce; + out(c, senc((challengeA,challengeB), K)); + in(c, m4: bitstring); + if nonce_to_bitstring(challengeA) = sdec(m4, K) then + 0. + +(* Responder with identity hostB talking to initiator with identity hostX *) + +let processB(hostB: host, hostX: host, P: passwd) = + in(c, (=hostX, m: G)); + let gRA = dec(m, P) in + new RB: exponent; + let K = exp(gRA, RB) in + new challengeB: nonce; + out(c, (enc(exp(g, RB), P), senc(nonce_to_bitstring(challengeB), K))); + in(c,m3: bitstring); + let (challengeA: nonce,=challengeB) = sdec(m3, K) in + out(c, senc(nonce_to_bitstring(challengeA), K)). + +(* The code for A or B talking to other participants can be considered +as part of the adversary, since it does not share secrets with the +code for A or B talking to A or B. (The only secret is the password.) + +The code for A talking to A (and for B talking to B) could also be +separated from the rest, since it does not share secrets with the code +for A talking to B and for B talking to A. + +Here, I made the choice that A and B use the same password when A +talks to B and when B talks to A. It would be easy to write the other +option in which they use a different password in each direction. *) + +process + (!processA(A, A, PAA)) | + (!processB(A, A, PAA)) | + (!processA(B, B, PBB)) | + (!processB(B, B, PBB)) | + (!processA(A, B, PAB)) | + (!processB(A, B, PAB)) | + (!processA(B, A, PAB)) | + (!processB(B, A, PAB)) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/EKE.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/EKE.pv new file mode 100644 index 0000000000000000000000000000000000000000..ab6f3a0759d623a5336fe39f522d17e0b2c235df --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/EKE.pv @@ -0,0 +1,134 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Bellovin, Merritt, Oakland 92, section 2.1 *) + + +(* There is an attack if one is able to distinguish a public +key from another bitstring. (The adversary decrypts the first +message with the candidate password and tests whether the +result is a public key.) *) +(* set ignoreTypes = true. *) + +free c: channel. + +type host. +type passwd. +type nonce. +type pkey. +type skey. +type key. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. +fun pkey_to_bitstring(pkey):bitstring [data, typeConverter]. + +(* Symmetric encryption + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc(bitstring, passwd): bitstring. +fun dec(bitstring, passwd): bitstring. +equation forall x: bitstring, y: passwd; dec(enc(x,y),y) = x. +equation forall x: bitstring, y: passwd; enc(dec(x,y),y) = x. + +(* Symmetric encryption + One knows whether decryption succeeds or not *) + +fun senc(bitstring, key): bitstring. +reduc forall x: bitstring, y: key; sdec(senc(x,y),y) = x. + +(* Public key encryption *) + +fun penc(key, pkey): bitstring. +fun pk(skey): pkey. +reduc forall x: key, y: skey; pdec(penc(x,pk(y)),y) = x. + +(* Host names *) + +const A, B: host. + + + +free PAB, PAA, PBB: passwd [private]. +weaksecret PAB. +weaksecret PAA. +weaksecret PBB. + +(* Initiator with identity hostA talking to responder with identity hostX *) + +let processA(hostA: host, hostX: host, P: passwd) = + new sEA: skey; + let EA = pk(sEA) in + out(c, (hostA, enc(pkey_to_bitstring(EA), P))); + in(c,m2: bitstring); + let R = pdec(dec(m2,P),sEA) in + new challengeA: nonce; + out(c, senc(nonce_to_bitstring(challengeA), R)); + in(c, m4: bitstring); + let (=challengeA, challengeB: nonce) = sdec(m4, R) in + out(c, senc(nonce_to_bitstring(challengeB), R)). + +(* Responder with identity hostB talking to initiator with identity hostX *) + +let processB(hostB: host, hostX: host, P: passwd) = + in(c, (=hostX, m: bitstring)); + let pkey_to_bitstring(EA) = dec(m, P) in + new R: key; + out(c, enc(penc(R, EA), P)); + in(c,m3: bitstring); + let nonce_to_bitstring(challengeA) = sdec(m3, R) in + new challengeB: nonce; + out(c, senc((challengeA, challengeB), R)); + in(c, m5: bitstring); + if sdec(m5, R) = nonce_to_bitstring(challengeB) then + 0. + +(* The code for A or B talking to other participants can be considered +as part of the adversary, since it does not share secrets with the +code for A or B talking to A or B. (The only secret is the password.) + +The code for A talking to A (and for B talking to B) could also be +separated from the rest, since it does not share secrets with the code +for A talking to B and for B talking to A. + +Here, I made the choice that A and B use the same password when A +talks to B and when B talks to A. It would be easy to write the other +option in which they use a different password in each direction. *) + +process + (!processA(A, A, PAA)) | + (!processB(A, A, PAA)) | + (!processA(B, B, PBB)) | + (!processB(B, B, PBB)) | + (!processA(A, B, PAB)) | + (!processB(A, B, PAB)) | + (!processA(B, A, PAB)) | + (!processB(B, A, PAB)) + + + + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/SignedAugmentedEKE1.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/SignedAugmentedEKE1.pv new file mode 100644 index 0000000000000000000000000000000000000000..8cdfd41aee918cc6b37942fd881852e4d8feced1 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/SignedAugmentedEKE1.pv @@ -0,0 +1,144 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Augmented EKE, Bellovin, Merritt, + Section 3 + +Note that this protocol uses the same key for shared-key encryption +and for signatures... +*) + +(* There is an attack if the adversary can distinguish a group element +in G from a random bitstring. (The adversary decrypts the first message +with h(P') for the guessed password P' and concludes that the guess is +good if the result is an element of G.) *) +(* set ignoreTypes = true. *) + +free c: channel. + +type host. +type passwd. +type nonce. +type G. +type exponent. +type key. + +fun nonce_to_bitstring(nonce): bitstring [data, typeConverter]. + +(* Diffie-Hellman *) + +const g: G. +fun exp(G, exponent): G. +equation forall x: exponent, y: exponent; exp(exp(g, x), y) = exp(exp(g, y), x). + +(* Symmetric encryption + One does not know whether decryption succeeds or not + For use with weak secrets *) + +fun enc(G, key): G. +fun dec(G, key): G. +equation forall x: G, y: key; dec(enc(x,y),y) = x. +equation forall x: G, y: key; enc(dec(x,y),y) = x. + +(* Symmetric encryption + One knows whether decryption succeeds or not *) + +fun senc(bitstring, G): bitstring. +reduc forall x: bitstring, y: G; sdec(senc(x,y),y) = x. + +(* Signature *) + +fun pk(passwd):key. +fun sign(G, passwd): bitstring. +reduc forall x: G, y: passwd; verif(sign(x,y), pk(y),x) = true. +reduc forall x: G, y: passwd; getmess(sign(x,y)) = x. + +(* Host names *) + +const A, B: host. + + + +free PAB, PAA, PBB: passwd [private]. +weaksecret PAB. +weaksecret PAA. +weaksecret PBB. + +(* Initiator with identity hostA talking to responder with identity hostX *) + +let processA(hostA: host, hostX: host, P: passwd) = + new RA: exponent; + out(c, (hostA, enc(exp(g,RA), pk(P)))); + in(c, (m1: G, m2: bitstring)); + let gRB = dec(m1, pk(P)) in + let K = exp(gRB, RA) in + let nonce_to_bitstring(challengeB) = sdec(m2, K) in + new challengeA: nonce; + out(c, senc((challengeA, challengeB), K)); + in(c, m3: bitstring); + if nonce_to_bitstring(challengeA) = sdec(m3, K) then + out(c, senc(sign(K,P), K)). + +(* Responder with identity hostB talking to initiator with identity hostX *) + +let processB(hostB: host, hostX: host, P: passwd) = + in(c, (=hostX, m: G)); + let gRA = dec(m, pk(P)) in + new RB: exponent; + let K = exp(gRA, RB) in + new challengeB: nonce; + out(c, (enc(exp(g, RB), pk(P)), senc(nonce_to_bitstring(challengeB), K))); + in(c, m4: bitstring); + let (challengeA: nonce, =challengeB) = sdec(m4, K) in + out(c, senc(nonce_to_bitstring(challengeA), K)); + in(c, m5: bitstring); + let fr = sdec(m5, K) in + if verif(fr,pk(P),K) = true then + 0. + +(* The code for A or B talking to other participants can be considered +as part of the adversary, since it does not share secrets with the +code for A or B talking to A or B. (The only secret is the password.) + +The code for A talking to A (and for B talking to B) could also be +separated from the rest, since it does not share secrets with the code +for A talking to B and for B talking to A. + +Here, I made the choice that A and B use the same password when A +talks to B and when B talks to A. It would be easy to write the other +option in which they use a different password in each direction. *) + +process + (!processA(A, A, PAA)) | + (!processB(A, A, PAA)) | + (!processA(B, B, PBB)) | + (!processB(B, B, PBB)) | + (!processA(A, B, PAB)) | + (!processB(A, B, PAB)) | + (!processA(B, A, PAB)) | + (!processB(B, A, PAB)) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/attack.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/attack.pv new file mode 100644 index 0000000000000000000000000000000000000000..8964d178c1750bff60316e5a1a32898665d18419 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/attack.pv @@ -0,0 +1,63 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + + + +free c: channel. + +type pkey. +type skey. +type seed. + +(* deterministic public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)), y) = x. + +(* The attack disappears with probabilistic public-key encryption: + +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; decrypt(internal_encrypt(x,pk(y),r), y) = x. +letfun encrypt(x: bitstring, y: pkey) = new r: seed; internal_encrypt(x,y,r). + +*) + +fun hash(bitstring): bitstring. + +free w:bitstring [private]. +weaksecret w. + +process + new s: skey; + let pk = pk(s) in + out(c, pk); + out(c, encrypt(hash(w), pk)) + + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/basicweaksecret-attack.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/basicweaksecret-attack.pv new file mode 100644 index 0000000000000000000000000000000000000000..db102189f160067bef55ebffae8576154f5a39c2 --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/basicweaksecret-attack.pv @@ -0,0 +1,55 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Basic weak secret example, from JLAP paper + First version, with an attack *) + +type skey. +type pkey. +type passwd. + +(* public-key encryption *) + +fun pk(skey): pkey. +fun penc(bitstring, pkey): bitstring. +fun pdec(bitstring, skey): bitstring. +equation forall x: bitstring, y: skey; pdec(penc(x, pk(y)), y) = x. + +(* Hash function *) + +fun h(passwd): bitstring. + +free c: channel. +free w: passwd [private]. + +weaksecret w. + +process + new s: skey; + out(c, pk(s)); + out(c, penc(h(w), pk(s))) + diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/basicweaksecret.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/basicweaksecret.pv new file mode 100644 index 0000000000000000000000000000000000000000..03a38538e90cbaac47886fc1fab8cc31bb15311c --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/basicweaksecret.pv @@ -0,0 +1,56 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Basic weak secret example, from JLAP paper + Corrected version *) + +type skey. +type pkey. +type seed. +type passwd. + +(* Probabilistic public-key encryption *) + +fun pk(skey): pkey. +fun penc(bitstring, pkey, seed): bitstring. +fun pdec(bitstring, skey): bitstring. +equation forall x: bitstring, y: skey, z: seed; pdec(penc(x, pk(y), z), y) = x. + +(* Hash function *) + +fun h(passwd): bitstring. + +free c: channel. +free w: passwd [private]. + +weaksecret w. + +process + new s: skey; + new a: seed; + out(c, pk(s)); + out(c, penc(h(w), pk(s), a)) diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/handshake.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/handshake.pv new file mode 100644 index 0000000000000000000000000000000000000000..2ef538dc613f7f364f72bcce597960fba83119df --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/handshake.pv @@ -0,0 +1,62 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Handshake protocol. + From Delaune, Jacquemard, CSFW'04 +*) + +type passwd. +type nonce. + +(* shared-key encryption as equation *) + +fun encrypt(nonce, passwd): nonce. +fun decrypt(nonce, passwd): nonce. +equation forall x: nonce, y: passwd; decrypt(encrypt(x,y),y) = x. +equation forall x: nonce, y: passwd; encrypt(decrypt(x,y),y) = x. + +(* addition of one *) + +fun incr(nonce): nonce. + +free c: channel. +free pw: passwd [private]. +weaksecret pw. + +let processA = + new N: nonce; + out(c, encrypt(N, pw)). + +let processB = + in(c, x: nonce); + let n = decrypt(x, pw) in + out(c, encrypt(incr(n), pw)). + +process + (!processA) + | + (!processB) diff --git a/preinstallTTool/linux/proverif/examples/pitype/weaksecr/vote.pv b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/vote.pv new file mode 100644 index 0000000000000000000000000000000000000000..dec9766080920c350f1b8e87f3d2ca11c32144bb --- /dev/null +++ b/preinstallTTool/linux/proverif/examples/pitype/weaksecr/vote.pv @@ -0,0 +1,60 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Naive vote protocol + Taken from Delaune, Jacquemard, CSFW'04 *) + +type pkey. +type skey. + +(* deterministic public key encryption *) + +fun pk(skey): pkey. +fun encrypt(bitstring, pkey): bitstring. +reduc forall x: bitstring, y: skey; decrypt(encrypt(x,pk(y)), y) = x. + +(* Note that the attack disappears with probabilistic public-key encryption: + +type seed. +fun pk(skey): pkey. +fun internal_encrypt(bitstring, pkey, seed): bitstring. +reduc forall x: bitstring, y: skey, r: seed; decrypt(internal_encrypt(x,pk(y),r), y) = x. +letfun encrypt(x: bitstring, y: pkey) = new r: seed; internal_encrypt(x,y,r). + +*) + +free c: channel. +free v: bitstring [private]. + +weaksecret v. + + +process + new skS: skey; + let pkS = pk(skS) in + out(c, pkS); + !out(c, encrypt(v, pkS)) diff --git a/preinstallTTool/linux/proverif/proverif b/preinstallTTool/linux/proverif/proverif new file mode 100755 index 0000000000000000000000000000000000000000..d2ca9b6661b36012bb4fd24239a277378e8580c2 Binary files /dev/null and b/preinstallTTool/linux/proverif/proverif differ diff --git a/preinstallTTool/linux/proverif/proveriftotex b/preinstallTTool/linux/proverif/proveriftotex new file mode 100755 index 0000000000000000000000000000000000000000..26cab0936a970961e6c86623a2a88aa2b4d51b4f Binary files /dev/null and b/preinstallTTool/linux/proverif/proveriftotex differ diff --git a/preinstallTTool/linux/proverif/spassconvert b/preinstallTTool/linux/proverif/spassconvert new file mode 100755 index 0000000000000000000000000000000000000000..3e56586c3195461cccd8f490c28e0dc5f7d4fbf5 --- /dev/null +++ b/preinstallTTool/linux/proverif/spassconvert @@ -0,0 +1,28 @@ +#!/bin/sh + +echo Needham-Schroeder public key +./proverif -out spass -o examples/horn/spass/needham-orig examples/horn/secr/needham-orig +echo Needham-Schroeder public key corrected +./proverif -out spass -o examples/horn/spass/needham-corr-orig examples/horn/secr/needham-corr-orig +echo Needham-Schroeder shared key +./proverif -out spass -o examples/horn/spass/needham-shr-orig4 examples/horn/secr/needham-shr-orig4 +echo Needham-Schroeder shared key corrected +./proverif -out spass -o examples/horn/spass/needham-shr-corr4 examples/horn/secr/needham-shr-corr4 +echo Denning-Sacco +./proverif -out spass -o examples/horn/spass/denning-sacco-orig examples/horn/secr/denning-sacco-orig +echo Denning-Sacco corrected +./proverif -out spass -o examples/horn/spass/denning-sacco-corr-orig examples/horn/secr/denning-sacco-corr-orig +echo Otway-Rees +./proverif -out spass -o examples/horn/spass/otway-rees-orig examples/horn/secr/otway-rees-orig +echo Otway-Rees Paulson err +./proverif -out spass -o examples/horn/spass/otway-rees-paulson-err examples/horn/secr/otway-rees-paulson-err +echo Yahalom +./proverif -out spass -o examples/horn/spass/yahalom examples/horn/secr/yahalom +echo Simplified Yahalom +./proverif -out spass -o examples/horn/spass/simpleryahalom examples/horn/secr/simpleryahalom +echo Skeme +./proverif -out spass -o examples/horn/spass/skeme2 examples/horn/secr/skeme2 +./proverif -out spass -o examples/horn/spass/skeme3 examples/horn/secr/skeme3 + + + diff --git a/preinstallTTool/linux/proverif/src/destructor.cmi b/preinstallTTool/linux/proverif/src/destructor.cmi new file mode 100644 index 0000000000000000000000000000000000000000..93a3955027ac1afb288f90b6dfe2ac541da2c38d Binary files /dev/null and b/preinstallTTool/linux/proverif/src/destructor.cmi differ diff --git a/preinstallTTool/linux/proverif/src/destructor.cmx b/preinstallTTool/linux/proverif/src/destructor.cmx new file mode 100644 index 0000000000000000000000000000000000000000..ba3752cbec275b3f4ae3c8a637e15357a7cbae46 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/destructor.cmx differ diff --git a/preinstallTTool/linux/proverif/src/destructor.ml b/preinstallTTool/linux/proverif/src/destructor.ml new file mode 100644 index 0000000000000000000000000000000000000000..0ee5ebdab0776ca53035b06ab2acb9f8c5eed569 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/destructor.ml @@ -0,0 +1,88 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types + +exception Not_deterministic + +let compare_two_rewrite_rules f_symb (lhs1,rhs1) (lhs2,rhs2) = + Terms.auto_cleanup (fun _ -> + try + (* We do not need to perform unification modulo the + equational theory because we work on rewrite rules + after closing under equations *) + List.iter2 Terms.unify lhs1 lhs2; + (* TermsEq.check_constraint_list does the copy of the constraints *) + ignore(TermsEq.check_constraint_list [[Neq(rhs1,rhs2)]]); + Display.Text.print_string "Error: The destructor "; + Display.Text.display_function_name f_symb; + Display.Text.print_string " is not deterministic."; + Display.Text.newline (); + Display.Text.print_string "Conflict between the rewrite rules:"; + Display.Text.newline (); + Display.Text.display_red f_symb [(lhs1,rhs1,[]);(lhs2,rhs2,[])]; + raise Not_deterministic + with Terms.Unify -> () + ) + + +let check_deterministic f_symb_list = + let rec check_all_rewrite_rule f_symb = function + | [] -> () + | (lhs1,rhs1,[])::q -> + List.iter (function + | (lhs2,rhs2,[]) -> compare_two_rewrite_rules f_symb (lhs1,rhs1) (lhs2,rhs2) + | _ -> () + ) q; + check_all_rewrite_rule f_symb q + | _::q -> check_all_rewrite_rule f_symb q + in + + let check_one f_symb = + try + match f_symb.f_cat with + | Red(redlist) -> + check_all_rewrite_rule f_symb redlist; + true + | _ -> internal_error "[Destructor.is_deterministic] This should be a destructor symbol" + with + Not_deterministic -> false + in + + let all_deter = ref true in + + List.iter (fun f_symb -> + if not (check_one f_symb) then all_deter := false + ) f_symb_list; + + if not (!all_deter) then + begin + if (!Param.html_output) then + Display.LangHtml.close (); + Parsing_helper.user_error "The destructors should be deterministic.\n"; + end diff --git a/preinstallTTool/linux/proverif/src/destructor.mli b/preinstallTTool/linux/proverif/src/destructor.mli new file mode 100644 index 0000000000000000000000000000000000000000..6d5093329d2b42753de981bf81f8a8d692e5497a --- /dev/null +++ b/preinstallTTool/linux/proverif/src/destructor.mli @@ -0,0 +1,30 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +val check_deterministic : funsymb list -> unit diff --git a/preinstallTTool/linux/proverif/src/display.cmi b/preinstallTTool/linux/proverif/src/display.cmi new file mode 100644 index 0000000000000000000000000000000000000000..74341f9aa94acb735fc9b3a6619edff3d5b4f7ed Binary files /dev/null and b/preinstallTTool/linux/proverif/src/display.cmi differ diff --git a/preinstallTTool/linux/proverif/src/display.cmx b/preinstallTTool/linux/proverif/src/display.cmx new file mode 100644 index 0000000000000000000000000000000000000000..e3e08b1d28441d10300721f060a80d747569efeb Binary files /dev/null and b/preinstallTTool/linux/proverif/src/display.cmx differ diff --git a/preinstallTTool/linux/proverif/src/display.ml b/preinstallTTool/linux/proverif/src/display.ml new file mode 100644 index 0000000000000000000000000000000000000000..1ed533c599aad5d80109bade9da88b3a91727f4d --- /dev/null +++ b/preinstallTTool/linux/proverif/src/display.ml @@ -0,0 +1,2877 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Pitypes + +(* Helper function to make the display more readable: we abbreviate names with + just a constant symbol. *) + +let find_abbrev abbrev_table t = + let rec find_abbrev_rec = function + [] -> + begin + match t with + FunApp(f,l) -> + let f_base_name = + try + let pos = String.rindex f.f_name '_' in + String.sub f.f_name 0 pos + with Not_found -> f.f_name + in + let t'' = Var (Terms.new_var f_base_name (snd f.f_type)) in + abbrev_table := (t'',t) :: (!abbrev_table); + t'' + | _ -> Parsing_helper.internal_error "Function application expected in find_abbrev" + end + | (t'',t')::l -> + if Terms.equal_terms t t' then + t'' + else + find_abbrev_rec l + in + find_abbrev_rec (!abbrev_table) + +let rec abbrev_term abbrev_table = function + Var { link = TLink t } -> abbrev_term abbrev_table t + | Var { link = VLink v } -> (Var v) + | Var v -> Var v + | FunApp(f,l) -> + let l' = List.map (abbrev_term abbrev_table) l in + match f.f_cat, l with + (Name _), (_::_) -> + (* Abbreviate names with arguments *) + find_abbrev abbrev_table (FunApp(f,l')) + | _ -> FunApp(f,l') + +let abbrev_fact abbrev_table = function + Pred(p,l) -> Pred(p, List.map (abbrev_term abbrev_table) l) + | Out(t,l) -> Out(abbrev_term abbrev_table t, + List.map (fun (v,t) -> (v, abbrev_term abbrev_table t)) l) + +let abbrev_constra abbrev_table = List.map (List.map (function + Neq(t1,t2) -> Neq(abbrev_term abbrev_table t1, abbrev_term abbrev_table t2))) + +(* Return a new rule and an association table where the names are abbreviated *) + +let abbreviate_rule ((hyp, concl, hist, constra)) = + let abbrev_table = ref [] in + let rule' = (List.map (abbrev_fact abbrev_table) hyp, abbrev_fact abbrev_table concl, + hist, abbrev_constra abbrev_table constra) + in + (!abbrev_table,rule') + +(* Return an abbreviated derivation and an association table where the names are abbreviated *) + +let abbreviate_derivation tree = + let abbrev_table = ref [] in + let rec abbrev_tree tree = + { desc = + begin + match tree.desc with + (FEmpty | FHAny | FRemovedWithProof _) as x -> x + | FRule(n, descr, constra, hl) -> + FRule(n, descr, abbrev_constra abbrev_table constra, List.map abbrev_tree hl) + | FEquation h -> FEquation (abbrev_tree h) + end; + thefact = abbrev_fact abbrev_table tree.thefact + } + in + let tree' = abbrev_tree tree in + (!abbrev_table, tree') + +type cl = CFun | CName | CVar | CPred | CType | CExplain | CKeyword | CConn + +module type LangSig = +sig +val indentstring : string +val print_string : string -> unit +val display_occ : int -> unit +val display_occ_ref : int -> unit +val display_clause_link : int -> unit +val display_step_link : int -> unit +val start_cl : cl -> unit +val end_cl : cl -> unit +val convert_funname : string -> string +val and_connective : unit -> string +val or_connective : unit -> string +val impl_connective : string +val red_connective : string +val before_connective : string +val diff_connective : string +val equal_connective : string +val eq1_connective : string +val eq2_connective : string +val hline : string +val start_numbered_list : string +val end_numbered_list : string +val start_list : string +val end_list : string +val clause_item : int -> unit +val history_item : int -> unit +val basic_item : unit -> unit +val newline : unit -> unit +end + +module LangText : LangSig = +struct + +let indentstring = " " + +let print_string = Pervasives.print_string + +let color_black = 30 +let color_red = 31 +let color_green = 32 +let color_yellow = 33 +let color_blue = 34 +let color_magenta = 35 +let color_cyan = 36 +let color_white = 37 + +let bold = 1 + +let color_stack = ref [] + +let emit_color n = + print_string "\027["; + print_int n; + print_string "m" + +let start_color n = + if !Param.ansi_color then + begin + emit_color n; + color_stack := n :: (!color_stack) + end + +let reset_color() = + if !Param.ansi_color then + begin + match !color_stack with + [] -> Parsing_helper.internal_error "Popping more colors than pushed" + | [n] -> emit_color 0; color_stack := [] + | _::n::r -> emit_color n; color_stack := n::r + end + +let display_occ n = + start_color color_green; + print_string ("{" ^ (string_of_int n) ^ "}"); + reset_color() + +let display_occ_ref = display_occ + +let display_clause_link n = + print_string ("clause " ^ (string_of_int n) ^ " ") + +let display_step_link n = + print_string (string_of_int n) + +let start_cl = function + CFun | CName | CVar | CPred | CType -> () + | CExplain -> start_color color_magenta + | CKeyword -> start_color color_blue + | CConn -> start_color bold + +let end_cl = function + CFun | CName | CVar | CPred | CType -> () + | _ -> reset_color() + +let convert_funname s = s + +let and_connective() = + if !Param.typed_frontend then "&&" else "&" +let or_connective() = + if !Param.typed_frontend then "||" else "|" +let impl_connective = "->" +let red_connective = "=>" +let before_connective = "==>" +let diff_connective = "<>" +let equal_connective = "=" +let eq1_connective = "<->" +let eq2_connective = "<=>" + +let hline = "--------------------------------------------------------------\n" + +let start_numbered_list = "" +let end_numbered_list = "\n" +let start_list = "" +let end_list = "\n" + +let clause_item n = + let ns = string_of_int n in + print_string ("\nClause " ^ ns ^ ": ") + +let history_item n = + print_string ("\n" ^ (string_of_int n) ^ ". ") + +let basic_item() = + print_string "\n" + +let newline() = + print_newline() + + +end + + +module LangHtml = +struct +(* +Characters not to use in HTML +& -> & +< -> < +> -> > +quotes -> " +*) + +let indentstring = " " + +let proverifurl = ref "" (* currently, you need to copy the CSS file into your html directory. TO DO? improve that? *) + +let previousf = ref [] + +let f = ref stdout + +let print_string s = + if (!previousf) == [] then + Parsing_helper.internal_error "html output with no open html file.\n"; + output_string (!f) s + +let openfile fname title = + previousf := (!f) :: (!previousf); + begin + try + f := open_out fname + with Sys_error _ -> + Parsing_helper.user_error ("Error: could not open html file. The html directory that you specified, " ^ (!Param.html_dir) ^ ", probably does not exist.\n") + end; + print_string ("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"> +<html> +<head> + <title>" ^ title ^ "</title> + <link rel=\"stylesheet\" href=\"" ^ (!proverifurl) ^ "cssproverif.css\"> +</head> +<body> +") + +let close() = + match !previousf with + [] -> Parsing_helper.internal_error "No html file to close" + | (f'::r) -> + print_string "</body>\n</html>\n"; + close_out (!f); + f := f'; + previousf := r + +let display_occ n = + let ns = string_of_int n in + print_string ("<a href=\"process_"^(string_of_int !Param.process_number)^".html#occ" ^ ns ^ "\" target=\"process\" class=\"occ\">{" ^ ns ^ "}</a>") + +let display_occ_ref n = + let ns = string_of_int n in + print_string ("<a name=occ" ^ ns ^ " class=\"occ\">{" ^ ns ^ "}</a> ") + +let display_clause_link n = + let ns = string_of_int n in + print_string ("<a href=\"clauses" ^ + (string_of_int (!Param.current_query_number)) ^ + ".html#clause" ^ ns ^ "\" target=\"clauses\">clause " ^ ns ^ "</a> ") + +let display_step_link n = + let ns = string_of_int n in + print_string ("<a href=\"#step" ^ ns ^ "\">" ^ ns ^ "</a>") + + +let start_cl cl = + let cls = match cl with + CFun -> "fun" + | CName -> "name" + | CVar -> "var" + | CPred -> "pred" + | CType -> "type" + | CExplain -> "explain" + | CKeyword -> "keyword" + | CConn -> "conn" + in + print_string ("<span class=\"" ^ cls ^ "\">") + +let end_cl cl = print_string "</span>" + +let convert_funname s = + match s with + "&&" -> "&&" + | "<>" -> "<>" + | _ -> s + +let and_connective() = + if !Param.typed_frontend then "&&" else "&" +let or_connective() = + if !Param.typed_frontend then "||" else "|" +let impl_connective = "->" +let red_connective = "=>" +let before_connective = "==>" +let diff_connective = "<>" +let equal_connective = "=" +let eq1_connective = "<->" +let eq2_connective = "<=>" + +let hline = "<HR>\n" + +let start_numbered_list = "\n<ol>\n" +let end_numbered_list = "\n</ol>\n" +let start_list = "\n<ul>\n" +let end_list = "\n</ul>\n" + +let clause_item n = + let ns = string_of_int n in + print_string ("\n<li><a name=clause" ^ ns ^ ">Clause " ^ ns ^ ":</a> ") + +let history_item n = + print_string ("\n<li><a name=step" ^ (string_of_int n) ^ ">") + +let basic_item() = + print_string "\n<li>" + +let newline() = + print_string "<br>\n" + +end + +module LangDisp = functor (Lang : LangSig) -> +struct + +(* The rest is independent of the output language *) + +let print_string = Lang.print_string +let newline = Lang.newline +let display_occ = Lang.display_occ + +let print_line s = + print_string s; + newline() + +let display_idcl cl s = + Lang.start_cl cl; + print_string s; + Lang.end_cl cl + +let display_connective s = + print_string " "; + display_idcl CConn s; + print_string " " + +let display_keyword s = + display_idcl CKeyword s + +let varname v = + if v.vname == -1 then + (*Parsing_helper.internal_error "Variables created by new_var_noren should never be displayed" + They may be displayed for debugging in Simplify.display_norm_* *) + v.sname ^ "[-1]" + else if v.vname != 0 then + v.sname ^ "_" ^ (string_of_int v.vname) + else + v.sname + +let meaning = function + MUnknown -> "" + | MSid n -> "!" ^ (string_of_int n) + | MCompSid -> "!comp" + | MAttSid -> "!att" + | MVar (b,_) -> varname b + +let rec display_list f sep = function + [] -> () + | [a] -> f a + | (a::l) -> f a; + print_string sep; + display_list f sep l + +let rec display_list_and f = function + [] -> () + | [a] -> f a + | (a::l) -> f a; + display_connective (Lang.and_connective()); + display_list_and f l + +let display_item_list f l = + print_string Lang.start_list; + List.iter (fun x -> + Lang.basic_item(); f x) l; + print_string Lang.end_list + +let display_phase p = + match p.p_info with + [Attacker (n,_)] | [AttackerBin (n,_)] | [Mess (n,_)] | [MessBin (n,_)] + | [InputP n] | [InputPBin n] | [OutputP n] | [OutputPBin n] | [Table n] + | [TableBin n] -> + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | [AttackerGuess _] -> print_string " in off-line phase" + | _ -> () + +let display_function_name f = + display_idcl CFun (Terms.get_function_name f) + +module DisplayFun = + functor (Link : sig + val follow : bool + end) -> + struct + + let rec term = function + FunApp(f,l) -> + begin + match f.f_name with + "=" | "&&" | "||" | "<>" -> + (* Infix functions *) + begin + match l with + [t1;t2] -> + print_string "("; + term t1; + print_string " "; + display_idcl CFun (Lang.convert_funname f.f_name); + print_string " "; + term t2; + print_string ")" + | _ -> Parsing_helper.internal_error "infix operators should have 2 arguments" + end + | "if-then-else" -> + begin + match l with + [t1;t2;t3] -> + print_string "("; + display_idcl CKeyword "if"; + print_string " "; + term t1; + print_string " "; + display_idcl CKeyword "then"; + print_string " "; + term t2; + print_string " "; + display_idcl CKeyword "else"; + print_string " "; + term t3; + print_string ")" + | _ -> Parsing_helper.internal_error "if-then-else should have 3 arguments" + end + | _ -> + match f.f_cat with + Name { prev_inputs_meaning = sl } -> + display_idcl CName f.f_name; + print_string "["; + if (sl = []) || (!Param.tulafale = 1) then term_list l else name_list l sl; + print_string "]" + | Choice -> + display_idcl CKeyword f.f_name; + print_string "["; + term_list l; + print_string "]" + | General_var | General_mayfail_var -> + display_idcl CFun f.f_name + | _ -> + display_idcl CFun f.f_name; + if (l != []) || (f.f_name = "") || not (!Param.typed_frontend) then + begin + print_string "("; + term_list l; + print_string ")" + end + end + | Var v -> + if Link.follow then + match v.link with + TLink t -> term t + | VLink b -> display_idcl CVar (varname b) + | NoLink -> display_idcl CVar (varname v) + | _ -> Parsing_helper.internal_error "unexpected link in display_term_with_links" + else + display_idcl CVar (varname v) +(* to see links + ; + match v.link with + NoLink -> print_string "nl" + | TLink t -> print_string "tl" + | VLink v -> print_string "vl" + | PGLink t -> print_string "pgl" +*) + + and term_list l = display_list term "," l + + and name_list l sl = match (l,sl) with + [],[] -> () + | [a],[sa] -> + if sa <> MUnknown then + begin + print_string (meaning sa); print_string " = " + end; + term a + | (a::l),(sa::sl) -> + if sa <> MUnknown then + begin + print_string (meaning sa); print_string " = " + end; + term a; + print_string ","; + name_list l sl + | _ -> + Printf.printf "\nPrev meaning:\n"; + display_list (fun s -> print_string (meaning s)) "; " sl; + Printf.printf "\nArgument:\n"; + display_list term "; " l; + Parsing_helper.internal_error "prev_inputs_meaning should have the same length as the arguments of the name 2" + +let fact = function + Pred(chann,t) -> + display_idcl CPred chann.p_name; + if not (!Param.typed_frontend) then print_string ":"; + if t != [] then + begin + if !Param.typed_frontend then print_string "("; + term_list t; + if !Param.typed_frontend then print_string ")" + end + | Out(t,l) -> + display_idcl CPred "begin"; + if !Param.typed_frontend then print_string "(" else print_string ":"; + term t; + List.iter (fun (v,t) -> + print_string (", " ^ (varname v) ^ " = "); + term t) l; + if !Param.typed_frontend then print_string ")" + +(* Collect existential variables in a term, in order to display it *) + +let simple_constra = function + Neq(t1,t2) -> + term t1; + display_connective Lang.diff_connective; + term t2 + +let rec constra_rec = function + [] -> print_string "F" + | [a] -> simple_constra a + | (a::l) -> + simple_constra a; + print_string " | "; + constra_rec l + +(* Collect general variables in a term, in order to display it *) + +let rec collect_gen_vars accu = function + FunApp(f, []) when f.f_cat == General_var || f.f_cat == General_mayfail_var -> + if not (List.memq f (!accu)) then + accu := f :: (!accu) + | FunApp(f,l) -> List.iter (collect_gen_vars accu) l + | Var _ -> () + +let collect_gen_vars_constra accu constra = + List.iter (function Neq(t1,t2) -> + collect_gen_vars accu t1; + collect_gen_vars accu t2) constra + +let constra a = + let gen_vars = ref [] in + collect_gen_vars_constra gen_vars a; + if (!gen_vars <> []) then + begin + print_string "(forall "; + display_list (fun f -> display_idcl CFun f.f_name) "," (!gen_vars); + print_string ", " + end; + if List.length a > 1 then + begin + print_string "("; + constra_rec a; + print_string ")" + end + else + constra_rec a; + if (!gen_vars <> []) then + print_string ")" + +let constra_list c = display_list_and constra c + +let concl upper concl tag = + match tag with + OutputTag occ :: _ -> + print_string (if upper then "The message " else "the message "); + begin + match concl with + Pred({p_info = [Attacker(n,_)]} as p, [v]) -> + term v; + print_string " may be sent to the attacker"; + display_phase p + | Pred({p_info = [Mess(n,_)]} as p, [vc;v]) -> + term v; + print_string " may be sent on channel "; + term vc; + display_phase p + | Pred({p_info = [AttackerBin(n,_)]} as p, [v;v']) -> + term v; + print_string " (resp. "; + term v'; + print_string ") may be sent to the attacker"; + display_phase p + | Pred({p_info = [MessBin(n,_)]} as p, [vc;v;vc';v']) -> + term v; + print_string " may be sent on channel "; + term vc; + print_string " (resp. message "; + term v'; + print_string " on channel "; + term vc'; + print_string ")"; + display_phase p + | _ -> Parsing_helper.internal_error "Unexpected conclusion for OutputTag" + end; + print_string " at output "; + Lang.display_occ occ + | TestUnifTag occ :: _ | TestUnifTag2 occ :: _ -> + begin + print_string (if upper then "The attacker can make a distinguishing test at " else "the attacker can make a distinguishing test at "); + Lang.display_occ occ + end + | BeginEvent(occ) :: _ -> + print_string (if upper then "Event " else "event "); + begin + match concl with + Pred(_, [e]) -> + term e; + print_string " may be executed at "; + Lang.display_occ occ + | Pred(_, [e';e]) -> + term e; + print_string " may be executed at "; + Lang.display_occ occ; + print_string " in session "; + term e' + | _ -> Parsing_helper.internal_error "Unexpected conclusion for BeginEvent" + end + | InputPTag(occ) :: _ -> + print_string (if upper then "An input on channel " else "an input on channel "); + begin + match concl with + Pred({p_info = [InputP(n)]} as p, [e]) -> + term e; + print_string " may be triggered at "; + Lang.display_occ occ; + display_phase p + | Pred({p_info = [InputPBin(n)]} as p, [e;e']) -> + term e; + print_string " (resp. "; + term e'; + print_string ") may be triggered at "; + Lang.display_occ occ; + display_phase p + | _ -> Parsing_helper.internal_error "Unexpected conclusion" + end + | OutputPTag(occ) :: _ -> + print_string (if upper then "An output on channel " else "an output on channel "); + begin + match concl with + | Pred({p_info = [OutputP(n)]} as p, [e]) -> + term e; + print_string " may be triggered at "; + Lang.display_occ occ; + display_phase p + | Pred({p_info = [OutputPBin(n)]} as p, [e;e']) -> + term e; + print_string " (resp. "; + term e'; + print_string ") may be triggered at "; + Lang.display_occ occ; + display_phase p + | _ -> Parsing_helper.internal_error "Unexpected conclusion" + end + | InsertTag occ :: _ -> + print_string (if upper then "The entry " else "the entry "); + begin + match concl with + Pred({p_info = [Table(n)]} as p, [v]) -> + term v; + print_string " may be inserted in a table"; + display_phase p + | Pred({p_info = [TableBin(n)]} as p, [v;v']) -> + term v; + print_string " (resp. "; + term v'; + print_string ") may be inserted in a table"; + display_phase p + | _ -> Parsing_helper.internal_error "Unexpected conclusion for InsertTag" + end; + print_string " at insert "; + Lang.display_occ occ + | _ -> Parsing_helper.internal_error "There should be at least one tag" + +end + + +module Std = DisplayFun(struct + let follow = false +end) + +module WithLinks = DisplayFun(struct + let follow = true +end) + +let display_term = Std.term +let display_term_list = Std.term_list +let display_fact = Std.fact +let display_constra = Std.constra + +let rec display_format = function + FFunApp(f,l) -> + begin + match f.f_cat with + Name { prev_inputs_meaning = sl } -> + display_idcl CName f.f_name; + print_string "["; + if (sl = []) || (!Param.tulafale = 1) then display_format_list l else display_name_list l sl; + print_string "]" + | Choice -> + display_idcl CKeyword f.f_name; + print_string "["; + display_format_list l; + print_string "]" + | _ -> + display_idcl CFun f.f_name; + if (l != []) || (f.f_name = "") || not (!Param.typed_frontend) then + begin + print_string "("; + display_format_list l; + print_string ")" + end + end + | FVar v -> display_idcl CVar (varname v) + | FAny v -> display_idcl CVar ("*" ^ (varname v)) + +and display_format_list l = display_list display_format "," l + +and display_name_list l sl = match (l,sl) with + [],[] -> () + | [a],[sa] -> + if sa <> MUnknown then + begin + print_string (meaning sa); print_string " = " + end; + display_format a + | (a::l),(sa::sl) -> + if sa <> MUnknown then + begin + print_string (meaning sa); print_string " = " + end; + display_format a; + print_string ","; + display_name_list l sl + | _ -> Parsing_helper.internal_error "prev_inputs_meaning should have the same length as the arguments of the name (format)" + + +let display_fact_format (chann,t) = + display_idcl CPred chann.p_name; + if not (!Param.typed_frontend) then print_string ":"; + if t != [] then + begin + if !Param.typed_frontend then print_string "("; + display_format_list t; + if !Param.typed_frontend then print_string ")" + end + +let display_hyp h = display_list_and display_fact h + +let display_constra_list c = display_list_and display_constra c + +let display_rule_nonewline (hyp, concl, hist, constra) = + display_constra_list constra; + if (constra != []) && (hyp != []) then + display_connective (Lang.and_connective()); + display_hyp hyp; + if (constra != []) || (hyp != []) then + display_connective Lang.impl_connective; + display_fact concl + +let display_rule r = + display_rule_nonewline r; + newline() +(* + TestUnifTag(occ): given only as first tag for clauses H /\ testunif(...) -> bad (for non_interference) + TestUnifTag2(occ): given only as first tag for clauses H /\ M<>M' -> bad (for pitranslweak) + TestTag(occ): test, associated to no hypothesis + InputTag(occ): input, associated with one hypothesis mess:... or attacker:... + ReplTag(occ,_): replication, associated with one hypothesis if non_interference and with two if + non_interference and key_compromise == 1 + OutputTag(occ): output, used as first tag for clauses H -> mess:... or H -> attacker:... + LetFilterFact: let suchthat, associated with one hypothesis [always followed by LetFilterTag(occ)] + LetFilterTag(occ): let suchthat, associated with no hypothesis + BeginEvent(occ): event, first tag for clauses H -> end:... + tag associated with no hypothesis + BeginFact: event, associated with one hypothesis begin:... [always followed by BeginEvent(occ)] + LetTag(occ): let, associated with no hypothesis + +clauses H -> input:... and H -> output:... for non_interference currently +have no tag for describing their conclusion +*) + +let rec display_hyp hyp tag = + match (hyp, tag) with + (_::h, TestUnifTag _ :: t) | (h, TestUnifTag2 _ :: t) | (h, TestTag _ :: t) + | (h, LetTag _ :: t) | (h, InputPTag _ :: t) | (h, OutputPTag _ :: t) + | (h, OutputTag _ :: t) | (h, InsertTag _ :: t) | (h, LetFilterTag _ :: t) + | (h, BeginEvent _ :: t) -> + display_hyp h t + | (h, ReplTag _ :: t) -> + if !Param.non_interference then + if !Param.key_compromise == 1 then + match h with + _::_::h' -> display_hyp h' t + | _ -> Parsing_helper.internal_error "2 hypotheses should be added for a replication for non_interference, key_compromise = 1" + else + match h with + _::h' -> display_hyp h' t + | _ -> Parsing_helper.internal_error "At least one hypothesis should be added for a replication for non_interference" + else + display_hyp h t + | (m::h,InputTag occ :: t) -> + display_hyp h t; + begin + match m with + Pred({p_info = [Attacker(n,_)]} as p, [v]) -> + print_string "the message "; + display_term v; + print_string " is received from the attacker"; + display_phase p; + print_string " at input "; + Lang.display_occ occ + | Pred({p_info = [Mess(n,_)]} as p, [vc;v]) -> + print_string "the message "; + display_term v; + print_string " is received on channel "; + display_term vc; + display_phase p; + print_string " at input "; + Lang.display_occ occ + | Pred({p_info = [AttackerBin(n,_)]} as p, [v;v']) -> + print_string "the message "; + display_term v; + print_string " (resp. "; + display_term v'; + print_string ") is received from the attacker"; + display_phase p; + print_string " at input "; + Lang.display_occ occ + | Pred({p_info = [MessBin(n,_)]} as p, [vc;v;vc';v']) -> + print_string "the message "; + display_term v; + print_string " is received on channel "; + display_term vc; + print_string " (resp. message "; + display_term v'; + print_string " on channel "; + display_term vc'; + print_string ")"; + display_phase p; + print_string " at input "; + Lang.display_occ occ + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for InputTag" + end; + print_string ","; + newline() + | (m::h, LetFilterFact :: LetFilterTag(occ) :: t) -> + display_hyp h t; + display_fact m; + print_string " is true at "; + Lang.display_occ occ; + print_string ","; + newline() + | (Out(e,_) ::h, BeginFact :: BeginEvent(occ) :: t) -> + display_hyp h t; + print_string "event "; + display_term e; + print_string " is executed at "; + Lang.display_occ occ; + print_string ","; + newline() + | (m::h,GetTag occ :: t) -> + display_hyp h t; + begin + match m with + Pred({p_info = [Table(n)]} as p, [v]) -> + print_string "the entry "; + display_term v; + print_string " is in a table"; + display_phase p; + print_string " at get "; + Lang.display_occ occ + | Pred({p_info = [TableBin(n)]} as p, [v;v']) -> + print_string "the entry "; + display_term v; + print_string " (resp. "; + display_term v'; + print_string ") is in a table"; + display_phase p; + print_string " at get "; + Lang.display_occ occ + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for GetTag" + end; + print_string ","; + newline() + | (h, GetTagElse occ :: t) -> + display_hyp h t + | ([],[]) -> () + | _ -> Parsing_helper.internal_error "Unexpected hypothesis" + +let rec empty_hyp hyp tags = + match hyp, tags with + (_::h, TestUnifTag _ :: t) | (h, TestUnifTag2 _ :: t) | (h, TestTag _ :: t) + | (h, LetTag _ :: t) | (h, InputPTag _ :: t) | (h, OutputPTag _ :: t) + | (h, OutputTag _ :: t) | (h, LetFilterTag _ :: t) | (h, InsertTag _ :: t) + | (h, BeginEvent _ :: t) -> empty_hyp h t + | (h, ReplTag _ :: t) -> + if !Param.non_interference then + if !Param.key_compromise == 1 then + match h with + _::_::h' -> empty_hyp h' t + | _ -> Parsing_helper.internal_error "2 hypotheses should be added for a replication for non_interference, key_compromise = 1" + else + match h with + _::h' -> empty_hyp h' t + | _ -> Parsing_helper.internal_error "At least one hypothesis should be added for a replication for non_interference" + else + empty_hyp h t + | [], _ -> true + | _ -> false + + +let display_rule_num ((hyp,concl,hist,constra) as rule) = + match hist with + Rule (n,lbl,_,_,_) -> + Lang.clause_item n; + display_rule_nonewline rule; + if !Param.verbose_explain_clauses = Param.ExplainedClauses then + begin + newline(); + Lang.start_cl CExplain; + begin + match lbl with + Rn _ -> print_string "(The attacker can create new names.)" + | Init -> print_string "(Initial knowledge of the attacker.)" + | PhaseChange -> print_string "(Knowledge is communicated from one phase to the next.)" + | TblPhaseChange -> print_string "(Tables are communicated from one phase to the next.)" + | TestDeterministic(f) -> + print_string ("(The destructor "); + display_function_name f; + print_string " is not deterministic)" + | TestTotal(f) -> + print_string ("(The destructor "); + display_function_name f; + print_string " is not total)" + | Apply(f,p) -> + print_string "(The attacker applies function "; + display_function_name f; + display_phase p; + print_string ".)" + | TestApply(f,p) -> + print_string "(The attacker tests whether "; + display_function_name f; + print_string " is applicable"; + display_phase p; + print_string ".)" + | TestEq(p) -> + print_string "(The attacker tests equality"; + display_phase p; + print_string ".)" + | Rl(p,p') -> + print_string "(The attacker can listen on all channels it has"; + display_phase p; + print_string ".)" + | Rs(p,p') -> + print_string "(The attacker can send messages it has on all channels it has"; + display_phase p; + print_string ".)" + | Ri(p,p') -> + print_string "(The attacker can input on all channels it has"; + display_phase p; + print_string ".)" + | Ro(p,p') -> + print_string "(The attacker can output on all channels it has"; + display_phase p; + print_string ".)" + | Rfail(p) -> + print_string "(The attacker can test the failure of a term)"; + display_phase p; + print_string ".)" + | TestComm(p,p') -> + print_string "(If an input and an output are done"; + display_phase p; + print_string ", then the attacker may know whether the communication succeeds.)" + | InputSecr p -> + print_string "(If an input on the secret is done"; + display_phase p; + print_string ", then the attacker may know whether the secret is a name.)" + | OutputSecr p -> + print_string "(If an output on the secret is done"; + display_phase p; + print_string ", then the attacker may know whether the secret is a name.)" + | WeakSecr -> + print_string "(The attacker has the weak secret in the first component, a guess in the second.)" + | Elem(pl,p) -> () + | TestUnif -> + print_string "(The attacker can test whether these terms unify.)" + | ProcessRule(tags, _) -> + if empty_hyp hyp tags && constra == [] then + begin + print_string "("; + Std.concl true concl tags; + print_string ".)" + end + else + begin + print_string "(If "; + display_hyp hyp tags; + if constra != [] then + begin + display_constra_list constra; + newline() + end; + print_string "then "; + Std.concl false concl tags; + print_string ".)"; + end + | LblEquiv -> + print_string "(This clause comes from a"; + display_connective Lang.eq1_connective; + print_string "or"; + display_connective Lang.eq2_connective; + print_string "declaration in the input file.)" + | LblClause -> + print_string "(This clause is given in the input file.)" + | LblEq -> + print_string "(Definition of equal.)" + | LblComp -> + print_string "(The attacker has all names created in the compromised sessions.)" + | LblNone -> () + end; + Lang.end_cl CExplain + end + | _ -> Lang.basic_item(); display_rule_nonewline rule + +let display_eq (leq, req) = + display_term leq; + display_connective "="; + display_term req + +let display_abbrev_table l = + print_string "Abbreviations:"; + display_item_list display_eq (List.rev l) + +let display_rule_num_abbrev rule = + if !Param.abbreviate_clauses then + begin + let abbrev_table,rule' = abbreviate_rule rule in + display_rule_num rule'; + newline(); + if abbrev_table != [] then + display_abbrev_table abbrev_table + end + else + begin + display_rule_num rule; + (* If a clause may be displayed on several lines, leave an empty line + between clauses *) + if !Param.verbose_explain_clauses = Param.ExplainedClauses then + newline() + end + +let display_initial_clauses l = + print_string Lang.start_list; + List.iter display_rule_num_abbrev l; + print_string Lang.end_list + + + +let display_red f l = + let collect = Std.collect_gen_vars in + + let display_diseq (t1,t2) = + let gen_vars = ref [] in + collect gen_vars t1; + collect gen_vars t2; + + if (!gen_vars <> []) then + begin + print_string "(forall "; + display_list (fun f -> display_idcl CFun f.f_name) "," (!gen_vars); + print_string ". " + end; + + display_term t1; + display_connective Lang.diff_connective; + display_term t2; + + if (!gen_vars <> []) then print_string ")" + + in + + List.iter (fun (leq, req,side) -> + display_term (FunApp(f,leq)); + display_connective Lang.red_connective; + display_term req; + if List.length side <> 0 + then + begin + print_string " if "; + display_list_and display_diseq side + end; + newline()) l + +(* Display functions *) + +let rec display_term2 = function + FunApp(f,l) -> + begin + match f.f_cat with + Name _ -> display_idcl CName f.f_name + | Choice -> + begin + match l with + [t1;t2] -> + if Terms.equal_terms t1 t2 then + display_term2 t1 + else + begin + display_idcl CKeyword "choice"; + print_string "["; + display_term_list2 l; + print_string "]" + end + | _ -> Parsing_helper.internal_error "Choice expects 2 arguments" + end + + | _ -> + match f.f_name with + "=" | "&&" | "||" | "<>" -> + (* Infix functions *) + begin + match l with + [t1;t2] -> + print_string "("; + display_term2 t1; + print_string " "; + display_idcl CFun (Lang.convert_funname f.f_name); + print_string " "; + display_term2 t2; + print_string ")" + | _ -> Parsing_helper.internal_error "infix operators should have 2 arguments" + end + | "if-then-else" -> + begin + match l with + [t1;t2;t3] -> + print_string "("; + display_idcl CKeyword "if"; + print_string " "; + display_term2 t1; + print_string " "; + display_idcl CKeyword "then"; + print_string " "; + display_term2 t2; + print_string " "; + display_idcl CKeyword "else"; + print_string " "; + display_term2 t3; + print_string ")" + | _ -> Parsing_helper.internal_error "if-then-else should have 3 arguments" + end + | _ -> + display_idcl CFun f.f_name; + if (l != []) || (f.f_name = "") || not (!Param.typed_frontend) then + begin + print_string "("; + display_term_list2 l; + print_string ")" + end + end + | Var v -> display_idcl CVar (varname v) + +and display_term_list2 l = display_list display_term2 "," l + + +let rec display_pattern = function + | PatVar b -> + display_idcl CVar (varname b); + if !Param.typed_frontend then + begin + print_string ": "; + display_idcl CType b.btype.tname + end + | PatTuple (f,l) -> + display_idcl CFun f.f_name; + if (l != []) || (f.f_name = "") || not (!Param.typed_frontend) then + begin + print_string "("; + display_pattern_list l; + print_string ")" + end + | PatEqual t -> + print_string "="; + display_term2 t + +and display_pattern_list = function + | [] -> () + | [h] -> display_pattern h + | h::t -> + display_pattern h; + print_string ","; + display_pattern_list t + +let display_fact2 = function + Pred(chann,t) -> + display_idcl CPred chann.p_name; + if not (!Param.typed_frontend) then print_string ":"; + if t != [] then + begin + if !Param.typed_frontend then print_string "("; + display_term_list2 t; + if !Param.typed_frontend then print_string ")" + end + | Out(t,l) -> + display_idcl CPred "begin"; + if !Param.typed_frontend then print_string "(" else print_string ":"; + display_term2 t; + List.iter (fun (v,t) -> + print_string (", " ^ (varname v) ^ " = "); + display_term2 t + ) l; + if !Param.typed_frontend then print_string ")" + +let rec may_have_else = function + Nil | Par _ -> false (* Par always introduces parentheses; whatever + there is inside will be surrounded by these parentheses so does not + need further parentheses *) + | Repl(p,_) -> may_have_else p + | Test _ | Let _ | LetFilter _ | Get _ -> true + | Restr(_,_,p,_) | Event(_,p,_) | Output(_,_,p,_) | Input(_,_,p,_) | Insert(_,p,_) + | Phase(_,p,_) -> may_have_else p + +let display_proc show_occ align proc = + let display_occ occ = + if show_occ then Lang.display_occ_ref occ + in + let rec display_process align proc = + match proc with + | Nil -> + print_string align; + display_idcl CKeyword "0"; + newline() + | Par _ -> + let rec dec_par = function + Par(p,p') -> (dec_par p) @ (dec_par p') + | p -> [p] + in + let l = dec_par proc in + print_string (align^"("); + newline(); + let rec display_par_list = function + [] -> Parsing_helper.internal_error "empty list of parallel processes" + | [p] -> + display_process (align^Lang.indentstring) p; + print_string (align^")"); + newline() + | p::l -> + display_process (align^Lang.indentstring) p; + print_string (align^") | ("); + newline(); + display_par_list l + in + display_par_list l + | Repl (p,occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "!"; + newline(); + display_process align p + | Restr (f, (args,_), p, occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "new"; + print_string " "; + display_idcl CName f.f_name; + begin + match args with + None -> () + | Some l -> + print_string "["; + display_list (fun b -> display_idcl CVar (varname b)) "," l; + print_string "]"; + end; + if !Param.typed_frontend then + begin + print_string ": "; + display_idcl CType (snd f.f_type).tname + end; + display_opt_process align p + | Test (t, p, p',occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "if"; + print_string " "; + display_term2 t; + print_string " "; + display_idcl CKeyword "then"; + newline(); + if (p' != Nil) then + begin + display_process_paren align p; + print_string align; + display_idcl CKeyword "else"; + newline(); + display_process (align^Lang.indentstring) p' + end + else + display_process align p; + | Input (t, pat, p,occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "in"; + print_string "("; + display_term2 t; + print_string ", "; + display_pattern pat; + print_string ")"; + display_opt_process align p + | Output (t, t', p, occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "out"; + print_string "("; + display_term2 t; + print_string ", "; + display_term2 t'; + print_string ")"; + display_opt_process align p + | Let (pat, t, p, p', occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "let"; + print_string " "; + display_pattern pat; + print_string " = "; + display_term2 t; + print_string " "; + display_idcl CKeyword "in"; + newline(); + if (p' = Nil) then + display_process align p + else + begin + display_process_paren align p; + print_string align; + display_idcl CKeyword "else"; + newline(); + display_process (align^Lang.indentstring) p' + end + | Event (f,p,occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "event"; + print_string " "; + display_term2 f; + display_opt_process align p + | Insert (f,p,occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "insert"; + print_string " "; + display_term2 f; + display_opt_process align p + | Get(pat,t,p,elsep,occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "get"; + print_string " "; + display_pattern pat; + begin + match t with + FunApp(f,[]) when f == Terms.true_cst -> () + | _ -> + print_string " "; display_idcl CKeyword "suchthat"; print_string " "; + display_term2 t; + end; + print_string " "; + display_idcl CKeyword "in"; + newline(); + if elsep = Nil then + display_process align p + else + begin + display_process_paren align p; + print_string align; + display_idcl CKeyword "else"; + newline(); + display_process (align^Lang.indentstring) elsep + end + | Phase(n,p,occ) -> + print_string align; + display_occ occ; + display_idcl CKeyword "phase"; + print_string (" " ^ (string_of_int n) ^ ";"); + newline(); + display_process align p + | LetFilter(lb,f,p,q,occ) -> + print_string align; + display_occ occ; + if lb != [] then + begin + display_idcl CKeyword "let"; + print_string " "; + let first = ref true in + List.iter (fun b -> + if !first then + first := false + else + print_string ", "; + print_string (varname b); + if !Param.typed_frontend then + print_string (": " ^ b.btype.tname) + ) lb; + print_string " "; + display_idcl CKeyword "suchthat"; + print_string " "; + display_fact2 f; + print_string " "; + display_idcl CKeyword "in" + end + else + begin + display_idcl CKeyword "if"; + print_string " "; + display_fact2 f; + print_string " "; + display_idcl CKeyword "then" + end; + newline(); + if (q <> Nil) then + begin + display_process_paren align p; + print_string align; + display_idcl CKeyword "else"; + newline(); + display_process (align^Lang.indentstring) q + end + else + display_process align p + and display_opt_process align p = + match p with + Nil -> newline() + | _ -> + print_string ";"; + newline(); + display_process align p + and display_process_paren align p = + if may_have_else p then + begin + print_string align; + print_string "("; + newline(); + display_process (align^Lang.indentstring) p; + print_string align; + print_string ")"; + newline() + end + else + display_process (align^Lang.indentstring) p + in + display_process align proc + +let display_process align proc = + display_proc false align proc + +let display_process_occ align proc = + display_proc true align proc + +(* Display a query *) + +let display_event = function + QSEvent(b, t) -> + if !Param.typed_frontend then + print_string (if b then "inj-event(" else "event(") + else + print_string (if b then "evinj:" else "ev:"); + display_term t; + if !Param.typed_frontend then print_string ")" + | QFact(p, tl) -> + display_idcl CPred p.p_name; + if not (!Param.typed_frontend) then print_string ":"; + if tl != [] then + begin + if !Param.typed_frontend then print_string "("; + display_term_list tl; + if !Param.typed_frontend then print_string ")" + end + | QNeq(t1,t2) -> + display_term t1; + display_connective Lang.diff_connective; + display_term t2 + | QEq(t1,t2) -> + display_term t1; + display_connective "="; + display_term t2 + +let rec display_corresp_query = function + Before(e, []) -> + display_idcl CKeyword "not "; + display_event e + | Before(e, a::l) -> + display_event e; + display_connective Lang.before_connective; + display_hyp_and a; + List.iter (fun b -> + display_connective (Lang.or_connective()); + display_hyp_and b) l + +and display_hyp_and = function + [] -> display_idcl CFun "true" + | (a::l) -> + if l != [] then print_string "("; + display_hyp_elem a; + List.iter (fun b -> + display_connective (Lang.and_connective()); + display_hyp_elem b) l; + if l != [] then print_string ")" + +and display_hyp_elem = function + QEvent e -> display_event e + | NestedQuery q -> print_string "("; display_corresp_query q; print_string ")" + +let display_corresp_putbegin_query = function + PutBegin(b, l) -> + display_idcl CKeyword "putbegin"; print_string " "; + if !Param.typed_frontend then + print_string (if b then "inj-event:" else "event:") + else + print_string (if b then "evinj:" else "ev:"); + display_list (fun f -> display_idcl CFun f.f_name) "," l + | RealQuery q -> display_corresp_query q + + +let display_eq_query = function + | DestructorQuery -> print_string "Deterministic and total destructors" + | ChoiceQuery -> print_string "Observational equivalence" + | NonInterfQuery l -> + print_string "Non-interference "; + display_list (fun (f, tset) -> + display_idcl CFun f.f_name; + match tset with + None -> () + | Some s -> + print_string " among ("; + display_list display_term ", " s; + print_string ")" + ) ", " l + | WeakSecret f -> + print_string "Weak secret "; + display_idcl CFun f.f_name + +(* History display *) + +let rec display_history_tree align ftree = + begin + match ftree.desc with + FEmpty -> print_string (align ^ "hypothesis "); + | FHAny -> print_string (align ^ "any ") + | FRemovedWithProof _ -> print_string (align ^ "duplicate ") + | FRule(n, descr, constra, hl) -> + print_string align; + if n = -1 then + begin + begin + match descr with + Elem(preds,p) -> + print_string "simplif "; display_idcl CPred p.p_name + | TestUnif -> + print_string "testunif" + | Apply(f,p) -> + print_string "apply "; + display_function_name f + | _ -> + Parsing_helper.internal_error "unsupported get_rule_hist" + end; + print_string " " + end + else + Lang.display_clause_link n + | FEquation(h) -> print_string (align ^ "equation ") + end; + WithLinks.fact ftree.thefact; + newline(); + begin + match ftree.desc with + FEmpty | FHAny | FRemovedWithProof _ -> () + | FRule(n, _, _, hl) -> List.iter (display_history_tree (align ^ Lang.indentstring)) hl + | FEquation(h) -> display_history_tree (align ^ Lang.indentstring) h + end + +(* History display with explanations linking it to the process *) + +let display_step n = + if n >= 0 then + begin + print_string "By "; + Lang.display_step_link n; + print_string ", " + end + +let display_step_low n = + if n >= 0 then + begin + print_string " by "; + Lang.display_step_link n + end + +let display_attacker_fact = function + Pred({p_info = [Attacker(n,_)]}, [v]) -> + WithLinks.term v; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | Pred({p_info = [AttackerBin(n,_)]}, [v;v']) -> + WithLinks.term v; + print_string " (resp. "; + WithLinks.term v'; + print_string ")"; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | Pred({p_info = [AttackerGuess _]}, [v;v']) -> + WithLinks.term v; + print_string " (resp. "; + WithLinks.term v'; + print_string ") in off-line phase" + | f -> + print_string "Error: "; display_fact f; + Parsing_helper.internal_error "Unexpected attacker fact in Display.display_attacker_fact" + +let display_tbl_fact = function + Pred({p_info = [Table(n)]}, [v]) -> + WithLinks.term v; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | Pred({p_info = [TableBin(n)]}, [v;v']) -> + WithLinks.term v; + print_string " (resp. "; + WithLinks.term v'; + print_string ")"; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | _ -> Parsing_helper.internal_error "Unexpected table fact" + +let display_input_fact = function + Pred({p_info = [InputP(n)]}, [v]) -> + WithLinks.term v; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | Pred({p_info = [InputPBin(n)]}, [v;v']) -> + WithLinks.term v; + print_string " (resp. "; + WithLinks.term v'; + print_string ")"; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | _ -> Parsing_helper.internal_error "Unexpected input fact" + +let display_output_fact = function + Pred({p_info = [OutputP(n)]}, [v]) -> + WithLinks.term v; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | Pred({p_info = [OutputPBin(n)]}, [v;v']) -> + WithLinks.term v; + print_string " (resp. "; + WithLinks.term v'; + print_string ")"; + if n > 0 then + print_string (" in phase " ^ (string_of_int n)) + | _ -> Parsing_helper.internal_error "Unexpected output fact" + +let display_attacker_hyp nl hl = + List.iter2 (fun n h -> + match h.thefact with + Pred({ p_info = [TestUnifP _] }, [v;v']) -> + print_string "The terms "; + WithLinks.term v; + print_string " and "; + WithLinks.term v'; + print_string" unify for some values of the secrets and not for others."; + newline() + | _ -> + display_step n; + print_string "the attacker may know "; + display_attacker_fact h.thefact; + print_string "."; + newline()) nl hl + +let display_tbl_hyp nl hl = + List.iter2 (fun n h -> + display_step n; + print_string "a table may contain the entry "; + display_tbl_fact h.thefact; + print_string "."; + newline()) nl hl + +let display_hyp_basic nl hl = + List.iter2 (fun n h -> + display_step n; + WithLinks.fact h.thefact; + print_string "."; + newline()) nl hl + +let display_hyp_spec = function + ReplTag (o,_) -> print_string "!"; print_string (string_of_int o) + | InputTag o -> print_string "i"; print_string (string_of_int o) + | BeginEvent o -> print_string "b"; print_string (string_of_int o) + | BeginFact -> print_string "bf" + | LetFilterTag o -> print_string "s"; print_string (string_of_int o) + | LetFilterFact -> print_string "sf" + | OutputTag o -> print_string "o"; print_string (string_of_int o) + | TestTag o -> print_string "t"; print_string (string_of_int o) + | LetTag o -> print_string "l"; print_string (string_of_int o) + | TestUnifTag o -> print_string "u"; print_string (string_of_int o) + | TestUnifTag2 o -> print_string "ud"; print_string (string_of_int o) + | InputPTag o -> print_string "ip"; print_string (string_of_int o) + | OutputPTag o -> print_string "op"; print_string (string_of_int o) + | InsertTag o -> print_string "it"; print_string (string_of_int o) + | GetTag o -> print_string "gt"; print_string (string_of_int o) + | GetTagElse o -> print_string "gte"; print_string (string_of_int o) + +let rec display_hyp hyp hl tag = + match (hyp, hl, tag) with + (Pred(p,[v;v'])::h, _::hl', TestUnifTag _ :: t) -> + display_hyp h hl' t; + print_string "The terms "; + WithLinks.term v; + print_string " and "; + WithLinks.term v'; + print_string" unify for some values of the secrets and not for others."; + newline() + | (h, hl, TestUnifTag2 _ :: t) | (h, hl, TestTag _ :: t) + | (h, hl, LetTag _ :: t) | (h, hl, InputPTag _ :: t) + | (h, hl, OutputPTag _ :: t) | (h, hl, BeginEvent _ :: t) + | (h, hl, OutputTag _ :: t) | (h, hl, InsertTag _ :: t) -> + display_hyp h hl t + | (h, hl, ReplTag _ :: t) -> + if !Param.non_interference then + if !Param.key_compromise == 1 then + match h, hl with + Pred(p, [v])::Pred(p', [v'])::h', s::s'::hl' -> + display_hyp h' hl' t; + display_step s; + print_string "the attacker may have the session identifier "; + WithLinks.term v; + display_phase p; + print_string "."; + newline(); + display_step s'; + print_string "the attacker may have the session identifier "; + WithLinks.term v'; + display_phase p'; + print_string "."; + newline() + | _ -> Parsing_helper.internal_error "2 hypotheses should be added for a replication for non_interference, key_compromise = 1" + else + match h, hl with + Pred(p, [v])::h', s::hl' -> + display_hyp h' hl' t; + display_step s; + print_string "the attacker may have the session identifier "; + WithLinks.term v; + display_phase p; + print_string "."; + newline() + | _ -> Parsing_helper.internal_error "At least one hypothesis should be added for a replication for non_interference" + else + display_hyp h hl t + | (m::h,s::hl,InputTag occ :: t) -> + display_hyp h hl t; + begin + match m with + Pred({p_info = [Attacker(n,_)]} as p, [v]) -> + print_string "The message "; + WithLinks.term v; + print_string " that the attacker may have"; + display_phase p; + display_step_low s; + print_string " may be received at input "; + Lang.display_occ occ + | Pred({p_info = [Mess(n,_)]} as p, [vc;v]) -> + print_string "The message "; + WithLinks.term v; + print_string " that may be sent on channel "; + WithLinks.term vc; + display_phase p; + display_step_low s; + print_string " may be received at input "; + Lang.display_occ occ + | Pred({p_info = [AttackerBin(n,_)]} as p, [v;v']) -> + print_string "The message "; + WithLinks.term v; + print_string " (resp. "; + WithLinks.term v'; + print_string ") that the attacker may have"; + display_phase p; + display_step_low s; + print_string " may be received at input "; + Lang.display_occ occ + | Pred({p_info = [MessBin(n,_)]} as p, [vc;v;vc';v']) -> + print_string "The message "; + WithLinks.term v; + print_string " that may be sent on channel "; + WithLinks.term vc; + print_string " (resp. message "; + WithLinks.term v'; + print_string " on channel "; + WithLinks.term vc'; + print_string ")"; + display_phase p; + display_step_low s; + print_string " may be received at input "; + Lang.display_occ occ + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for InputTag" + end; + print_string "."; + newline() + | (m::h, s::hl, LetFilterFact :: LetFilterTag(occ) :: t) -> + display_hyp h hl t; + display_step s; + WithLinks.fact m; + print_string " is true at "; + Lang.display_occ occ; + print_string "."; + newline() + | (h, hl, LetFilterTag(occ) :: t) -> + display_hyp h hl t + | (Out(e,l) ::h, s::hl, BeginFact :: BeginEvent(occ) :: t) -> + display_hyp h hl t; + print_string "The event "; + WithLinks.term e; + if l <> [] then + begin + print_string " (with environment "; + display_list (fun (v,t) -> + print_string ((varname v) ^ " = "); + WithLinks.term t) ", " l; + print_string ")" + end; + print_string " may be executed at "; + Lang.display_occ occ; + print_string "."; + newline() + | (m::h,s::hl,GetTag occ :: t) -> + display_hyp h hl t; + begin + match m with + Pred({p_info = [Table(n)]} as p, [v]) -> + print_string "The entry "; + WithLinks.term v; + print_string " that may be in a table"; + display_phase p; + display_step_low s; + print_string " may be read at get "; + Lang.display_occ occ + | Pred({p_info = [TableBin(n)]} as p, [v;v']) -> + print_string "The entry "; + WithLinks.term v; + print_string " (resp. "; + WithLinks.term v'; + print_string ") that may be in a table"; + display_phase p; + display_step_low s; + print_string " may be read at get "; + Lang.display_occ occ + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for GetTag" + end; + print_string "."; + newline() + | (h, l, GetTagElse occ :: t) -> + display_hyp h hl t + | ([],[],[]) -> () + | _ -> + display_list WithLinks.fact " & " hyp; + newline(); + display_list (fun n -> print_string (string_of_int n)) " " hl; + newline(); + display_list display_hyp_spec " " tag; + newline(); + Parsing_helper.internal_error "Unexpected hypothesis" + +let display_constra_list c = + if c <> [] then + begin + print_string "We have "; + display_list WithLinks.constra " & " c; + print_string "."; + newline() + end + + +let display_clause_explain n lbl hyp_num_list hl constra concl = + match lbl with + Rn _ -> + print_string "The attacker creates the new name "; + display_attacker_fact concl; + print_string "."; + newline() + | Init -> + print_string "The attacker initially knows "; + display_attacker_fact concl; + print_string "."; + newline() + | PhaseChange -> + display_attacker_hyp hyp_num_list hl; + print_string "So the attacker may know "; + display_attacker_fact concl; + print_string "."; + newline() + | TblPhaseChange -> + display_tbl_hyp hyp_num_list hl; + print_string "So a table may contain the entry "; + display_tbl_fact concl; + print_string "."; + newline() + | Apply(f,p) -> + display_attacker_hyp hyp_num_list hl; + print_string "Using the function "; + display_function_name f; + print_string " the attacker may obtain "; + display_attacker_fact concl; + print_string "."; + newline() + | TestDeterministic(f) -> + display_attacker_hyp hyp_num_list hl; + display_constra_list constra; + print_string "Test whether "; + display_function_name f; + print_string " is deterministic."; + newline() + | TestTotal(f) -> + display_attacker_hyp hyp_num_list hl; + display_constra_list constra; + print_string "Test whether "; + display_function_name f; + print_string " is total."; + newline() + | TestApply(f,p) -> + display_attacker_hyp hyp_num_list hl; + display_constra_list constra; + print_string "The attacker tests whether "; + display_function_name f; + print_string " is applicable, which may allow it to distinguish cases."; + newline() + | TestEq(p) -> + display_attacker_hyp hyp_num_list hl; + display_constra_list constra; + print_string "The attacker tests equality between the two terms he knows, which may allow it to distinguish cases."; + newline() + | Rl(p,p') -> + begin + match (hyp_num_list, hl) with + [n1;n2], [h1;h2] -> + display_step n2; + print_string "the attacker may have the channel "; + display_attacker_fact h2.thefact; + print_string "."; + newline(); + display_step n1; + print_string "the message "; + display_attacker_fact concl; + print_string " may be sent on this channel."; + newline(); + print_string "So the attacker may obtain the message "; + display_attacker_fact concl; + print_string " by listening on this channel."; + newline() + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for Rl" + end + | Rs(p,p') -> + begin + match (hyp_num_list, hl) with + [n1;n2], [h1;h2] -> + display_step n1; + print_string "the attacker may have the channel "; + display_attacker_fact h1.thefact; + print_string "."; + newline(); + display_step n2; + print_string "the attacker may have the message "; + display_attacker_fact h2.thefact; + print_string "."; + newline(); + print_string "So the attacker may send this message on this channel."; + newline() + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for Rs" + end + | Ri(p,p') -> + display_attacker_hyp hyp_num_list hl; + print_string "So the attacker may trigger an input on this channel."; + newline() + | Ro(p,p') -> + display_attacker_hyp hyp_num_list hl; + print_string "So the attacker may trigger an output on this channel."; + newline() + | Rfail(p) -> + display_attacker_hyp hyp_num_list hl; + print_string "So the attacker may test the failure of this term, which may allow it to distinguish cases."; + newline() + | TestComm(p,p') -> + begin + match (hyp_num_list, hl) with + n1::n2::_, h1::h2::r -> + display_step n1; + print_string "an input may be triggered on channel "; + display_input_fact h1.thefact; + print_string "."; + newline(); + display_step n2; + print_string "an output may be triggered on channel "; + display_output_fact h2.thefact; + print_string "."; + newline(); + begin + match r with + [] -> () + | [{thefact = Pred({ p_info = [TestUnifP _] }, [v;v'])}] -> + print_string "The terms "; + WithLinks.term v; + print_string " and "; + WithLinks.term v'; + print_string" unify for some values of the secrets and not for others."; + newline() + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for TestComm (2)" + end; + display_constra_list constra; + print_string "So the attacker may know whether the communication succeeds, which may allow it to distinguish cases."; + newline() + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for TestComm" + end + | InputSecr p -> + begin + match (hyp_num_list, hl) with + [n],[h] -> + display_step n; + print_string "an input may be triggered on channel "; + display_input_fact h.thefact; + print_string "."; + newline(); + print_string "Since this channel is secret, the attacker may know whether this secret is a name."; + newline() + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for InputSecr" + end + | OutputSecr p -> + begin + match (hyp_num_list, hl) with + [n],[h] -> + display_step n; + print_string "an output may be triggered on channel "; + display_output_fact h.thefact; + print_string "."; + newline(); + print_string "Since this channel is secret, the attacker may know whether this secret is a name."; + newline() + | _ -> Parsing_helper.internal_error "Unexpected hypothesis for InputSecr" + end + | WeakSecr -> + begin + match concl with + Pred(p, [v;v']) -> + print_string "The attacker has the weak secret "; + WithLinks.term v; + print_string " in the first component, a guess "; + WithLinks.term v'; + print_string " in the second."; + newline() + | _ -> Parsing_helper.internal_error "Unexpected conclusion for WeakSecr" + end + | LblEquiv -> + display_hyp_basic hyp_num_list hl; + display_constra_list constra; + print_string "Using a clause coming from a"; + display_connective Lang.eq1_connective; + print_string "or"; + display_connective Lang.eq2_connective; + print_string "declaration in the input file,"; + newline() + | LblClause -> + display_hyp_basic hyp_num_list hl; + display_constra_list constra; + print_string "Using a clause given in the input file,"; + newline() + | LblEq -> + print_string "By definition of equal,"; + newline() + | Elem _ | TestUnif | LblComp -> + Parsing_helper.internal_error "These tags should have been handled before" + | ProcessRule(tags, _) -> + if hl == [] && constra == [] then + WithLinks.concl true concl tags + else + begin + display_hyp (List.map (fun t -> t.thefact) hl) hyp_num_list tags; + display_constra_list constra; + print_string "So "; + WithLinks.concl false concl tags + end; + print_string "."; + newline() + | LblNone -> + display_hyp_basic hyp_num_list hl; + display_constra_list constra; + print_string ("Using the clause number " ^ (string_of_int n) ^ ","); + newline() + + +let explain_history_tree tree = + let seen_list = ref [] in + let rec find fact = function + [] -> + raise Not_found + | ((c,f)::l) -> + if Termslinks.equal_facts_with_links f fact then c else + find fact l + in + let count = ref 0 in + let rec display_history tree = + match tree.desc with + FEmpty -> + begin + match tree.thefact with + Out _ -> + seen_list := (-1, tree.thefact) :: (!seen_list); + -1 (* Do not display hypotheses "begin" *) + | _ -> + incr count; + seen_list := (!count, tree.thefact) :: (!seen_list); + (* print_string ((string_of_int (!count)) ^ ". We assume as hypothesis that"); *) + Lang.history_item (!count); + print_string "We assume as hypothesis that"; + newline(); + WithLinks.fact tree.thefact; + print_string "."; + newline(); + (!count) + end + | FHAny -> + incr count; + seen_list := (!count, tree.thefact) :: (!seen_list); + (*print_string ((string_of_int (!count)) ^ ". The attacker has some term "); *) + Lang.history_item (!count); + print_string "The attacker has some term "; + display_attacker_fact tree.thefact; + print_string "."; + newline(); + WithLinks.fact tree.thefact; + print_string "."; + newline(); + (!count) + | FRemovedWithProof t' -> + begin + try + find tree.thefact (!seen_list) + with Not_found -> + display_history t' + end + | FEquation(h) -> + let hyp_num = display_history h in + incr count; + seen_list := (!count, tree.thefact) :: (!seen_list); + (* print_string ((string_of_int (!count)) ^ ". "); *) + Lang.history_item (!count); + display_step hyp_num; + print_string "we have "; + WithLinks.fact h.thefact; + print_string "."; + newline(); + print_string "Using an equation, we obtain"; + newline(); + WithLinks.fact tree.thefact; + print_string "."; + newline(); + (!count) + | FRule(n, descr, constra, hl) -> + match descr with + Elem _ | TestUnif -> + (* Do not display clauses that conclude member, testunif *) + seen_list := (-1, tree.thefact) :: (!seen_list); + -1 + | LblComp -> + incr count; + Lang.history_item (!count); + print_string ("The attacker has all names created in the compromised sessions."); + newline(); + seen_list := (!count, tree.thefact) :: (!seen_list); + WithLinks.fact tree.thefact; + print_string "."; + newline(); + (!count) + | _ -> + let hyp_num_list = List.map display_history (List.rev hl) in + incr count; + Lang.history_item (!count); + seen_list := (!count, tree.thefact) :: (!seen_list); + display_clause_explain n descr (List.rev hyp_num_list) hl constra tree.thefact; + WithLinks.fact tree.thefact; + print_string "."; + newline(); + (!count) + in + print_string Lang.start_numbered_list; + ignore (display_history tree); + print_string Lang.end_numbered_list + +(* Convert the integer n into a string corresponding to (n+1)-th *) + +let order_of_int n = + (string_of_int (n+1)) ^ + ( + if (n>=10) && (n<14) then "th" else + match (n+1) mod 10 with + | 1 -> "st" + | 2 -> "nd" + | 3 -> "rd" + | _ -> "th") + +(* Display reduction step *) + +let display_step = function + RNil(n) -> print_string ((order_of_int n) ^" process: Reduction 0") + | RPar(n) -> print_string ((order_of_int n) ^" process: Reduction |") + | RRepl(n, cpn) -> print_string ((order_of_int n) ^" process: Reduction ! "^(string_of_int cpn)^" copy(ies)") + | RRestr(n, na, n') -> + print_string ((order_of_int n) ^" process: New " ^ na.f_name ^ " creating "); + display_term2 n' + | RLet1(n, pat, t) -> + print_string ((order_of_int n) ^" process: Let "); + display_pattern pat; + print_string " = "; + display_term2 t; + print_string " succeeds" + | RLet2(n, pat, t) -> + print_string ((order_of_int n) ^" process: Let "); + display_pattern pat; + print_string " = "; + display_term2 t; + print_string " fails" + | RInput(n, tc, pat, mess_term) -> + print_string ((order_of_int n) ^" process: In("); + display_term2 tc; + print_string ", "; + display_pattern pat; + print_string ") done with message "; + display_term2 mess_term + | ROutput1(n, tc, t) -> + print_string ((order_of_int n) ^" process: Out("); + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ") done" + | ROutput2(n, tc, t) -> + print_string ((order_of_int n) ^" process: Out("); + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ") "; + display_term2 tc; + print_string " not a channel" + | ROutput3 (n, tc, t) -> + print_string ((order_of_int n) ^" process: Out("); + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ") destructor fails" + | RTest1(n, t) -> + print_string ((order_of_int n) ^" process: If "); + display_term2 t; + print_string " succeeds" + | RTest2(n, t) -> + print_string ((order_of_int n) ^" process: If "); + display_term2 t; + print_string " fails" + | RTest3(n, t) -> + print_string ((order_of_int n) ^" process: If "); + display_term2 t; + print_string " destructor fails" + | RBegin1(n, t) -> + print_string ((order_of_int n) ^" process: Event("); + display_term2 t; + print_string ") executed" + | RBegin2(n, t) -> + print_string ((order_of_int n) ^" process: Event("); + display_term2 t; + print_string ") destructor fails or event blocks" + | REnd(n, t) -> + print_string ((order_of_int n) ^" process: Event("); + display_term2 t; + print_string ") is the goal" + | RPhase(n) -> + print_string ("Switching to phase " ^ (string_of_int n)) + | RLetFilter1(n, bl, f) -> + print_string ((order_of_int n) ^" process: let "); + let first = ref true in + List.iter (fun b -> + if !first then + first := false + else + print_string ", "; + print_string (varname b) + ) bl; + print_string " suchthat "; + display_fact2 f; + print_string " executed" + | RLetFilter2(n, bl, f) -> + print_string ((order_of_int n) ^" process: let "); + let first = ref true in + List.iter (fun b -> + if !first then + first := false + else + print_string ", "; + print_string (varname b) + ) bl; + print_string " suchthat "; + display_fact2 f; + print_string ": destructor fails or let...suchthat blocks" + | RLetFilter3(n, bl, f) -> + print_string ((order_of_int n) ^" process: let "); + let first = ref true in + List.iter (fun b -> + if !first then + first := false + else + print_string ", "; + print_string (varname b) + ) bl; + print_string " suchthat "; + display_fact2 f; + print_string ": let...suchthat fails" + | RIO(ninput, tc', pat, n, tc, t) -> + print_string ((order_of_int ninput) ^" process: In("); + display_term2 tc'; + print_string ", "; + display_pattern pat; + print_string ") reduces with "; + print_string ((order_of_int n) ^" process: out("); + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ")" + | RIO2(ninput, tc', pat, n, tc, t) -> + print_string ((order_of_int ninput) ^" process: In("); + display_term2 tc'; + print_string ", "; + display_pattern pat; + print_string ") reduces with "; + print_string ((order_of_int n) ^" process: out("); + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ") but input fails" + | RInsert1(n, t) -> + print_string ((order_of_int n) ^" process: Insert "); + display_term2 t; + print_string " done" + | RInsert2 (n, t) -> + print_string ((order_of_int n) ^" process: Insert "); + display_term2 t; + print_string " destructor fails" + | RGet(n, pat, t, m) -> + print_string ((order_of_int n) ^" process: Get "); + display_pattern pat; + begin + match t with + FunApp(f, []) when f == Terms.true_cst -> () + | _ -> print_string " suchthat "; display_term2 t + end; + print_string " done with entry "; + display_term2 m + | RGet2(n) -> + print_string ((order_of_int n) ^" process: else branch of Get taken "); + | RInit -> print_string "Initial state" + +let display_step_short display_loc = function + RInput(n, tc, pat, mess_term) -> + display_keyword "in"; + print_string "("; + display_term2 tc; + print_string ", "; + display_term2 mess_term; + print_string ")"; + display_loc n; + newline(); + newline() + | ROutput1(n, tc, t) -> + display_keyword "out"; + print_string "("; + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ")"; + display_loc n; + newline(); + newline() + | RBegin1(n, t) | REnd(n,t) -> + display_keyword "event"; + print_string "("; + display_term2 t; + print_string ")"; + display_loc n; + newline(); + newline() + | RRestr(n,na,n') -> + display_keyword "new "; + print_string na.f_name; + print_string " creating "; + display_term2 n'; + display_loc n; + newline(); + newline() + | RInsert1(n, t) -> + display_keyword "insert "; + display_term2 t; + display_loc n; + newline(); + newline() + | RGet(n, pat, t, m) -> + display_keyword "get "; + display_term2 m; + display_loc n; + newline(); + newline() + | RGet2(n) -> + display_keyword "get"; + print_string ": else branch taken"; + display_loc n; + newline(); + newline() + | RIO(ninput, tc', pat, n, tc, t) -> + display_keyword "out"; + print_string "("; + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ")"; + display_loc n; + print_string " received"; + display_loc ninput; + newline(); + newline() + | RIO2(ninput, tc', pat, n, tc, t) -> + display_keyword "out"; + print_string "("; + display_term2 tc; + print_string ", "; + display_term2 t; + print_string ")"; + display_loc n; + print_string " received"; + display_loc ninput; + print_string " (input fails)"; + newline(); + newline() + | _ -> () + +let display_bi_term (t1,t2) = + if Terms.equal_terms t1 t2 then + display_term2 t1 + else + begin + print_string "choice["; + display_term2 t1; + print_string ", "; + display_term2 t2; + print_string "]" + end + +(* Apply f to the n first elements of a list *) + +let rec itern f n = function + [] -> () + | (a::l) -> + if n > 0 then + begin + f a; + itern f (n-1) l + end + +(* TO DO display the additional entries in tables ? + Perhaps not necessary, since this is clear from the executed "insert" instructions. *) + +let rec display_reduc_state display_a display_state state = + if (not (!Param.display_init_state)) && (state.previous_state = None) then + (* Do not display the initial state; used when the + beginning of the trace has already been displayed *) + List.length state.public + else + let display_next_state = + match state.comment with + | RInput _ | RIO _ | RIO2 _ | RPhase _ -> true + | _ -> false + in + let display_cur_state = display_state || + match state.comment with + | RIO _ | RIO2 _ | RPhase _ -> true + | _ -> state.previous_state = None + in + let old_size_public = + match state.previous_state with + Some s -> display_reduc_state display_a display_next_state s + | None -> 0 + in + display_step state.comment; + newline (); + newline (); + let size_public = List.length state.public in + if size_public > old_size_public then + begin + print_string "Additional knowledge of the attacker:"; + print_string Lang.start_list; + itern (fun x -> + Lang.basic_item(); + display_a x) (size_public - old_size_public) state.public; + print_string Lang.end_list; + print_string Lang.hline + end; + if display_cur_state then + begin + print_string "New processes:"; + newline(); + let n = ref 0 in + if List.length state.subprocess > 1 then + begin + print_string "("; + newline() + end; + List.iter (fun (proc, _,_,_,_) -> + if !n > 0 then + begin + print_string ") | ("; + newline() + end; + display_process Lang.indentstring proc; + incr n) state.subprocess; + if List.length state.subprocess > 1 then + begin + print_string ")"; + newline() + end; + newline (); + print_string Lang.hline + end; + size_public + +let display_process_loc p = + match p with + (Test(_,_,_,occ) | Let(_,_,_,_,occ) | Input(_,_,_,occ) | Output(_,_,_,occ) | Restr(_,_,_,occ) | + LetFilter(_,_,_,_,occ) | Event(_,_,occ) | Insert(_,_,occ) | Get(_,_,_,_,occ)), + name_params, _, _, _ -> + print_string " at "; + display_occ occ; + let first = ref true in + List.iter (function + (MSid _, sid, Always) -> + if !first then print_string " in copy " else print_string ", "; + first := false; + display_term2 sid + | _ -> () + ) (List.rev name_params) + | _ -> Parsing_helper.internal_error "Unexpected process" + +let display_loc = function + LocAttacker -> + print_string " by the attacker" + | LocProcess(n,p) -> + match !Param.trace_display with + Param.NoDisplay | Param.ShortDisplay -> + display_process_loc p + | Param.LongDisplay -> + print_string (" in the " ^ (order_of_int n) ^ " process") + +let rec display_labeled_trace state = + if (!Param.display_init_state) || (state.previous_state != None) then + (* Do not display the initial state when the + beginning of the trace has already been displayed *) + begin + begin + match state.previous_state with + Some s -> display_labeled_trace s + | None -> () + end; + let display_loc n = + match state.previous_state with + None -> Parsing_helper.internal_error "Previous state should exist" + | Some s -> + display_process_loc (List.nth s.subprocess n) + in + display_step_short display_loc state.comment + end + +let display_explained_fact = function + Pred({p_info = [Attacker(n,_)]} as p, [v]) -> + print_string "The attacker has the message "; + display_term2 v; + display_phase p + | Pred({p_info = [Mess(n,_)]} as p, [vc;v]) -> + print_string "The message "; + display_term2 v; + print_string " is sent on channel "; + display_term2 vc; + display_phase p + | Pred({p_info = [AttackerBin(n,_)]} as p, [v;v']) -> + print_string "The attacker has the message "; + display_term2 v; + print_string " (resp. "; + display_term2 v'; + print_string ")"; + display_phase p + | Pred({p_info = [MessBin(n,_)]} as p, [vc;v;vc';v']) -> + print_string "The message "; + display_term2 v; + print_string " is sent on channel "; + display_term2 vc; + print_string " (resp. message "; + display_term2 v'; + print_string " on channel "; + display_term2 vc'; + print_string ")"; + display_phase p + | Pred(p, [e]) when p == Param.end_pred -> + print_string "The event "; + display_term2 e; + print_string " is executed" + | Pred(p, [e';e]) when p == Param.end_pred_inj -> + print_string "The event "; + display_term2 e; + print_string " is executed in session "; + display_term2 e' + | Pred({p_info = [InputP(n)]} as p, [e]) -> + print_string "An input is executed on channel "; + display_term2 e; + display_phase p + | Pred({p_info = [InputPBin(n)]} as p, [e;e']) -> + print_string "An input is executed on channel "; + display_term2 e; + print_string " (resp. "; + display_term2 e'; + print_string ")"; + display_phase p + | Pred({p_info = [OutputP(n)]} as p, [e]) -> + print_string "An output is executed on channel "; + display_term2 e; + display_phase p + | Pred({p_info = [OutputPBin(n)]} as p, [e;e']) -> + print_string "An output is executed on channel "; + display_term2 e; + print_string " (resp. "; + display_term2 e'; + print_string ")"; + display_phase p + | Pred({p_info = [Table(n)]} as p, [e]) -> + print_string "The table element "; + display_term2 e; + print_string " is present"; + display_phase p + | Pred({p_info = [TableBin(n)]} as p, [e;e']) -> + print_string "The table element "; + display_term2 e; + print_string " (resp. "; + display_term2 e'; + print_string ") is present"; + display_phase p + | _ -> Parsing_helper.internal_error "Unexpected goal" + + +let display_goal display_a noninterftest_to_string g hyp = + begin + match g with + Fact f -> + (* WithLinks.fact f; *) + display_explained_fact f; + print_string "."; + newline() + | InjGoal(f,sid',n) -> + begin + match f with + Pred(p, [e';e]) when p == Param.end_pred_inj -> + print_string "The event "; + display_term2 e; + print_string " is executed in session "; + display_term2 e'; + print_string " and in session "; + display_term2 sid'; + print_string "."; + newline() + | _ -> Parsing_helper.internal_error "InjGoal should have an injective event as argument" + end + | WeakSecrGoal(l, t, w1, w2) -> + print_string "The attacker tests whether "; + begin + match t with + FailTest t' -> + display_term2 t'; + print_string " is fail knowing " + | EqTest(t1,t2) -> + display_term2 t1; + print_string " = "; + display_term2 t2; + print_string " knowing " + end; + display_list (fun (t,b) -> + print_string ((varname b) ^ " = "); + display_term2 t) ", " l; + print_string "."; + newline(); + print_string "This allows the attacker to know whether "; + display_term2 w2; + print_string " = "; + display_term2 w1; + print_string "."; + newline() + | NonInterfGoal t -> + match t with + ProcessTest(hypspec,tl,loc) | InputProcessTest(hypspec,tl,_,loc)-> + begin + match !loc with + None -> Parsing_helper.internal_error "Location should have been filled" + | Some(n,p) -> + match !Param.trace_display with + Param.NoDisplay | Param.ShortDisplay -> + print_string ("A" ^ (noninterftest_to_string t)); + display_process_loc p; + print_string "." + | Param.LongDisplay -> + print_string ("The " ^ (order_of_int n) ^ (noninterftest_to_string t)); + print_string "." + end; + newline() + | ApplyTest(f,tl) -> + print_string "The attacker tries to apply "; + display_function_name f; + print_string " to the messages "; + display_list display_a ", " tl; + print_string " that he has."; + newline(); + print_string (noninterftest_to_string t); + newline() + | NIFailTest t' -> + print_string "The attacker tests whether "; + display_a t'; + print_string " is fail."; + newline(); + print_string (noninterftest_to_string t); + newline() + | CommTest(t1,t2,loc) -> + print_string "An input on channel "; + display_a t1; + print_string " and an output on channel "; + display_a t2; + print_string " are present simultaneously."; + newline(); + begin + match !loc with + None -> Parsing_helper.internal_error "Location should have been filled" + | Some(iloc,oloc) -> + print_string "(The input is performed"; + display_loc iloc; + print_string ";"; + newline(); + print_string "The output is performed"; + display_loc oloc; + print_string ".)"; + newline() + end; + print_string (noninterftest_to_string t); + newline() + | InputTest (t1,loc) -> + print_string "An input on channel "; + display_a t1; + print_string " is performed"; + begin + match !loc with + None -> Parsing_helper.internal_error "Location should have been filled" + | Some iloc -> display_loc iloc + end; + print_string "."; + newline(); + print_string (noninterftest_to_string t); + newline() + | OutputTest (t1, loc) -> + print_string "An output on channel "; + display_a t1; + print_string " is performed"; + begin + match !loc with + None -> Parsing_helper.internal_error "Location should have been filled" + | Some oloc -> display_loc oloc + end; + print_string "."; + newline(); + print_string (noninterftest_to_string t); + newline() + | NIEqTest(t1,t2) -> + print_string "The attacker tests whether "; + display_a t1; + print_string " = "; + display_a t2; + print_string "."; + newline(); + print_string (noninterftest_to_string t); + newline() + end; + if hyp = [] then + begin + print_string "A trace has been found."; + newline() + end + else + begin + print_string "A trace has been found, assuming the following hypothesis:"; + display_item_list WithLinks.fact hyp + end + +end + +module Html = LangDisp(LangHtml) + +module Text = LangDisp(LangText) + +module Def = +struct + + let print_line s = + if !Param.html_output then + Html.print_line s + else + Text.print_line s + +end diff --git a/preinstallTTool/linux/proverif/src/display.mli b/preinstallTTool/linux/proverif/src/display.mli new file mode 100644 index 0000000000000000000000000000000000000000..eb309bd3419c1016dfcd04e6b111b21dda3c43fa --- /dev/null +++ b/preinstallTTool/linux/proverif/src/display.mli @@ -0,0 +1,172 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +(* Return an abbreviated derivation and an association table where the names are abbreviated *) + +val abbreviate_derivation : fact_tree -> (term * term) list * fact_tree + +module LangHtml : +sig +val proverifurl : string ref +val openfile : string -> string -> unit +val close : unit -> unit +end + +(* Write HTML code in a file *) + +module Html : +sig +val print_string : string -> unit +val newline : unit -> unit +val print_line : string -> unit + +val display_occ : int -> unit +val display_keyword : string -> unit +val varname : binder -> string +val display_list : ('a -> unit) -> string -> 'a list -> unit +val display_item_list : ('a -> unit) -> 'a list -> unit +val display_term : term -> unit +val display_term_list : term list -> unit +val display_fact : fact -> unit +val display_fact_format : fact_format -> unit +val display_constra : constraints list -> unit +val display_constra_list : constraints list list -> unit +val display_rule_nonewline : reduction -> unit +val display_rule : reduction -> unit +val display_initial_clauses : reduction list -> unit +val display_eq : term * term -> unit +val display_red : funsymb -> (term list * term * (term * term) list) list -> unit + +val display_term2 : term -> unit +val display_pattern : pattern -> unit +val display_fact2 : fact -> unit +val display_process : string -> process -> unit +val display_process_occ : string -> process -> unit +val display_corresp_query : Pitypes.realquery -> unit +val display_corresp_putbegin_query : Pitypes.query -> unit +val display_eq_query : Pitypes.eq_query -> unit + +val display_function_name : funsymb -> unit +val display_phase : predicate -> unit + + +module WithLinks : + sig + val term : term -> unit + val term_list : term list -> unit + val fact : fact -> unit + val constra : constraints list -> unit + val constra_list : constraints list list -> unit + val concl : bool -> fact -> hypspec list -> unit + end + +val display_history_tree : string -> fact_tree -> unit +val explain_history_tree : fact_tree -> unit +val display_abbrev_table : (term * term) list -> unit + +val display_bi_term : term * term -> unit + +val display_reduc_state : + ('a -> unit) -> bool -> 'a Pitypes.reduc_state -> int +val display_labeled_trace : + 'a Pitypes.reduc_state -> unit +val display_goal : + ('a -> unit) -> ('a Pitypes.noninterf_test -> string) -> 'a Pitypes.goal_t -> fact list -> unit + +end + +(* Display text on standard output *) + +module Text : +sig +val print_string : string -> unit +val newline : unit -> unit +val print_line : string -> unit + +val display_occ : int -> unit +val display_keyword : string -> unit +val varname : binder -> string +val display_list : ('a -> unit) -> string -> 'a list -> unit +val display_item_list : ('a -> unit) -> 'a list -> unit +val display_term : term -> unit +val display_term_list : term list -> unit +val display_fact : fact -> unit +val display_fact_format : fact_format -> unit +val display_constra : constraints list -> unit +val display_constra_list : constraints list list -> unit +val display_rule_nonewline : reduction -> unit +val display_rule : reduction -> unit +val display_initial_clauses : reduction list -> unit +val display_eq : term * term -> unit +val display_red : funsymb -> (term list * term * (term * term) list) list -> unit + +val display_term2 : term -> unit +val display_pattern : pattern -> unit +val display_fact2 : fact -> unit +val display_process : string -> process -> unit +val display_process_occ : string -> process -> unit +val display_corresp_query : Pitypes.realquery -> unit +val display_corresp_putbegin_query : Pitypes.query -> unit +val display_eq_query : Pitypes.eq_query -> unit + +val display_function_name : funsymb -> unit +val display_phase : predicate -> unit + + +module WithLinks : + sig + val term : term -> unit + val term_list : term list -> unit + val fact : fact -> unit + val constra : constraints list -> unit + val constra_list : constraints list list -> unit + val concl : bool -> fact -> hypspec list -> unit + end + +val display_history_tree : string -> fact_tree -> unit +val explain_history_tree : fact_tree -> unit +val display_abbrev_table : (term * term) list -> unit + +val display_bi_term : term * term -> unit + +val display_reduc_state : + ('a -> unit) -> bool -> 'a Pitypes.reduc_state -> int +val display_labeled_trace : + 'a Pitypes.reduc_state -> unit +val display_goal : + ('a -> unit) -> ('a Pitypes.noninterf_test -> string) -> 'a Pitypes.goal_t -> fact list -> unit + +end + +(* Display either HTML or text depending on the settings *) + +module Def : +sig +val print_line : string -> unit +end diff --git a/preinstallTTool/linux/proverif/src/fileprint.cmi b/preinstallTTool/linux/proverif/src/fileprint.cmi new file mode 100644 index 0000000000000000000000000000000000000000..e138991c14fdc598934224de1f393b9ec7510a8f Binary files /dev/null and b/preinstallTTool/linux/proverif/src/fileprint.cmi differ diff --git a/preinstallTTool/linux/proverif/src/fileprint.cmx b/preinstallTTool/linux/proverif/src/fileprint.cmx new file mode 100644 index 0000000000000000000000000000000000000000..d548aae3f9703bc77bea860dfdfc32e2671852ea Binary files /dev/null and b/preinstallTTool/linux/proverif/src/fileprint.cmx differ diff --git a/preinstallTTool/linux/proverif/src/fileprint.ml b/preinstallTTool/linux/proverif/src/fileprint.ml new file mode 100644 index 0000000000000000000000000000000000000000..5e0fb6dd1aa70a62fd93f7ca45d9bdebe6658c1b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/fileprint.ml @@ -0,0 +1,88 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +let nice_tex = ref true + +let preamble = " +\\documentclass{article} +\\usepackage[latin1]{inputenc} +\\newcommand{\\kwl}[1]{\\mathbf{#1}} +\\newcommand{\\kwf}[1]{\\mathsf{#1}} +\\newcommand{\\kwc}[1]{\\mathsf{#1}} +\\newcommand{\\kwp}[1]{\\mathsf{#1}} +\\newcommand{\\kwt}[1]{\\mathsf{#1}} +\\newcommand{\\kwe}[1]{\\mathsf{#1}} +\\newcommand{\\kwtable}[1]{\\mathsf{#1}} +\\newcommand{\\var}[1]{\\mathit{#1}} +\\begin{document} +" + +let postamble = " +\\end{document} +" + +let printed_preamble = ref false + +let outfile = ref "" + +let outchannel = ref stdout + +let print_string s = + output_string (!outchannel) s + +let print_sanitize s = + for i = 0 to String.length s - 1 do + match s.[i] with + '\\' -> print_string "{\\textbackslash}" + | '&' -> print_string "\\ensuremath{\\&}" + | '{' -> print_string "\\ensuremath{\\{}" + | '}' -> print_string "\\ensuremath{\\}}" + | '_' -> print_string "{\\_}" + | '^' -> print_string "{\\string^}" + | '#' -> print_string "\\#" + | '$' -> print_string "\\$" + | '%' -> print_string "\\%" + | '@' -> print_string "{\\string@}" + | '~' -> print_string "{\\string~}" + | '>' -> print_string "\\ensuremath{>}" + | '<' -> print_string "\\ensuremath{<}" + | c -> output_char (!outchannel) c + done + +let print_preamble() = + if not (!printed_preamble) then + begin + printed_preamble := true; + print_string preamble + end + +let close () = + if (!printed_preamble) then + print_string postamble; + if (!outfile) != "" then + close_out (!outchannel) + diff --git a/preinstallTTool/linux/proverif/src/history.cmi b/preinstallTTool/linux/proverif/src/history.cmi new file mode 100644 index 0000000000000000000000000000000000000000..8b98b8d7a2a1fc2764ce350b1d43a32551316a3e Binary files /dev/null and b/preinstallTTool/linux/proverif/src/history.cmi differ diff --git a/preinstallTTool/linux/proverif/src/history.cmx b/preinstallTTool/linux/proverif/src/history.cmx new file mode 100644 index 0000000000000000000000000000000000000000..6db2c60c231eb51bcbf9d490a9c0d06c33644770 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/history.cmx differ diff --git a/preinstallTTool/linux/proverif/src/history.ml b/preinstallTTool/linux/proverif/src/history.ml new file mode 100644 index 0000000000000000000000000000000000000000..70a1ac34551651c8c7692384cefd485d03c7412b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/history.ml @@ -0,0 +1,460 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Parsing_helper +open Terms + +exception HistoryUnifyError + +(* add a rule and return its history *) + +let rule_hash = Hashtbl.create 7 + +let change_type_attacker p t = + match p.p_info with + [Attacker(n,_)] -> Param.get_pred (Attacker(n,t)) + | [AttackerBin(n,_)] -> Param.get_pred (AttackerBin(n,t)) + | [AttackerGuess _] -> Param.get_pred (AttackerGuess(t)) + | [Compromise _] -> Param.get_pred (Compromise(t)) + | [PolymPred(s,i,tl)] -> Param.get_pred (PolymPred(s,i,Terms.copy_n (List.length tl) t)) + | [] -> + if !Param.typed_frontend then + Parsing_helper.internal_error "Non-polymorphic user-defined predicates should not be declared data in the typed front-end" + else + p + | _ -> Parsing_helper.internal_error "Unexpected predicate in change_type_attacker" + +let get_rule_hist descr = + try + Hashtbl.find rule_hash descr + with Not_found -> + let (hyp,concl,constra,hdescr) = + match descr with + RElem(preds, ({ p_type = [t1;t2] } as p)) -> + let v = Terms.new_var_def t1 in + let v' = Terms.new_var_def t2 in + (List.map (fun p' -> Pred(change_type_attacker p' t1, [v])) preds, + Pred(p, [v;v']), + [], Elem(preds,p)) + | RApplyFunc(f,p) -> + let rec gen_vars n = + if n = 0 then + [] + else + (FunApp(f, Terms.var_gen (fst f.f_type))) :: (gen_vars (n-1)) + in + let concl = gen_vars (List.length p.p_type) in + let hypl = reorganize_fun_app f concl in + (List.map (fun h -> Pred((change_type_attacker p (Terms.get_term_type (List.hd h))), h)) hypl, + Pred((change_type_attacker p (Terms.get_term_type (List.hd concl))), concl), [], + Apply(f,p)) + | RApplyProj(f,nproj,p) -> + let rec gen_vars n = + if n = 0 then + [] + else + (FunApp(f, Terms.var_gen (fst f.f_type))) :: (gen_vars (n-1)) + in + let hyp = gen_vars (List.length p.p_type) in + let concl = List.nth (reorganize_fun_app f hyp) nproj in + ([Pred((change_type_attacker p (Terms.get_term_type (List.hd hyp))),hyp)], + Pred((change_type_attacker p (Terms.get_term_type (List.hd concl))), concl), [], + Apply(Terms.projection_fun(f,nproj+1), p)) + | _ -> + internal_error "unsupported get_rule_hist" + in + let hist = Rule(-1, hdescr, hyp, concl, constra) in + Hashtbl.add rule_hash descr hist; + hist + +(* History simplification *) + +(* We use a hash table that associates to each fact all trees that + derive it. To avoid recomputing hashes, we store them together with + the considered fact. *) + +module HashFact = + struct + + type t = + { hash : int; + fact : fact } + + let equal a b = Termslinks.equal_facts_with_links a.fact b.fact + + type skel_term = + SVar of int + | SFun of string * skel_term list + + type skel_fact = + SPred of string * skel_term list + | SOut of skel_term + + let rec skeleton_term = function + Var b -> + begin + match b.link with + TLink t -> skeleton_term t + | NoLink -> SVar(b.vname) + | _ -> Parsing_helper.internal_error "unexpected link in skeleton_term" + end + | FunApp(f,l) -> + match f.f_cat with + Name _ -> SFun(f.f_name,[]) + | _ -> SFun(f.f_name, List.map skeleton_term l) + + let skeleton_fact = function + Pred(p,l) -> SPred(p.p_name, List.map skeleton_term l) + | Out(t,_) -> SOut(skeleton_term t) + + let hash a = a.hash + + (* build a HashFact.t from a fact *) + + let build f = { hash = Hashtbl.hash(skeleton_fact f); + fact = f } + + end + +module TreeHashtbl = Hashtbl.Make(HashFact) + +let tree_hashtbl = TreeHashtbl.create 7 + +let seen_fact hf = + if !Param.simplify_derivation_level = Param.AllFacts then + TreeHashtbl.find tree_hashtbl hf + else + match hf.HashFact.fact with + Pred(p,_) when p.p_prop land Param.pred_ATTACKER != 0 -> + TreeHashtbl.find tree_hashtbl hf + | _ -> raise Not_found + (* Remove proofs of the same fact only for attacker facts, + several proofs of the same fact may be useful for attack + reconstruction for other facts: for mess facts, in particular + several outputs of the same message on the same channel + may be needed for private channels. *) + +let rec unroll_rwp t = + match t.desc with + FRemovedWithProof t' -> unroll_rwp t' + | _ -> t + +let equal_son t t' = + unroll_rwp t == unroll_rwp t' + +let seen_tree hf t = + if !Param.simplify_derivation_level != Param.AttackerSameTree then + begin + TreeHashtbl.add tree_hashtbl hf t; + t + end + else + match t.thefact with + Pred(p,_) when p.p_prop land Param.pred_ATTACKER != 0 -> + (* If t was already proved, it would have been removed by seen_fact when it + concludes an attacker fact *) + TreeHashtbl.add tree_hashtbl hf t; + t + | _ -> + try + let r = TreeHashtbl.find_all tree_hashtbl hf in + let t' = + List.find (fun t' -> + (match t.desc, t'.desc with + FHAny, FHAny -> true + | FEmpty, FEmpty -> true + | FRule(n, tags, constra, sons), FRule(n', tags', constra', sons') -> + (n == n') && (Termslinks.equal_tags tags tags') && (Termslinks.equal_constra constra constra') && + (List.length sons == List.length sons') && (List.for_all2 equal_son sons sons') + | FEquation son, FEquation son' -> + equal_son son son' + | FRemovedWithProof _, _ -> internal_error "Unexpected FRemovedWithProof" + | _ -> false) + ) r + in + { t with desc = FRemovedWithProof t' } + with Not_found -> + TreeHashtbl.add tree_hashtbl hf t; + t + +let rec simplify_tree t = + let hf = HashFact.build t.thefact in + match t.desc with + FRemovedWithProof t' -> + begin + try + { t with desc = FRemovedWithProof (TreeHashtbl.find tree_hashtbl hf) } + with Not_found -> + simplify_tree t' + end + | FHAny | FEmpty -> + begin + try + { t with desc = FRemovedWithProof (seen_fact hf) } + with Not_found -> + seen_tree hf t + end + | FRule(n, tags, constra, sons) -> + begin + try + { t with desc = FRemovedWithProof (seen_fact hf) } + with Not_found -> + let sons' = List.rev_map simplify_tree (List.rev sons) in + seen_tree hf { t with desc = FRule(n, tags, constra, sons') } + end + | FEquation son -> + begin + try + { t with desc = FRemovedWithProof (seen_fact hf) } + with Not_found -> + let son' = simplify_tree son in + seen_tree hf { t with desc = FEquation son' } + end + +(* Find hypothesis number n in the history tree *) + +type res = Success of fact_tree + | Failure of int + +let rec get_desc_rec t n = + match t.desc with + FEmpty -> if n = 0 then Success(t) else Failure(n-1) + | FHAny -> Failure(n) + | FRemovedWithProof _ -> Failure(n) + | FRule(_,_,_,l) -> get_desc_list_rec l n + | FEquation h -> get_desc_rec h n + +and get_desc_list_rec l n = + match l with + [] -> Failure(n) + | (a::l') -> + match get_desc_rec a n with + Success d -> Success d + | Failure n' -> get_desc_list_rec l' n' + + +let get_desc s t n = + match get_desc_rec t n with + Success d -> d + | Failure n' -> + print_string ("Hypothesis " ^ (string_of_int n) ^ " not found (" ^ s ^ ")\n"); + Display.Text.display_history_tree "" t; + internal_error ("failed to find history hypothesis (" ^ s ^ ")") + +(* Rebuild the derivation tree *) + +let rec build_fact_tree = function + Empty(f) -> + let tmp_bound_vars = !current_bound_vars in + current_bound_vars := []; + let f' = copy_fact2 f in + cleanup(); + current_bound_vars := tmp_bound_vars; + { desc = FEmpty; + thefact = f' } + | Any(n, h) -> + let t = build_fact_tree h in + let d = get_desc "any" t n in + begin + try + match d.thefact with + Pred(p, a::r) when p.p_prop land Param.pred_ANY_STRICT != 0 + && p.p_prop land Param.pred_ANY == 0 -> + (* The arguments of "any" facts must all be equal *) + List.iter (fun b -> unify a b) r + | _ -> () + with Unify -> raise HistoryUnifyError + end; + d.desc <- FHAny; + t + | Removed(rem_count, dup_count, h) -> + let t = build_fact_tree h in + let d1 = get_desc "removed" t rem_count in + let d2 = get_desc "removed" t dup_count in + begin + try + unify_facts d1.thefact d2.thefact + with Unify -> raise HistoryUnifyError + end; + d1.desc <- FRemovedWithProof d2; + t + | HEquation(n,leq,req,h) -> + let t = build_fact_tree h in + (* Copy the facts *) + let tmp_bound_vars = !current_bound_vars in + current_bound_vars := []; + let leq' = copy_fact2 leq in + let req' = copy_fact2 req in + cleanup(); + current_bound_vars := tmp_bound_vars; + if n = -1 then + begin + begin + try + unify_facts req' t.thefact + with Unify -> raise HistoryUnifyError + end; + { desc = FEquation(t); + thefact = leq' } + end + else + begin + let d = get_desc "equation" t n in + begin + try + unify_facts leq' d.thefact + with Unify -> raise HistoryUnifyError + end; + d.desc <- FEquation({ desc = FEmpty; + thefact = req' }); + t + end + | Rule(n,descr,hyp,concl,constra) -> + let tmp_bound = !current_bound_vars in + current_bound_vars := []; + let rhyp = List.map copy_fact hyp in + let rconcl = copy_fact concl in + let rconstra = List.map copy_constra constra in + let rdescr = + match descr with + ProcessRule(hypspec,name_params) -> + ProcessRule(hypspec,List.map copy_term name_params) + | x -> x + in + cleanup(); + current_bound_vars := tmp_bound; + { desc = FRule(n, rdescr, rconstra, List.map (fun f -> { desc = FEmpty; thefact = f }) rhyp); + thefact = rconcl } + | Resolution(h1, n, h2) -> + let t1 = build_fact_tree h1 in + let t2 = build_fact_tree h2 in + let d = get_desc "resolution" t2 n in + begin + try + unify_facts t1.thefact d.thefact + with Unify -> raise HistoryUnifyError + end; + d.desc <- t1.desc; + t2 + | TestUnifTrue(n, h2) -> + let t2 = build_fact_tree h2 in + let d = get_desc "test_unif_true" t2 n in + d.desc <- FRule(-1, TestUnif, [], []); + t2 + +let build_history (subgoals, orig_fact, hist_done, constra) = + assert (!current_bound_vars == []); + if not (!Param.reconstruct_derivation) then + begin + if !Param.typed_frontend then + Display.Text.print_line "I do not reconstruct derivations.\nIf you want to reconstruct them, add\n set reconstructDerivation = true. \nto your script." + else + Display.Text.print_line "I do not reconstruct derivations.\nIf you want to reconstruct them, add\n param reconstructDerivation = true. \nto your script."; + { desc = FEmpty; thefact = orig_fact } + end + else + try + let new_tree0 = build_fact_tree hist_done in + let new_tree1 = + if !Param.simplify_derivation then + begin + TreeHashtbl.clear tree_hashtbl; + let r = simplify_tree new_tree0 in + TreeHashtbl.clear tree_hashtbl; + r + end + else + new_tree0 + in + if !Param.html_output then + begin + incr Param.derivation_number; + let qs = string_of_int (!Param.derivation_number) in + if !Param.abbreviate_derivation then + begin + let (abbrev_table, new_tree2) = Display.abbreviate_derivation new_tree1 in + (* Display short derivation *) + Display.LangHtml.openfile ((!Param.html_dir) ^ "/derivation" ^ qs ^ ".html") ("ProVerif: derivation for query " ^ qs); + Display.Html.print_string "<H1>Derivation</H1>\n"; + if abbrev_table != [] then Display.Html.display_abbrev_table abbrev_table; + Display.Html.display_history_tree "" new_tree2; + Display.LangHtml.close(); + Display.Html.print_string ("<A HREF=\"derivation" ^ qs ^ ".html\">Derivation</A> "); + (* Display explained derivation *) + Display.LangHtml.openfile ((!Param.html_dir) ^ "/derivationexplained" ^ qs ^ ".html") ("ProVerif: derivation for query " ^ qs); + Display.Html.print_string "<H1>Explained derivation</H1>\n"; + if abbrev_table != [] then Display.Html.display_abbrev_table abbrev_table; + Display.Html.explain_history_tree new_tree2; + Display.LangHtml.close(); + Display.Html.print_string ("<A HREF=\"derivationexplained" ^ qs ^ ".html\">Explained derivation</A><br>\n") + end + else + begin + (* Display short derivation *) + Display.LangHtml.openfile ((!Param.html_dir) ^ "/derivation" ^ qs ^ ".html") ("ProVerif: derivation for query " ^ qs); + Display.Html.print_string "<H1>Derivation</H1>\n"; + Display.Html.display_history_tree "" new_tree1; + Display.LangHtml.close(); + Display.Html.print_string ("<A HREF=\"derivation" ^ qs ^ ".html\">Derivation</A> "); + (* Display explained derivation *) + Display.LangHtml.openfile ((!Param.html_dir) ^ "/derivationexplained" ^ qs ^ ".html") ("ProVerif: derivation for query " ^ qs); + Display.Html.print_string "<H1>Explained derivation</H1>\n"; + Display.Html.explain_history_tree new_tree1; + Display.LangHtml.close(); + Display.Html.print_string ("<A HREF=\"derivationexplained" ^ qs ^ ".html\">Explained derivation</A><br>\n") + end + end + else if !Param.display_derivation then + begin + if !Param.abbreviate_derivation then + let (abbrev_table, new_tree2) = Display.abbreviate_derivation new_tree1 in + if abbrev_table != [] then Display.Text.display_abbrev_table abbrev_table; + if !Param.explain_derivation then + Display.Text.explain_history_tree new_tree2 + else + Display.Text.display_history_tree "" new_tree2 + else + if !Param.explain_derivation then + Display.Text.explain_history_tree new_tree1 + else + Display.Text.display_history_tree "" new_tree1; + Display.Text.newline() + end; + new_tree1 + with HistoryUnifyError -> + if ((!Param.max_hyp) >= 0) || ((!Param.max_depth) >= 0) then + begin + print_string "You have probably found a false attack due to the limitations\non depth of terms and/or number of hypotheses.\nI do not know if there is a real attack.\n"; + if !Param.html_output then + Display.Html.print_line "You have probably found a false attack due to the limitations\non depth of terms and/or number of hypotheses.\nI do not know if there is a real attack."; + cleanup(); + { desc = FEmpty; thefact = orig_fact } + end + else + internal_error "Unification failed in history rebuilding" + diff --git a/preinstallTTool/linux/proverif/src/history.mli b/preinstallTTool/linux/proverif/src/history.mli new file mode 100644 index 0000000000000000000000000000000000000000..db93d29d97d6e620a0a31a6ab934d39bc9c38a6a --- /dev/null +++ b/preinstallTTool/linux/proverif/src/history.mli @@ -0,0 +1,29 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val get_rule_hist : Types.rulespec -> Types.history +val build_history : Types.reduction -> Types.fact_tree diff --git a/preinstallTTool/linux/proverif/src/lexer.cmi b/preinstallTTool/linux/proverif/src/lexer.cmi new file mode 100644 index 0000000000000000000000000000000000000000..c8b184aedaed267ce101a8dd7db04ce66b710b44 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/lexer.cmi differ diff --git a/preinstallTTool/linux/proverif/src/lexer.cmx b/preinstallTTool/linux/proverif/src/lexer.cmx new file mode 100644 index 0000000000000000000000000000000000000000..b7278184df7e411128be0fdef99322e313ac2b98 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/lexer.cmx differ diff --git a/preinstallTTool/linux/proverif/src/lexer.ml b/preinstallTTool/linux/proverif/src/lexer.ml new file mode 100644 index 0000000000000000000000000000000000000000..2b4b0df8fd660b1a582afadd08e12cc1f4956b5f --- /dev/null +++ b/preinstallTTool/linux/proverif/src/lexer.ml @@ -0,0 +1,347 @@ +# 28 "lexer.mll" + +open Parsing_helper +open Parser + +let create_hashtable size init = + let tbl = Hashtbl.create size in + List.iter (fun (key,data) -> Hashtbl.add tbl key data) init; + tbl + +(* Untyped front-end *) + +let keyword_table = + create_hashtable 11 +[ "fun", FUN; + "data", DATA; + "equation", EQUATION; + "reduc", REDUCTION; + "query", QUERY; + "nounif", NOUNIF; + "param", PARAM; + "not", NOT; + "elimtrue", ELIMTRUE; + "pred", PREDICATE +] + +(* Typed front-end *) + +let tkeyword_table = + create_hashtable 11 +[ "type", TYPE; + "name", NAME; + "fun", FUN; + "const", CONST; + "forall", FORALL; + "equation", EQUATION; + "clauses", CLAUSES; + "query", QUERY; + "nounif", NOUNIF; + "set", SET; + "not", NOT; + "elimtrue", ELIMTRUE; + "pred", PREDICATE +] + + +# 48 "lexer.ml" +let __ocaml_lex_tables = { + Lexing.lex_base = + "\000\000\233\255\234\255\236\255\237\255\238\255\078\000\000\000\ + \242\255\243\255\244\255\245\255\246\255\247\255\248\255\250\255\ + \001\000\076\000\095\000\002\000\005\000\255\255\251\255\241\255\ + \235\255\001\000\002\000\240\255\239\255\144\000\252\255\253\255\ + \006\000\254\255\051\000\255\255"; + Lexing.lex_backtrk = + "\255\255\255\255\255\255\255\255\255\255\255\255\022\000\022\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \006\000\003\000\002\000\001\000\000\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \001\000\255\255\003\000\255\255"; + Lexing.lex_default = + "\001\000\000\000\000\000\000\000\000\000\000\000\255\255\255\255\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \255\255\255\255\255\255\255\255\255\255\000\000\000\000\000\000\ + \000\000\255\255\255\255\000\000\000\000\030\000\000\000\000\000\ + \255\255\000\000\255\255\000\000"; + Lexing.lex_trans = + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\019\000\021\000\019\000\019\000\020\000\019\000\021\000\ + \033\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \019\000\000\000\019\000\000\000\000\000\000\000\009\000\000\000\ + \016\000\014\000\003\000\022\000\015\000\007\000\004\000\005\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\010\000\011\000\006\000\008\000\023\000\028\000\ + \027\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\013\000\035\000\012\000\000\000\000\000\ + \000\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\026\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\018\000\000\000\ + \000\000\000\000\000\000\025\000\024\000\000\000\000\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\000\000\033\000\000\000\000\000\032\000\000\000\000\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\034\000\000\000\000\000\000\000\018\000\000\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\000\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\000\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \031\000"; + Lexing.lex_check = + "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\000\000\000\000\019\000\000\000\000\000\019\000\020\000\ + \032\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\255\255\019\000\255\255\255\255\255\255\000\000\255\255\ + \000\000\000\000\000\000\016\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\007\000\025\000\ + \026\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\034\000\000\000\255\255\255\255\ + \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\006\000\017\000\017\000\017\000\017\000\ + \017\000\017\000\017\000\017\000\017\000\017\000\018\000\255\255\ + \255\255\255\255\255\255\006\000\006\000\255\255\255\255\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\255\255\029\000\255\255\255\255\029\000\255\255\255\255\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\029\000\255\255\255\255\255\255\018\000\255\255\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\255\255\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\255\255\018\000\ + \018\000\018\000\018\000\018\000\018\000\018\000\018\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \029\000"; + Lexing.lex_base_code = + ""; + Lexing.lex_backtrk_code = + ""; + Lexing.lex_default_code = + ""; + Lexing.lex_trans_code = + ""; + Lexing.lex_check_code = + ""; + Lexing.lex_code = + ""; +} + +let rec token lexbuf = + __ocaml_lex_token_rec lexbuf 0 +and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 76 "lexer.mll" + ( next_line lexbuf; token lexbuf ) +# 193 "lexer.ml" + + | 1 -> +# 78 "lexer.mll" + ( token lexbuf ) +# 198 "lexer.ml" + + | 2 -> +# 80 "lexer.mll" + ( let s = Lexing.lexeme lexbuf in + try + Hashtbl.find (if !Param.typed_frontend then tkeyword_table else keyword_table) s + with + Not_found -> + IDENT (s, extent lexbuf) + ) +# 209 "lexer.ml" + + | 3 -> +# 88 "lexer.mll" + ( + try + INT (int_of_string(Lexing.lexeme lexbuf)) + with Failure _ -> + input_error "Incorrect integer" (extent lexbuf) + ) +# 219 "lexer.ml" + + | 4 -> +# 94 "lexer.mll" + ( + comment lexbuf; + token lexbuf + ) +# 227 "lexer.ml" + + | 5 -> +# 98 "lexer.mll" + ( COMMA ) +# 232 "lexer.ml" + + | 6 -> +# 99 "lexer.mll" + ( LPAREN ) +# 237 "lexer.ml" + + | 7 -> +# 100 "lexer.mll" + ( RPAREN ) +# 242 "lexer.ml" + + | 8 -> +# 101 "lexer.mll" + ( LBRACKET ) +# 247 "lexer.ml" + + | 9 -> +# 102 "lexer.mll" + ( RBRACKET ) +# 252 "lexer.ml" + + | 10 -> +# 103 "lexer.mll" + ( SEMI ) +# 257 "lexer.ml" + + | 11 -> +# 104 "lexer.mll" + ( COLON ) +# 262 "lexer.ml" + + | 12 -> +# 105 "lexer.mll" + ( WEDGE ) +# 267 "lexer.ml" + + | 13 -> +# 106 "lexer.mll" + ( EQUAL ) +# 272 "lexer.ml" + + | 14 -> +# 107 "lexer.mll" + ( RED ) +# 277 "lexer.ml" + + | 15 -> +# 108 "lexer.mll" + ( EQUIV ) +# 282 "lexer.ml" + + | 16 -> +# 109 "lexer.mll" + ( EQUIVEQ ) +# 287 "lexer.ml" + + | 17 -> +# 110 "lexer.mll" + ( SLASH ) +# 292 "lexer.ml" + + | 18 -> +# 111 "lexer.mll" + ( DOT ) +# 297 "lexer.ml" + + | 19 -> +# 112 "lexer.mll" + ( STAR ) +# 302 "lexer.ml" + + | 20 -> +# 113 "lexer.mll" + ( DIFF ) +# 307 "lexer.ml" + + | 21 -> +# 114 "lexer.mll" + ( EOF ) +# 312 "lexer.ml" + + | 22 -> +# 115 "lexer.mll" + ( input_error "Illegal character" (extent lexbuf) ) +# 317 "lexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state + +and comment lexbuf = + __ocaml_lex_comment_rec lexbuf 29 +and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 118 "lexer.mll" + ( ) +# 328 "lexer.ml" + + | 1 -> +# 120 "lexer.mll" + ( next_line lexbuf; comment lexbuf ) +# 333 "lexer.ml" + + | 2 -> +# 121 "lexer.mll" + ( ) +# 338 "lexer.ml" + + | 3 -> +# 122 "lexer.mll" + ( comment lexbuf ) +# 343 "lexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state + +;; + diff --git a/preinstallTTool/linux/proverif/src/lexer.mll b/preinstallTTool/linux/proverif/src/lexer.mll new file mode 100644 index 0000000000000000000000000000000000000000..d4abe129540a659d0cf6227dd85e0034d83d5284 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/lexer.mll @@ -0,0 +1,122 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +{ +open Parsing_helper +open Parser + +let create_hashtable size init = + let tbl = Hashtbl.create size in + List.iter (fun (key,data) -> Hashtbl.add tbl key data) init; + tbl + +(* Untyped front-end *) + +let keyword_table = + create_hashtable 11 +[ "fun", FUN; + "data", DATA; + "equation", EQUATION; + "reduc", REDUCTION; + "query", QUERY; + "nounif", NOUNIF; + "param", PARAM; + "not", NOT; + "elimtrue", ELIMTRUE; + "pred", PREDICATE +] + +(* Typed front-end *) + +let tkeyword_table = + create_hashtable 11 +[ "type", TYPE; + "name", NAME; + "fun", FUN; + "const", CONST; + "forall", FORALL; + "equation", EQUATION; + "clauses", CLAUSES; + "query", QUERY; + "nounif", NOUNIF; + "set", SET; + "not", NOT; + "elimtrue", ELIMTRUE; + "pred", PREDICATE +] + +} + +rule token = parse + "\010" | "\013" | "\013\010" + { next_line lexbuf; token lexbuf } +| [ ' ' '\009' '\012' ] + + { token lexbuf } +| [ 'a'-'z' 'A'-'Z' ] (( [ 'a'-'z' 'A'-'Z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9' ] )*) + { let s = Lexing.lexeme lexbuf in + try + Hashtbl.find (if !Param.typed_frontend then tkeyword_table else keyword_table) s + with + Not_found -> + IDENT (s, extent lexbuf) + } +| ([ '0'-'9' ]) + + { + try + INT (int_of_string(Lexing.lexeme lexbuf)) + with Failure _ -> + input_error "Incorrect integer" (extent lexbuf) + } +| "(*" { + comment lexbuf; + token lexbuf + } +| ',' { COMMA } +| '(' { LPAREN } +| ')' { RPAREN } +| '[' { LBRACKET } +| ']' { RBRACKET } +| ';' { SEMI } +| ':' { COLON } +| '&' { WEDGE } +| '=' { EQUAL } +| "->" { RED } +| "<->" { EQUIV } +| "<=>" { EQUIVEQ } +| '/' { SLASH } +| '.' { DOT } +| '*' { STAR } +| "<>" { DIFF } +| eof { EOF } +| _ { input_error "Illegal character" (extent lexbuf) } + +and comment = parse +| "*)" { } +| "\010" | "\013" | "\013\010" + { next_line lexbuf; comment lexbuf } +| eof { } +| _ { comment lexbuf } diff --git a/preinstallTTool/linux/proverif/src/lexertotex.cmi b/preinstallTTool/linux/proverif/src/lexertotex.cmi new file mode 100644 index 0000000000000000000000000000000000000000..722ce586bab63385e7d54005c593524b6ba51b38 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/lexertotex.cmi differ diff --git a/preinstallTTool/linux/proverif/src/lexertotex.cmx b/preinstallTTool/linux/proverif/src/lexertotex.cmx new file mode 100644 index 0000000000000000000000000000000000000000..fc3665e1048cc28b79551d8eaaf8eedb52995a2e Binary files /dev/null and b/preinstallTTool/linux/proverif/src/lexertotex.cmx differ diff --git a/preinstallTTool/linux/proverif/src/lexertotex.ml b/preinstallTTool/linux/proverif/src/lexertotex.ml new file mode 100644 index 0000000000000000000000000000000000000000..913ee0a073f1dd0855a75d023e7eb7944618f271 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/lexertotex.ml @@ -0,0 +1,413 @@ +# 28 "lexertotex.mll" + +open Parsing_helper +open Piptree +open Fileprint + +type kind = + Keyword + | Fun + | Cst + | Pred + +let kinds = Hashtbl.create 7 + +let init_kinds d = + Hashtbl.iter (fun keyw _ -> Hashtbl.add kinds keyw "\\kwl") Pilexer.keyword_table; + List.iter (function + FunDecl((f,_),_,_) -> Hashtbl.add kinds f "\\kwf" + | DataFunDecl((f,_),_) -> Hashtbl.add kinds f "\\kwf" + | Reduc((((PFunApp((f,_),_) ,_),_)::_),_) -> Hashtbl.add kinds f "\\kwf" + | ReducFail((((PFunApp((f,_),_) ,_),_,_)::_),_) -> Hashtbl.add kinds f "\\kwf" + | PredDecl((p,_),_,_) -> Hashtbl.add kinds p "\\kwp" + | Free(l,_) -> List.iter (fun (c,_) -> Hashtbl.add kinds c "\\kwc") l + | _ -> ()) d + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + let ptree = + try + Piparser.all Pilexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + + +# 43 "lexertotex.ml" +let __ocaml_lex_tables = { + Lexing.lex_base = + "\000\000\228\255\229\255\078\000\000\000\235\255\236\255\237\255\ + \238\255\239\255\002\000\241\255\242\255\003\000\244\255\245\255\ + \246\255\004\000\001\000\077\000\096\000\002\000\253\255\187\000\ + \001\000\255\255\093\000\002\000\219\000\005\000\007\000\030\000\ + \032\000\063\000\064\000\249\255\074\000\105\000\109\000\146\000\ + \252\255\253\255\005\000\254\255\101\000\255\255"; + Lexing.lex_backtrk = + "\255\255\255\255\255\255\027\000\027\000\255\255\255\255\255\255\ + \255\255\255\255\015\000\255\255\255\255\012\000\255\255\255\255\ + \255\255\007\000\008\000\005\000\004\000\003\000\255\255\001\000\ + \000\000\255\255\255\255\255\255\255\255\021\000\024\000\255\255\ + \255\255\022\000\023\000\255\255\255\255\015\000\025\000\255\255\ + \255\255\255\255\001\000\255\255\003\000\255\255"; + Lexing.lex_default = + "\001\000\000\000\000\000\255\255\255\255\000\000\000\000\000\000\ + \000\000\000\000\255\255\000\000\000\000\255\255\000\000\000\000\ + \000\000\255\255\255\255\255\255\255\255\255\255\000\000\255\255\ + \255\255\000\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\000\000\255\255\255\255\255\255\040\000\ + \000\000\000\000\255\255\000\000\255\255\000\000"; + Lexing.lex_trans = + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\022\000\025\000\025\000\021\000\024\000\021\000\043\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \023\000\011\000\037\000\013\000\017\000\029\000\005\000\030\000\ + \018\000\016\000\007\000\035\000\017\000\004\000\008\000\009\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\ + \019\000\019\000\006\000\012\000\003\000\010\000\029\000\036\000\ + \029\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\015\000\034\000\014\000\033\000\033\000\ + \034\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\032\000\013\000\019\000\019\000\019\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\020\000\ + \038\000\037\000\032\000\031\000\030\000\038\000\045\000\000\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\031\000\030\000\043\000\000\000\000\000\042\000\ + \000\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\000\000\044\000\000\000\000\000\020\000\ + \000\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\028\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\000\ + \010\000\000\000\000\000\028\000\000\000\000\000\000\000\000\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\026\000\ + \010\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\013\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\013\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\041\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000"; + Lexing.lex_check = + "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\000\000\000\000\024\000\000\000\000\000\021\000\042\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\000\000\010\000\013\000\017\000\029\000\000\000\030\000\ + \000\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\004\000\010\000\ + \027\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\031\000\000\000\032\000\033\000\ + \034\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\003\000\000\000\019\000\019\000\019\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\020\000\ + \036\000\037\000\026\000\003\000\003\000\038\000\044\000\255\255\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\026\000\026\000\039\000\255\255\255\255\039\000\ + \255\255\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\255\255\039\000\255\255\255\255\020\000\ + \255\255\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\023\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \023\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\023\000\ + \023\000\255\255\255\255\028\000\255\255\255\255\255\255\255\255\ + \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \028\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\028\000\ + \028\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\023\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\028\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\039\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255"; + Lexing.lex_base_code = + ""; + Lexing.lex_backtrk_code = + ""; + Lexing.lex_default_code = + ""; + Lexing.lex_trans_code = + ""; + Lexing.lex_check_code = + ""; + Lexing.lex_code = + ""; +} + +let rec token lexbuf = + __ocaml_lex_token_rec lexbuf 0 +and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 71 "lexertotex.mll" + ( print_string "$\\\\\n$"; token lexbuf ) +# 209 "lexertotex.ml" + + | 1 -> +# 73 "lexertotex.mll" + ( print_string "\\ "; token lexbuf ) +# 214 "lexertotex.ml" + + | 2 -> +# 75 "lexertotex.mll" + ( print_string "\\qquad\\qquad "; token lexbuf ) +# 219 "lexertotex.ml" + + | 3 -> +# 77 "lexertotex.mll" + ( token lexbuf ) +# 224 "lexertotex.ml" + + | 4 -> +# 79 "lexertotex.mll" + ( + let s = Lexing.lexeme lexbuf in + begin + try + let k = Hashtbl.find kinds s in + print_string (k ^ "{"); + print_sanitize s; + print_string "}" + with Not_found -> + print_string "\\var{"; + print_sanitize s; + print_string "}" + end; + token lexbuf + ) +# 243 "lexertotex.ml" + + | 5 -> +# 95 "lexertotex.mll" + ( print_string (Lexing.lexeme lexbuf); token lexbuf ) +# 248 "lexertotex.ml" + + | 6 -> +# 96 "lexertotex.mll" + ( + print_string "\\textit{(*"; + comment lexbuf + ) +# 256 "lexertotex.ml" + + | 7 -> +# 100 "lexertotex.mll" + ( print_string ", "; token lexbuf ) +# 261 "lexertotex.ml" + + | 8 -> +# 101 "lexertotex.mll" + ( print_string "("; token lexbuf ) +# 266 "lexertotex.ml" + + | 9 -> +# 102 "lexertotex.mll" + ( print_string ")"; token lexbuf ) +# 271 "lexertotex.ml" + + | 10 -> +# 103 "lexertotex.mll" + ( print_string "["; token lexbuf ) +# 276 "lexertotex.ml" + + | 11 -> +# 104 "lexertotex.mll" + ( print_string "]"; token lexbuf ) +# 281 "lexertotex.ml" + + | 12 -> +# 105 "lexertotex.mll" + ( print_string "\\mid"; token lexbuf ) +# 286 "lexertotex.ml" + + | 13 -> +# 106 "lexertotex.mll" + ( print_string ";"; token lexbuf ) +# 291 "lexertotex.ml" + + | 14 -> +# 107 "lexertotex.mll" + ( print_string "!"; token lexbuf ) +# 296 "lexertotex.ml" + + | 15 -> +# 108 "lexertotex.mll" + ( print_string " = "; token lexbuf ) +# 301 "lexertotex.ml" + + | 16 -> +# 109 "lexertotex.mll" + ( print_string "/"; token lexbuf ) +# 306 "lexertotex.ml" + + | 17 -> +# 110 "lexertotex.mll" + ( print_string "."; token lexbuf ) +# 311 "lexertotex.ml" + + | 18 -> +# 111 "lexertotex.mll" + ( print_string "*"; token lexbuf ) +# 316 "lexertotex.ml" + + | 19 -> +# 112 "lexertotex.mll" + ( print_string "{:}"; token lexbuf ) +# 321 "lexertotex.ml" + + | 20 -> +# 113 "lexertotex.mll" + ( print_string "\\&"; token lexbuf ) +# 326 "lexertotex.ml" + + | 21 -> +# 114 "lexertotex.mll" + ( print_string (if !nice_tex then "\\rightarrow" else "\\ {-}{>}\\ "); token lexbuf ) +# 331 "lexertotex.ml" + + | 22 -> +# 115 "lexertotex.mll" + ( print_string (if !nice_tex then "\\leftrightarrow" else "\\ {<}{-}{>}\\ "); token lexbuf ) +# 336 "lexertotex.ml" + + | 23 -> +# 116 "lexertotex.mll" + ( print_string (if !nice_tex then "\\Leftrightarrow" else "\\ {<}{=}{>}\\ "); token lexbuf ) +# 341 "lexertotex.ml" + + | 24 -> +# 117 "lexertotex.mll" + ( print_string (if !nice_tex then "\\neq" else "\\ {<}{>}\\ "); token lexbuf ) +# 346 "lexertotex.ml" + + | 25 -> +# 118 "lexertotex.mll" + ( print_string (if !nice_tex then "\\Longrightarrow" else "\\ {=}{=}{>}\\ "); token lexbuf ) +# 351 "lexertotex.ml" + + | 26 -> +# 119 "lexertotex.mll" + ( print_string "$\n\\end{tabbing}\n" ) +# 356 "lexertotex.ml" + + | 27 -> +# 120 "lexertotex.mll" + ( input_error "Illegal character" (extent lexbuf) ) +# 361 "lexertotex.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state + +and comment lexbuf = + __ocaml_lex_comment_rec lexbuf 39 +and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 123 "lexertotex.mll" + ( print_string "*)}"; + token lexbuf ) +# 373 "lexertotex.ml" + + | 1 -> +# 126 "lexertotex.mll" + ( print_string "}$\\\\\n$\\textit{"; comment lexbuf ) +# 378 "lexertotex.ml" + + | 2 -> +# 127 "lexertotex.mll" + ( print_string "}$\n\\end{tabbing}\n" ) +# 383 "lexertotex.ml" + + | 3 -> +# 128 "lexertotex.mll" + ( print_sanitize (Lexing.lexeme lexbuf); comment lexbuf ) +# 388 "lexertotex.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state + +;; + +# 130 "lexertotex.mll" + + +let convert filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + print_preamble(); + print_string "\\begin{tabbing}\n$"; + token lexbuf; + close_in ic + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +let converttotex f = + let d,_ = parse f in + init_kinds d; + convert f + + +# 414 "lexertotex.ml" diff --git a/preinstallTTool/linux/proverif/src/lexertotex.mll b/preinstallTTool/linux/proverif/src/lexertotex.mll new file mode 100644 index 0000000000000000000000000000000000000000..af15dbce3aa7fb85e3876ec293ebde10dbf73069 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/lexertotex.mll @@ -0,0 +1,148 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +{ +open Parsing_helper +open Piptree +open Fileprint + +type kind = + Keyword + | Fun + | Cst + | Pred + +let kinds = Hashtbl.create 7 + +let init_kinds d = + Hashtbl.iter (fun keyw _ -> Hashtbl.add kinds keyw "\\kwl") Pilexer.keyword_table; + List.iter (function + FunDecl((f,_),_,_) -> Hashtbl.add kinds f "\\kwf" + | DataFunDecl((f,_),_) -> Hashtbl.add kinds f "\\kwf" + | Reduc((((PFunApp((f,_),_) ,_),_)::_),_) -> Hashtbl.add kinds f "\\kwf" + | ReducFail((((PFunApp((f,_),_) ,_),_,_)::_),_) -> Hashtbl.add kinds f "\\kwf" + | PredDecl((p,_),_,_) -> Hashtbl.add kinds p "\\kwp" + | Free(l,_) -> List.iter (fun (c,_) -> Hashtbl.add kinds c "\\kwc") l + | _ -> ()) d + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + let ptree = + try + Piparser.all Pilexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +} + +rule token = parse + "\010" | "\013" | "\013\010" + { print_string "$\\\\\n$"; token lexbuf } +| ' ' + { print_string "\\ "; token lexbuf } +| '\009' + { print_string "\\qquad\\qquad "; token lexbuf } +| [ '\012' ] + + { token lexbuf } +| [ 'a'-'z' 'A'-'Z' ] (( [ 'a'-'z' 'A'-'Z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9' ] )*) + { + let s = Lexing.lexeme lexbuf in + begin + try + let k = Hashtbl.find kinds s in + print_string (k ^ "{"); + print_sanitize s; + print_string "}" + with Not_found -> + print_string "\\var{"; + print_sanitize s; + print_string "}" + end; + token lexbuf + } +| ([ '0'-'9' ]) + + { print_string (Lexing.lexeme lexbuf); token lexbuf } +| "(*" { + print_string "\\textit{(*"; + comment lexbuf + } +| ',' (' ' *) { print_string ", "; token lexbuf } +| '(' { print_string "("; token lexbuf } +| ')' { print_string ")"; token lexbuf } +| '[' { print_string "["; token lexbuf } +| ']' { print_string "]"; token lexbuf } +| (' ' *) '|' (' ' *) { print_string "\\mid"; token lexbuf } +| ';' { print_string ";"; token lexbuf } +| '!' { print_string "!"; token lexbuf } +| (' ' *) '=' (' ' *) { print_string " = "; token lexbuf } +| '/' { print_string "/"; token lexbuf } +| '.' { print_string "."; token lexbuf } +| '*' { print_string "*"; token lexbuf } +| ':' { print_string "{:}"; token lexbuf } +| '&' { print_string "\\&"; token lexbuf } +| (' ' *) "->" (' ' *) { print_string (if !nice_tex then "\\rightarrow" else "\\ {-}{>}\\ "); token lexbuf } +| (' ' *) "<->" (' ' *) { print_string (if !nice_tex then "\\leftrightarrow" else "\\ {<}{-}{>}\\ "); token lexbuf } +| (' ' *) "<=>" (' ' *) { print_string (if !nice_tex then "\\Leftrightarrow" else "\\ {<}{=}{>}\\ "); token lexbuf } +| (' ' *) "<>" (' ' *) { print_string (if !nice_tex then "\\neq" else "\\ {<}{>}\\ "); token lexbuf } +| (' ' *) "==>" (' ' *) { print_string (if !nice_tex then "\\Longrightarrow" else "\\ {=}{=}{>}\\ "); token lexbuf } +| eof { print_string "$\n\\end{tabbing}\n" } +| _ { input_error "Illegal character" (extent lexbuf) } + +and comment = parse +| "*)" { print_string "*)}"; + token lexbuf } +| "\010" | "\013" | "\013\010" + { print_string "}$\\\\\n$\\textit{"; comment lexbuf } +| eof { print_string "}$\n\\end{tabbing}\n" } +| _ { print_sanitize (Lexing.lexeme lexbuf); comment lexbuf } + +{ + +let convert filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + print_preamble(); + print_string "\\begin{tabbing}\n$"; + token lexbuf; + close_in ic + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +let converttotex f = + let d,_ = parse f in + init_kinds d; + convert f + +} diff --git a/preinstallTTool/linux/proverif/src/main.cmi b/preinstallTTool/linux/proverif/src/main.cmi new file mode 100644 index 0000000000000000000000000000000000000000..bd9ddf817b9ee267e65baf181f4575d9bb4889fd Binary files /dev/null and b/preinstallTTool/linux/proverif/src/main.cmi differ diff --git a/preinstallTTool/linux/proverif/src/main.cmx b/preinstallTTool/linux/proverif/src/main.cmx new file mode 100644 index 0000000000000000000000000000000000000000..4acc94aa6b0f5b8ee0507d5cb8e44a3772abfd50 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/main.cmx differ diff --git a/preinstallTTool/linux/proverif/src/main.ml b/preinstallTTool/linux/proverif/src/main.ml new file mode 100644 index 0000000000000000000000000000000000000000..299859f5fcebb8db121229c69c142a7091d5d885 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/main.ml @@ -0,0 +1,793 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Parsing_helper + +type out_pos = + Spass + | Solve + +type in_pos = + Horn + | HornType + | SpassIn + | Pi + | PiType + | Default + +let gc = ref false + +let out_kind = ref Solve + +let in_kind = ref Default + +let out_file = ref "" + +let out_n = ref 0 + +let up_out = function + "spass" -> Spass + | "solve" -> Solve + | _ -> Parsing_helper.user_error "-out should be followed by spass or solve\n" + +let up_in = function + "horn" -> Horn + | "horntype" -> HornType + | "spass" -> SpassIn + | "pi" -> Pi + | "pitype" -> PiType + | _ -> Parsing_helper.user_error "-in should be followed by horn, horntype, spass, pi, or pitype\n" + +exception Is_equivalent + +let interference_analysis rulelist queries = + if (TermsEq.hasEquations()) && (not (!Param.weaksecret_mode)) then + Parsing_helper.input_warning "using \"noninterf\" in the presence of equations may yield many\nfalse attacks. If you observe false attacks, try to code the desired\nproperty using \"choice\" instead." Parsing_helper.dummy_ext; + let result = Rules.bad_derivable rulelist in + if result = [] then + begin + Display.Text.print_string "RESULT "; + Display.Text.display_eq_query queries; + Display.Text.print_line " is true (bad not derivable)."; + if !Param.html_output then + begin + Display.Html.print_string "<span class=\"result\">RESULT "; + Display.Html.display_eq_query queries; + Display.Html.print_line " is <span class=\"trueresult\">true (bad not derivable)</span>.</span>" + end; + raise Is_equivalent + + end + else + begin + let l = List.map (fun rule -> + Display.Text.print_string "goal reachable: "; + Display.Text.display_rule rule; + if !Param.html_output then + begin + Display.Html.print_string "goal reachable: "; + Display.Html.display_rule rule + end; + let new_tree = History.build_history rule in + let r = + (* For weak secrets, the reconstructed attack really falsifies the + equivalence; for other equivalences, it just reaches the program + point at which we find the first difference of execution, which + does not guarantee that the equivalence is false *) + if (!Param.reconstruct_trace) && (!Param.reconstruct_derivation) then + if (!Param.weaksecret != None) then + Reduction.do_reduction None None new_tree + else if (!Param.non_interference) then + begin + ignore (Reduction.do_reduction None None new_tree); + false + end + else if (!Param.has_choice) then + begin + ignore (Reduction_bipro.do_reduction new_tree); + false + end + else + false + else + false + in + Terms.cleanup(); + r + ) result + in + Display.Text.print_string "RESULT "; + Display.Text.display_eq_query queries; + if List.exists (fun x -> x) l then + Display.Text.print_line " is false." + else + Display.Text.print_line " cannot be proved (bad derivable)."; + if !Param.html_output then + begin + Display.Html.print_string "<span class=\"result\">RESULT "; + Display.Html.display_eq_query queries; + if List.exists (fun x -> x) l then + Display.Html.print_line " is <span class=\"falseresult\">false</span>.</span>" + else + Display.Html.print_line " <span class=\"unknownresult\">cannot be proved (bad derivable)</span>.</span>" + end + end + + +let out solve query_to_facts clauses queries = + match !out_kind with + Solve -> + solve clauses queries + | Spass -> + if !out_file = "" then + Parsing_helper.user_error "Error: you should provide the output filename by the option -o <filename>\n"; + incr out_n; + let out_name = !out_file ^ + (if !out_n = 1 then "" else string_of_int (!out_n)) in + Spassout.main out_name clauses (query_to_facts queries) + +let solve_only solve query_to_facts clauses queries = + match !out_kind with + Solve -> + solve clauses queries + | Spass -> + Parsing_helper.user_error "Error: the clauses generated by ProVerif for process equivalences cannot be\ntranslated to the Spass input format.\n" + +let ends_with s sub = + let l_s = String.length s in + let l_sub = String.length sub in + (l_s >= l_sub) && (String.sub s (l_s - l_sub) l_sub = sub) + +(********************************************* + Interface +**********************************************) + +let display_process p biproc = + incr Param.process_number; + let text_bi,text_bi_maj = + if biproc + then "bi","Bip" + else "","P" in + + if (!Param.html_output) then + begin + Display.LangHtml.openfile ((!Param.html_dir) ^ "/process_"^(string_of_int !Param.process_number)^".html") ("ProVerif: "^text_bi^"process "^(string_of_int !Param.process_number)); + Display.Html.print_string ("<H1>"^text_bi_maj^"rocess "^(string_of_int !Param.process_number)^"</H1>\n"); + Display.Html.display_process_occ "" p; + Display.Html.newline(); + Display.LangHtml.close(); + Display.Html.print_string ("<A HREF=\"process_"^(string_of_int !Param.process_number)^".html\" TARGET=\"process\">"^text_bi_maj^"rocess "^(string_of_int !Param.process_number)^"</A><br>\n"); + end + else if (!Param.verbose_explain_clauses = Param.ExplainedClauses) || (!Param.explain_derivation) then + begin + Display.Text.print_string (text_bi_maj^"rocess "^(string_of_int !Param.process_number)^":\n"); + Display.Text.display_process_occ "" p; + Display.Text.newline() + end + +let solve_simplified_process proc = + let proc = Simplify.prepare_process proc in + Pitsyntax.reset_need_vars_in_names(); + + if !Param.html_output then + Display.Html.print_string "<span class=\"query\">Observational equivalence</span><br>\n"; + + Display.Text.print_string "Observational equivalence"; + Display.Text.newline(); + + display_process proc true; + + Param.weaksecret_mode := true; + Selfun.inst_constraints := true; + + let rules = Pitranslweak.transl proc in + + Printf.printf "Solving the clauses...\n"; + solve_only interference_analysis (fun q -> q) rules Pitypes.ChoiceQuery; + + Param.weaksecret_mode := false; + Selfun.inst_constraints := false; + incr Param.current_query_number + +let simplify_and_solve_process p = + Printf.printf "Looking for simplified processes ...\n"; + let found_simplified_process = ref false in + Simplify.simplify_process p (fun proc -> + found_simplified_process := true; + solve_simplified_process proc); + if not (!found_simplified_process) then + Printf.printf "No simplified process found\n" + +let rec interface_general_merg list_simpl_p = + let nb_biprocess = List.length list_simpl_p in + let conjug = + if nb_biprocess = 1 + then "" + else "es" + in + Printf.printf "\n----------------------------\n"; + Printf.printf "ProVerif has found %d simplified process%s equivalent to the initial process.\n" nb_biprocess conjug; + Printf.printf "Possible actions:\n"; + Printf.printf "1- View them all\n"; + Printf.printf "2- Try solving equivalence for all of them\n"; + Printf.printf " Note that this option stops when ProVerif finds an observationally equivalent biprocess\n"; + Printf.printf "3- Try solving equivalence for one specific process (enter 3-x wih x the number of the process)\n"; + Printf.printf "4- Exit ProVerif\n"; + + let result = read_line () in + match result with + | "1" -> + let acc = ref 1 in + List.iter (fun p -> + Printf.printf "\n---------------------------\n"; + Printf.printf "-- Simplified process %d --\n" !acc; + Printf.printf "---------------------------\n"; + + Display.Text.display_process_occ "" p; + Display.Text.newline(); + acc := !acc + 1 + ) list_simpl_p; + interface_general_merg list_simpl_p + (*| r when (String.length result > 2) && (String.sub r 0 2 = "2-") -> + let size = List.length list_simpl_p in + let n = + try + int_of_string (String.sub r 2 ((String.length r) - 2)) + with _ -> 0 in + + if n > 0 && n <= size + then + begin + Printf.printf "\n---------------------------\n"; + Printf.printf "-- Simplified process %d --\n" n; + Printf.printf "---------------------------\n"; + + Display.Text.display_process_occ "" (List.nth list_simpl_p (n-1)); + Display.Text.newline(); + + interface_general_merg list_simpl_p + end + else interface_general_merg list_simpl_p*) + |"2" -> + begin try + List.iter solve_simplified_process list_simpl_p; + with Is_equivalent -> () + end + | r when (String.length result > 2) && (String.sub r 0 2 = "3-") -> + let size = List.length list_simpl_p in + let n = + try + int_of_string (String.sub r 2 ((String.length r) - 2)) + with _ -> 0 in + + if n > 0 && n <= size + then + begin + try + solve_simplified_process (List.nth list_simpl_p (n-1)) + with Is_equivalent -> () + end; + + interface_general_merg list_simpl_p + + |"4" -> exit 0 + |_ -> interface_general_merg list_simpl_p + +let interface_for_merging_process p = + Printf.printf "Check the process...\n"; + Simplify.verify_process [] p; + Printf.printf "Calculate the simplified processes...\n"; + + let simpl_process_list = ref [] in + + Simplify.simplify_process p (fun p' -> simpl_process_list := p'::!simpl_process_list); + + if !simpl_process_list <> [] + then interface_general_merg !simpl_process_list + else Printf.printf "No simplified process found\n" + +(********************************************* + Analyser +**********************************************) + +let first_file = ref true + +let anal_file s = + if not (!first_file) then + Parsing_helper.user_error "Error: You can analyze a single ProVerif file for each run of ProVerif.\nPlease rerun ProVerif with your second file.\n"; + first_file := false; + try + let in_front_end = + match !in_kind with + Default -> (* Set the front-end depending on the extension of the file *) + let s_up = String.uppercase s in + if ends_with s_up ".PV" then PiType else + if ends_with s_up ".PI" then Pi else + if ends_with s_up ".HORNTYPE" then HornType else + Horn (* Horn is the default when no extension is recognized for compatibility reasons *) + | x -> x + in + + if (!Param.html_output) then + begin + Display.LangHtml.openfile ((!Param.html_dir) ^ "/index.html") "ProVerif: main result page"; + Display.Html.print_string "<H1>ProVerif results</H1>\n" + end; + match in_front_end with + Default -> + Parsing_helper.internal_error "The Default case should have been removed previously" + | Horn -> + (* If the input consists of Horn clauses, no explanation can be given *) + Param.verbose_explain_clauses := Param.Clauses; + Param.explain_derivation := false; + Param.abbreviate_clauses := false; + let p = Syntax.parse_file s in + out (fun p q -> Rules.main_analysis p q) + (fun q -> q) p (!Syntax.query_facts); + if (!Param.html_output) then + Display.LangHtml.close() + | HornType -> + (* If the input consists of Horn clauses, no explanation can be given *) + Param.verbose_explain_clauses := Param.Clauses; + Param.explain_derivation := false; + Param.abbreviate_clauses := false; + Param.typed_frontend := true; + (* Param.ignore_types := false; *) + let p = Tsyntax.parse_file s in + out (fun p q -> Rules.main_analysis p q) + (fun q -> q) p (!Tsyntax.query_facts); + if (!Param.html_output) then + Display.LangHtml.close() + | SpassIn -> + Parsing_helper.user_error "Error: spass input not yet implemented\n" + | PiType -> + Param.typed_frontend := true; + (* Param.ignore_types := false; *) + + let p0, second_p0 = Pitsyntax.parse_file s in + + let p0 = + if !Param.move_new then + Pitransl.move_new p0 + else p0 in + + TermsEq.record_eqs_with_destr(); + + (* Check if destructors are deterministic *) + + Destructor.check_deterministic !Pitsyntax.destructors_check_deterministic; + + (* Display the original processes *) + + if !Param.equivalence + then + begin + if !Param.has_choice + then Parsing_helper.user_error "When showing equivalence of two processes, the processes cannot contain choice\n"; + + if (!Pitsyntax.query_list != []) + || (Pitsyntax.get_noninterf_queries() != []) + || (Pitsyntax.get_weaksecret_queries() != []) + then Parsing_helper.user_error "Queries are incompatible with equivalence\n"; + + if (!Param.key_compromise != 0) then + Parsing_helper.user_error "Key compromise is incompatible with equivalence\n"; + + let second_p0 = match second_p0 with + | None -> internal_error "[main.ml] Second process should exist" + | Some p2 -> + if !Param.move_new then + Pitransl.move_new p2 + else p2 in + + if (!Param.html_output) then + Display.Html.print_string "<span class=\"query\">Observational equivalence between two processes</span><br>\n" + else if (!Param.verbose_explain_clauses = Param.ExplainedClauses) || (!Param.explain_derivation) then + Display.Text.print_string "Observational equivalence between two processes\n"; + + display_process (Simplify.prepare_process p0) false; + display_process (Simplify.prepare_process second_p0) false; + + begin try + let biprocess_found = ref false in + Simplify.obtain_biprocess_from_processes p0 second_p0 (fun bi_proc -> + biprocess_found := true; + let bi_proc = Simplify.prepare_process bi_proc in + Pitsyntax.reset_need_vars_in_names(); + if !Param.html_output then + Display.Html.print_string "<span class=\"query\">Observational equivalence</span><br>\n"; + + display_process bi_proc true; + + Param.weaksecret_mode := true; + Selfun.inst_constraints := true; + + let rules = Pitranslweak.transl bi_proc in + + solve_only interference_analysis (fun q -> q) rules Pitypes.ChoiceQuery; + Param.weaksecret_mode := false; + Selfun.inst_constraints := false; + incr Param.current_query_number + ); + if not (!biprocess_found) then + begin + Display.Text.print_string "RESULT no biprocess can be computed\n"; + if !Param.html_output + then Display.Html.print_string "<span class=\"result\">RESULT no biprocess can be computed</span><br>" + end + with Is_equivalent -> () + end + end + else + begin + let p = Simplify.prepare_process p0 in + Pitsyntax.set_need_vars_in_names(); + + incr Param.process_number; + + if (!Param.html_output) then + begin + Display.LangHtml.openfile ((!Param.html_dir) ^ "/process_1.html") "ProVerif: process"; + Display.Html.print_string "<H1>Process</H1>\n"; + Display.Html.display_process_occ "" p; + Display.Html.newline(); + Display.LangHtml.close(); + Display.Html.print_string "<A HREF=\"process_1.html\" TARGET=\"process\">Process</A><br>\n" + end + else if (!Param.verbose_explain_clauses = Param.ExplainedClauses) || (!Param.explain_derivation) then + begin + print_string "Process:\n"; + Display.Text.display_process_occ "" p; + Display.Text.newline() + end; + + if !Param.has_choice + then + begin + if (!Pitsyntax.query_list != []) + || (Pitsyntax.get_noninterf_queries() != []) + || (Pitsyntax.get_weaksecret_queries() != []) + then Parsing_helper.user_error "Queries are incompatible with choice\n"; + + if (!Param.key_compromise != 0) then + Parsing_helper.user_error "Key compromise is incompatible with choice\n"; + + Display.Text.print_string "-- Observational equivalence"; + Display.Text.newline(); + + if !Param.html_output then + Display.Html.print_string "<span class=\"query\">Observational equivalence</span><br>\n"; + + Param.weaksecret_mode := true; + Selfun.inst_constraints := true; + + let rules = Pitranslweak.transl p in + + begin try + solve_only interference_analysis (fun q -> q) rules Pitypes.ChoiceQuery; + Param.weaksecret_mode := false; + Selfun.inst_constraints := false; + incr Param.current_query_number; + + if !Param.simplify_process = 2 + then interface_for_merging_process p0 + else if !Param.simplify_process = 1 + then simplify_and_solve_process p0 + + with Is_equivalent -> () + end + end + else + begin + if !Param.html_output then + Display.Html.print_string "<UL>\n"; + + (* Secrecy and authenticity *) + + List.iter (fun q -> + begin + let queries = Pitsyntax.transl_query q in + let rules = Pitransl.transl p in + let queries = List.map Reduction_helper.check_delayed_names queries in + (* Note: pisyntax translates bindings let x = ... into PutBegin(false,[]) + since these bindings are useless once they have been interpreted + Such dummy PutBegin(false,[]) should not be displayed. *) + let queries' = List.filter (function Pitypes.PutBegin(_,[]) -> false | _ -> true) queries in + print_string ("-- Query "); + Display.Text.display_list Display.Text.display_corresp_putbegin_query "; " queries'; + print_newline(); + if !Param.html_output then + begin + Display.Html.print_string "<LI><span class=\"query\">Query "; + Display.Html.display_list Display.Html.display_corresp_putbegin_query "; " queries'; + Display.Html.print_string "</span><br>\n" + end; + out Piauth.solve_auth Pitsyntax.query_to_facts rules queries; + incr Param.current_query_number + end + ) (!Pitsyntax.query_list); + + (* Key compromise is now compatible with authenticity + or non-interference: Param.key_compromise := 0; *) + + (* Non-interference *) + + List.iter (fun noninterf_queries -> + begin + let noninterf_queries_names = List.map fst noninterf_queries in + Param.secret_vars := noninterf_queries_names; + Param.secret_vars_with_sets := noninterf_queries; + Param.non_interference := true; + let _ = Pitsyntax.transl_query ([],[]) in (* Ignore all events *) + let rules = Pitransl.transl p in + print_string "-- "; + Display.Text.display_eq_query (Pitypes.NonInterfQuery noninterf_queries); + Display.Text.newline(); + if !Param.html_output then + begin + Display.Html.print_string "<LI><span class=\"query\">"; + Display.Html.display_eq_query (Pitypes.NonInterfQuery noninterf_queries); + Display.Html.print_string "</span><br>\n" + end; + + begin try + solve_only interference_analysis (fun q -> q) rules (Pitypes.NonInterfQuery noninterf_queries); + with Is_equivalent -> () + end; + + Param.non_interference := false; + incr Param.current_query_number + end + ) (Pitsyntax.get_noninterf_queries()); + + (* Weak secrets *) + + List.iter (fun weaksecret -> + begin + Param.weaksecret := Some weaksecret; + Param.weaksecret_mode := true; + Selfun.inst_constraints := true; + print_string ("-- Weak secret " ^ weaksecret.f_name ^ "\n"); + if !Param.html_output then + Display.Html.print_string ("<LI><span class=\"query\">Weak secret " ^ weaksecret.f_name ^ "</span><br>\n"); + let _ = Pitsyntax.transl_query ([],[]) in (* Ignore all events *) + let rules = Pitransl.transl p in + begin try + solve_only interference_analysis (fun q -> q) rules (Pitypes.WeakSecret weaksecret); + with Is_equivalent -> () + end; + Param.weaksecret := None; + Param.weaksecret_mode := false; + Selfun.inst_constraints := false; + incr Param.current_query_number + end + ) (Pitsyntax.get_weaksecret_queries()); + + if (!Param.html_output) then + Display.Html.print_string "</UL>\n" + end; + end; + + if (!Param.html_output) then + Display.LangHtml.close() + + | Pi -> + let p0 = Pisyntax.parse_file s in + + let p = + if !Param.move_new then + Pitransl.move_new p0 + else + p0 + in + TermsEq.record_eqs_with_destr(); + + (* Check if destructors are deterministic *) + + Destructor.check_deterministic !Pisyntax.destructors_check_deterministic; + + (* Display the original processes *) + + incr Param.process_number; + + if (!Param.html_output) then + begin + Display.LangHtml.openfile ((!Param.html_dir) ^ "/process_1.html") "ProVerif: process"; + Display.Html.print_string "<H1>Process</H1>\n"; + Display.Html.display_process_occ "" p; + Display.Html.newline(); + Display.LangHtml.close(); + Display.Html.print_string "<A HREF=\"process_1.html\" TARGET=\"process\">Process</A><br>\n" + end + else if (!Param.verbose_explain_clauses = Param.ExplainedClauses) || (!Param.explain_derivation) then + begin + print_string "Process:\n"; + Display.Text.display_process_occ "" p; + Display.Text.newline() + end; + + if !Param.has_choice then + begin + if (!Pisyntax.query_list != []) + || (Pisyntax.get_noninterf_queries() != []) + || (Pisyntax.get_weaksecret_queries() != []) + then Parsing_helper.user_error "Queries are incompatible with choice\n"; + if (!Param.key_compromise != 0) then + Parsing_helper.user_error "Key compromise is incompatible with choice\n"; + + print_string "-- Observational equivalence"; print_newline(); + if !Param.html_output then + Display.Html.print_string "<span class=\"query\">Observational equivalence</span><br>\n"; + Param.weaksecret_mode := true; + Selfun.inst_constraints := true; + let rules = Pitranslweak.transl p in + begin try + solve_only interference_analysis (fun q -> q) rules Pitypes.ChoiceQuery; + with Is_equivalent -> () + end; + Param.weaksecret_mode := false; + Selfun.inst_constraints := false + end + else + begin + if !Param.html_output then + Display.Html.print_string "<UL>\n"; + + (* Secrecy and authenticity *) + + List.iter (fun q -> + begin + let queries = Pisyntax.transl_query q in + let rules = Pitransl.transl p in + let queries = List.map Reduction_helper.check_delayed_names queries in + if !Param.tulafale != 1 then + begin + (* Note: pisyntax translates bindings let x = ... into PutBegin(false,[]) + since these bindings are useless once they have been interpreted + Such dummy PutBegin(false,[]) should not be displayed. *) + let queries = List.filter (function Pitypes.PutBegin(_,[]) -> false | _ -> true) queries in + print_string ("-- Query "); + Display.Text.display_list Display.Text.display_corresp_putbegin_query "; " queries; + print_newline(); + if !Param.html_output then + begin + Display.Html.print_string "<LI><span class=\"query\">Query "; + Display.Html.display_list Display.Html.display_corresp_putbegin_query "; " queries; + Display.Html.print_string "</span><br>\n" + end + end + else + print_string "-- Secrecy & events.\n"; + out Piauth.solve_auth Pisyntax.query_to_facts rules queries; + incr Param.current_query_number + end) (!Pisyntax.query_list); + + (* Key compromise is now compatible with authenticity + or non-interference: Param.key_compromise := 0; *) + + (* Non-interference *) + + List.iter (fun noninterf_queries -> + begin + let noninterf_queries_names = List.map fst noninterf_queries in + Param.secret_vars := noninterf_queries_names; + Param.secret_vars_with_sets := noninterf_queries; + Param.non_interference := true; + let _ = Pisyntax.transl_query [] in (* Ignore all events *) + let rules = Pitransl.transl p in + print_string "-- "; + Display.Text.display_eq_query (Pitypes.NonInterfQuery noninterf_queries); + Display.Text.newline(); + if !Param.html_output then + begin + Display.Html.print_string "<LI><span class=\"query\">"; + Display.Html.display_eq_query (Pitypes.NonInterfQuery noninterf_queries); + Display.Html.print_string "</span><br>\n" + end; + begin try + solve_only interference_analysis (fun q -> q) rules (Pitypes.NonInterfQuery noninterf_queries); + with Is_equivalent -> () + end; + Param.non_interference := false; + incr Param.current_query_number + end) (Pisyntax.get_noninterf_queries()); + + (* Weak secrets *) + + List.iter (fun weaksecret -> + begin + Param.weaksecret := Some weaksecret; + Param.weaksecret_mode := true; + Selfun.inst_constraints := true; + print_string ("-- Weak secret " ^ weaksecret.f_name ^ "\n"); + if !Param.html_output then + Display.Html.print_string ("<LI><span class=\"query\">Weak secret " ^ weaksecret.f_name ^ "</span><br>\n"); + let _ = Pisyntax.transl_query [] in (* Ignore all events *) + let rules = Pitransl.transl p in + begin try + solve_only interference_analysis (fun q -> q) rules (Pitypes.WeakSecret weaksecret); + with Is_equivalent -> () + end; + + Param.weaksecret := None; + Param.weaksecret_mode := false; + Selfun.inst_constraints := false; + incr Param.current_query_number + end) (Pisyntax.get_weaksecret_queries()); + + if (!Param.html_output) then + Display.Html.print_string "</UL>\n" + end; + + if (!Param.html_output) then + Display.LangHtml.close() + + with e -> + Parsing_helper.internal_error (Printexc.to_string e) + + +let _ = + Arg.parse + [ "-test", Arg.Unit (fun () -> + if !Param.tulafale == 0 then + Param.verbose_explain_clauses := Param.ExplainedClauses), + "\t\tdisplay a bit more information for debugging"; + "-in", Arg.String(fun s -> in_kind := up_in s), + "<format> \t\tchoose the input format (horn, horntype, spass, pi, pitype)"; + "-out", Arg.String(fun s -> out_kind := up_out s), + "<format> \tchoose the output format (solve, spass)"; + "-o", Arg.String(fun s -> out_file := s), + "<filename> \tchoose the output file name (for spass output)"; + "-lib", Arg.String (fun s -> Param.lib_name := s), + "<filename> \tchoose the library file (for pitype front-end only)"; + "-TulaFale", Arg.Int(fun n -> + Param.tulafale := n; + if n = 1 then + begin + Param.reconstruct_trace := false; + Param.verbose_explain_clauses := Param.Clauses; + Param.explain_derivation := false; + Param.abbreviate_derivation := false; + Param.redundant_hyp_elim := true; + Param.redundant_hyp_elim_begin_only := true + end + ), + "<version> \tindicate the version of TulaFale when ProVerif is used inside TulaFale"; + "-gc", Arg.Set gc, + "\t\t\tdisplay gc statistics"; + "-color", Arg.Set Param.ansi_color, + "\t\t\tuse ANSI color codes"; + "-html", Arg.String (fun s -> + Param.html_output := true; + Param.html_dir := s; + if !Param.tulafale == 0 then + Param.verbose_explain_clauses := Param.ExplainedClauses), + "\t\t\tHTML display" + ] + anal_file "Proverif. Cryptographic protocol verifier, by Bruno Blanchet and Vincent Cheval"; + if !gc then Gc.print_stat stdout diff --git a/preinstallTTool/linux/proverif/src/noninterf.cmi b/preinstallTTool/linux/proverif/src/noninterf.cmi new file mode 100644 index 0000000000000000000000000000000000000000..ca4e0352011be75099a3d7b50208d313641b3574 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/noninterf.cmi differ diff --git a/preinstallTTool/linux/proverif/src/noninterf.cmx b/preinstallTTool/linux/proverif/src/noninterf.cmx new file mode 100644 index 0000000000000000000000000000000000000000..c5c9ef17b2b64b9285d3bf6cb736d3f27e980b48 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/noninterf.cmx differ diff --git a/preinstallTTool/linux/proverif/src/noninterf.ml b/preinstallTTool/linux/proverif/src/noninterf.ml new file mode 100644 index 0000000000000000000000000000000000000000..a2607ea2ddcb1ae2fb412cd9485f00487f0675cb --- /dev/null +++ b/preinstallTTool/linux/proverif/src/noninterf.ml @@ -0,0 +1,465 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Terms + +let detect_atteq = function + ([Pred(p1, [Var v1]); Pred(p2, [Var v2]); Pred({p_info = [TestUnifP _]}, [Var v1'; Var v2'])], + (Pred(p4, [])), _, []) + when p1.p_prop land Param.pred_ATTACKER != 0 + && p2.p_prop land Param.pred_ATTACKER != 0 + && p4 == Param.bad_pred + && v1 == v1' + && v2 == v2' -> true + | _ -> false + + +(**** + I. Check if the two parameters of testeq are unifiable for some value of x. + If this is not true, the rule can be removed. + + If they are unifiable, we simplify the rule by replacing the testeq: + fact with testeq:(x1,...,xn),(\sigma_u x1,...,\sigma_u xn) + where \sigma_u is the most general unifier. + ****) +let rec contains_bound_name fl = function + Var v -> false + | FunApp(f,l) -> (not (List.memq f fl)) && + ((match f.f_cat with + Name _ -> f.f_private + | _ -> false) || (List.exists (contains_bound_name fl) l)) + +let unify_up_to_x next_stage t1 t2 = + let vlsecr = List.map (fun f -> (f,Terms.new_var f.f_name (snd f.f_type))) (!Param.secret_vars) in + let vl = ref vlsecr in + assert (!current_bound_vars == []); + let t1' = replace_f_var vl t1 in + let t2' = replace_f_var vl t2 in + let fl = List.map fst (!vl) in + try + unify t1' t2'; + (* Remove the rule when the secret is bound to a term + containing bound names. + When "among (...)" is specified, the secret may be contain bound + names. We could imagine other choices. The difficulty is to + allow the user to specify a possibly infinite set of terms for + the secret. *) + let keep = List.for_all (fun (f,v) -> + match v.link with + NoLink -> true + | TLink t -> + begin + let set = List.assq f (!Param.secret_vars_with_sets) in + match set with + None -> + let valx = follow_link (fun v2 -> rev_assoc v2 (!vl)) t in + not (contains_bound_name fl valx) + | Some _ -> true + end + | _ -> Parsing_helper.internal_error "unexpected link in unify_up_to_x") vlsecr + in + if not keep then + cleanup() + else + let t1simp = List.map (fun v2 -> rev_assoc v2 (!vl)) (!current_bound_vars) in + let t2simp = List.map (fun v2 -> follow_link (fun v2 -> rev_assoc v2 (!vl)) (Var v2)) (!current_bound_vars) in + cleanup(); + next_stage t1simp t2simp + with Unify -> + (* The terms are never unifiable, so this rule cannot + cause a breach of non-interference. *) + cleanup() + +(* II. Swap pairs (variable, secret), (variable, general variable), + (secret, general variable). Eliminate pairs (general variable, _) *) + +let rec swap t1done t2done t1remain t2remain = + match (t1remain,t2remain) with + [],[] -> + (List.rev t1done, List.rev t2done) + | (FunApp(f1,[]) :: l1),(a2::l2) + when f1.f_cat = General_mayfail_var -> + swap t1done t2done l1 l2 + | (a1::l1),(FunApp(f,[])::l2) + when f.f_cat = General_mayfail_var -> + let rep = replace_name f a1 in + let t2done' = List.map rep t2done in + let l2' = List.map rep l2 in + swap t1done t2done' l1 l2' + | (FunApp(f1,[]) :: l1),(a2::l2) + when f1.f_cat = General_var -> + (* Here a2 cannot be a may-fail variable, because + in this unification links the may-fail variable + to the general message variable, thus the pair + is ordered (may-fail variable, general variable) *) + swap t1done t2done l1 l2 + | ((Var v)::l1),(FunApp(f,[])::l2) + when f.f_cat = General_var && v.unfailing -> + (* When we have a pair (v = may-fail variable, genx = general variable), + replace v with a message variable, since it cannot be fail, because + genx cannot be fail. *) + let v' = Var (Terms.new_var v.sname v.btype) in + Terms.link v (TLink v'); + let rep = replace_name f v' in + let t2done' = List.map rep t2done in + let l2' = List.map rep l2 in + swap t1done t2done' l1 l2' + | (a1::l1),(FunApp(f,[])::l2) + when f.f_cat = General_var -> + let rep = replace_name f a1 in + let t2done' = List.map rep t2done in + let l2' = List.map rep l2 in + swap t1done t2done' l1 l2' + | ((Var v as a1)::l1),((FunApp(f,[]) as a2)::l2) + when List.memq f (!Param.secret_vars) -> + let rep = replace_name f a1 in + let t2done' = List.map rep t2done in + let l2' = List.map rep l2 in + swap (a2 :: t1done) (a1 :: t2done') l1 l2' + | (a1::l1),(a2::l2) -> + swap (a1::t1done) (a2::t2done) l1 l2 + | _ -> Parsing_helper.internal_error "Lists of different lengths in swap" + +let swap_with_copy next_stage hypbefore hypafter concl hist constra l1 l2 = + assert (!Terms.current_bound_vars == []); + let l1', l2' = swap [] [] l1 l2 in + let hypbefore' = List.map Terms.copy_fact3 hypbefore in + let hypafter' = List.map Terms.copy_fact3 hypafter in + let concl' = Terms.copy_fact3 concl in + let constra' = List.map Terms.copy_constra3 constra in + Terms.cleanup(); + next_stage hypbefore' hypafter' concl' hist constra' l1' l2' + +(**** + III. If all bindings of testunif are of the form x,M + where x a secret, and all hypotheses are attacker(x_i), + then the testunif fact is true for some x_i. + ****) + +(* Rebuilds the standard rule format from an exploded rule format + hypbefore hypafter concl hist constra t1simp t2simp, + where t1simp, t2simp are lists of terms *) + +let dec_out_rule next_stage hypbefore hypafter concl hist constra t1simp t2simp = + match (t1simp,t2simp) with + [],[] -> () + | [t1s],[t2s] -> + let hypbefore' = (Pred(Param.get_pred (TestUnifP(Terms.get_term_type t1s)), [t1s; t2s])) :: hypbefore in + next_stage hypbefore' hypafter concl hist constra + | _ -> + let tuple_fun = get_tuple_fun (List.map Terms.get_term_type t1simp) in + let hypbefore' = (Pred(Param.get_pred (TestUnifP(Param.bitstring_type)), + [ FunApp(tuple_fun, t1simp); + FunApp(tuple_fun, t2simp)])) :: hypbefore + in + next_stage hypbefore' hypafter concl hist constra + +let check_any_x = function + Pred(chann,[Var v]) -> chann.p_prop land Param.pred_ANY != 0 + | _ -> false + +let secr_in_sets next_stage hypbefore hypafter concl hist constra t1 t2 = + +let rec unify_secrets todo = function + [] -> + if todo != [] then unify_secrets [] todo else + let curr_bound_vars = !current_bound_vars in + current_bound_vars := []; + let hypbefore' = List.map Terms.copy_fact2 hypbefore in + let hypafter' = List.map Terms.copy_fact2 hypafter in + let concl' = Terms.copy_fact2 concl in + let constra' = List.map Terms.copy_constra2 constra in + cleanup(); + next_stage hypbefore' hypafter' concl' hist constra'; + current_bound_vars := curr_bound_vars + | ((f,v)::l) -> + let set = List.assq f (!Param.secret_vars_with_sets) in + match set with + None -> unify_secrets todo l + | Some s -> + match follow_link (fun v2 -> rev_assoc v2 (todo @ l)) (Var v) with + Var _ when l != [] -> unify_secrets ((f,v)::todo) l + | _ -> + let rec unifyinset = function + [] -> () + | (au::lu) -> + let curr_bound_vars = !current_bound_vars in + current_bound_vars := []; + begin + try + unify (Var v) au; + unify_secrets todo l + with Unify -> + () + end; + cleanup(); + current_bound_vars := curr_bound_vars; + unifyinset lu + in + unifyinset s + +in + + let vlsecr = List.map (fun f -> (f,Terms.new_var f.f_name (snd f.f_type))) (!Param.secret_vars) in + let vl = ref vlsecr in + assert (!current_bound_vars == []); + let t1' = List.map (replace_f_var vl) t1 in + let t2' = List.map (replace_f_var vl) t2 in + try + List.iter2 unify t1' t2'; + unify_secrets [] vlsecr; + cleanup() + with Unify -> + Parsing_helper.internal_error "Here, the terms should be unifiable" + + + +let check_testunif_true next_stage hypbefore hypafter concl hist constra l1 l2 = + if (List.for_all check_any_x hypbefore) + && (List.for_all check_any_x hypafter) + && (l1 != []) + && (List.for_all (function + FunApp(f2,[]) -> List.memq f2 (!Param.secret_vars) + | _ -> false) l1) then + begin + (* + dec_out_rule (fun hypbefore hypafter concl hist constra -> + Display.Text.display_rule (List.rev_append hypbefore hypafter, concl, hist, constra)) hypbefore hypafter concl hist constra l1 l2; + *) + (* Testunif true *) + let hist' = TestUnifTrue(List.length hypbefore, hist) in + secr_in_sets next_stage hypbefore hypafter concl hist' constra l1 l2 + end + else + (* Keep the rule *) + dec_out_rule next_stage hypbefore hypafter concl hist constra l1 l2 + +(**** + +IV. Instantiation and elimination of useless variables. + +A clause + R = att(x) /\ H /\ testunif((..., x, ...), (..., f(M1, ..., Mn), ...)) -> bad +becomes + R { f(x1, ..., xn) / x } +when f constructor or name function symbol (not a secret or general variable) + H contains only unselectable facts, +and repeat the whole simplification. + +A clause + R = att(x1) /\ att(x2) /\ H /\ testunif((..., x1, ...), (..., x2, ...)) -> bad +becomes + R { x2/x1 } +plus eliminate the pair x2,x2 in testunif, and eliminate +duplicate hypotheses. Later useless facts att(x) will be removed. +(This cannot be applied to the clause + att(x1) /\ att(x2) /\ testeq(x1,x2) -> bad +) + ****) + +let is_bad = function + Pred(p, []) -> p==Param.bad_pred + | _ -> false + +let is_att_x x = function + Pred(p, [Var v]) when (p.p_prop land Param.pred_ATTACKER != 0) && (x == v) -> true + | _ -> false + +let do_instantiate (_,set) = + (match set with + None -> false + | Some l -> true) + +let inst_elim next_stage repeat_next_stage hypbefore hypafter concl hist constra l1 l2 = + if not (is_bad concl) then + next_stage hypbefore hypafter concl hist constra l1 l2 + else + let redo_all_optim = ref false in + let contains_att_x x = (List.exists (is_att_x x) hypbefore) + || (List.exists (is_att_x x) hypafter) in + let has_selectable () = not ((List.for_all is_unselectable hypbefore) + && (List.for_all is_unselectable hypafter)) in + let redo_optim() = + let hypbefore' = List.map Terms.copy_fact2 hypbefore in + let hypafter' = List.map Terms.copy_fact2 hypafter in + let concl' = Terms.copy_fact2 concl in + let constra' = List.map Terms.copy_constra2 constra in + let l1' = List.map Terms.copy_term2 l1 in + let l2' = List.map Terms.copy_term2 l2 in + Terms.cleanup(); + dec_out_rule (fun hypbefore hypafter concl hist constra -> + repeat_next_stage ((List.rev_append hypbefore hypafter), concl, hist, constra)) + hypbefore' hypafter' concl' hist constra' l1' l2' + in + assert (!Terms.current_bound_vars == []); + List.iter2 (fun l1 l2 -> + match (l1,l2) with + (Var v1), (FunApp(f,l)) + when (contains_att_x v1) + (* && not ((List.memq f (!Param.secret_vars)) || + f.f_cat = General_var *) + -> + if List.exists do_instantiate (!Param.secret_vars_with_sets) then + begin + (* Multiple instantiation is costly. + Do it only when necessary, that is, + when there is otherwise no selectable hypothesis *) + if has_selectable() then () else + begin + List.iter (fun ((s,_) as descr) -> + if (do_instantiate descr) && + (Terms.equal_types (snd s.f_type) v1.btype) + then + let curr_bound_vars = !Terms.current_bound_vars in + Terms.current_bound_vars := []; + Terms.link v1 (TLink (FunApp(s,[]))); + redo_optim(); + Terms.current_bound_vars := curr_bound_vars + ) (!Param.secret_vars_with_sets); + let lvar = Terms.var_gen (List.map Terms.get_term_type l) in + Terms.link v1 (TLink (FunApp(f, lvar))); + redo_all_optim := true + end + end + else + begin + let lvar = Terms.var_gen (List.map Terms.get_term_type l) in + Terms.link v1 (TLink (FunApp(f, lvar))); + redo_all_optim := true + end + | (Var v1), (Var v2) + when (contains_att_x v1) && (contains_att_x v2) && + v2.unfailing && not v1.unfailing -> + (* when v2 may fail and v1 cannot be fail, we can link + only in the direction that v2 is set to v1. *) + Terms.link v2 (TLink (Var v1)); + redo_all_optim := true + | (Var v1), (Var v2) + when (contains_att_x v1) && (contains_att_x v2) -> + Terms.link v1 (TLink (Var v2)); + redo_all_optim := true + | _, _ -> ()) l1 l2; + if (!redo_all_optim) then + redo_optim() + else + next_stage hypbefore hypafter concl hist constra l1 l2 + +(**** + Check that the values of the secrets can be given inside the + specified sets + ****) + +let rec unify_secrets todo = function + [] -> if todo != [] then unify_secrets [] todo + | ((f,v)::l) -> + let set = List.assq f (!Param.secret_vars_with_sets) in + match set with + None -> unify_secrets todo l + | Some s -> + match follow_link (fun v2 -> rev_assoc v2 (todo @ l)) (Var v) with + Var _ when l != [] -> unify_secrets ((f,v)::todo) l + | _ -> + let rec unifyinset = function + [] -> raise Unify + | (au::lu) -> + let curr_bound_vars = !current_bound_vars in + current_bound_vars := []; + try + unify (Var v) au; + unify_secrets todo l; + cleanup(); + current_bound_vars := curr_bound_vars + with Unify -> + cleanup(); + current_bound_vars := curr_bound_vars; + unifyinset lu + in + unifyinset s + +let secr_in_sets t1 t2 = + let vlsecr = List.map (fun f -> (f,Terms.new_var f.f_name (snd f.f_type))) (!Param.secret_vars) in + let vl = ref vlsecr in + assert (!current_bound_vars == []); + let t1' = List.map (replace_f_var vl) t1 in + let t2' = List.map (replace_f_var vl) t2 in + try + List.iter2 unify t1' t2'; + unify_secrets [] vlsecr; + cleanup(); + true + with Unify -> + (* The terms are never unifiable, so this rule cannot + cause a breach of non-interference. *) + cleanup(); + false + + +let check_sets next_stage hypbefore hypafter concl hist constra l1 l2 = + if secr_in_sets l1 l2 then + next_stage hypbefore hypafter concl hist constra l1 l2 + + +(**** + V. Combine all the simplifications together + ****) + +let simplify next_stage repeat_next_stage ((hyp, concl, hist, constra) as r) = + if (not (!Param.non_interference)) || (detect_atteq r) then + next_stage r + else + let rec simplify_testunif hypbefore hypafter concl hist constra = + match hypafter with + [] -> next_stage ((List.rev hypbefore), concl, hist, constra) + | (a::l) -> + match a with + Pred({p_info = [TestUnifP _]},[t1;t2]) -> + (* In the intermediate simplification steps, the rule is in format + hypbefore hypafter concl hist constra t1 t2. + At the beginning, t1 t2 are terms; + after unify_up_to_x, they are lists of terms. + dec_out_rule rebuilds the standard rule format. + print_string "Simplifying "; + Display.Text.display_rule r; *) + unify_up_to_x (swap_with_copy (inst_elim (check_sets (check_testunif_true simplify_testunif)) repeat_next_stage) hypbefore l concl hist constra) t1 t2 + | _ -> simplify_testunif (a::hypbefore) l concl hist constra + in + simplify_testunif [] hyp concl hist constra + + + +(* Selection function: called when the standard selection function says + to select the conclusion *) + +let selfun ((hyp, concl, _, _) as r) = + if not ((!Param.non_interference) && (is_bad concl) && (hyp != [])) then -1 else + if detect_atteq r then 0 else + begin + print_string "Warning: selection not found in Noninterf.selfun in rule\n"; + Display.Text.display_rule r; + -1 + end diff --git a/preinstallTTool/linux/proverif/src/noninterf.mli b/preinstallTTool/linux/proverif/src/noninterf.mli new file mode 100644 index 0000000000000000000000000000000000000000..3b57b61c0cb1d7e805d734cc054a86b922b74609 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/noninterf.mli @@ -0,0 +1,30 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + +val simplify : (Types.reduction -> unit) -> (Types.reduction -> unit) -> Types.reduction -> unit +val selfun : Types.reduction -> int diff --git a/preinstallTTool/linux/proverif/src/param.cmi b/preinstallTTool/linux/proverif/src/param.cmi new file mode 100644 index 0000000000000000000000000000000000000000..ac115247696fc6ed77aa6c92e090bdb7d62e80bc Binary files /dev/null and b/preinstallTTool/linux/proverif/src/param.cmi differ diff --git a/preinstallTTool/linux/proverif/src/param.cmx b/preinstallTTool/linux/proverif/src/param.cmx new file mode 100644 index 0000000000000000000000000000000000000000..126ba0be7977afb633c5e4efb9e7d5d4e937db85 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/param.cmx differ diff --git a/preinstallTTool/linux/proverif/src/param.ml b/preinstallTTool/linux/proverif/src/param.ml new file mode 100644 index 0000000000000000000000000000000000000000..fd261dbcad35c56a6e983500f8b8b0e9af896032 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/param.ml @@ -0,0 +1,396 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Ptree + +let lib_name = ref "" + +let def_var_name = "v" + +(* constants for predicate properties *) + +let pred_ANY = 1 +let pred_TUPLE = 2 +let pred_BLOCKING = 4 +let pred_ANY_STRICT = 8 +let pred_ELEM = 16 +let pred_ATTACKER = 32 +let pred_ELIMVAR = 64 +let pred_SIMPEQ = 128 +let pred_TUPLE_SELECT = 256 + +(* constants for function properties *) + +let fun_TYPECONVERTER = 2 + +(* various parameters that can be set by the user *) + +let max_depth = ref (-1) +let max_hyp = ref (-1) + +let ansi_color = ref false + +let active_attacker = ref true + +let key_compromise = ref 0 + +let typed_frontend = ref false +type ignore_t = + NotSet + | Ignore + | NotIgnore +let ignore_types = ref NotSet + +let get_ignore_types() = + match !ignore_types with + NotSet -> Parsing_helper.internal_error "ignore_types read before set" + | Ignore -> true + | NotIgnore -> false + +let set_ignore_types b = + begin + match !ignore_types with + NotSet -> () + | _ -> print_string "Warning: ignore_types set twice\n" + end; + ignore_types := if b then Ignore else NotIgnore + +let default_set_ignore_types() = + match !ignore_types with + NotSet -> ignore_types := Ignore + | _ -> () + +let html_output = ref false +let html_dir = ref "" +let current_query_number = ref 1 +let current_process_number = ref 1 +let derivation_number = ref 0 +let inside_query_number = ref 0 +let process_number = ref 0 + +let simplify_process = ref 1 +let reject_choice_true_false = ref true +let reject_no_simplif = ref true + +let verbose_rules = ref false +type explain_clauses = NoClauses | Clauses | ExplainedClauses +let verbose_explain_clauses = ref NoClauses +let verbose_redundant = ref false +let verbose_completed = ref false +let verbose_eq = ref true +let verbose_destr = ref false +let verbose_term = ref true +let abbreviate_clauses = ref true +let remove_subsumed_clauses_before_display = ref true + +let reconstruct_derivation = ref true +let simplify_derivation = ref true +type simplification_level_t = AttackerOnly | AttackerSameTree | AllFacts +let simplify_derivation_level = ref AttackerSameTree +let unify_derivation = ref true + +let display_derivation = ref true +let abbreviate_derivation = ref true +let explain_derivation = ref true +let reconstruct_trace = ref true +let trace_backtracking = ref true + +(* For trace reconstruction, to disable display of initial state when + backtracking is forbidden and the trace is displayed as it is build. *) +let display_init_state = ref true + +let non_interference = ref false +(* let testeq = ref (None : (Types.predicate * Types.funsymb list) option) *) + +type sel_type = NounifsetMaxsize | Nounifset | Term | TermMaxsize +let select_fun = ref TermMaxsize + +let should_stop_term = ref true + +type red_type = NoRed | SimpleRed | BestRed +let redundancy_test = ref SimpleRed + +let move_new = ref false + +let redundant_hyp_elim = ref true +let redundant_hyp_elim_begin_only = ref true + +let check_pred_calls = ref true + +let eq_in_names = ref false + +let simpeq_remove = ref true +let simpeq_final = ref true + +type eqtreatment = ConvLin | NonProved +let eqtreatment = ref ConvLin + +type trace_display = NoDisplay | ShortDisplay | LongDisplay +let trace_display = ref ShortDisplay + +let tulafale = ref 0 + +let boolean_param flag p ext v = + match v with + S ("no",_) | S ("false",_) -> flag := false + | S ("yes",_) | S ("true",_) -> flag := true + | _ -> Parsing_helper.input_error ("Unexpected value for parameter " ^ p ^ "=" ^ + (match v with S (s,_) -> s | I n -> string_of_int n)) ext + +let common_parameters p ext v = + match (p,v) with + "verboseRules", _ -> boolean_param verbose_rules p ext v + | "verboseRedundant", _ -> boolean_param verbose_redundant p ext v + | "verboseCompleted", _ -> boolean_param verbose_completed p ext v + | "verboseEq", _ -> boolean_param verbose_eq p ext v + | "verboseTerm", _ -> boolean_param verbose_term p ext v + | "abbreviateClauses", _ -> boolean_param abbreviate_clauses p ext v + | "maxDepth", S ("none",_) -> max_depth := -1 + | "maxDepth", I s -> max_depth := s + | "maxHyp", I s -> max_hyp := s + | "maxHyp", S ("none",_) -> max_hyp := -1 + | "selFun", S ("Nounifset",_) -> select_fun := Nounifset + | "selFun", S ("NounifsetMaxsize",_) -> select_fun := NounifsetMaxsize + | "selFun", S ("Term",_) -> select_fun := Term + | "selFun", S ("TermMaxsize",_) -> select_fun := TermMaxsize + | "stopTerm", _ -> boolean_param should_stop_term p ext v + | "redundancyElim", S("no",_) -> redundancy_test := NoRed + | "redundancyElim", S("simple",_) -> redundancy_test := SimpleRed + | "redundancyElim", S("best",_) -> redundancy_test := BestRed + | "redundantHypElim", S("beginOnly",_) -> + redundant_hyp_elim := true; + redundant_hyp_elim_begin_only := true + | "redundantHypElim", S (("true"|"yes"),_) -> + redundant_hyp_elim := true; + redundant_hyp_elim_begin_only := false + | "redundantHypElim", S (("false"|"no"),_) -> redundant_hyp_elim := false + | "simpEq", S ("remove",_) -> simpeq_remove := true + | "simpEq", S ("reduce",_) -> simpeq_remove := false + | "simpEqFinal", _ -> boolean_param simpeq_final p ext v + | "eqTreatment", S ("convLin",_) -> eqtreatment := ConvLin + | "eqTreatment", S ("nonProved",_) -> eqtreatment := NonProved (* Undocumented! *) + | "reconstructDerivation", _ -> boolean_param reconstruct_derivation p ext v + | "simplifyDerivation", _ -> boolean_param simplify_derivation p ext v + | "displayDerivation", _ -> boolean_param display_derivation p ext v + | "abbreviateDerivation", _ -> boolean_param abbreviate_derivation p ext v + | _, _ -> Parsing_helper.input_error ("Bad parameter " ^ p ^ "=" ^ + (match v with S (s,_) -> s | I n -> string_of_int n)) ext + + +(* types *) + +let any_type = { tname = "any" } +let bitstring_type = { tname = "bitstring" } +let channel_type = { tname = "channel" } +let sid_type = { tname = "sid" } (* session ids *) +let event_type = { tname = "event" } +let bool_type = { tname = "bool" } +let table_type = { tname = "table" } + +let tmp_type = [{ tname = "temporary_type_should_be_removed" }] + +let get_type ty = + if get_ignore_types() then any_type else ty + +(* predicates *) + +let get_suffix i = + if i = 0 then "" else "_p" ^ (string_of_int i) + +let get_type_suffix t = + if t == any_type then "" else "_" ^ t.tname + +let rec tl_to_string sep = function + [] -> "" + | [a] -> a.tname + | (a::l) -> a.tname ^ sep ^ (tl_to_string sep l) + +let build_pred = function + Attacker(i,t) -> + { p_name = "attacker" ^ (get_type_suffix t) ^ (get_suffix i); + p_type = [t]; + p_prop = pred_ANY + pred_TUPLE + pred_ATTACKER; + p_info = [Attacker(i,t)] } + | Mess(i,t) -> + { p_name = "mess" ^ (get_type_suffix t) ^ (get_suffix i); + p_type = [channel_type; t]; + p_prop = 0; + p_info = [Mess(i,t)] } + | InputP(i) -> + { p_name = "input" ^ (get_suffix i); + p_type = [channel_type]; + p_prop = 0; + p_info = [InputP(i)] } + | OutputP(i) -> + { p_name = "output" ^ (get_suffix i); + p_type = [channel_type]; + p_prop = 0; + p_info = [OutputP(i)] } + | AttackerBin(i,t) -> + { p_name = "attacker2" ^ (get_type_suffix t) ^ (get_suffix i); + p_type = [t;t]; + p_prop = pred_TUPLE + pred_TUPLE_SELECT + pred_ELIMVAR + pred_SIMPEQ + pred_ANY + pred_ATTACKER; + p_info = [AttackerBin(i,t)] } + | MessBin(i,t) -> + { p_name = "mess2" ^ (get_type_suffix t) ^ (get_suffix i); + p_type = [channel_type; t; channel_type; t]; + p_prop = 0; + p_info = [MessBin(i,t)] } + | InputPBin(i) -> + { p_name = "input2" ^ (get_suffix i); + p_type = [channel_type; channel_type]; + p_prop = 0; + p_info = [InputPBin(i)] } + | OutputPBin(i) -> + { p_name = "output2" ^ (get_suffix i); + p_type = [channel_type; channel_type]; + p_prop = 0; + p_info = [OutputPBin(i)] } + | AttackerGuess(t) -> + { p_name = "attacker_guess" ^ (get_type_suffix t); + p_type = [t;t]; + p_prop = pred_TUPLE + pred_TUPLE_SELECT + pred_ELIMVAR + pred_SIMPEQ + pred_ANY + pred_ATTACKER; + p_info = [AttackerGuess(t)] } + | Compromise(t) -> + { p_name = "comp" ^ (get_type_suffix t); + p_type = [t]; + p_prop = pred_TUPLE + pred_ANY; + p_info = [Compromise(t)] } + | Equal(t) -> + { p_name = "equal" ^ (get_type_suffix t); + p_type = [t;t]; + p_prop = 0; + p_info = [Equal(t)] } + | Table(i) -> + { p_name = "table" ^ (get_suffix i); + p_type = [table_type]; + p_prop = 0; + p_info = [Table(i)] } + | TableBin(i) -> + { p_name = "table2" ^ (get_suffix i); + p_type = [table_type;table_type]; + p_prop = 0; + p_info = [TableBin(i)] } + | PolymPred(s,i,tl) -> + { p_name = s ^ (if List.for_all (fun x -> x == any_type) tl then "" else + if List.for_all (fun x -> x == List.hd tl) tl then "_" ^ (List.hd tl).tname else + "_" ^ (tl_to_string "_" tl)); + p_type = tl; + p_prop = i; + p_info = [PolymPred(s,i,tl)] } + | TestUnifP(t) -> + { p_name = "testunif" ^ (get_type_suffix t); p_type = [t; t]; + p_prop = pred_BLOCKING; + p_info = [TestUnifP(t)] } + +let memo f = + let table = Hashtbl.create 7 in + fun x -> + try + Hashtbl.find table x + with Not_found -> + let r = f x in + Hashtbl.add table x r; + r + +let build_pred_memo = memo build_pred + +let get_pred info = + let info = + if get_ignore_types() then + match info with + Attacker(i,t) -> Attacker(i,any_type) + | Mess(i,t) -> Mess(i,any_type) + | AttackerBin(i,t) -> AttackerBin(i,any_type) + | MessBin(i,t) -> MessBin(i,any_type) + | AttackerGuess(t) -> AttackerGuess(any_type) + | Compromise(t) -> Compromise(any_type) + | Equal(t) -> Equal(any_type) + | PolymPred(s,i,tl) -> PolymPred(s,i, List.map (fun _ -> any_type) tl) + | TestUnifP(t) -> TestUnifP(any_type) + | x -> x + else + info + in + build_pred_memo info + +(* For authenticity *) +let end_pred = { p_name = "end"; p_type = [event_type]; p_prop = 0; + p_info = [] } +let end_pred_inj = { p_name = "end"; p_type = [sid_type; event_type] ; p_prop = 0; + p_info = [] } + +(* For non-interference *) + +let bad_pred = { p_name = "bad"; p_type = []; p_prop = pred_BLOCKING; + p_info = [] } + +(* Predicate used as replacement for the conclusion in backward search *) + +let dummy_pred = { p_name = "dummy"; p_type = []; p_prop = 0; p_info = [] } + +(* Special variables *) + +let secret_vars = ref [] +let secret_vars_with_sets = ref [] + +(* For weak secrets *) +let weaksecret = ref None +let weaksecret_mode = ref false + +(* For choice *) + +let choice_fun_memo = memo (fun t -> + { f_name = "choice"; + f_type = [t;t],t; + f_cat = Choice; + f_initial_cat = Choice; + f_private = true; + f_options = 0 }) + +let choice_fun t = + choice_fun_memo (get_type t) + +let has_choice = ref false +let equivalence = ref false + +(* Values computed from the input file *) + +let all_types = ref [channel_type; bitstring_type; bool_type] +let fun_decls = ((Hashtbl.create 49) : (string, funsymb) Hashtbl.t) +let pred_env = Hashtbl.create 7 +let freenames = ref ([] : funsymb list) +let max_used_phase = ref 0 +let session1 = { f_name = "session1"; + f_type = [], sid_type; + f_private = false; + f_options = 0; + f_cat = Eq []; + f_initial_cat = Eq [] } +let red_rules = ref [] +let elim_true = ref [] diff --git a/preinstallTTool/linux/proverif/src/param.mli b/preinstallTTool/linux/proverif/src/param.mli new file mode 100644 index 0000000000000000000000000000000000000000..0345d1d17eb769ad6e23fb2dc07c02dd7dabf1ae --- /dev/null +++ b/preinstallTTool/linux/proverif/src/param.mli @@ -0,0 +1,214 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val lib_name : string ref + +val def_var_name : string + +(* Use the following constants to set bits of the p_prop field + of predicates. For the predicate p, + + pred_ANY means that there exists x1,...,xn such that p:x1,...,xn and + if all inequalities involving x1...xn are satisfiable, then they are + satisfied for this x1...xn. + + pred_ANY_STRICT means that there exists x such that p:x,...,x + + pred_TUPLE means that p:(x_1, ..., x_n) iff p:x_1 and ... and p:x_n + pred_TUPLE_SELECT means further that facts p:x may be selected by the + selection function + + pred_BLOCKING means that the predicate must never be selected by + the selection function. + + pred_ELEM means that + att(x) /\ elem(M_1, x) /\ ... /\ elem(M_n, x) + becomes + att(x) /\ att(M_1) /\ ... /\ att(M_n) + when elem is a predicate pred_ELEM and att is a predicate pred_TUPLE + This simplification is always done when x does not occur elsewhere. + When x occurs elsewhere, the simplification can be done when the + clause has no selected fact. It leads to a loss of precision in + this case. + + pred_ATTACKER means that the predicate is one of the attacker, attacker_pi + predicates for the different phases. + + pred_ELIMVAR means that p(y,x) /\ p(y',x) /\ y <> y' -> bad + and p(x,y) /\ p(x,y') /\ y <> y' -> bad are present + + pred_SIMPEQ means that one should use the equational theory + to simplify the arguments of this predicate. +*) +val pred_ANY : int +val pred_ANY_STRICT : int +val pred_TUPLE : int +val pred_TUPLE_SELECT : int +val pred_BLOCKING : int +val pred_ELEM : int +val pred_ATTACKER : int +val pred_ELIMVAR : int +val pred_SIMPEQ : int + +val fun_TYPECONVERTER : int + +val max_depth : int ref +val max_hyp : int ref +val ansi_color : bool ref +val active_attacker : bool ref +val key_compromise : int ref +val non_interference : bool ref + +val typed_frontend : bool ref +val get_ignore_types : unit -> bool +val set_ignore_types : bool -> unit +val default_set_ignore_types : unit -> unit +val get_type : Types.typet -> Types.typet + +val html_output : bool ref +val html_dir : string ref +val current_query_number : int ref +val derivation_number : int ref +val inside_query_number : int ref +val process_number : int ref + +val simplify_process : int ref +val reject_choice_true_false : bool ref +val reject_no_simplif : bool ref + +val verbose_rules : bool ref +type explain_clauses = NoClauses | Clauses | ExplainedClauses +val verbose_explain_clauses : explain_clauses ref +val verbose_redundant : bool ref +val verbose_completed : bool ref +val verbose_eq : bool ref +val verbose_destr : bool ref +val verbose_term : bool ref +val abbreviate_clauses : bool ref +val remove_subsumed_clauses_before_display : bool ref + +val reconstruct_derivation : bool ref +val simplify_derivation : bool ref +type simplification_level_t = AttackerOnly | AttackerSameTree | AllFacts +val simplify_derivation_level : simplification_level_t ref +val unify_derivation : bool ref +val display_derivation : bool ref +val abbreviate_derivation : bool ref +val explain_derivation : bool ref +val reconstruct_trace : bool ref +val trace_backtracking : bool ref +val display_init_state : bool ref + +type sel_type = NounifsetMaxsize | Nounifset | Term | TermMaxsize +val select_fun : sel_type ref + +val should_stop_term : bool ref + +type red_type = NoRed | SimpleRed | BestRed +val redundancy_test : red_type ref + +val move_new : bool ref + +val redundant_hyp_elim : bool ref +val redundant_hyp_elim_begin_only : bool ref +val check_pred_calls : bool ref +val eq_in_names : bool ref + +val simpeq_remove : bool ref +val simpeq_final : bool ref + +type eqtreatment = ConvLin | NonProved +val eqtreatment : eqtreatment ref + +type trace_display = NoDisplay | ShortDisplay | LongDisplay +val trace_display : trace_display ref + +val tulafale : int ref + +val boolean_param : bool ref -> string -> Parsing_helper.extent -> Ptree.pval -> unit +val common_parameters : string -> Parsing_helper.extent -> Ptree.pval -> unit + +(* types *) + +val any_type : Types.typet +val bitstring_type : Types.typet +val channel_type : Types.typet +val sid_type : Types.typet +val event_type : Types.typet +val bool_type : Types.typet +val table_type : Types.typet + +(* Special type to record that the type is not defined yet *) +val tmp_type : Types.typet list + +val get_type_suffix : Types.typet -> string + +(* predicates *) + +val end_pred : Types.predicate +val end_pred_inj : Types.predicate +val bad_pred : Types.predicate +val dummy_pred : Types.predicate + +(* Special variables *) + +val secret_vars : Types.funsymb list ref +val secret_vars_with_sets : (Types.funsymb * Types.term list option) list ref + +(* [memo f] is the memoizing version of function f: + when f is called several times with the same argument, it returns + the same result without recomputing f *) + +val memo : ('a -> 'b) -> 'a -> 'b + +(* Phases *) + +val build_pred_memo : Types.info -> Types.predicate +val get_pred : Types.info -> Types.predicate + +(* Weak secrets *) + +val weaksecret : Types.funsymb option ref +val weaksecret_mode : bool ref + +(* Choice *) + +val choice_fun : Types.typet -> Types.funsymb +val has_choice : bool ref +val equivalence : bool ref + +(* Values computed from the input file *) + +val all_types : Types.typet list ref +val fun_decls : (string,Types.funsymb) Hashtbl.t +val pred_env : (string,Types.predicate) Hashtbl.t +val freenames : Types.funsymb list ref +val max_used_phase : int ref +val session1 : Types.funsymb +val red_rules : (Types.fact list * Types.fact * Types.constraints list list * Types.label) list ref +val elim_true : Types.fact list ref + diff --git a/preinstallTTool/linux/proverif/src/parser.cmi b/preinstallTTool/linux/proverif/src/parser.cmi new file mode 100644 index 0000000000000000000000000000000000000000..fb2e91c66b19d681d348d2fe6b950b14a28b65c2 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/parser.cmi differ diff --git a/preinstallTTool/linux/proverif/src/parser.cmx b/preinstallTTool/linux/proverif/src/parser.cmx new file mode 100644 index 0000000000000000000000000000000000000000..a8e4444f5109f9eabe09d5920da376472832fa0b Binary files /dev/null and b/preinstallTTool/linux/proverif/src/parser.cmx differ diff --git a/preinstallTTool/linux/proverif/src/parser.ml b/preinstallTTool/linux/proverif/src/parser.ml new file mode 100644 index 0000000000000000000000000000000000000000..55d5bb883237589b274f2f640b4c2ba6911977bf --- /dev/null +++ b/preinstallTTool/linux/proverif/src/parser.ml @@ -0,0 +1,1097 @@ +type token = + | COMMA + | LPAREN + | RPAREN + | LBRACKET + | RBRACKET + | SEMI + | COLON + | IDENT of (Ptree.ident) + | INT of (int) + | RED + | EQUIV + | EQUIVEQ + | EQUAL + | FUN + | EQUATION + | QUERY + | NOUNIF + | SLASH + | STAR + | DOT + | WEDGE + | EOF + | NOT + | ELIMTRUE + | DIFF + | PREDICATE + | REDUCTION + | DATA + | PARAM + | CLAUSES + | CONST + | SET + | NAME + | TYPE + | FORALL + +open Parsing;; +let _ = parse_error;; +# 2 "parser.mly" +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +# 31 "parser.mly" + +open Parsing_helper +open Ptree +exception Syntax + +# 75 "parser.ml" +let yytransl_const = [| + 257 (* COMMA *); + 258 (* LPAREN *); + 259 (* RPAREN *); + 260 (* LBRACKET *); + 261 (* RBRACKET *); + 262 (* SEMI *); + 263 (* COLON *); + 266 (* RED *); + 267 (* EQUIV *); + 268 (* EQUIVEQ *); + 269 (* EQUAL *); + 270 (* FUN *); + 271 (* EQUATION *); + 272 (* QUERY *); + 273 (* NOUNIF *); + 274 (* SLASH *); + 275 (* STAR *); + 276 (* DOT *); + 277 (* WEDGE *); + 0 (* EOF *); + 278 (* NOT *); + 279 (* ELIMTRUE *); + 280 (* DIFF *); + 281 (* PREDICATE *); + 282 (* REDUCTION *); + 283 (* DATA *); + 284 (* PARAM *); + 285 (* CLAUSES *); + 286 (* CONST *); + 287 (* SET *); + 288 (* NAME *); + 289 (* TYPE *); + 290 (* FORALL *); + 0|] + +let yytransl_block = [| + 264 (* IDENT *); + 265 (* INT *); + 0|] + +let yylhs = "\255\255\ +\003\000\003\000\003\000\003\000\005\000\005\000\004\000\004\000\ +\006\000\006\000\007\000\007\000\007\000\007\000\007\000\009\000\ +\009\000\008\000\008\000\010\000\010\000\011\000\011\000\012\000\ +\012\000\013\000\013\000\013\000\013\000\014\000\014\000\015\000\ +\015\000\016\000\017\000\017\000\001\000\001\000\001\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\018\000\ +\018\000\018\000\019\000\019\000\019\000\019\000\020\000\020\000\ +\021\000\022\000\022\000\023\000\023\000\024\000\024\000\025\000\ +\025\000\026\000\026\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\000\000\000\000" + +let yylen = "\002\000\ +\004\000\003\000\004\000\001\000\003\000\001\000\001\000\000\000\ +\003\000\001\000\004\000\003\000\004\000\001\000\002\000\003\000\ +\001\000\001\000\000\000\002\000\000\000\001\000\000\000\003\000\ +\003\000\003\000\001\000\003\000\003\000\003\000\001\000\003\000\ +\002\000\003\000\003\000\005\000\006\000\006\000\004\000\004\000\ +\005\000\004\000\004\000\007\000\006\000\006\000\003\000\004\000\ +\001\000\003\000\003\000\001\000\003\000\003\000\003\000\001\000\ +\004\000\005\000\003\000\003\000\000\000\004\000\003\000\003\000\ +\000\000\004\000\006\000\004\000\006\000\010\000\007\000\005\000\ +\006\000\004\000\007\000\005\000\006\000\004\000\006\000\004\000\ +\008\000\005\000\006\000\006\000\003\000\002\000\002\000" + +let yydefred = "\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\086\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\087\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\007\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\033\000\ +\000\000\000\000\000\000\047\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\085\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\002\000\000\000\ +\000\000\000\000\039\000\024\000\025\000\040\000\000\000\000\000\ +\000\000\000\000\034\000\018\000\020\000\000\000\042\000\043\000\ +\000\000\000\000\030\000\032\000\026\000\028\000\029\000\000\000\ +\000\000\000\000\022\000\000\000\000\000\064\000\000\000\000\000\ +\000\000\000\000\050\000\074\000\000\000\000\000\000\000\000\000\ +\000\000\078\000\000\000\080\000\000\000\000\000\000\000\060\000\ +\000\000\000\000\063\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\068\000\000\000\005\000\001\000\003\000\000\000\ +\000\000\000\000\000\000\015\000\000\000\041\000\000\000\000\000\ +\000\000\000\000\000\000\009\000\000\000\072\000\000\000\000\000\ +\000\000\057\000\076\000\000\000\000\000\000\000\000\000\082\000\ +\000\000\055\000\062\000\051\000\053\000\054\000\000\000\000\000\ +\000\000\000\000\037\000\036\000\012\000\000\000\000\000\016\000\ +\000\000\038\000\045\000\046\000\000\000\000\000\058\000\073\000\ +\000\000\077\000\079\000\000\000\000\000\083\000\084\000\069\000\ +\011\000\013\000\044\000\000\000\000\000\075\000\000\000\071\000\ +\000\000\067\000\081\000\000\000\070\000" + +let yydgoto = "\003\000\ +\014\000\027\000\051\000\071\000\072\000\155\000\138\000\139\000\ +\140\000\082\000\156\000\041\000\042\000\043\000\044\000\037\000\ +\032\000\052\000\118\000\119\000\055\000\053\000\063\000\064\000\ +\049\000\099\000" + +let yysindex = "\062\000\ +\234\255\191\255\000\000\027\255\035\255\105\255\046\255\105\255\ +\105\255\071\255\105\255\147\255\148\255\000\000\151\255\015\255\ +\112\255\159\255\112\255\112\255\163\255\130\255\172\255\181\255\ +\182\255\185\255\000\000\178\255\035\255\042\255\184\255\179\255\ +\101\255\176\255\183\255\205\255\197\255\213\255\221\255\200\255\ +\196\255\011\255\124\255\202\000\201\255\222\255\232\255\236\255\ +\130\255\156\255\218\255\225\255\247\255\070\255\197\255\248\255\ +\235\255\002\000\238\255\003\000\117\255\244\255\121\255\010\001\ +\007\000\004\000\008\000\254\255\010\000\015\000\017\000\000\000\ +\035\255\035\255\035\255\234\255\035\255\035\255\234\255\031\255\ +\013\000\005\000\234\255\234\255\014\000\105\255\105\255\000\000\ +\105\255\105\255\105\255\000\000\018\000\081\255\236\255\023\000\ +\021\000\035\255\009\000\035\255\022\000\035\255\191\255\121\255\ +\031\255\011\000\024\000\191\255\121\255\191\255\121\255\236\255\ +\016\000\026\000\028\000\164\255\019\000\039\255\175\255\000\000\ +\027\000\123\255\029\000\191\255\025\000\035\255\000\000\035\000\ +\034\000\036\000\000\000\000\000\000\000\000\000\031\255\174\255\ +\033\000\042\000\000\000\000\000\000\000\234\255\000\000\000\000\ +\236\255\196\255\000\000\000\000\000\000\000\000\000\000\030\000\ +\031\000\032\000\000\000\041\000\236\255\000\000\040\000\191\255\ +\043\000\046\000\000\000\000\000\037\000\045\000\191\255\047\000\ +\197\255\000\000\038\000\000\000\039\000\051\000\191\255\000\000\ +\121\255\130\255\000\000\121\255\121\255\121\255\015\255\044\000\ +\048\000\049\000\000\000\234\255\000\000\000\000\000\000\035\255\ +\052\000\031\255\031\255\000\000\031\255\000\000\050\000\234\255\ +\234\255\234\255\053\000\000\000\035\255\000\000\000\000\244\255\ +\191\255\000\000\000\000\054\000\191\255\191\255\015\255\000\000\ +\019\000\000\000\000\000\000\000\000\000\000\000\055\000\191\255\ +\191\255\191\255\000\000\000\000\000\000\058\000\057\000\000\000\ +\234\255\000\000\000\000\000\000\059\000\060\000\000\000\000\000\ +\191\255\000\000\000\000\056\000\191\255\000\000\000\000\000\000\ +\000\000\000\000\000\000\015\255\130\255\000\000\191\255\000\000\ +\061\000\000\000\000\000\191\255\000\000" + +let yyrindex = "\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\255\ +\000\000\000\000\000\000\000\000\000\000\122\255\000\000\000\000\ +\000\000\000\000\000\000\000\000\068\000\141\255\000\000\000\000\ +\063\000\000\000\000\000\000\000\064\000\000\000\000\000\000\000\ +\106\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\122\255\068\255\000\000\000\000\000\000\000\000\064\000\000\000\ +\000\000\000\000\000\000\000\000\065\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\055\255\000\000\000\000\ +\068\000\067\000\000\000\000\000\226\255\000\000\000\000\125\255\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\070\000\048\255\ +\000\000\000\000\000\000\068\000\000\000\000\000\000\000\000\000\ +\074\000\000\000\000\000\000\000\000\000\000\000\000\000\070\000\ +\000\000\000\000\000\000\171\255\001\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\066\000\000\000\000\000\000\000\000\000\074\000\037\255\ +\000\000\075\255\000\000\000\000\000\000\000\000\000\000\000\000\ +\069\000\199\255\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\072\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\064\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\122\255\000\000\000\000\000\000\000\000\065\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\074\000\075\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\219\255\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\065\000\000\000\ +\216\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\071\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\065\000\122\255\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000" + +let yygindex = "\000\000\ +\195\255\180\255\252\255\203\255\158\000\214\255\000\000\162\255\ +\115\000\215\255\160\255\020\000\000\000\233\000\234\000\000\000\ +\143\000\249\255\000\000\161\000\232\000\246\255\207\255\166\000\ +\198\255\093\000" + +let yytablesize = 347 +let yytable = "\098\000\ +\031\000\034\000\113\000\034\000\034\000\097\000\034\000\056\000\ +\058\000\060\000\166\000\057\000\059\000\106\000\131\000\174\000\ +\087\000\134\000\048\000\128\000\129\000\143\000\144\000\132\000\ +\070\000\035\000\164\000\038\000\039\000\065\000\088\000\170\000\ +\135\000\172\000\028\000\065\000\029\000\014\000\136\000\014\000\ +\193\000\014\000\030\000\073\000\178\000\074\000\161\000\187\000\ +\199\000\137\000\010\000\115\000\010\000\036\000\014\000\117\000\ +\014\000\006\000\179\000\006\000\006\000\065\000\001\000\002\000\ +\006\000\006\000\006\000\010\000\070\000\070\000\130\000\105\000\ +\070\000\133\000\006\000\006\000\101\000\017\000\040\000\017\000\ +\198\000\034\000\034\000\206\000\034\000\034\000\034\000\049\000\ +\153\000\154\000\211\000\004\000\017\000\159\000\017\000\070\000\ +\165\000\163\000\216\000\230\000\231\000\171\000\073\000\173\000\ +\074\000\146\000\029\000\077\000\149\000\150\000\151\000\027\000\ +\033\000\029\000\204\000\031\000\031\000\031\000\112\000\050\000\ +\048\000\070\000\029\000\061\000\223\000\027\000\227\000\212\000\ +\116\000\061\000\184\000\185\000\240\000\089\000\090\000\091\000\ +\242\000\243\000\234\000\235\000\236\000\004\000\019\000\004\000\ +\019\000\004\000\004\000\246\000\247\000\248\000\004\000\004\000\ +\004\000\004\000\045\000\046\000\244\000\100\000\047\000\074\000\ +\004\000\004\000\101\000\062\000\254\000\100\000\054\000\074\000\ +\000\001\217\000\061\000\251\000\220\000\221\000\222\000\194\000\ +\049\000\195\000\003\001\065\000\049\000\049\000\049\000\005\001\ +\180\000\181\000\182\000\031\000\066\000\067\000\049\000\049\000\ +\068\000\001\001\004\000\069\000\075\000\239\000\076\000\078\000\ +\238\000\092\000\079\000\098\000\015\000\016\000\017\000\018\000\ +\031\000\031\000\031\000\080\000\019\000\020\000\081\000\021\000\ +\086\000\085\000\093\000\022\000\023\000\024\000\025\000\026\000\ +\048\000\056\000\056\000\056\000\048\000\048\000\048\000\008\000\ +\083\000\095\000\094\000\008\000\008\000\008\000\048\000\048\000\ +\084\000\102\000\001\000\096\000\103\000\008\000\008\000\004\000\ +\005\000\006\000\007\000\114\000\104\000\107\000\108\000\008\000\ +\009\000\110\000\010\000\011\000\012\000\013\000\052\000\109\000\ +\111\000\120\000\056\000\056\000\056\000\121\000\123\000\126\000\ +\122\000\124\000\125\000\127\000\052\000\141\000\145\000\157\000\ +\142\000\158\000\152\000\189\000\160\000\162\000\167\000\168\000\ +\101\000\176\000\183\000\175\000\186\000\190\000\191\000\177\000\ +\196\000\192\000\197\000\203\000\188\000\207\000\208\000\210\000\ +\105\000\200\000\201\000\202\000\205\000\215\000\229\000\232\000\ +\209\000\213\000\214\000\237\000\249\000\250\000\147\000\224\000\ +\148\000\253\000\252\000\225\000\226\000\233\000\008\000\008\000\ +\023\000\241\000\245\000\255\000\019\000\059\000\228\000\019\000\ +\004\001\218\000\169\000\021\000\065\000\035\000\004\000\219\000\ +\023\000\002\001\066\000" + +let yycheck = "\049\000\ +\005\000\006\000\061\000\008\000\009\000\048\000\011\000\018\000\ +\019\000\020\000\105\000\019\000\020\000\055\000\076\000\112\000\ +\006\001\079\000\004\001\073\000\074\000\083\000\084\000\077\000\ +\029\000\006\000\103\000\008\000\009\000\002\001\020\001\108\000\ +\002\001\110\000\008\001\008\001\002\001\001\001\008\001\003\001\ +\135\000\005\001\008\001\002\001\006\001\004\001\100\000\124\000\ +\145\000\019\001\003\001\062\000\005\001\008\001\018\001\063\000\ +\020\001\003\001\020\001\005\001\006\001\034\001\001\000\002\000\ +\010\001\011\001\012\001\020\001\073\000\074\000\075\000\002\001\ +\077\000\078\000\020\001\021\001\007\001\003\001\008\001\005\001\ +\142\000\086\000\087\000\160\000\089\000\090\000\091\000\020\001\ +\008\001\009\001\167\000\024\001\018\001\098\000\020\001\100\000\ +\104\000\102\000\175\000\194\000\195\000\109\000\002\001\111\000\ +\004\001\086\000\002\001\007\001\089\000\090\000\091\000\006\001\ +\008\001\002\001\157\000\010\001\011\001\012\001\002\001\008\001\ +\004\001\126\000\002\001\002\001\183\000\020\001\188\000\169\000\ +\008\001\008\001\008\001\009\001\209\000\010\001\011\001\012\001\ +\213\000\214\000\200\000\201\000\202\000\001\001\018\001\003\001\ +\020\001\005\001\006\001\224\000\225\000\226\000\010\001\011\001\ +\012\001\013\001\008\001\008\001\215\000\002\001\008\001\004\001\ +\020\001\021\001\007\001\034\001\241\000\002\001\008\001\004\001\ +\245\000\177\000\008\001\233\000\180\000\181\000\182\000\002\001\ +\006\001\004\001\255\000\008\001\010\001\011\001\012\001\004\001\ +\010\001\011\001\012\001\192\000\008\001\008\001\020\001\021\001\ +\008\001\252\000\024\001\018\001\013\001\208\000\020\001\024\001\ +\205\000\000\000\020\001\253\000\014\001\015\001\016\001\017\001\ +\010\001\011\001\012\001\007\001\022\001\023\001\018\001\025\001\ +\021\001\018\001\018\001\029\001\030\001\031\001\032\001\033\001\ +\006\001\010\001\011\001\012\001\010\001\011\001\012\001\006\001\ +\020\001\002\001\013\001\010\001\011\001\012\001\020\001\021\001\ +\020\001\024\001\024\001\008\001\020\001\020\001\021\001\014\001\ +\015\001\016\001\017\001\008\001\006\001\006\001\020\001\022\001\ +\023\001\020\001\025\001\026\001\027\001\028\001\006\001\006\001\ +\006\001\000\000\010\001\011\001\012\001\007\001\007\001\001\001\ +\013\001\020\001\009\001\003\001\020\001\009\001\009\001\001\001\ +\020\001\005\001\009\001\126\000\020\001\008\001\020\001\008\001\ +\007\001\006\001\008\001\020\001\008\001\003\001\005\001\021\001\ +\008\001\006\001\001\001\003\001\020\001\003\001\001\001\003\001\ +\002\001\020\001\020\001\020\001\013\001\003\001\003\001\197\000\ +\020\001\020\001\020\001\007\001\003\001\005\001\086\000\020\001\ +\087\000\006\001\008\001\020\001\020\001\020\001\003\001\005\001\ +\003\001\020\001\020\001\020\001\003\001\006\001\192\000\005\001\ +\020\001\177\000\107\000\020\001\020\001\020\001\024\001\178\000\ +\020\001\253\000\020\001" + +let yynames_const = "\ + COMMA\000\ + LPAREN\000\ + RPAREN\000\ + LBRACKET\000\ + RBRACKET\000\ + SEMI\000\ + COLON\000\ + RED\000\ + EQUIV\000\ + EQUIVEQ\000\ + EQUAL\000\ + FUN\000\ + EQUATION\000\ + QUERY\000\ + NOUNIF\000\ + SLASH\000\ + STAR\000\ + DOT\000\ + WEDGE\000\ + EOF\000\ + NOT\000\ + ELIMTRUE\000\ + DIFF\000\ + PREDICATE\000\ + REDUCTION\000\ + DATA\000\ + PARAM\000\ + CLAUSES\000\ + CONST\000\ + SET\000\ + NAME\000\ + TYPE\000\ + FORALL\000\ + " + +let yynames_block = "\ + IDENT\000\ + INT\000\ + " + +let yyact = [| + (fun _ -> failwith "parser") +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 93 "parser.mly" + ( PFunApp (_1, _3) ) +# 402 "parser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 95 "parser.mly" + ( PTuple _2 ) +# 409 "parser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 97 "parser.mly" + ( PName(_1, _3) ) +# 417 "parser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Ptree.ident) in + Obj.repr( +# 99 "parser.mly" + ( PIdent (_1) ) +# 424 "parser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'netermseq) in + Obj.repr( +# 103 "parser.mly" + ( _1 :: _3 ) +# 432 "parser.ml" + : 'netermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 105 "parser.mly" + ( [_1] ) +# 439 "parser.ml" + : 'netermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'netermseq) in + Obj.repr( +# 109 "parser.mly" + ( _1 ) +# 446 "parser.ml" + : 'termseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 111 "parser.mly" + ( [] ) +# 452 "parser.ml" + : 'termseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'neidentseq) in + Obj.repr( +# 115 "parser.mly" + ( _1 :: _3 ) +# 460 "parser.ml" + : 'neidentseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Ptree.ident) in + Obj.repr( +# 117 "parser.mly" + ( [_1] ) +# 467 "parser.ml" + : 'neidentseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'formatseq) in + Obj.repr( +# 121 "parser.mly" + ( PFFunApp (_1, _3) ) +# 475 "parser.ml" + : 'format)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'formatseq) in + Obj.repr( +# 123 "parser.mly" + ( PFTuple _2 ) +# 482 "parser.ml" + : 'format)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'formatseq) in + Obj.repr( +# 125 "parser.mly" + ( PFName(_1, _3) ) +# 490 "parser.ml" + : 'format)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Ptree.ident) in + Obj.repr( +# 127 "parser.mly" + ( PFIdent (_1) ) +# 497 "parser.ml" + : 'format)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : Ptree.ident) in + Obj.repr( +# 129 "parser.mly" + ( PFAny (_2) ) +# 504 "parser.ml" + : 'format)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'format) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'neformatseq) in + Obj.repr( +# 133 "parser.mly" + ( _1 :: _3 ) +# 512 "parser.ml" + : 'neformatseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'format) in + Obj.repr( +# 135 "parser.mly" + ( [_1] ) +# 519 "parser.ml" + : 'neformatseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'neformatseq) in + Obj.repr( +# 139 "parser.mly" + ( _1 ) +# 526 "parser.ml" + : 'formatseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 141 "parser.mly" + ( [] ) +# 532 "parser.ml" + : 'formatseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 145 "parser.mly" + ( _2 ) +# 539 "parser.ml" + : 'optint)) +; (fun __caml_parser_env -> + Obj.repr( +# 147 "parser.mly" + ( -1 ) +# 545 "parser.ml" + : 'optint)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'neidentseq) in + Obj.repr( +# 151 "parser.mly" + ( _1 ) +# 552 "parser.ml" + : 'identseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 153 "parser.mly" + ( [] ) +# 558 "parser.ml" + : 'identseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'termseq) in + Obj.repr( +# 159 "parser.mly" + ( PSimpleFact(_1,_3), parse_extent() ) +# 566 "parser.ml" + : 'fact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 161 "parser.mly" + ( PSNeq(_1,_3), parse_extent() ) +# 574 "parser.ml" + : 'fact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'termand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 165 "parser.mly" + ( Clause(_1,_3) ) +# 582 "parser.ml" + : 'rule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 167 "parser.mly" + ( Clause([],_1) ) +# 589 "parser.ml" + : 'rule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'termand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 169 "parser.mly" + ( Equiv(_1,_3,true) ) +# 597 "parser.ml" + : 'rule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'termand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 171 "parser.mly" + ( Equiv(_1,_3,false) ) +# 605 "parser.ml" + : 'rule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'termand) in + Obj.repr( +# 175 "parser.mly" + ( _1 :: _3 ) +# 613 "parser.ml" + : 'termand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 177 "parser.mly" + ( [_1] ) +# 620 "parser.ml" + : 'termand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'rule) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'reduc) in + Obj.repr( +# 181 "parser.mly" + ( _1 :: _3 ) +# 628 "parser.ml" + : 'reduc)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'rule) in + Obj.repr( +# 183 "parser.mly" + ( [_1] ) +# 635 "parser.ml" + : 'reduc)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'formatseq) in + Obj.repr( +# 187 "parser.mly" + ( (_1,_3) ) +# 643 "parser.ml" + : 'factformat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 193 "parser.mly" + ( [(_1, _3)] ) +# 651 "parser.ml" + : 'eqlist)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'eqlist) in + Obj.repr( +# 195 "parser.mly" + ( (_1, _3) :: _5 ) +# 660 "parser.ml" + : 'eqlist)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 199 "parser.mly" + ( (FunDecl(_2, _4)) :: _6 ) +# 669 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 201 "parser.mly" + ( (DataFunDecl(_2, _4)) :: _6 ) +# 678 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'eqlist) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 203 "parser.mly" + ( (Equation(_2)) :: _4 ) +# 686 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 205 "parser.mly" + ( (Query _2) :: _4 ) +# 694 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'factformat) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'optint) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 207 "parser.mly" + ( (NoUnif (_2,_3)) :: _5 ) +# 703 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 209 "parser.mly" + ( (Not _2) :: _4 ) +# 711 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 211 "parser.mly" + ( (Elimtrue _2) :: _4 ) +# 719 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : int) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'identseq) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 213 "parser.mly" + ( (PredDecl(_2, _4, _5)) :: _7 ) +# 729 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 215 "parser.mly" + ( (Param(_2,S _4)) :: _6 ) +# 738 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.decl list) in + Obj.repr( +# 217 "parser.mly" + ( (Param(_2,I _4)) :: _6 ) +# 747 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'reduc) in + Obj.repr( +# 219 "parser.mly" + ( [Reduc(_2)] ) +# 754 "parser.ml" + : Ptree.decl list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 225 "parser.mly" + ( PSimpleFact(_1,_3), parse_extent() ) +# 762 "parser.ml" + : 'tfact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Ptree.ident) in + Obj.repr( +# 227 "parser.mly" + ( PSimpleFact(_1,[]), parse_extent() ) +# 769 "parser.ml" + : 'tfact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 229 "parser.mly" + ( PSNeq(_1,_3), parse_extent() ) +# 777 "parser.ml" + : 'tfact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'ttermand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tfact) in + Obj.repr( +# 233 "parser.mly" + ( Clause(_1,_3) ) +# 785 "parser.ml" + : 'trule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tfact) in + Obj.repr( +# 235 "parser.mly" + ( Clause([],_1) ) +# 792 "parser.ml" + : 'trule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'ttermand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tfact) in + Obj.repr( +# 237 "parser.mly" + ( Equiv(_1,_3,true) ) +# 800 "parser.ml" + : 'trule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'ttermand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tfact) in + Obj.repr( +# 239 "parser.mly" + ( Equiv(_1,_3,false) ) +# 808 "parser.ml" + : 'trule)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tfact) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'ttermand) in + Obj.repr( +# 243 "parser.mly" + ( _1 :: _3 ) +# 816 "parser.ml" + : 'ttermand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tfact) in + Obj.repr( +# 245 "parser.mly" + ( [_1] ) +# 823 "parser.ml" + : 'ttermand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'formatseq) in + Obj.repr( +# 249 "parser.mly" + ( (_1,_3) ) +# 831 "parser.ml" + : 'tfactformat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'nevartype) in + Obj.repr( +# 253 "parser.mly" + ( (_1,_3)::_5 ) +# 840 "parser.ml" + : 'nevartype)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : Ptree.ident) in + Obj.repr( +# 256 "parser.mly" + ( [(_1,_3)] ) +# 848 "parser.ml" + : 'nevartype)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'nevartype) in + Obj.repr( +# 260 "parser.mly" + ( _2 ) +# 855 "parser.ml" + : 'forallvartype)) +; (fun __caml_parser_env -> + Obj.repr( +# 262 "parser.mly" + ( [] ) +# 861 "parser.ml" + : 'forallvartype)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'trule) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'treduc) in + Obj.repr( +# 266 "parser.mly" + ( (_1,_2) :: _4 ) +# 870 "parser.ml" + : 'treduc)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'trule) in + Obj.repr( +# 268 "parser.mly" + ( [_1,_2] ) +# 878 "parser.ml" + : 'treduc)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'neidentseq) in + Obj.repr( +# 272 "parser.mly" + ( _2 ) +# 885 "parser.ml" + : 'options)) +; (fun __caml_parser_env -> + Obj.repr( +# 274 "parser.mly" + ( [] ) +# 891 "parser.ml" + : 'options)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 280 "parser.mly" + ( [(_1, _2, _4)] ) +# 900 "parser.ml" + : 'teqlist)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'teqlist) in + Obj.repr( +# 282 "parser.mly" + ( (_1, _2, _4)::_6 ) +# 910 "parser.ml" + : 'teqlist)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 286 "parser.mly" + ( TTypeDecl(_2) :: _4 ) +# 918 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 288 "parser.mly" + ( TNameDecl(_2,_4) :: _6 ) +# 927 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 8 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 6 : 'identseq) in + let _7 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _8 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _10 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 290 "parser.mly" + ( (TFunDecl(_2, _4, _7, _8)) :: _10 ) +# 938 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 292 "parser.mly" + ( (TConstDecl(_2, _4, _5)) :: _7 ) +# 948 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'options) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'teqlist) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 297 "parser.mly" + ( (TEquation(_3, _2)) :: _5 ) +# 957 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'tfact) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 299 "parser.mly" + ( (TQuery(_2, _4)) :: _6 ) +# 966 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tfact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 301 "parser.mly" + ( (TQuery([], _2)) :: _4 ) +# 974 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'tfactformat) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'optint) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 303 "parser.mly" + ( (TNoUnif (_2, _4,_5)) :: _7 ) +# 984 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'tfactformat) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'optint) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 305 "parser.mly" + ( (TNoUnif ([],_2,_3)) :: _5 ) +# 993 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'tfact) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 307 "parser.mly" + ( (TNot(_2,_4)) :: _6 ) +# 1002 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tfact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 309 "parser.mly" + ( (TNot([],_2)) :: _4 ) +# 1010 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'tfact) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 311 "parser.mly" + ( (TElimtrue(_2,_4)) :: _6 ) +# 1019 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tfact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 313 "parser.mly" + ( (TElimtrue([],_2)) :: _4 ) +# 1027 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'identseq) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 315 "parser.mly" + ( (TPredDecl(_2, _4, _6)) :: _8 ) +# 1037 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : Ptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 317 "parser.mly" + ( (TPredDecl(_2, [], _3)) :: _5 ) +# 1046 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : Ptree.ident) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 319 "parser.mly" + ( (TSet(_2,S _4)) :: _6 ) +# 1055 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Ptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Ptree.tdecl list) in + Obj.repr( +# 321 "parser.mly" + ( (TSet(_2,I _4)) :: _6 ) +# 1064 "parser.ml" + : Ptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'treduc) in + Obj.repr( +# 323 "parser.mly" + ( [TReduc(_2)] ) +# 1071 "parser.ml" + : Ptree.tdecl list)) +(* Entry all *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +(* Entry tall *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +|] +let yytables = + { Parsing.actions=yyact; + Parsing.transl_const=yytransl_const; + Parsing.transl_block=yytransl_block; + Parsing.lhs=yylhs; + Parsing.len=yylen; + Parsing.defred=yydefred; + Parsing.dgoto=yydgoto; + Parsing.sindex=yysindex; + Parsing.rindex=yyrindex; + Parsing.gindex=yygindex; + Parsing.tablesize=yytablesize; + Parsing.table=yytable; + Parsing.check=yycheck; + Parsing.error_function=parse_error; + Parsing.names_const=yynames_const; + Parsing.names_block=yynames_block } +let all (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 1 lexfun lexbuf : Ptree.decl list) +let tall (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 2 lexfun lexbuf : Ptree.tdecl list) diff --git a/preinstallTTool/linux/proverif/src/parser.mli b/preinstallTTool/linux/proverif/src/parser.mli new file mode 100644 index 0000000000000000000000000000000000000000..58683d83ce19f294719aacdc3c62c4d161fb6841 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/parser.mli @@ -0,0 +1,41 @@ +type token = + | COMMA + | LPAREN + | RPAREN + | LBRACKET + | RBRACKET + | SEMI + | COLON + | IDENT of (Ptree.ident) + | INT of (int) + | RED + | EQUIV + | EQUIVEQ + | EQUAL + | FUN + | EQUATION + | QUERY + | NOUNIF + | SLASH + | STAR + | DOT + | WEDGE + | EOF + | NOT + | ELIMTRUE + | DIFF + | PREDICATE + | REDUCTION + | DATA + | PARAM + | CLAUSES + | CONST + | SET + | NAME + | TYPE + | FORALL + +val all : + (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Ptree.decl list +val tall : + (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Ptree.tdecl list diff --git a/preinstallTTool/linux/proverif/src/parser.mly b/preinstallTTool/linux/proverif/src/parser.mly new file mode 100644 index 0000000000000000000000000000000000000000..361e108101ca5154676bc7182087153cfd7c0e34 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/parser.mly @@ -0,0 +1,324 @@ +%{ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +%} +%{ + +open Parsing_helper +open Ptree +exception Syntax + +%} + +%token COMMA +%token LPAREN +%token RPAREN +%token LBRACKET +%token RBRACKET +%token SEMI +%token COLON +%token <Ptree.ident> IDENT +%token <int> INT +%token RED +%token EQUIV +%token EQUIVEQ +%token EQUAL +%token FUN +%token EQUATION +%token QUERY +%token NOUNIF +%token SLASH +%token STAR +%token DOT +%token WEDGE +%token EOF +%token NOT +%token ELIMTRUE +%token DIFF +%token PREDICATE + +/* untyped front-end only */ +%token REDUCTION +%token DATA +%token PARAM + +/*typed front-end only*/ +%token CLAUSES +%token CONST +%token SET +%token NAME +%token TYPE +%token FORALL + +%left DIFF +%left WEDGE + +/*untyped front-end*/ +%start all +%type <Ptree.decl list> all +/*typed front-end*/ +%start tall +%type <Ptree.tdecl list> tall + + +%% + +term: + IDENT LPAREN termseq RPAREN + { PFunApp ($1, $3) } +| LPAREN termseq RPAREN + { PTuple $2 } +| IDENT LBRACKET termseq RBRACKET + { PName($1, $3) } +| IDENT + { PIdent ($1) } + +netermseq: + term COMMA netermseq + { $1 :: $3 } +| term + { [$1] } + +termseq: + netermseq + { $1 } +| + { [] } + +neidentseq: + IDENT COMMA neidentseq + { $1 :: $3 } +| IDENT + { [$1] } + +format: + IDENT LPAREN formatseq RPAREN + { PFFunApp ($1, $3) } +| LPAREN formatseq RPAREN + { PFTuple $2 } +| IDENT LBRACKET formatseq RBRACKET + { PFName($1, $3) } +| IDENT + { PFIdent ($1) } +| STAR IDENT + { PFAny ($2) } + +neformatseq: + format COMMA neformatseq + { $1 :: $3 } +| format + { [$1] } + +formatseq: + neformatseq + { $1 } +| + { [] } + +optint: + SLASH INT + { $2 } +| + { -1 } + +identseq: + neidentseq + { $1 } +| + { [] } + +/*untyped front-end*/ + +fact: + IDENT COLON termseq + { PSimpleFact($1,$3), parse_extent() } +| term DIFF term + { PSNeq($1,$3), parse_extent() } + +rule: + termand RED fact + { Clause($1,$3) } +| fact + { Clause([],$1) } +| termand EQUIV fact + { Equiv($1,$3,true) } +| termand EQUIVEQ fact + { Equiv($1,$3,false) } + +termand: + fact WEDGE termand + { $1 :: $3 } +| fact + { [$1] } + +reduc: + rule SEMI reduc + { $1 :: $3 } +| rule DOT + { [$1] } + +factformat: + IDENT COLON formatseq + { ($1,$3) } + +/* Equations */ + +eqlist: + term EQUAL term + { [($1, $3)] } +| term EQUAL term SEMI eqlist + { ($1, $3) :: $5 } + +all: + FUN IDENT SLASH INT DOT all + { (FunDecl($2, $4)) :: $6 } +| DATA IDENT SLASH INT DOT all + { (DataFunDecl($2, $4)) :: $6 } +| EQUATION eqlist DOT all + { (Equation($2)) :: $4 } +| QUERY fact DOT all + { (Query $2) :: $4 } +| NOUNIF factformat optint DOT all + { (NoUnif ($2,$3)) :: $5 } +| NOT fact DOT all + { (Not $2) :: $4 } +| ELIMTRUE fact DOT all + { (Elimtrue $2) :: $4 } +| PREDICATE IDENT SLASH INT identseq DOT all + { (PredDecl($2, $4, $5)) :: $7 } +| PARAM IDENT EQUAL IDENT DOT all + { (Param($2,S $4)) :: $6 } +| PARAM IDENT EQUAL INT DOT all + { (Param($2,I $4)) :: $6 } +| REDUCTION reduc EOF + { [Reduc($2)] } + +/* typed front-end */ + +tfact: + IDENT LPAREN termseq RPAREN + { PSimpleFact($1,$3), parse_extent() } +| IDENT + { PSimpleFact($1,[]), parse_extent() } +| term DIFF term + { PSNeq($1,$3), parse_extent() } + +trule: + ttermand RED tfact + { Clause($1,$3) } +| tfact + { Clause([],$1) } +| ttermand EQUIV tfact + { Equiv($1,$3,true) } +| ttermand EQUIVEQ tfact + { Equiv($1,$3,false) } + +ttermand: + tfact WEDGE ttermand + { $1 :: $3 } +| tfact + { [$1] } + +tfactformat: + IDENT LPAREN formatseq RPAREN + { ($1,$3) } + +nevartype: + IDENT COLON IDENT COMMA nevartype + { ($1,$3)::$5 } +| + IDENT COLON IDENT + { [($1,$3)] } + +forallvartype: + FORALL nevartype SEMI + { $2 } +| + { [] } + +treduc: + forallvartype trule SEMI treduc + { ($1,$2) :: $4 } +| forallvartype trule DOT + { [$1,$2] } + +options: + LBRACKET neidentseq RBRACKET + { $2 } +| + { [] } + +/* Equations */ + +teqlist: + forallvartype term EQUAL term + { [($1, $2, $4)] } +| forallvartype term EQUAL term SEMI teqlist + { ($1, $2, $4)::$6 } + +tall: + TYPE IDENT DOT tall + { TTypeDecl($2) :: $4 } +| NAME IDENT COLON IDENT DOT tall + { TNameDecl($2,$4) :: $6 } +| FUN IDENT LPAREN identseq RPAREN COLON IDENT options DOT tall + { (TFunDecl($2, $4, $7, $8)) :: $10 } +| CONST IDENT COLON IDENT options DOT tall + { (TConstDecl($2, $4, $5)) :: $7 } +| EQUATION options teqlist DOT tall + /* I put the options first to avoid a shift/reduce conflict + between equation ... = n[terms]. + and equation ... = x [convergent]. */ + { (TEquation($3, $2)) :: $5 } +| QUERY nevartype SEMI tfact DOT tall + { (TQuery($2, $4)) :: $6 } +| QUERY tfact DOT tall + { (TQuery([], $2)) :: $4 } +| NOUNIF nevartype SEMI tfactformat optint DOT tall + { (TNoUnif ($2, $4,$5)) :: $7 } +| NOUNIF tfactformat optint DOT tall + { (TNoUnif ([],$2,$3)) :: $5 } +| NOT nevartype SEMI tfact DOT tall + { (TNot($2,$4)) :: $6 } +| NOT tfact DOT tall + { (TNot([],$2)) :: $4 } +| ELIMTRUE nevartype SEMI tfact DOT tall + { (TElimtrue($2,$4)) :: $6 } +| ELIMTRUE tfact DOT tall + { (TElimtrue([],$2)) :: $4 } +| PREDICATE IDENT LPAREN identseq RPAREN options DOT tall + { (TPredDecl($2, $4, $6)) :: $8 } +| PREDICATE IDENT options DOT tall + { (TPredDecl($2, [], $3)) :: $5 } +| SET IDENT EQUAL IDENT DOT tall + { (TSet($2,S $4)) :: $6 } +| SET IDENT EQUAL INT DOT tall + { (TSet($2,I $4)) :: $6 } +| CLAUSES treduc EOF + { [TReduc($2)] } + diff --git a/preinstallTTool/linux/proverif/src/parsing_helper.cmi b/preinstallTTool/linux/proverif/src/parsing_helper.cmi new file mode 100644 index 0000000000000000000000000000000000000000..648f9977801f08b24e2498b1eace9d0786a86c9d Binary files /dev/null and b/preinstallTTool/linux/proverif/src/parsing_helper.cmi differ diff --git a/preinstallTTool/linux/proverif/src/parsing_helper.cmx b/preinstallTTool/linux/proverif/src/parsing_helper.cmx new file mode 100644 index 0000000000000000000000000000000000000000..61f56f50af594c26987b38298376f8f02dbde688 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/parsing_helper.cmx differ diff --git a/preinstallTTool/linux/proverif/src/parsing_helper.ml b/preinstallTTool/linux/proverif/src/parsing_helper.ml new file mode 100644 index 0000000000000000000000000000000000000000..f332ff93927ecf33874bc2c23425c797c4cbf3bf --- /dev/null +++ b/preinstallTTool/linux/proverif/src/parsing_helper.ml @@ -0,0 +1,92 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Lexing + +let internal_error mess = + print_string ("Internal error: " ^ mess ^ "\nPlease report bug to Bruno.Blanchet@inria.fr, including input file and output\n"); + exit 3 + +(* extent, for error messages *) + +type extent = Lexing.position * Lexing.position + +let dummy_ext = (Lexing.dummy_pos, Lexing.dummy_pos) + +let merge_ext (p1,_) (_,p2) = (p1,p2) + +let next_line lexbuf = + lexbuf.lex_curr_p <- { lexbuf.lex_curr_p with + pos_bol = lexbuf.lex_curr_p.pos_cnum; + pos_lnum = lexbuf.lex_curr_p.pos_lnum + 1 } + +let extent lexbuf = + (Lexing.lexeme_start_p lexbuf, + Lexing.lexeme_end_p lexbuf) + +let parse_extent () = + (Parsing.symbol_start_pos(), + Parsing.symbol_end_pos()) + +let input_error mess (loc_start, loc_end) = + if loc_start.pos_cnum = -1 then + Printf.printf "Error: %s\n" mess + else +(* + Printf.printf "File \"%s\", line %d, column %d, character %d - line %d, column %d, character %d:\nError: %s\n" + loc_start.pos_fname + loc_start.pos_lnum (loc_start.pos_cnum - loc_start.pos_bol) loc_start.pos_cnum + loc_end.pos_lnum loc_end.loc_column loc_end.pos_cnum + mess + + Printf.printf "File \"%s\", line %d, characters %d-%d:\nError: %s\n" + loc_start.pos_fname + loc_start.pos_lnum (loc_start.pos_cnum - loc_start.pos_bol+1) (loc_start.loc_column + 1 + loc_end.loc_char - loc_start.loc_char) + mess +*) + Printf.printf "File \"%s\", line %d, character %d - line %d, character %d:\nError: %s\n" + loc_start.pos_fname + loc_start.pos_lnum (loc_start.pos_cnum - loc_start.pos_bol +1) + loc_end.pos_lnum (loc_end.pos_cnum - loc_end.pos_bol+1) + mess; + exit 2 + +let input_warning mess (loc_start, loc_end) = + if loc_start.pos_cnum = -1 then + Printf.printf "Warning: %s\n" mess + else + Printf.printf "File \"%s\", line %d, character %d - line %d, character %d:\nWarning: %s\n" + loc_start.pos_fname + loc_start.pos_lnum (loc_start.pos_cnum - loc_start.pos_bol +1) + loc_end.pos_lnum (loc_end.pos_cnum - loc_end.pos_bol+1) + mess + + +let user_error mess = + print_string mess; + exit 2 + diff --git a/preinstallTTool/linux/proverif/src/parsing_helper.mli b/preinstallTTool/linux/proverif/src/parsing_helper.mli new file mode 100644 index 0000000000000000000000000000000000000000..eee13f0d422f3fc19f12d76f8ef7d8b42872c2c5 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/parsing_helper.mli @@ -0,0 +1,39 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type extent + +val dummy_ext : extent +val merge_ext : extent -> extent -> extent +val next_line : Lexing.lexbuf -> unit +val extent : Lexing.lexbuf -> extent +val parse_extent : unit -> extent +val input_error : string -> extent -> 'a +val input_warning : string -> extent -> unit +val user_error : string -> 'a +val internal_error : string -> 'a + diff --git a/preinstallTTool/linux/proverif/src/piauth.cmi b/preinstallTTool/linux/proverif/src/piauth.cmi new file mode 100644 index 0000000000000000000000000000000000000000..2e84b8754e9fb8bfca73f5c27115e47ae76c1b2b Binary files /dev/null and b/preinstallTTool/linux/proverif/src/piauth.cmi differ diff --git a/preinstallTTool/linux/proverif/src/piauth.cmx b/preinstallTTool/linux/proverif/src/piauth.cmx new file mode 100644 index 0000000000000000000000000000000000000000..b130b5fb10faccd591f3659a8f7006721f7e80b1 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/piauth.cmx differ diff --git a/preinstallTTool/linux/proverif/src/piauth.ml b/preinstallTTool/linux/proverif/src/piauth.ml new file mode 100644 index 0000000000000000000000000000000000000000..a09ac4a60ffde6a24e39541b4591a965b01cae40 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/piauth.ml @@ -0,0 +1,1206 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types +open Pitypes +open Terms + +type query_res = True | False | DontKnow + +let get_res = function + True -> " is true." + | False -> " is false." + | DontKnow -> " cannot be proved." + +let get_html_res = function + True -> " is <span class=\"trueresult\">true</span>." + | False -> " is <span class=\"falseresult\">false</span>." + | DontKnow -> " <span class=\"unknownresult\">cannot be proved</span>." + +let supplemental_info = ref None + +(* Display a clause and possibly a corresponding trace + When inj_mode = Some q, try to reconstruct a trace that falsifies injectivity + When inj_mode = None, just try to reconstruct a trace corresponding + to the derivation of the clause cl. + Returns true when a trace has definitely been found. + *) + +let display_clause_trace detail recheck inj_mode list_started cl = + Display.Text.print_string "goal reachable: "; + Display.Text.display_rule cl; + if !Param.html_output then + begin + if not (!list_started) then + begin + list_started := true; + Display.Html.print_string "<UL>\n"; + end; + Display.Html.print_string "<LI>goal reachable: "; + Display.Html.display_rule cl + end; + (* TulaFale expects a derivation after "goal reachable" *) + if (detail || (!Param.tulafale = 1)) then + begin + let new_tree = History.build_history cl in + if (!Param.reconstruct_trace) && (!Param.reconstruct_derivation) && + (!Param.key_compromise == 0) + then + begin + Reduction.do_reduction recheck inj_mode new_tree + end + else + begin + cleanup(); + false + end + end + else + false + +(* Link variables of a fact to new constants, of type "SpecVar" *) + +let rec put_constants = function + Var v -> + begin + match v.link with + TLink t -> () + | NoLink -> + v.link <- TLink (FunApp({ f_name = Display.Text.varname v; + f_type = [], v.btype; + f_cat = SpecVar v; + f_initial_cat = SpecVar v; + f_private = false; + f_options = 0 }, [])); + current_bound_vars := v :: (!current_bound_vars) + | _ -> internal_error "unexpected link in put_constants" + end + | FunApp(f,l) -> List.iter put_constants l + +let put_constants_fact = function + Pred(p,l) -> List.iter put_constants l + | Out(t,tl) -> + put_constants t; + List.iter (fun (_,t') -> put_constants t') tl + +let put_constants_constra = List.iter (function + Neq(t1,t2) -> put_constants t1; put_constants t2) + +let put_constants_rule (hyp, concl, hist, constra) = + List.iter put_constants_fact hyp; + put_constants_fact concl; + List.iter put_constants_constra constra + + +(* Copy a query, following links inside variables *) + +let copy_event = function + QSEvent(b, t) -> QSEvent(b, TermsEq.copy_remove_syntactic t) + | QFact(p, tl) -> QFact(p, List.map TermsEq.copy_remove_syntactic tl) + | QNeq(t1,t2) -> QNeq(TermsEq.copy_remove_syntactic t1, TermsEq.copy_remove_syntactic t2) + | QEq(t1,t2) -> QEq(TermsEq.copy_remove_syntactic t1, TermsEq.copy_remove_syntactic t2) + +let rec copy_query = function + Before(e, hll) -> Before(copy_event e, List.map (List.map copy_hypelem) hll) + +and copy_hypelem = function + QEvent e -> QEvent(copy_event e) + | NestedQuery q -> NestedQuery (copy_query q) + +(* Check that all elements of SpecVar that occur in the "begin" part + of a query also occur in its "end" part *) + +let occurs_event sv = function + QSEvent(b,t) -> Terms.occurs_f sv t + | QFact(p,tl) -> List.exists (Terms.occurs_f sv) tl + | QNeq(t1,t2) -> (Terms.occurs_f sv t1) || (Terms.occurs_f sv t2) + | QEq(t1,t2) -> (Terms.occurs_f sv t1) || (Terms.occurs_f sv t2) + +let rec occurs_in_e e = function + Var v -> true + | FunApp({ f_cat = SpecVar _ } as sv, []) -> occurs_event sv e + | FunApp(f,l) -> List.for_all (occurs_in_e e) l + +let occurs_in_e_event e = function + QSEvent(b,t) -> occurs_in_e e t + | QFact(p,tl) -> List.for_all (occurs_in_e e) tl + | QNeq(t1,t2) -> (occurs_in_e e t1) && (occurs_in_e e t2) + | QEq(t1,t2) -> (occurs_in_e e t1) && (occurs_in_e e t2) + +let rec occurs_in_e_query e = function + Before(e',hll) -> (occurs_in_e_event e e') + && (List.for_all (List.for_all (occurs_in_e_hypelem e)) hll) + +and occurs_in_e_hypelem e = function + QEvent e' -> occurs_in_e_event e e' + | NestedQuery q -> occurs_in_e_query e q + +let check_query_vars = function + Before(e,hll) -> List.for_all (List.for_all (occurs_in_e_hypelem e)) hll + +(* Replace constants "SpecVar" of a query with the corresponding variables *) + +let rec specvar_to_var = function + Var v -> Var v + | FunApp({ f_cat = SpecVar v} ,[]) -> + Var v + | FunApp(f,l) -> FunApp(f, List.map specvar_to_var l) + +let specvar_to_var_event = function + QSEvent(b,t) -> QSEvent(b, specvar_to_var t) + | QFact(p, tl) -> QFact(p, List.map specvar_to_var tl) + | QNeq(t1,t2) -> QNeq(specvar_to_var t1, specvar_to_var t2) + | QEq(t1,t2) -> QEq(specvar_to_var t1, specvar_to_var t2) + +let rec specvar_to_var_query = function + Before(e,hll) -> Before(specvar_to_var_event e, List.map (List.map specvar_to_var_hypelem) hll) + +and specvar_to_var_hypelem = function + QEvent e -> QEvent(specvar_to_var_event e) + | NestedQuery q -> NestedQuery (specvar_to_var_query q) + +let specvar_to_var_env = List.map (fun (v,t) -> (v, specvar_to_var t)) + +let specvar_to_var_fact = function + Pred(p,l) -> Pred(p, List.map specvar_to_var l) + | Out(t,tl) -> Out(specvar_to_var t, + List.map (fun (x,t') -> (x,specvar_to_var t')) tl) + +let specvar_to_var_constra = List.map (function + Neq(t1, t2) -> Neq(specvar_to_var t1, specvar_to_var t2)) + +(* Test whether v occurs in query q *) + +let v_occurs v = function + QSEvent(b,t) -> Terms.occurs_var v t + | QFact(p,tl) -> List.exists (Terms.occurs_var v) tl + | QNeq(t1,t2) -> (Terms.occurs_var v t1) || (Terms.occurs_var v t2) + | QEq(t1,t2) -> (Terms.occurs_var v t1) || (Terms.occurs_var v t2) + +let rec v_occurs_query v = function + Before(e',hll) -> + (v_occurs v e') || + (List.exists (List.exists (v_occurs_hypelem v)) hll) + +and v_occurs_hypelem v = function + QEvent e' -> v_occurs v e' + | NestedQuery q -> v_occurs_query v q + +(* Call f for each variable that occurs in the query *) + +let rec for_all_term f = function + Var v -> f v + | FunApp(_,l) -> List.iter (for_all_term f) l + +let for_all_event f = function + QSEvent(b,t) -> for_all_term f t + | QFact(p,tl) -> List.iter (for_all_term f) tl + | QNeq(t1,t2) -> for_all_term f t1; for_all_term f t2 + | QEq(t1,t2) -> for_all_term f t1; for_all_term f t2 + +let rec for_all_query f = function + Before(e',hll) -> + for_all_event f e'; + List.iter (List.iter (for_all_hypelem f)) hll + +and for_all_hypelem f = function + QEvent e' -> for_all_event f e' + | NestedQuery q -> for_all_query f q + + +(* Check that the value of e in a query e ==> H determines the value + of e ==> H *) + + +(* Rename variables to fresh variables *) + +let copy_event_fresh = function + QSEvent(b,t) -> QSEvent(b, Terms.copy_term t) + | QFact(p, tl) -> QFact(p, List.map Terms.copy_term tl) + | QNeq(t1,t2) -> QNeq(Terms.copy_term t1, Terms.copy_term t2) + | QEq(t1,t2) -> QEq(Terms.copy_term t1, Terms.copy_term t2) + +(* Copies the query without further renaming of variables *) + +let rec copy_term4 = function + Var v -> + begin + match v.link with + VLink v' -> Var v' + | NoLink -> Var v + | _ -> internal_error "unexpected link in copy_term4" + end + | FunApp(f,l) -> + FunApp(f, List.map copy_term4 l) + +let copy_event4 = function + QSEvent(b,t) -> QSEvent(b, copy_term4 t) + | QFact(p, tl) -> QFact(p, List.map copy_term4 tl) + | QNeq(t1,t2) -> QNeq(copy_term4 t1, copy_term4 t2) + | QEq(t1,t2) -> QEq(copy_term4 t1, copy_term4 t2) + +let rec copy_query4 = function + Before(e, hll) -> Before(copy_event4 e, List.map (List.map copy_hypelem4) hll) + +and copy_hypelem4 = function + QEvent e -> QEvent(copy_event4 e) + | NestedQuery q -> NestedQuery (copy_query4 q) + + +(* Unifies two events e and e' modulo the equational theory. + Calls f for each found most general unifier *) + +let unify_event f e e' = match (e,e') with + QSEvent(b,t), QSEvent(b',t') -> + if b!=b' then raise Unify; + TermsEq.unify_modulo f t t' + | QFact(p,tl), QFact(p',tl') -> + if p!=p' then raise Unify; + TermsEq.unify_modulo_list f tl tl' + | QNeq(t1,t2), QNeq(t1',t2') -> + TermsEq.unify_modulo (fun () -> + TermsEq.unify_modulo f t2 t2') t1 t1' + | QEq(t1,t2), QEq(t1',t2') -> + TermsEq.unify_modulo (fun () -> + TermsEq.unify_modulo f t2 t2') t1 t1' + | _ -> raise Unify + +(* Replaces variables with constants *) + +let put_constants_event = function + QSEvent(b,t) -> put_constants t + | QFact(p, tl) -> List.iter put_constants tl + | QNeq(t1,t2) -> put_constants t1; put_constants t2 + | QEq(t1,t2) -> put_constants t1; put_constants t2 + +let rec put_constants_query = function + Before(e, hll) -> + put_constants_event e; + List.iter (List.iter put_constants_hypelem) hll + +and put_constants_hypelem = function + QEvent e -> put_constants_event e + | NestedQuery q -> put_constants_query q + +(* Raise Unify when the term, event, or query are not equal *) + +(* Test equality. t1 and t2 must be closed, but they + may contain variables linked with TLink *) +let equal_terms_modulo t1 t2 = + Terms.auto_cleanup (fun () -> + TermsEq.unify_modulo (fun () -> ()) t1 t2) + +let equal_event e e' = match (e,e') with + QSEvent(b,t), QSEvent(b',t') -> + if b!=b' then raise Unify; + equal_terms_modulo t t' + | QFact(p,tl), QFact(p',tl') -> + if p!=p' then raise Unify; + List.iter2 equal_terms_modulo tl tl' + | QNeq(t1,t2), QNeq(t1',t2') -> + equal_terms_modulo t1 t1'; + equal_terms_modulo t2 t2' + | QEq(t1,t2), QEq(t1',t2') -> + equal_terms_modulo t1 t1'; + equal_terms_modulo t2 t2' + | _ -> raise Unify + +let rec equal_hyp_elem h h' = match (h,h') with + QEvent e, QEvent e' -> equal_event e e' + | NestedQuery q, NestedQuery q' -> equal_query q q' + | _ -> raise Unify + +and equal_query (Before(e, hll)) (Before(e', hll')) = + equal_event e e'; + List.iter2 (List.iter2 equal_hyp_elem) hll hll' + + +let check_det_p q = + (not (TermsEq.hasEquations())) || + (match q with + Before(e,hll) -> + let (e', q') = + Terms.auto_cleanup (fun () -> + let e' = copy_event_fresh e in + (e', copy_query4 q)) + in + try + unify_event (fun () -> + Terms.auto_cleanup (fun () -> + let q1 = copy_query q in + let q1' = copy_query q' in + put_constants_query q1; + put_constants_query q1'; + if + (try + equal_query q1 q1'; + true + with Unify -> false) then raise Unify else false) + ) e e' + with Unify -> + true) + + +(* Build a clause from a query *) + +let inj_marker = [(Terms.new_var Param.def_var_name Param.sid_type, Terms.new_var_def Param.sid_type)] + +let non_inj_marker = [] + +let event_to_end_fact = function + QSEvent(_,(FunApp(f,l) as param)) -> + if (Pievent.get_event_status f).end_status = Inj then + Pred(Param.end_pred_inj, [Var(Terms.new_var "endsid" Param.sid_type);param]) + else + Pred(Param.end_pred, [param]) + | QSEvent(_, _) -> + user_error ("Events should be function applications\n") + | QFact(p,l) -> Pred(p,l) + | QNeq _ | QEq _ -> internal_error "no Neq queries" + + +let rec events_to_hyp = function + [] -> ([],[],[],[],[]) + | (a::l) -> + let (hyp', hyp_q', constra', eq_left', eq_right') = events_to_hyp l in + match a with + QEvent e -> + begin + match e with + QSEvent(b, param) -> + (* The second arg of Out is used only as a marker to know whether + the event is injective or not *) + ((Out(param, if b then inj_marker else non_inj_marker)) :: hyp', hyp_q', constra', eq_left', eq_right') + | QFact(p,l) -> ((Pred(p,l)) :: hyp', hyp_q', constra', eq_left', eq_right') + | QNeq (t1,t2) -> (hyp', hyp_q', [Neq(t1,t2)] :: constra', eq_left', eq_right') + | QEq (t1,t2) -> (hyp', hyp_q', constra', t1 :: eq_left', t2 :: eq_right') + end + | NestedQuery(Before(QSEvent(b, param),_) as q) -> + (* The second arg of Out is used only as a marker to know whether + the event is injective or not *) + ((Out(param, if b then inj_marker else non_inj_marker)) :: hyp', q :: hyp_q', constra', eq_left', eq_right') + | NestedQuery(Before(QFact(p,l),_) as q) -> + ((Pred(p,l)):: hyp', q :: hyp_q', constra', eq_left', eq_right') + | NestedQuery(_) -> + internal_error "Bad nested query" + +(* Transforms a query into a non-injective, non-nested one, + the only kind of query for which the reconstruction of a trace + guarantees that the query is false. *) + +let non_inj_event = function + QSEvent(b,t) -> QSEvent(false,t) + | e -> e + +let simplify_query (Before(e,l)) = + Before(non_inj_event e, + List.map (fun l1 -> + let l' = List.map (function + NestedQuery(Before(e,_)) -> QEvent(non_inj_event e) + | QEvent e -> QEvent(non_inj_event e)) l1 + in + List.filter (function QEvent(QNeq _ | QFact _) -> false + | _ -> true) l' + ) l) + +let is_non_trivial (Before(e,l)) = + List.for_all (fun l1 -> l1 != []) l + +let is_non_inj_neq = function + QSEvent(true,_) -> false + | QNeq _ -> Parsing_helper.internal_error "inequalities should not occur in left-hand side of ==> in queries" + | _ -> true + +let is_non_inj_neq_fact = function + QSEvent(true,_) | QNeq _ | QFact _ -> false + | _ -> true + +let is_simple_query (Before(e,l)) = + (is_non_inj_neq e) && + (List.for_all (List.for_all (function + NestedQuery(Before(e,_)) -> false + | QEvent e -> is_non_inj_neq_fact e)) l) + +(* For injective agreement *) + +let session_id_cst = + { f_name = "session_id"; + f_type = [], Param.sid_type; + f_private = false; + f_options = 0; + f_cat = Eq []; + f_initial_cat = Eq [] + } + +let session_id = FunApp(session_id_cst, []) + +let session_id_cst2 = + { f_name = "session_id2"; + f_type = [], Param.sid_type; + f_private = false; + f_options = 0; + f_cat = Eq []; + f_initial_cat = Eq [] + } + +let session_id2 = FunApp(session_id_cst2, []) + + + +(* to call combine_lists collector[fsymb] rho{sid2/sid} *) + +let rec combine_lists l1 = function + [] -> [] +| ((v,rhov)::l) -> + let rec do_v = function + [] -> combine_lists l1 l + | (v', rholv)::l' -> + if v' == v then + (v', rhov::rholv)::(combine_lists l1 l) + else + do_v l' + in + do_v l1 + +(* to call when collector[fsymb] not found, build_list rho{sid2/sid} *) + +let build_list = List.map (fun (v,rhov) -> (v, [rhov])) + +(* call combine_lists2 [result of combine_lists/collector] rho{sid1/sid}. + If result empty, raise Unify *) + +(* TO DO cleanup after unify_modulo, unify_modulo_env, and unify_modulo_list ? + (6 occurrences) *) + +let check_no_unif t1 t2 = + let bad = ref false in + begin + try + Terms.auto_cleanup (fun () -> + TermsEq.unify_modulo (fun () -> bad := true) t1 t2) + with Unify -> () + end; + not (!bad) + +let rec combine_lists2 l1 l2 = match (l1,l2) with + ([], _) -> [] +| (((v, rholv)::l), ((v', rhov')::l')) -> + if v == v' then + if List.for_all (fun rhov -> check_no_unif rhov rhov') rholv then + (v, rholv)::(combine_lists2 l l') + else + combine_lists2 l l' + else + combine_lists2 l1 l' +| _ -> internal_error "second list should be at least as long as first list in combine_lists2" + +module Fun = struct + type t = funsymb * string + let compare = compare +end + +module FunMap = Map.Make(Fun) + +let current_inj_collector = ref FunMap.empty + +let combine collector fsymb end_session_id env = + let rec find_last = function + [] -> Parsing_helper.internal_error "The environment should contain at least the occurrence variable" + | [v,t] -> [], v.sname + | a :: r -> let r', occ_string = find_last r in (a::r', occ_string) + in + let (env, occ_string) = find_last env in + let map_arg = (fsymb, occ_string) in + end_session_id.link <- TLink session_id; + let curr_bound_vars = !current_bound_vars in + current_bound_vars := []; + let env1 = List.map (fun (v,t) -> (v, copy_term2 t)) + (specvar_to_var_env env) in + Terms.cleanup(); + end_session_id.link <- TLink session_id2; + let env2 = List.map (fun (v,t) -> (v, copy_term2 t)) + (specvar_to_var_env env) in + Terms.cleanup(); + current_bound_vars := curr_bound_vars; + end_session_id.link <- NoLink; + let collectorfsymb = + try + combine_lists (FunMap.find map_arg collector) env2 + with Not_found -> + build_list env2 + in + let res = combine_lists2 collectorfsymb env1 in + if res = [] then raise Unify; + FunMap.add map_arg res collector + +let check_inj fsymb end_session_id env restwork = + let old_inj_collector = !current_inj_collector in + current_inj_collector := combine old_inj_collector fsymb end_session_id env; + try + restwork(); + current_inj_collector := old_inj_collector + with Unify -> + current_inj_collector := old_inj_collector; + raise Unify + +(* + Note: there is a small discrepancy between the following version artauth4.tex: + In the paper, we require that for a variable x_{jk} in the environment + env_ok(x_{jk}) and env_ok2(x_{jk}) do not unify, where the variable x_{jk} is + the same for all environments associated with the same function symbol + fsymb. Here, we require that the environments + do not unify. I think the following version is sound, but this is more + difficult to prove, so I use the previous one. + + +let current_inj_collector = ref [] + +let check_inj fsymb end_session_id env restwork = + List.iter (fun (fsymb2, end_session_id2, env2) -> + if fsymb == fsymb2 then + begin + let bad = ref false in + end_session_id.link <- TLink session_id; + let curr_bound_vars = !current_bound_vars in + current_bound_vars := []; + let env_ok = List.map (fun (v,t) -> (v, copy_term2 t)) + (specvar_to_var_env env) in + Terms.cleanup(); + end_session_id2.link <- TLink session_id2; + let env_ok2 = List.map (fun (v,t) -> (v, copy_term2 t)) + (specvar_to_var_env env2) in + Terms.cleanup(); + current_bound_vars := curr_bound_vars; + begin + try + TermsEq.unify_modulo_env (fun () -> bad := true) env_ok env_ok2 + with Unify -> () + end; + end_session_id.link <- NoLink; + end_session_id2.link <- NoLink; + if !bad then raise Unify + end + ) ((fsymb, end_session_id, env) :: !current_inj_collector); + let old_inj_collector = !current_inj_collector in + current_inj_collector := (fsymb, end_session_id, env) :: old_inj_collector; + try + restwork(); + current_inj_collector := old_inj_collector + with Unify -> + current_inj_collector := old_inj_collector; + raise Unify +*) + +(* Reprogrammation of clause implication to handle implication modulo + the equational theory + I can be approximate in that the subsumption test may fail + even when it is in fact true. So I do not retry all unifications + when a future unification fails in match_facts_mod_eq, + by raising Not_found instead of Unify when a future unification fails *) + +let match_facts_mod_eq f f1 f2 = match (f1,f2) with + Pred(chann1, t1),Pred(chann2, t2) -> + begin + if chann1 != chann2 then raise Unify; + try + TermsEq.unify_modulo_list (fun () -> try f() with Unify -> raise Not_found) t1 t2 + with Not_found -> raise Unify + end +| Out(t1,l1),Out(t2,l2) -> + (* Is it the right direction ? *) + let len1 = List.length l1 in + let len2 = List.length l2 in + if len2 < len1 then raise Unify; + let l2 = skip (len2-len1) l2 in + List.iter2 (fun (v1,t1) (v2,t2) -> + if v1 != v2 then raise Unify) l1 l2; + let l1' = List.map snd l1 in + let l2' = List.map snd l2 in + begin + try + TermsEq.unify_modulo_list (fun () -> try f() with Unify -> raise Not_found) (t1::l1') (t2::l2') + with Not_found -> raise Unify + end +| _ -> raise Unify + +let rec match_hyp1_mod_eq f h1 = function + [] -> raise Unify + | (h2::hl2) -> + try + match_facts_mod_eq f h1 h2 + with Unify -> + match_hyp1_mod_eq f h1 hl2 + +let rec match_hyp_mod_eq f hyp1 hyp2 () = + match hyp1 with + [] -> f () + | (h1 :: hl1) -> match_hyp1_mod_eq (match_hyp_mod_eq f hl1 hyp2) h1 hyp2 + +let implies_mod_eq (hyp1, concl1, _, constr1) (hyp2, concl2, _, constr2) = + match_facts_mod_eq (fun () -> + match_hyp_mod_eq (fun () -> + begin + try + Terms.auto_cleanup (fun () -> + TermsEq.implies_constra_list + (List.map (fun f -> specvar_to_var_fact (TermsEq.remove_syntactic_fact f)) (concl2 :: hyp2)) + (List.map (fun c -> specvar_to_var_constra (TermsEq.remove_syntactic_constra c)) constr2) + (List.map (fun c -> specvar_to_var_constra (TermsEq.remove_syntactic_constra c)) constr1) ()) + with NoMatch -> raise Unify + end; + ) + (Rules.reorder hyp1) hyp2 ()) concl1 concl2 + +let implies_mod_eq r1 r2 = + assert (!current_bound_vars == []); + put_constants_rule r2; + let (hyp_cl, concl_cl, hist_cl, constra_cl) = r2 in + let r2' = (List.map copy_fact2 hyp_cl, + copy_fact2 concl_cl, hist_cl, + List.map copy_constra2 constra_cl) + in + cleanup(); + try + Terms.auto_cleanup (fun () -> implies_mod_eq r1 r2'); + true + with Unify -> false + +let rec remove_subsumed_mod_eq = function + [] -> [] + | (a::l) -> + if List.exists (fun r1 -> implies_mod_eq r1 a) l then + remove_subsumed_mod_eq l + else + a::(remove_subsumed_mod_eq (List.filter (fun r2 -> not (implies_mod_eq a r2)) l)) + + +(* Reprogrammation of clause implication to handle one clause and + one query. *) + +let match_facts_eq f end_session_id f1 f2 = match (f1,f2) with + Pred(chann1, t1),Pred(chann2, t2) -> + if chann1 != chann2 then raise Unify; + TermsEq.unify_modulo_list f t1 t2 +| Out(t1,marker),Out(t2,l2) -> + if marker == non_inj_marker then + TermsEq.unify_modulo f t1 t2 + else + begin + match end_session_id with + None -> Parsing_helper.internal_error "the end event corresponding to an injective begin event should always have a session id" + | Some i -> + match t1 with + FunApp(fsymb, _) -> + TermsEq.unify_modulo (fun () -> check_inj fsymb i l2 f) t1 t2 + | _ -> Parsing_helper.internal_error "arguments of events should be function applications" + end +| _ -> raise Unify + +let rec match_hyp1_eq f end_session_id h1 = function + [] -> raise Unify + | (h2::hl2) -> + try + match_facts_eq f end_session_id h1 h2 + with Unify -> + match_hyp1_eq f end_session_id h1 hl2 + +let rec match_hyp_eq f hyp1 hyp2 end_session_id () = + match hyp1 with + [] -> f () + | (h1 :: hl1) -> match_hyp1_eq (match_hyp_eq f hl1 hyp2 end_session_id) end_session_id h1 hyp2 + +(* Improved verification of predicates in clauses *) + +let init_clauses = ref [] + +let clauses_for_preds = ref None + +let get_clauses_for_preds () = + match ! clauses_for_preds with + Some l -> l + | None -> + let clauses = ref [] in + List.iter (fun (hyp1, concl1, constra1, tag1) -> + TermsEq.close_rule_destr_eq (fun (hyp, concl, constra) -> + clauses := (hyp, concl, Rule(-1, tag1, hyp, concl, constra), constra) :: (!clauses) + ) (hyp1, concl1, constra1)) + (!Param.red_rules); + List.iter (fun fact -> + TermsEq.close_rule_destr_eq (fun (hyp, concl, constra) -> + clauses := (hyp, concl, Rule(-1, LblClause, hyp, concl, constra), constra) :: (!clauses) + ) ([], fact, [])) + (!Param.elim_true); + Terms.cleanup(); + List.iter (function (_,_,Rule(_,(Apply _ | Init), _,_,_), _) as cl -> + clauses := cl :: (!clauses) + | _ -> ()) (!init_clauses); + clauses_for_preds := Some (!clauses); + !clauses + +let match_hyp_eq f hyp1 hyp2 end_session_id () = + let filt = function Out _ -> true + | Pred(p,_) -> p.p_prop land Param.pred_BLOCKING != 0 + in + (* To prove the events and blocking predicates of the query (hyp1_events), we + show that they match the events and blocking predicates of the clause (hyp2_events). + These predicates cannot be derived from clauses. + To prove the non-blocking predicate of the query (hyp1_preds), we + show that they are derivable from any predicates (blocking or not) of the clause + (hyp2_preds, hyp2_preds_block). + These predicates cannot be directly in the clause since they are not blocking. *) + let (hyp1_events, hyp1_preds) = List.partition filt hyp1 in + let (hyp2_events, hyp2_preds) = List.partition filt hyp2 in + let hyp2_preds_block = List.filter (function Out _ -> false | Pred(p,_) -> p.p_prop land Param.pred_BLOCKING != 0) hyp2 in + match_hyp_eq (fun () -> + if hyp1_preds == [] then f() else + (* The matching of events succeeded; now I need to prove the facts in hyp1_preds + from the instance of the facts in hyp2_preds *) + Terms.auto_cleanup (fun () -> + let bad_fact = Pred(Param.bad_pred, []) in + let hyp2_preds' = List.map Terms.copy_fact2 hyp2_preds in + let hyp1_preds' = List.map Terms.copy_fact2 hyp1_preds in + let hyp2_preds_block' = List.map Terms.copy_fact2 hyp2_preds_block in + Terms.cleanup(); + let clauses = + (hyp1_preds', bad_fact, Rule(-1, LblNone, hyp1_preds', bad_fact, []), []) :: + (get_clauses_for_preds()) @ + (List.map (fun fact -> ([], fact, Rule(-1, LblNone, [], fact, []), [])) hyp2_preds') + in + Display.Text.print_string "Inside query: trying to prove "; + Display.Text.display_list Display.Text.display_fact ", " hyp1_preds'; + let hyp2_preds_normal_block = hyp2_preds_block' @ hyp2_preds' in + if hyp2_preds_normal_block != [] then + begin + Display.Text.print_string " from "; + Display.Text.display_list Display.Text.display_fact ", " hyp2_preds_normal_block + end; + Display.Text.newline(); + incr Param.inside_query_number; + let inums = string_of_int (!Param.inside_query_number) in + if !Param.html_output then + begin + Display.LangHtml.openfile ((!Param.html_dir) ^ "/inside" ^ inums ^ ".html") ("ProVerif: inside query " ^ inums); + Display.Html.print_string "Inside query: trying to prove "; + Display.Html.display_list Display.Html.display_fact ", " hyp1_preds'; + if hyp2_preds_normal_block != [] then + begin + Display.Html.print_string " from "; + Display.Html.display_list Display.Html.display_fact ", " hyp2_preds_normal_block + end; + Display.Html.newline() + end; + (* the resolution prover must be _sound_ for this call + while for other calls it must be _complete_. + The function sound_bad_derivable is sound provided the clause + do not contain "any_name" and contain unary attacker predicates, + which is the case here. *) + let cl = Rules.sound_bad_derivable clauses in + if List.exists (function + (hyp, _, _, []) -> + begin + try + Terms.auto_cleanup (fun () -> + match_hyp_eq (fun () -> ()) hyp hyp2_preds_block' end_session_id ()); + true + with Unify -> false + end + | _ -> false) cl then + begin + (* Success: managed to prove the facts in hyp1_preds' *) + Display.Text.print_line "Inside query: proof succeeded"; + if !Param.html_output then + begin + Display.Html.print_line "Inside query: proof succeeded"; + Display.LangHtml.close(); + Display.Html.print_line ("<A HREF=\"inside" ^ inums ^ ".html\">Inside query: proof succeeded</A>") + end; + f() + end + else + begin + (* Failure: could not prove some fact in hyp1_preds' *) + Display.Text.print_line "Inside query: proof failed"; + if !Param.html_output then + begin + Display.Html.print_line "Inside query: proof failed"; + Display.LangHtml.close(); + Display.Html.print_line ("<A HREF=\"inside" ^ inums ^ ".html\">Inside query: proof failed</A>") + end; + raise Unify + end)) hyp1_events hyp2_events end_session_id () + + + +let rec implies_q restwork (hyp1, hyp1_q, concl1, constr1) (hyp2, concl2, _, constr2) = + match_facts_eq (fun () -> + let end_session_id = + match concl2 with + Pred(_, [FunApp({f_cat = SpecVar i}, []);_]) -> Some i + | _ -> None + in + match_hyp_eq (fun () -> + begin + try + Terms.auto_cleanup (fun () -> + TermsEq.implies_constra_list + (List.map (fun f -> specvar_to_var_fact (TermsEq.remove_syntactic_fact f)) (concl2 :: hyp2)) + (List.map (fun c -> specvar_to_var_constra (TermsEq.remove_syntactic_constra c)) constr2) + (List.map (fun c -> specvar_to_var_constra (TermsEq.remove_syntactic_constra c)) constr1) ()) + with NoMatch -> + raise Unify + end; + (* Instantiate the nested queries with the value given by the clause *) + let hyp1_q' = + Terms.auto_cleanup (fun () -> + List.map (fun q -> + let q' = copy_query q in + if not (check_query_vars q') then + begin + Display.Text.print_string "Occurrence checking failed in "; + Display.Text.display_corresp_query q'; + Display.Text.newline(); + Display.Text.print_line "For the nested query e1 ==> (e2 ==> H) & ... to be true,\nthe variables instantiated when querying e1 ==> e2 & ... and that occur in\nH must also occur in e2. This is wrong for the query above."; + if !Param.html_output then + begin + Display.Html.print_string "Occurrence checking failed in "; + Display.Html.display_corresp_query q'; + Display.Html.newline(); + Display.Html.print_line "For the nested query e1 ==> (e2 ==> H) & ... to be true,\nthe variables instantiated when querying e1 ==> e2 & ... and that occur in\nH must also occur in e2. This is wrong for the query above."; + end; + raise Unify + end; + let q'' = specvar_to_var_query q' in + if not (check_det_p q'') then + begin + Display.Text.print_string "Occurrence checking failed in "; + Display.Text.display_corresp_query q''; + Display.Text.newline(); + Display.Text.print_line "For the nested query e1 ==> (e2 ==> H) & ... to be true,\nthe value of e2 must determine the value of e2 ==> H.\nThis is wrong for the query above (due to the equational theory)."; + if !Param.html_output then + begin + Display.Html.print_string "Occurrence checking failed in "; + Display.Html.display_corresp_query q''; + Display.Html.newline(); + Display.Html.print_line "For the nested query e1 ==> (e2 ==> H) & ... to be true,\nthe value of e2 must determine the value of e2 ==> H.\nThis is wrong for the query above (due to the equational theory)."; + end; + raise Unify + end; + q'') hyp1_q) + in + let rec check_occ_queries rest = function + [] -> () + | (q::l) -> + for_all_query (fun v -> + if List.exists (v_occurs_query v) (rest @ l) && + not (let Before(e',_) = q in + v_occurs v e') + then + begin + Display.Text.print_string "Occurrence checking failed in "; + Display.Text.display_corresp_query q; + Display.Text.newline(); + Display.Text.print_line "For the nested query e1 ==> (e2 ==> H) & (e3 ==> H') & ... to be true,\nthe variables that occur in H and H' must also occur in e2 and e3.\nThis is wrong for the query above."; + if !Param.html_output then + begin + Display.Html.print_string "Occurrence checking failed in "; + Display.Html.display_corresp_query q; + Display.Html.newline(); + Display.Html.print_line "For the nested query e1 ==> (e2 ==> H) & (e3 ==> H') & ... to be true,\nthe variables that occur in H and H' must also occur in e2 and e3.\nThis is wrong for the query above."; + end; + raise Unify + end + ) q; + check_occ_queries (q::rest) l + in + check_occ_queries [] hyp1_q'; + let rec list_subqueries restwork = function + [] -> Terms.auto_cleanup restwork + | (q::l) -> + Terms.auto_cleanup (fun () -> + if check_query (fun () -> + list_subqueries restwork l) false true true q != True then + raise Unify) + in + list_subqueries restwork hyp1_q' + ) + (Rules.reorder hyp1) hyp2 end_session_id ()) None concl1 concl2 + + + +(* Check if a query is true *) + + +and clause_match_elem restwork e cl h = + let concl = event_to_end_fact e in + let (hyp, hyp_q, constra, eq_left, eq_right) = events_to_hyp h in + (* Replace all variables in the clause with constants "SpecVar" *) + assert (!current_bound_vars == []); + put_constants_rule cl; + let (hyp_cl, concl_cl, hist_cl, constra_cl) = cl in + let cl' = (List.map copy_fact2 hyp_cl, + copy_fact2 concl_cl, hist_cl, + List.map copy_constra2 constra_cl) + in + cleanup(); + (* Check whether the clause matches the query *) + try + if eq_left != [] then + Terms.auto_cleanup (fun () -> + TermsEq.unify_modulo_list (fun () -> + let (hyp2, hyp_q2, concl2, constra2) = + Terms.auto_cleanup (fun () -> + (List.map TermsEq.copy_remove_syntactic_fact hyp, + List.map copy_query hyp_q, + TermsEq.copy_remove_syntactic_fact concl, + List.map TermsEq.copy_remove_syntactic_constra constra)) + in + Terms.auto_cleanup (fun () -> + implies_q restwork (hyp2, hyp_q2, concl2, constra2) cl') + ) eq_left eq_right + ) + else + implies_q restwork (hyp, hyp_q, concl, constra) cl'; + true + with Unify -> + false + + +and clauses_match restwork non_nested q clauses = + let list_started = ref false in + let result = + assert (!current_bound_vars == []); + let q' = copy_query q in + cleanup(); + let simple_query = is_simple_query q' in + (* First check a simplified, non-nested, non-injective query *) + let Before(e,l) as q'' = simplify_query q' in + let recheck_fun = fun cl -> List.exists (clause_match_elem (fun () -> ()) e cl) l in + let def_res = ref DontKnow in + let res = List.for_all (fun cl -> + let res = List.exists (clause_match_elem (fun () -> ()) e cl) l in + (* When res is false, the clause cl falsifies the query *) + if (not res) && (display_clause_trace (not res) (Some recheck_fun) None list_started cl) then def_res := False; + res + ) clauses + in + if non_nested && (not simple_query) && (is_non_trivial q'') then + supplemental_info := Some(q'', if res then True else !def_res); + (* If the simplified query cannot be proved, then q cannot be proved either. + If we could reconstruct a trace against the simplified query, then q is false *) + if not res then !def_res else + (* If q' is simple, then it is equal to its simplified query, so the result is known *) + if simple_query then + begin + List.iter (fun cl -> ignore (display_clause_trace (not res) (Some recheck_fun) None list_started cl)) clauses; + try restwork(); True with Unify -> DontKnow + end + else + (* Otherwise, test the query q' itself *) + match q' with + Before((QSEvent(false, _) | QFact(_,_) as e),l) -> + let res = List.for_all (fun cl -> + let res = List.exists (clause_match_elem (fun () -> ()) e cl) l in + let recheck_fun = fun cl -> List.exists (clause_match_elem (fun () -> ()) e cl) l in + (* When res is false, the clause cl falsifies the query *) + ignore (display_clause_trace (not res) (Some recheck_fun) None list_started cl); + res + ) clauses + in + if res then + try + restwork(); True + with Unify -> DontKnow + else DontKnow + | Before(e,l) -> (* e is QSEvent(true, _): injective query *) + match clauses with + [] -> + begin + try + restwork(); True + with Unify -> DontKnow + end + | (cl::cll) -> + let res = + List.exists (clause_match_elem (fun () -> + if not (clauses_match_inj restwork q cll) then raise Unify) e cl) l + in + (* When res is false, one of the clauses in clauses falsifies the query *) + if not res then + begin + (* The query cannot be proved *) + if non_nested then + begin + (* If the query is not nested, try to investigate in more detail why the proof failed *) + let reslist = + if cll = [] then [false] else + List.map (fun cl -> + List.exists (clause_match_elem (fun () -> ()) e cl) l) clauses + in + if List.mem false reslist then + begin + (* A single clause falsifies the query; in this case, we display the derivation + only for the clauses that falsify the query. We try to reconstruct a trace + that falsifies injectivity. *) + let recheck_fun = fun cl -> List.exists (clause_match_elem (fun () -> ()) e cl) l in + let reslist_att = List.map2 (fun cl res1 -> display_clause_trace (not res1) (Some recheck_fun) (Some q') list_started cl) clauses reslist in + if List.mem true reslist_att then False else DontKnow + end + else + begin + (* Several clauses simultaneously are needed to falsify the query. + We display all derivations. *) + List.iter (fun cl -> ignore (display_clause_trace true None None list_started cl)) clauses; + DontKnow + end + end + else + begin + List.iter (fun cl -> ignore (display_clause_trace true None None list_started cl)) clauses; + DontKnow + end + end + else + begin + (* The query is true *) + List.iter (fun cl -> ignore (display_clause_trace false None None list_started cl)) clauses; + True + end + in + if (!Param.html_output) && (!list_started) then + Display.Html.print_string "</UL>\n"; + result + +and clauses_match_inj restwork q clauses = + assert (!current_bound_vars == []); + let Before(e,l) = copy_query q in + cleanup(); + match clauses with + [] -> + begin + try + restwork(); true + with Unify -> false + end + | (cl::cll) -> + List.exists (clause_match_elem (fun () -> + if not (clauses_match_inj restwork q cll) then raise Unify) e cl) l + +and check_query restwork non_nested rec_call display_query (Before(e, hypll) as q) = + Display.Text.print_string "Starting query "; + Display.Text.display_corresp_query q; + Display.Text.newline(); + if (!Param.html_output) && display_query then + begin + if rec_call then + begin + Display.Html.print_string "Starting query "; + Display.Html.display_corresp_query q; + Display.Html.newline() + end + else + begin + Display.Html.print_string "<LI><span class=\"query\">Query "; + Display.Html.display_corresp_query q; + Display.Html.print_string "</span><br>\n" + end + end; + assert (!current_bound_vars == []); + let f = event_to_end_fact e in + let clauses = Rules.query_goal_std f in + (* Remove clauses subsumed modulo equational theory *) + (* print_string ((string_of_int (List.length clauses)) ^ " clauses before subsumption modulo eq.\n"); *) + let clauses = + if (!Param.simpeq_final) && (TermsEq.hasEquations()) then + remove_subsumed_mod_eq clauses + else + clauses + in + (* print_string ((string_of_int (List.length clauses)) ^ " clauses after subsumption modulo eq.\n"); + List.iter (fun cl -> + print_string "clause after subsumption modulo eq: "; + Display.Text.display_rule cl) clauses;*) + clauses_match restwork non_nested q clauses + +let do_query display_query = function + PutBegin _ -> () + | RealQuery (Before(e, hypll) as q) -> + let non_nested = + List.for_all (List.for_all (function NestedQuery _ -> false + | _ -> true)) hypll + in + let r = check_query (fun () -> ()) non_nested false display_query q in + Display.Text.print_string "RESULT "; + Display.Text.display_corresp_query q; + Display.Text.print_string (get_res r); + Display.Text.newline(); + if !Param.html_output then + begin + Display.Html.print_string "<span class=\"result\">RESULT "; + Display.Html.display_corresp_query q; + Display.Html.print_string (get_html_res r); + Display.Html.print_string "</span>"; + Display.Html.newline() + end; + if (!Param.tulafale <> 1) && (r != True) then + begin + match !supplemental_info with + None -> () + | Some(q',r') -> + Display.Text.print_string "RESULT ("; + if r' == True then Display.Text.print_string "but " else Display.Text.print_string "even "; + Display.Text.display_corresp_query q'; + Display.Text.print_string (get_res r'); + Display.Text.print_string ")"; + Display.Text.newline(); + if !Param.html_output then + begin + Display.Html.print_string "<span class=\"result\">RESULT ("; + if r' == True then Display.Html.print_string "but " else Display.Html.print_string "even "; + Display.Html.display_corresp_query q'; + Display.Html.print_string (get_html_res r'); + Display.Html.print_string ")</span>"; + Display.Html.newline(); + end + end; + supplemental_info := None + +let solve_auth rules queries = + init_clauses := rules; + clauses_for_preds := None; + Rules.completion rules; + match queries with + [q] -> do_query false q + | _ -> + if !Param.html_output then + Display.Html.print_string "<UL>\n"; + List.iter (do_query true) queries; + if !Param.html_output then + Display.Html.print_string "</UL>\n" + + + diff --git a/preinstallTTool/linux/proverif/src/piauth.mli b/preinstallTTool/linux/proverif/src/piauth.mli new file mode 100644 index 0000000000000000000000000000000000000000..7ac9d6ea8426ea31e0df138cb78d0fa23d95e37b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/piauth.mli @@ -0,0 +1,28 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val solve_auth : Types.reduction list -> Pitypes.query list -> unit diff --git a/preinstallTTool/linux/proverif/src/pievent.cmi b/preinstallTTool/linux/proverif/src/pievent.cmi new file mode 100644 index 0000000000000000000000000000000000000000..8aea4959ba33ee6adea0207f7b9226bc594bd3c4 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pievent.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pievent.cmx b/preinstallTTool/linux/proverif/src/pievent.cmx new file mode 100644 index 0000000000000000000000000000000000000000..46ffad1a840cd20fda8d4438166e06f729711425 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pievent.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pievent.ml b/preinstallTTool/linux/proverif/src/pievent.ml new file mode 100644 index 0000000000000000000000000000000000000000..8a1a550a57b685b71ea9d00f53a8ad0973365fee --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pievent.ml @@ -0,0 +1,74 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Pitypes +open Stringmap + +let event_status_table = Hashtbl.create 7 + +let init_event_status_table event_fun_table = + Hashtbl.clear event_status_table; + Hashtbl.iter (fun _ d -> + Hashtbl.add event_status_table d { end_status = No; begin_status = No }) + event_fun_table + +let get_event_status f = + try + Hashtbl.find event_status_table f + with Not_found -> + Parsing_helper.internal_error ("event not found " ^ f.f_name) + +let set_event_status_e set_end set_begin = function + QSEvent(b, FunApp(f,_)) -> + let fstatus = get_event_status f in + if set_end then begin + if b then fstatus.end_status <- Inj else + if fstatus.end_status = No then fstatus.end_status <- NonInj + end; + if set_begin then begin + if b then fstatus.begin_status <- Inj else + if fstatus.begin_status = No then fstatus.begin_status <- NonInj + end + | _ -> () + +let rec set_event_status_r set_begin = function + Before(e, ll) -> + set_event_status_e true set_begin e; + List.iter (List.iter (function + QEvent e -> set_event_status_e false true e + | NestedQuery q -> set_event_status_r true q)) ll + +let set_event_status = function + PutBegin(i, l) -> + List.iter (fun f -> + let fstatus = get_event_status f in + if i then fstatus.begin_status <- Inj else + if fstatus.begin_status = No then fstatus.begin_status <- NonInj) l + | RealQuery q -> + set_event_status_r false q + diff --git a/preinstallTTool/linux/proverif/src/pievent.mli b/preinstallTTool/linux/proverif/src/pievent.mli new file mode 100644 index 0000000000000000000000000000000000000000..a5913c9b3b822833379022256ad689b07899de53 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pievent.mli @@ -0,0 +1,34 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Pitypes +open Stringmap + +val init_event_status_table : (string, funsymb) Hashtbl.t -> unit +val get_event_status : funsymb -> eventstatus +val set_event_status : query -> unit diff --git a/preinstallTTool/linux/proverif/src/pilexer.cmi b/preinstallTTool/linux/proverif/src/pilexer.cmi new file mode 100644 index 0000000000000000000000000000000000000000..9ec47e1cf086d0ad69b261d8000664e10275ede0 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pilexer.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pilexer.cmx b/preinstallTTool/linux/proverif/src/pilexer.cmx new file mode 100644 index 0000000000000000000000000000000000000000..7e7f73866b1da62b6236269e10360e78ad90fc9a Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pilexer.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pilexer.ml b/preinstallTTool/linux/proverif/src/pilexer.ml new file mode 100644 index 0000000000000000000000000000000000000000..2d96b22fdfb0a829c3a872589c6f6f605f182551 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pilexer.ml @@ -0,0 +1,369 @@ +# 28 "pilexer.mll" + +open Parsing_helper +open Piparser + +let create_hashtable size init = + let tbl = Hashtbl.create size in + List.iter (fun (key,data) -> Hashtbl.add tbl key data) init; + tbl + +(* Untyped front-end *) + +let keyword_table = + create_hashtable 11 +[ "data", DATA; + "param", PARAM; + "private", PRIVATE; +(* Common keywords *) + "new", NEW; + "out", OUT; + "in", IN; + "if", IF; + "then", THEN; + "else", ELSE; + "fun", FUN; + "equation", EQUATION; + "reduc", REDUCTION; + "pred", PREDICATE; + "process", PROCESS; + "let", LET; + "query", QUERY; + "putbegin", PUTBEGIN; + "noninterf", NONINTERF; + "event", EVENT; + "not", NOT; + "elimtrue", ELIMTRUE; + "free", FREE; + "clauses", CLAUSES; + "suchthat", SUCHTHAT; + "nounif", NOUNIF; + "phase", PHASE; + "among", AMONG; + "weaksecret", WEAKSECRET; + "choice", CHOICE; + "otherwise", OTHERWISE; + "can", CANTEXT; + "fail", FAIL; + "where", WHERE] + + +# 52 "pilexer.ml" +let __ocaml_lex_tables = { + Lexing.lex_base = + "\000\000\230\255\231\255\078\000\000\000\237\255\238\255\239\255\ + \240\255\241\255\002\000\243\255\244\255\245\255\246\255\247\255\ + \248\255\250\255\001\000\077\000\096\000\002\000\005\000\255\255\ + \251\255\002\000\232\255\236\255\233\255\030\000\032\000\235\255\ + \234\255\145\000\252\255\253\255\006\000\254\255\054\000\255\255\ + "; + Lexing.lex_backtrk = + "\255\255\255\255\255\255\025\000\025\000\255\255\255\255\255\255\ + \255\255\255\255\013\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\006\000\003\000\002\000\001\000\000\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\001\000\255\255\003\000\255\255\ + "; + Lexing.lex_default = + "\001\000\000\000\000\000\255\255\255\255\000\000\000\000\000\000\ + \000\000\000\000\255\255\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\255\255\255\255\255\255\255\255\255\255\000\000\ + \000\000\255\255\000\000\000\000\000\000\255\255\255\255\000\000\ + \000\000\034\000\000\000\000\000\255\255\000\000\255\255\000\000\ + "; + Lexing.lex_trans = + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\021\000\023\000\021\000\021\000\022\000\021\000\023\000\ + \037\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \021\000\011\000\021\000\000\000\000\000\000\000\005\000\000\000\ + \018\000\016\000\007\000\024\000\017\000\004\000\008\000\009\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\019\000\ + \019\000\019\000\006\000\012\000\003\000\010\000\027\000\025\000\ + \026\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\015\000\032\000\014\000\031\000\039\000\ + \000\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\030\000\013\000\019\000\019\000\019\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\020\000\ + \000\000\000\000\000\000\029\000\028\000\000\000\000\000\000\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\000\000\037\000\000\000\000\000\036\000\000\000\ + \000\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\038\000\000\000\000\000\000\000\020\000\ + \000\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\000\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\000\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\035\000"; + Lexing.lex_check = + "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\000\000\000\000\021\000\000\000\000\000\021\000\022\000\ + \036\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\000\000\021\000\255\255\255\255\255\255\000\000\255\255\ + \000\000\000\000\000\000\018\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\004\000\010\000\ + \025\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\029\000\000\000\030\000\038\000\ + \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\003\000\000\000\019\000\019\000\019\000\ + \019\000\019\000\019\000\019\000\019\000\019\000\019\000\020\000\ + \255\255\255\255\255\255\003\000\003\000\255\255\255\255\255\255\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\255\255\033\000\255\255\255\255\033\000\255\255\ + \255\255\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\033\000\255\255\255\255\255\255\020\000\ + \255\255\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\255\255\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\255\255\ + \020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\033\000"; + Lexing.lex_base_code = + ""; + Lexing.lex_backtrk_code = + ""; + Lexing.lex_default_code = + ""; + Lexing.lex_trans_code = + ""; + Lexing.lex_check_code = + ""; + Lexing.lex_code = + ""; +} + +let rec token lexbuf = + __ocaml_lex_token_rec lexbuf 0 +and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 80 "pilexer.mll" + ( next_line lexbuf; token lexbuf ) +# 200 "pilexer.ml" + + | 1 -> +# 82 "pilexer.mll" + ( token lexbuf ) +# 205 "pilexer.ml" + + | 2 -> +# 84 "pilexer.mll" + ( let s = Lexing.lexeme lexbuf in + try + Hashtbl.find keyword_table s + with + Not_found -> + IDENT (s, extent lexbuf) + ) +# 216 "pilexer.ml" + + | 3 -> +# 92 "pilexer.mll" + ( + try + INT (int_of_string(Lexing.lexeme lexbuf)) + with Failure _ -> + input_error "Incorrect integer" (extent lexbuf) + ) +# 226 "pilexer.ml" + + | 4 -> +# 98 "pilexer.mll" + ( + comment lexbuf; + token lexbuf + ) +# 234 "pilexer.ml" + + | 5 -> +# 102 "pilexer.mll" + ( COMMA ) +# 239 "pilexer.ml" + + | 6 -> +# 103 "pilexer.mll" + ( LPAREN ) +# 244 "pilexer.ml" + + | 7 -> +# 104 "pilexer.mll" + ( RPAREN ) +# 249 "pilexer.ml" + + | 8 -> +# 105 "pilexer.mll" + ( LBRACKET ) +# 254 "pilexer.ml" + + | 9 -> +# 106 "pilexer.mll" + ( RBRACKET ) +# 259 "pilexer.ml" + + | 10 -> +# 107 "pilexer.mll" + ( BAR ) +# 264 "pilexer.ml" + + | 11 -> +# 108 "pilexer.mll" + ( SEMI ) +# 269 "pilexer.ml" + + | 12 -> +# 109 "pilexer.mll" + ( REPL ) +# 274 "pilexer.ml" + + | 13 -> +# 110 "pilexer.mll" + ( EQUAL ) +# 279 "pilexer.ml" + + | 14 -> +# 111 "pilexer.mll" + ( SLASH ) +# 284 "pilexer.ml" + + | 15 -> +# 112 "pilexer.mll" + ( DOT ) +# 289 "pilexer.ml" + + | 16 -> +# 113 "pilexer.mll" + ( STAR ) +# 294 "pilexer.ml" + + | 17 -> +# 114 "pilexer.mll" + ( COLON ) +# 299 "pilexer.ml" + + | 18 -> +# 115 "pilexer.mll" + ( WEDGE ) +# 304 "pilexer.ml" + + | 19 -> +# 116 "pilexer.mll" + ( RED ) +# 309 "pilexer.ml" + + | 20 -> +# 117 "pilexer.mll" + ( EQUIV ) +# 314 "pilexer.ml" + + | 21 -> +# 118 "pilexer.mll" + ( EQUIVEQ ) +# 319 "pilexer.ml" + + | 22 -> +# 119 "pilexer.mll" + ( DIFF ) +# 324 "pilexer.ml" + + | 23 -> +# 120 "pilexer.mll" + ( BEFORE ) +# 329 "pilexer.ml" + + | 24 -> +# 121 "pilexer.mll" + ( EOF ) +# 334 "pilexer.ml" + + | 25 -> +# 122 "pilexer.mll" + ( input_error "Illegal character" (extent lexbuf) ) +# 339 "pilexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state + +and comment lexbuf = + __ocaml_lex_comment_rec lexbuf 33 +and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 125 "pilexer.mll" + ( ) +# 350 "pilexer.ml" + + | 1 -> +# 127 "pilexer.mll" + ( next_line lexbuf; comment lexbuf ) +# 355 "pilexer.ml" + + | 2 -> +# 128 "pilexer.mll" + ( ) +# 360 "pilexer.ml" + + | 3 -> +# 129 "pilexer.mll" + ( comment lexbuf ) +# 365 "pilexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state + +;; + diff --git a/preinstallTTool/linux/proverif/src/pilexer.mll b/preinstallTTool/linux/proverif/src/pilexer.mll new file mode 100644 index 0000000000000000000000000000000000000000..a1f4b5381a7c69d8999fe1312a5352036d917f2b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pilexer.mll @@ -0,0 +1,129 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +{ +open Parsing_helper +open Piparser + +let create_hashtable size init = + let tbl = Hashtbl.create size in + List.iter (fun (key,data) -> Hashtbl.add tbl key data) init; + tbl + +(* Untyped front-end *) + +let keyword_table = + create_hashtable 11 +[ "data", DATA; + "param", PARAM; + "private", PRIVATE; +(* Common keywords *) + "new", NEW; + "out", OUT; + "in", IN; + "if", IF; + "then", THEN; + "else", ELSE; + "fun", FUN; + "equation", EQUATION; + "reduc", REDUCTION; + "pred", PREDICATE; + "process", PROCESS; + "let", LET; + "query", QUERY; + "putbegin", PUTBEGIN; + "noninterf", NONINTERF; + "event", EVENT; + "not", NOT; + "elimtrue", ELIMTRUE; + "free", FREE; + "clauses", CLAUSES; + "suchthat", SUCHTHAT; + "nounif", NOUNIF; + "phase", PHASE; + "among", AMONG; + "weaksecret", WEAKSECRET; + "choice", CHOICE; + "otherwise", OTHERWISE; + "can", CANTEXT; + "fail", FAIL; + "where", WHERE] + +} + +rule token = parse + "\010" | "\013" | "\013\010" + { next_line lexbuf; token lexbuf } +| [ ' ' '\009' '\012' ] + + { token lexbuf } +| [ 'a'-'z' 'A'-'Z' ] (( [ 'a'-'z' 'A'-'Z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9' ] )*) + { let s = Lexing.lexeme lexbuf in + try + Hashtbl.find keyword_table s + with + Not_found -> + IDENT (s, extent lexbuf) + } +| ([ '0'-'9' ]) + + { + try + INT (int_of_string(Lexing.lexeme lexbuf)) + with Failure _ -> + input_error "Incorrect integer" (extent lexbuf) + } +| "(*" { + comment lexbuf; + token lexbuf + } +| ',' { COMMA } +| '(' { LPAREN } +| ')' { RPAREN } +| '[' { LBRACKET } +| ']' { RBRACKET } +| '|' { BAR } +| ';' { SEMI } +| '!' { REPL } +| '=' { EQUAL } +| '/' { SLASH } +| '.' { DOT } +| '*' { STAR } +| ':' { COLON } +| '&' { WEDGE } +| "->" { RED } +| "<->" { EQUIV } +| "<=>" { EQUIVEQ } +| "<>" { DIFF } +| "==>" { BEFORE } +| eof { EOF } +| _ { input_error "Illegal character" (extent lexbuf) } + +and comment = parse +| "*)" { } +| "\010" | "\013" | "\013\010" + { next_line lexbuf; comment lexbuf } +| eof { } +| _ { comment lexbuf } diff --git a/preinstallTTool/linux/proverif/src/piparser.cmi b/preinstallTTool/linux/proverif/src/piparser.cmi new file mode 100644 index 0000000000000000000000000000000000000000..204d5c495cd4a378b147fb3b5ede50d075a7996b Binary files /dev/null and b/preinstallTTool/linux/proverif/src/piparser.cmi differ diff --git a/preinstallTTool/linux/proverif/src/piparser.cmx b/preinstallTTool/linux/proverif/src/piparser.cmx new file mode 100644 index 0000000000000000000000000000000000000000..3cebdd4cf68159464c9874d747ec9f44c36e7318 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/piparser.cmx differ diff --git a/preinstallTTool/linux/proverif/src/piparser.ml b/preinstallTTool/linux/proverif/src/piparser.ml new file mode 100644 index 0000000000000000000000000000000000000000..079ea4423c3652f9b0a05c419d720eed82bedf16 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/piparser.ml @@ -0,0 +1,1735 @@ +type token = + | CHOICE + | STAR + | COMMA + | LPAREN + | RPAREN + | LBRACKET + | RBRACKET + | BAR + | SEMI + | NEW + | OUT + | IN + | IDENT of (Piptree.ident) + | INT of (int) + | REPL + | IF + | THEN + | ELSE + | EQUAL + | FUN + | EQUATION + | REDUCTION + | PREDICATE + | PROCESS + | SLASH + | DOT + | EOF + | LET + | QUERY + | BEFORE + | PUTBEGIN + | NONINTERF + | EVENT + | NOT + | ELIMTRUE + | FREE + | SUCHTHAT + | CLAUSES + | RED + | EQUIV + | EQUIVEQ + | WEDGE + | DIFF + | COLON + | NOUNIF + | PHASE + | AMONG + | WEAKSECRET + | CANTEXT + | FAIL + | WHERE + | OTHERWISE + | DATA + | PARAM + | PRIVATE + +open Parsing;; +let _ = parse_error;; +# 2 "piparser.mly" +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +# 31 "piparser.mly" + +open Parsing_helper +open Ptree +open Piptree +exception Syntax + +# 96 "piparser.ml" +let yytransl_const = [| + 257 (* CHOICE *); + 258 (* STAR *); + 259 (* COMMA *); + 260 (* LPAREN *); + 261 (* RPAREN *); + 262 (* LBRACKET *); + 263 (* RBRACKET *); + 264 (* BAR *); + 265 (* SEMI *); + 266 (* NEW *); + 267 (* OUT *); + 268 (* IN *); + 271 (* REPL *); + 272 (* IF *); + 273 (* THEN *); + 274 (* ELSE *); + 275 (* EQUAL *); + 276 (* FUN *); + 277 (* EQUATION *); + 278 (* REDUCTION *); + 279 (* PREDICATE *); + 280 (* PROCESS *); + 281 (* SLASH *); + 282 (* DOT *); + 0 (* EOF *); + 283 (* LET *); + 284 (* QUERY *); + 285 (* BEFORE *); + 286 (* PUTBEGIN *); + 287 (* NONINTERF *); + 288 (* EVENT *); + 289 (* NOT *); + 290 (* ELIMTRUE *); + 291 (* FREE *); + 292 (* SUCHTHAT *); + 293 (* CLAUSES *); + 294 (* RED *); + 295 (* EQUIV *); + 296 (* EQUIVEQ *); + 297 (* WEDGE *); + 298 (* DIFF *); + 299 (* COLON *); + 300 (* NOUNIF *); + 301 (* PHASE *); + 302 (* AMONG *); + 303 (* WEAKSECRET *); + 304 (* CANTEXT *); + 305 (* FAIL *); + 306 (* WHERE *); + 307 (* OTHERWISE *); + 308 (* DATA *); + 309 (* PARAM *); + 310 (* PRIVATE *); + 0|] + +let yytransl_block = [| + 269 (* IDENT *); + 270 (* INT *); + 0|] + +let yylhs = "\255\255\ +\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\001\000\003\000\003\000\ +\006\000\006\000\020\000\020\000\022\000\022\000\007\000\007\000\ +\004\000\004\000\005\000\005\000\005\000\005\000\005\000\024\000\ +\024\000\023\000\023\000\008\000\008\000\025\000\025\000\014\000\ +\014\000\015\000\015\000\015\000\015\000\028\000\028\000\026\000\ +\026\000\029\000\029\000\029\000\029\000\027\000\027\000\030\000\ +\030\000\017\000\017\000\031\000\031\000\031\000\018\000\013\000\ +\013\000\032\000\032\000\032\000\032\000\033\000\034\000\034\000\ +\034\000\034\000\034\000\035\000\035\000\035\000\035\000\035\000\ +\038\000\038\000\036\000\036\000\039\000\039\000\039\000\039\000\ +\037\000\037\000\040\000\040\000\012\000\012\000\010\000\016\000\ +\016\000\011\000\011\000\019\000\019\000\019\000\041\000\041\000\ +\042\000\042\000\042\000\042\000\043\000\043\000\021\000\021\000\ +\009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ +\009\000\009\000\009\000\009\000\009\000\009\000\009\000\009\000\ +\044\000\044\000\045\000\045\000\045\000\045\000\046\000\046\000\ +\000\000" + +let yylen = "\002\000\ +\007\000\006\000\004\000\008\000\005\000\007\000\006\000\006\000\ +\006\000\006\000\006\000\004\000\004\000\004\000\006\000\005\000\ +\004\000\008\000\005\000\003\000\000\000\004\000\001\000\000\000\ +\005\000\004\000\003\000\001\000\007\000\003\000\003\000\001\000\ +\003\000\005\000\001\000\004\000\006\000\001\000\003\000\003\000\ +\001\000\001\000\000\000\003\000\001\000\005\000\001\000\003\000\ +\001\000\004\000\001\000\003\000\004\000\003\000\001\000\001\000\ +\000\000\006\000\004\000\005\000\003\000\001\000\000\000\005\000\ +\003\000\002\000\000\000\003\000\003\000\003\000\002\000\003\000\ +\001\000\001\000\001\000\004\000\004\000\003\000\003\000\003\000\ +\003\000\001\000\003\000\004\000\001\000\003\000\004\000\002\000\ +\003\000\001\000\001\000\000\000\006\000\004\000\005\000\003\000\ +\001\000\000\000\005\000\003\000\002\000\000\000\004\000\002\000\ +\000\000\002\000\000\000\003\000\003\000\003\000\003\000\001\000\ +\003\000\001\000\003\000\003\000\005\000\001\000\003\000\002\000\ +\003\000\001\000\002\000\001\000\003\000\006\000\004\000\007\000\ +\007\000\006\000\008\000\006\000\008\000\003\000\006\000\003\000\ +\002\000\000\000\001\000\003\000\004\000\002\000\003\000\001\000\ +\002\000" + +let yydefred = "\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\023\000\145\000\ +\000\000\000\000\000\000\000\000\000\000\035\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\075\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\042\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\056\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\071\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\020\000\ +\000\000\000\000\000\000\000\000\000\000\120\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\122\000\124\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\039\000\000\000\003\000\000\000\000\000\000\000\000\000\052\000\ +\000\000\000\000\000\000\000\000\062\000\068\000\000\000\000\000\ +\012\000\070\000\069\000\000\000\082\000\000\000\104\000\072\000\ +\000\000\013\000\048\000\000\000\000\000\066\000\000\000\108\000\ +\110\000\109\000\017\000\000\000\000\000\000\000\111\000\113\000\ +\115\000\116\000\000\000\119\000\000\000\000\000\000\000\000\000\ +\000\000\091\000\106\000\000\000\000\000\014\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\123\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\022\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\040\000\ +\036\000\000\000\000\000\000\000\000\000\054\000\050\000\000\000\ +\000\000\053\000\077\000\076\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\016\000\000\000\000\000\ +\000\000\088\000\000\000\000\000\000\000\000\000\103\000\000\000\ +\101\000\000\000\000\000\000\000\000\000\121\000\000\000\125\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\142\000\ +\000\000\000\000\000\000\136\000\000\000\000\000\000\000\005\000\ +\000\000\031\000\044\000\019\000\000\000\034\000\007\000\000\000\ +\008\000\000\000\000\000\083\000\081\000\000\000\000\000\046\000\ +\015\000\000\000\027\000\000\000\117\000\086\000\000\000\000\000\ +\000\000\000\000\097\000\089\000\000\000\009\000\002\000\010\000\ +\011\000\000\000\000\000\000\000\000\000\000\000\140\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\037\000\ +\006\000\000\000\000\000\000\000\000\000\084\000\000\000\000\000\ +\087\000\000\000\000\000\000\000\000\000\143\000\141\000\000\000\ +\000\000\000\000\001\000\000\000\000\000\000\000\000\000\060\000\ +\000\000\064\000\018\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\135\000\000\000\004\000\000\000\058\000\ +\000\000\000\000\099\000\129\000\128\000\000\000\000\000\000\000\ +\029\000\095\000\000\000\000\000\000\000\000\000\026\000\093\000\ +\025\000" + +let yydgoto = "\002\000\ +\016\000\017\000\018\000\023\000\043\000\077\001\123\000\126\000\ +\120\000\051\000\105\000\181\000\031\000\038\000\032\000\082\000\ +\089\000\149\000\045\000\165\000\046\000\124\000\061\000\062\000\ +\039\000\070\000\140\000\071\000\141\000\158\000\034\000\035\000\ +\036\000\150\000\176\000\177\000\034\001\178\000\035\001\241\000\ +\047\000\048\000\049\000\248\000\253\000\254\000" + +let yysindex = "\063\000\ +\122\000\000\000\024\255\082\255\103\255\143\255\115\255\072\000\ +\025\255\025\255\165\255\187\255\200\255\218\255\000\000\000\000\ +\060\255\021\000\142\255\024\255\163\255\000\000\148\255\186\255\ +\210\255\240\255\073\000\028\255\254\255\033\000\036\000\030\255\ +\025\000\039\000\065\000\000\000\067\000\080\000\114\000\099\255\ +\115\000\035\255\038\255\096\255\086\000\122\000\091\000\085\000\ +\170\255\095\000\116\000\125\000\132\000\128\000\087\000\154\000\ +\024\255\155\000\024\255\167\000\166\000\000\000\024\255\122\000\ +\024\255\158\000\087\000\128\255\170\000\172\000\000\000\073\000\ +\225\255\073\000\159\000\136\000\122\000\073\000\073\000\124\000\ +\168\000\000\000\143\255\176\000\122\000\115\255\115\000\171\000\ +\157\000\024\255\024\255\024\255\122\000\173\000\025\255\000\000\ +\025\255\025\255\025\255\173\000\025\255\000\000\068\000\174\000\ +\178\000\122\000\175\000\075\000\087\000\177\000\181\000\187\000\ +\000\000\000\000\087\000\025\255\056\000\179\000\180\000\010\000\ +\156\000\182\000\169\000\142\000\193\000\183\000\194\000\024\255\ +\000\000\195\000\000\000\189\000\156\255\107\255\073\000\000\000\ +\197\000\184\000\185\000\198\000\000\000\000\000\073\000\155\000\ +\000\000\000\000\000\000\124\000\000\000\073\255\000\000\000\000\ +\024\255\000\000\000\000\186\000\188\000\000\000\122\000\000\000\ +\000\000\000\000\000\000\201\000\160\000\086\000\000\000\000\000\ +\000\000\000\000\162\000\000\000\200\000\068\000\026\000\203\000\ +\039\000\000\000\000\000\202\000\190\000\000\000\191\000\192\000\ +\196\000\118\000\205\000\024\255\024\255\000\000\204\000\121\000\ +\161\000\024\255\199\000\206\000\207\000\205\000\087\000\000\000\ +\209\000\024\255\122\000\024\255\155\000\122\000\024\255\000\000\ +\000\000\024\255\122\000\208\000\122\000\000\000\000\000\073\000\ +\210\000\000\000\000\000\000\000\021\255\025\000\214\000\119\255\ +\124\000\124\000\215\000\122\000\073\000\000\000\173\000\211\000\ +\212\000\000\000\219\000\068\000\131\000\068\000\000\000\213\000\ +\000\000\122\000\122\000\122\000\122\000\000\000\087\000\000\000\ +\223\000\224\000\087\000\226\000\225\000\228\000\121\000\000\000\ +\025\255\024\255\024\255\000\000\229\000\216\000\026\255\000\000\ +\217\000\000\000\000\000\000\000\231\000\000\000\000\000\122\000\ +\000\000\222\000\073\000\000\000\000\000\073\255\218\000\000\000\ +\000\000\230\000\000\000\220\000\000\000\000\000\235\000\232\000\ +\227\000\236\000\000\000\000\000\068\000\000\000\000\000\000\000\ +\000\000\229\000\024\255\121\000\229\255\121\000\000\000\239\000\ +\233\000\237\000\242\000\122\000\024\255\173\000\024\255\000\000\ +\000\000\225\255\241\000\171\000\122\000\000\000\068\000\234\000\ +\000\000\243\000\249\000\250\000\087\000\000\000\000\000\087\000\ +\087\000\205\000\000\000\238\000\122\000\221\000\240\000\000\000\ +\225\255\000\000\000\000\247\000\068\000\202\000\205\000\205\000\ +\229\000\047\000\060\000\000\000\024\255\000\000\244\000\000\000\ +\131\000\253\000\000\000\000\000\000\000\087\000\087\000\219\255\ +\000\000\000\000\131\000\229\000\229\000\024\255\000\000\000\000\ +\000\000" + +let yyrindex = "\000\000\ +\029\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\002\001\054\000\000\000\000\000\000\000\ +\000\000\000\000\003\001\056\255\000\000\000\000\000\000\000\000\ +\220\255\113\000\245\000\000\000\158\255\000\000\246\000\227\255\ +\248\000\147\255\000\000\000\000\070\255\029\000\000\000\234\255\ +\000\000\000\000\022\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\114\255\000\000\000\000\002\001\029\000\ +\000\000\000\000\000\000\185\255\213\255\000\000\000\000\003\001\ +\251\000\107\000\000\000\000\000\029\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\029\000\000\000\248\000\000\000\ +\000\000\070\000\000\000\000\000\029\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\104\255\000\000\ +\252\000\029\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\254\000\032\255\000\000\000\000\000\000\ +\000\000\000\000\000\000\255\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\003\001\000\000\172\255\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\029\000\000\000\ +\000\000\000\000\000\000\000\001\000\000\123\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\004\001\041\255\112\255\ +\207\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\002\000\000\000\000\000\000\000\000\000\000\000\ +\189\255\000\000\000\000\000\000\000\000\002\000\000\000\000\000\ +\000\000\000\000\029\000\000\000\000\000\029\000\000\000\000\000\ +\000\000\000\000\029\000\000\000\029\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\005\001\134\255\000\000\000\000\ +\000\000\000\000\000\000\029\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\004\001\007\001\000\000\000\000\000\000\ +\000\000\029\000\029\000\029\000\029\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\012\000\006\001\000\000\000\000\000\000\ +\000\000\000\000\002\001\000\000\001\000\000\000\117\255\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\029\000\ +\000\000\010\001\000\000\000\000\000\000\201\255\215\255\000\000\ +\000\000\001\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\007\000\000\000\000\000\009\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\029\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\012\001\000\000\029\000\000\000\000\000\000\000\ +\000\000\009\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\002\000\000\000\000\000\029\000\000\000\117\255\000\000\ +\000\000\000\000\000\000\013\001\000\000\000\000\002\000\002\000\ +\008\000\016\000\019\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\014\001\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\011\000\018\000\000\000\000\000\000\000\ +\000\000" + +let yygindex = "\000\000\ +\000\000\006\000\000\000\038\001\253\255\008\001\064\001\154\255\ +\192\255\000\000\000\000\000\000\196\001\198\001\028\000\230\255\ +\195\001\014\000\251\255\161\255\184\001\000\000\199\255\044\000\ +\000\000\086\001\000\000\151\001\122\255\011\001\000\000\000\000\ +\139\001\135\255\240\254\105\255\000\000\050\001\202\254\015\001\ +\194\001\000\000\000\000\071\255\151\255\031\255" + +let yytablesize = 630 +let yytable = "\024\000\ +\134\000\138\000\134\000\044\000\171\000\130\000\137\000\126\000\ +\127\000\200\000\133\000\196\000\004\001\087\000\195\000\132\000\ +\060\000\131\000\130\000\033\000\066\001\041\000\235\000\135\000\ +\019\000\019\000\224\000\020\000\020\000\048\001\212\000\072\000\ +\160\000\073\000\053\001\040\000\021\000\042\000\063\000\078\000\ +\045\000\220\000\106\001\085\000\186\000\085\000\084\001\085\000\ +\078\000\085\000\190\000\096\000\112\001\122\000\069\000\127\000\ +\091\000\045\000\051\000\060\000\051\000\132\000\079\000\001\000\ +\051\000\085\000\085\000\045\000\098\001\131\000\074\000\079\000\ +\022\000\022\000\051\000\054\001\070\001\090\000\114\000\092\000\ +\225\000\051\000\145\000\055\000\031\001\085\000\060\000\161\000\ +\162\000\166\000\154\000\168\000\169\000\170\000\025\000\114\000\ +\033\000\051\000\163\000\069\000\051\000\069\000\011\001\022\001\ +\023\001\146\000\147\000\112\000\112\000\112\000\191\000\182\000\ +\092\000\226\000\199\000\026\000\090\000\078\000\041\000\114\000\ +\090\000\093\000\041\000\021\001\060\000\041\000\225\000\037\000\ +\092\000\092\000\041\000\072\000\213\000\073\000\005\001\027\001\ +\090\000\090\000\082\000\041\000\079\000\082\000\030\000\081\000\ +\092\001\094\000\027\000\059\000\092\000\060\000\239\000\041\000\ +\041\000\041\000\041\000\028\000\090\000\100\001\101\001\226\000\ +\047\000\222\000\069\000\041\000\230\000\038\000\063\000\030\000\ +\125\000\029\000\219\000\208\000\030\000\064\000\082\000\221\000\ +\078\000\050\000\101\000\080\001\078\000\211\000\042\001\047\000\ +\249\000\250\000\045\001\051\000\038\000\051\000\000\001\051\000\ +\051\000\051\000\068\001\102\000\227\000\078\000\007\001\052\000\ +\009\001\051\001\096\001\013\001\065\000\079\000\024\000\139\000\ +\008\001\079\000\051\000\012\001\053\000\051\000\078\001\105\000\ +\015\001\055\000\017\001\080\000\055\000\055\000\080\000\080\000\ +\045\000\051\000\079\000\110\001\074\000\051\000\054\000\105\000\ +\105\000\025\001\066\000\105\000\199\000\138\000\055\000\139\000\ +\080\000\055\000\118\000\018\001\111\001\074\000\069\001\038\001\ +\039\001\040\001\041\001\049\001\105\000\055\000\050\001\060\000\ +\026\001\055\000\067\000\118\000\089\001\134\000\138\000\090\001\ +\091\001\138\000\075\000\137\000\126\000\127\000\139\000\133\000\ +\139\000\199\000\134\000\138\000\132\000\057\001\131\000\130\000\ +\137\000\126\000\134\000\138\000\133\000\236\000\107\000\237\000\ +\137\000\126\000\127\000\131\000\133\000\108\001\109\001\067\001\ +\056\000\132\000\057\000\131\000\130\000\076\000\059\001\107\000\ +\024\000\076\001\024\000\079\001\021\000\080\000\199\000\058\000\ +\038\000\075\001\038\000\192\000\038\000\077\000\038\000\024\000\ +\102\001\038\000\083\001\199\000\193\000\173\000\038\000\174\000\ +\038\000\083\000\194\000\027\000\027\000\103\001\043\000\038\000\ +\175\000\043\000\094\001\081\000\028\000\068\000\043\000\184\000\ +\185\000\104\001\109\000\038\000\038\000\038\000\038\000\043\000\ +\110\000\111\000\112\000\113\000\114\000\115\000\116\000\038\000\ +\038\000\085\000\076\001\043\000\043\000\043\000\043\000\057\000\ +\084\000\117\000\057\000\057\000\086\000\105\000\118\000\043\000\ +\105\000\105\000\246\000\088\000\192\000\199\000\095\000\148\000\ +\097\000\098\000\099\000\119\000\057\000\252\000\100\000\057\000\ +\028\000\103\000\105\000\194\000\104\000\105\000\003\000\032\001\ +\004\000\033\001\108\000\057\000\005\000\006\000\106\000\057\000\ +\007\000\105\000\008\000\009\000\107\000\137\000\010\000\142\000\ +\112\000\112\000\112\000\205\000\255\000\011\000\121\000\125\000\ +\012\000\128\000\129\000\133\000\135\000\013\000\014\000\015\000\ +\136\000\143\000\144\000\153\000\201\000\151\000\159\000\157\000\ +\188\000\164\000\180\000\179\000\183\000\187\000\189\000\197\000\ +\204\000\198\000\203\000\205\000\207\000\210\000\217\000\209\000\ +\202\000\215\000\216\000\231\000\218\000\238\000\229\000\232\000\ +\206\000\233\000\003\001\228\000\234\000\247\000\240\000\242\000\ +\243\000\244\000\020\001\024\001\251\000\245\000\006\001\030\001\ +\002\001\043\001\044\001\046\001\019\001\255\000\058\001\037\001\ +\047\001\016\001\001\001\055\001\199\000\056\001\060\001\062\001\ +\064\001\052\001\065\001\071\001\072\001\061\001\074\001\014\001\ +\073\001\081\001\063\001\086\001\085\001\087\001\088\001\097\001\ +\093\001\063\000\226\000\028\001\029\001\107\001\043\000\057\000\ +\092\000\055\000\144\000\010\001\095\001\098\000\073\000\049\000\ +\061\000\067\000\059\000\096\000\094\000\102\000\152\000\032\000\ +\033\000\156\000\065\000\155\000\172\000\214\000\223\000\036\001\ +\167\000\054\001\100\000\000\000\105\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\082\001\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\099\001\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\113\001" + +let yycheck = "\003\000\ +\000\000\000\000\067\000\009\000\100\000\063\000\000\000\000\000\ +\000\000\000\000\000\000\117\000\198\000\040\000\117\000\000\000\ +\020\000\000\000\000\000\006\000\037\001\008\000\174\000\003\001\ +\001\001\001\001\148\000\004\001\004\001\255\000\133\000\004\001\ +\090\000\006\001\009\001\008\000\013\001\013\001\004\001\019\001\ +\009\001\144\000\097\001\003\001\109\000\005\001\063\001\007\001\ +\019\001\009\001\115\000\046\000\107\001\057\000\027\000\059\000\ +\019\001\026\001\003\001\063\000\005\001\065\000\042\001\001\000\ +\009\001\025\001\026\001\036\001\085\001\064\000\043\001\042\001\ +\049\001\049\001\019\001\050\001\046\001\043\001\009\001\042\001\ +\008\001\026\001\077\000\024\001\236\000\045\001\090\000\091\000\ +\092\000\095\000\085\000\097\000\098\000\099\000\013\001\026\001\ +\083\000\042\001\093\000\072\000\045\001\074\000\205\000\225\000\ +\226\000\078\000\079\000\038\001\039\001\040\001\116\000\106\000\ +\009\001\041\001\008\001\013\001\005\001\019\001\005\001\050\001\ +\009\001\026\001\009\001\005\001\128\000\012\001\008\001\013\001\ +\025\001\026\001\017\001\004\001\026\001\006\001\199\000\231\000\ +\025\001\026\001\005\001\026\001\042\001\008\001\026\001\045\001\ +\074\001\050\001\004\001\006\001\045\001\153\000\177\000\038\001\ +\039\001\040\001\041\001\013\001\045\001\087\001\088\001\041\001\ +\003\001\148\000\135\000\050\001\159\000\019\001\004\001\051\001\ +\013\001\027\001\143\000\128\000\030\001\026\001\041\001\148\000\ +\005\001\013\001\009\001\058\001\009\001\026\001\247\000\026\001\ +\188\000\189\000\251\000\003\001\042\001\005\001\194\000\007\001\ +\008\001\009\001\044\001\026\001\153\000\026\001\202\000\013\001\ +\204\000\003\001\081\001\207\000\019\001\005\001\210\000\019\001\ +\203\000\009\001\026\001\206\000\013\001\029\001\054\001\009\001\ +\211\000\005\001\213\000\005\001\008\001\009\001\008\001\009\001\ +\036\001\041\001\026\001\009\001\009\001\045\001\013\001\025\001\ +\026\001\228\000\025\001\009\001\008\001\013\001\026\001\015\001\ +\026\001\029\001\009\001\216\000\026\001\026\001\018\001\242\000\ +\243\000\244\000\245\000\001\001\026\001\041\001\002\001\003\001\ +\229\000\045\001\019\001\026\001\069\001\005\001\005\001\072\001\ +\073\001\008\001\013\001\005\001\005\001\005\001\003\001\005\001\ +\005\001\008\001\018\001\018\001\005\001\016\001\005\001\005\001\ +\018\001\018\001\026\001\026\001\018\001\004\001\009\001\006\001\ +\026\001\026\001\026\001\018\001\026\001\102\001\103\001\043\001\ +\020\001\026\001\022\001\026\001\026\001\013\001\019\001\026\001\ +\020\001\053\001\022\001\055\001\024\001\029\001\008\001\035\001\ +\003\001\052\001\005\001\004\001\007\001\026\001\009\001\035\001\ +\018\001\012\001\061\001\008\001\013\001\002\001\017\001\004\001\ +\019\001\009\001\019\001\004\001\004\001\018\001\009\001\026\001\ +\013\001\012\001\077\001\045\001\013\001\013\001\017\001\013\001\ +\014\001\093\001\004\001\038\001\039\001\040\001\041\001\026\001\ +\010\001\011\001\012\001\013\001\014\001\015\001\016\001\050\001\ +\051\001\026\001\110\001\038\001\039\001\040\001\041\001\005\001\ +\046\001\027\001\008\001\009\001\003\001\005\001\032\001\050\001\ +\008\001\009\001\005\001\009\001\004\001\008\001\041\001\004\001\ +\038\001\039\001\040\001\045\001\026\001\013\001\050\001\029\001\ +\013\001\043\001\026\001\019\001\025\001\029\001\021\001\013\001\ +\023\001\015\001\019\001\041\001\027\001\028\001\026\001\045\001\ +\031\001\041\001\033\001\034\001\025\001\072\000\037\001\074\000\ +\038\001\039\001\040\001\003\001\004\001\044\001\013\001\013\001\ +\047\001\003\001\005\001\014\001\003\001\052\001\053\001\054\001\ +\005\001\019\001\043\001\004\001\025\001\014\001\026\001\013\001\ +\004\001\013\001\009\001\014\001\014\001\013\001\004\001\013\001\ +\051\001\014\001\026\001\003\001\003\001\009\001\014\001\005\001\ +\019\001\005\001\019\001\003\001\007\001\003\001\019\001\048\001\ +\026\001\048\001\004\001\026\001\013\001\009\001\013\001\026\001\ +\026\001\026\001\005\001\005\001\017\001\026\001\014\001\005\001\ +\019\001\003\001\003\001\003\001\019\001\004\001\009\001\019\001\ +\005\001\026\001\036\001\019\001\008\001\007\001\009\001\005\001\ +\014\001\026\001\007\001\005\001\012\001\026\001\005\001\210\000\ +\012\001\009\001\019\001\009\001\019\001\005\001\005\001\009\001\ +\019\001\007\001\041\001\049\001\049\001\009\001\005\001\005\001\ +\005\001\005\001\005\001\204\000\048\001\007\001\026\001\026\001\ +\007\001\026\001\007\001\007\001\007\001\026\001\083\000\026\001\ +\026\001\087\000\026\001\086\000\101\000\135\000\148\000\238\000\ +\095\000\050\001\026\001\255\255\049\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\048\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\060\001\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\086\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\110\001" + +let yynames_const = "\ + CHOICE\000\ + STAR\000\ + COMMA\000\ + LPAREN\000\ + RPAREN\000\ + LBRACKET\000\ + RBRACKET\000\ + BAR\000\ + SEMI\000\ + NEW\000\ + OUT\000\ + IN\000\ + REPL\000\ + IF\000\ + THEN\000\ + ELSE\000\ + EQUAL\000\ + FUN\000\ + EQUATION\000\ + REDUCTION\000\ + PREDICATE\000\ + PROCESS\000\ + SLASH\000\ + DOT\000\ + EOF\000\ + LET\000\ + QUERY\000\ + BEFORE\000\ + PUTBEGIN\000\ + NONINTERF\000\ + EVENT\000\ + NOT\000\ + ELIMTRUE\000\ + FREE\000\ + SUCHTHAT\000\ + CLAUSES\000\ + RED\000\ + EQUIV\000\ + EQUIVEQ\000\ + WEDGE\000\ + DIFF\000\ + COLON\000\ + NOUNIF\000\ + PHASE\000\ + AMONG\000\ + WEAKSECRET\000\ + CANTEXT\000\ + FAIL\000\ + WHERE\000\ + OTHERWISE\000\ + DATA\000\ + PARAM\000\ + PRIVATE\000\ + " + +let yynames_block = "\ + IDENT\000\ + INT\000\ + " + +let yyact = [| + (fun _ -> failwith "parser") +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 6 : 'privateopt) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 114 "piparser.mly" + ( (FunDecl(_3, _5, _1)) :: _7 ) +# 597 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 116 "piparser.mly" + ( (DataFunDecl(_2, _4)) :: _6 ) +# 606 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'eqlist) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 118 "piparser.mly" + ( (Equation(_2)) :: _4 ) +# 614 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 7 : 'privateopt) in + let _3 = (Parsing.peek_val __caml_parser_env 5 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 3 : 'term) in + let _7 = (Parsing.peek_val __caml_parser_env 1 : 'reduc) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 120 "piparser.mly" + ( (Reduc((_3,_5)::_7, _1)) :: _8 ) +# 625 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'privateopt) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'reducmayfailseq) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 123 "piparser.mly" + ( (ReducFail(_3,_1)) :: _5 ) +# 634 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : int) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'neidentseq) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 126 "piparser.mly" + ( (PredDecl(_2, _4, _5)) :: _7 ) +# 644 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 128 "piparser.mly" + ( (PredDecl(_2, _4, [])) :: _6 ) +# 653 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'process) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 130 "piparser.mly" + ( (PDef(_2,_4)) :: _6 ) +# 662 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'gfactformat) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'optint) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'foptbindingseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 132 "piparser.mly" + ( (NoUnif (_2,_3,_4)) :: _6 ) +# 672 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 134 "piparser.mly" + ( (Param(_2,S _4)) :: _6 ) +# 681 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 136 "piparser.mly" + ( (Param(_2,I _4)) :: _6 ) +# 690 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'queryseq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 138 "piparser.mly" + ( (Query(_2)) :: _4 ) +# 698 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'niseq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 140 "piparser.mly" + ( (Noninterf(_2)) :: _4 ) +# 706 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 142 "piparser.mly" + ( (Weaksecret(_2)) :: _4 ) +# 714 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'optphase) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'optbindingseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 144 "piparser.mly" + ( (Not(((PGSimpleFact(("attacker",dummy_ext), [_2]),dummy_ext),_3),_4)) :: _6 ) +# 724 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'event) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'optbindingseq) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 146 "piparser.mly" + ( (Not(_2,_3)) :: _5 ) +# 733 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 148 "piparser.mly" + ( (Elimtrue (_2, [])) :: _4 ) +# 741 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'fact) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'varmayfail) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 150 "piparser.mly" + ( (Elimtrue (_2, _4)) :: _8 ) +# 750 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'privateopt) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'neidentseq) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 152 "piparser.mly" + ( (Free(_3,_1)) :: _5 ) +# 759 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'clauses) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'lib) in + Obj.repr( +# 154 "piparser.mly" + ( (Clauses(_2)) :: _3 ) +# 767 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + Obj.repr( +# 156 "piparser.mly" + ( [] ) +# 773 "piparser.ml" + : 'lib)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'lib) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'process) in + Obj.repr( +# 160 "piparser.mly" + ( _1, _3 ) +# 781 "piparser.ml" + : Piptree.decl list * Piptree.process)) +; (fun __caml_parser_env -> + Obj.repr( +# 164 "piparser.mly" + ( true ) +# 787 "piparser.ml" + : 'privateopt)) +; (fun __caml_parser_env -> + Obj.repr( +# 166 "piparser.mly" + ( false ) +# 793 "piparser.ml" + : 'privateopt)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'reduc) in + Obj.repr( +# 172 "piparser.mly" + ( (_1,_3) :: _5 ) +# 802 "piparser.ml" + : 'reduc)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'term) in + Obj.repr( +# 174 "piparser.mly" + ( [(_1,_3)] ) +# 810 "piparser.ml" + : 'reduc)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'varmayfail) in + Obj.repr( +# 178 "piparser.mly" + ( _1::_3 ) +# 818 "piparser.ml" + : 'varmayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 180 "piparser.mly" + ( [_1] ) +# 825 "piparser.ml" + : 'varmayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 6 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'varmayfail) in + Obj.repr( +# 184 "piparser.mly" + ( (_1,_3,_5) ) +# 834 "piparser.ml" + : 'reducmayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 186 "piparser.mly" + ( (_1,_3,[]) ) +# 842 "piparser.ml" + : 'reducmayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'reducmayfail) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'reducmayfailseq) in + Obj.repr( +# 190 "piparser.mly" + ( _1::_3 ) +# 850 "piparser.ml" + : 'reducmayfailseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'reducmayfail) in + Obj.repr( +# 192 "piparser.mly" + ( [_1] ) +# 857 "piparser.ml" + : 'reducmayfailseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 199 "piparser.mly" + ( [(_1, _3)] ) +# 865 "piparser.ml" + : 'eqlist)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'eqlist) in + Obj.repr( +# 201 "piparser.mly" + ( (_1, _3) :: _5 ) +# 874 "piparser.ml" + : 'eqlist)) +; (fun __caml_parser_env -> + Obj.repr( +# 207 "piparser.mly" + ( PFail, parse_extent () ) +# 880 "piparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 210 "piparser.mly" + ( PFunApp (_1, _3), parse_extent() ) +# 888 "piparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'term) in + Obj.repr( +# 212 "piparser.mly" + ( Param.has_choice := true; + PFunApp(("choice specident", parse_extent()), [_3; _5]), parse_extent() ) +# 897 "piparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 215 "piparser.mly" + ( PIdent (_1), parse_extent() ) +# 904 "piparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 217 "piparser.mly" + ( PTuple (_2), parse_extent() ) +# 911 "piparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'netermseq) in + Obj.repr( +# 221 "piparser.mly" + ( _1 :: _3 ) +# 919 "piparser.ml" + : 'netermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 223 "piparser.mly" + ( [_1] ) +# 926 "piparser.ml" + : 'netermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'netermseq) in + Obj.repr( +# 227 "piparser.mly" + ( _1 ) +# 933 "piparser.ml" + : 'termseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 229 "piparser.mly" + ( [] ) +# 939 "piparser.ml" + : 'termseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'neidentseq) in + Obj.repr( +# 233 "piparser.mly" + ( _1 :: _3 ) +# 947 "piparser.ml" + : 'neidentseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 235 "piparser.mly" + ( [_1] ) +# 954 "piparser.ml" + : 'neidentseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'netermseq) in + Obj.repr( +# 239 "piparser.mly" + ( (_1, Some _4) ) +# 962 "piparser.ml" + : 'ni)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 241 "piparser.mly" + ( (_1, None) ) +# 969 "piparser.ml" + : 'ni)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'ni) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'niseq) in + Obj.repr( +# 245 "piparser.mly" + ( _1 :: _3 ) +# 977 "piparser.ml" + : 'niseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'ni) in + Obj.repr( +# 247 "piparser.mly" + ( [_1] ) +# 984 "piparser.ml" + : 'niseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gtermseq) in + Obj.repr( +# 253 "piparser.mly" + ( PGFunApp (_1, _3), parse_extent() ) +# 992 "piparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 255 "piparser.mly" + ( PGIdent (_1), parse_extent() ) +# 999 "piparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'gtermseq) in + Obj.repr( +# 257 "piparser.mly" + ( PGTuple (_2), parse_extent() ) +# 1006 "piparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'bindingseq) in + Obj.repr( +# 259 "piparser.mly" + ( PGName (_1, _3), parse_extent() ) +# 1014 "piparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'negtermseq) in + Obj.repr( +# 263 "piparser.mly" + ( _1 :: _3 ) +# 1022 "piparser.ml" + : 'negtermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 265 "piparser.mly" + ( [_1] ) +# 1029 "piparser.ml" + : 'negtermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'negtermseq) in + Obj.repr( +# 269 "piparser.mly" + ( _1 ) +# 1036 "piparser.ml" + : 'gtermseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 271 "piparser.mly" + ( [] ) +# 1042 "piparser.ml" + : 'gtermseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'nesbindingseq) in + Obj.repr( +# 276 "piparser.mly" + ( (("!" ^ (string_of_int (_2)), parse_extent()), _4) :: _6 ) +# 1051 "piparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 278 "piparser.mly" + ( [(("!" ^ (string_of_int (_2)), parse_extent()), _4)] ) +# 1059 "piparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'nesbindingseq) in + Obj.repr( +# 280 "piparser.mly" + ( (_1, _3) :: _5 ) +# 1068 "piparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 282 "piparser.mly" + ( [(_1, _3)] ) +# 1076 "piparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'nesbindingseq) in + Obj.repr( +# 286 "piparser.mly" + ( _1 ) +# 1083 "piparser.ml" + : 'bindingseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 288 "piparser.mly" + ( [] ) +# 1089 "piparser.ml" + : 'bindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'nebindingseq) in + Obj.repr( +# 292 "piparser.mly" + ( (_1, _3) :: _5 ) +# 1098 "piparser.ml" + : 'nebindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 294 "piparser.mly" + ( [(_1, _3)] ) +# 1106 "piparser.ml" + : 'nebindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'nebindingseq) in + Obj.repr( +# 298 "piparser.mly" + ( _2 ) +# 1113 "piparser.ml" + : 'optbindingseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 300 "piparser.mly" + ( [] ) +# 1119 "piparser.ml" + : 'optbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gtermseq) in + Obj.repr( +# 304 "piparser.mly" + ( PGSimpleFact(_1,_3), parse_extent() ) +# 1127 "piparser.ml" + : 'gfact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 306 "piparser.mly" + ( PGNeq(_1,_3), parse_extent() ) +# 1135 "piparser.ml" + : 'gfact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 308 "piparser.mly" + ( PGEqual(_1, _3), parse_extent() ) +# 1143 "piparser.ml" + : 'gfact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'gfact) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'optphase) in + Obj.repr( +# 312 "piparser.mly" + ( (_1,_2) ) +# 1151 "piparser.ml" + : 'event)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'query) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'queryseq) in + Obj.repr( +# 316 "piparser.mly" + ( _1 :: _3 ) +# 1159 "piparser.ml" + : 'queryseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'query) in + Obj.repr( +# 318 "piparser.mly" + ( [_1] ) +# 1166 "piparser.ml" + : 'queryseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'event) in + Obj.repr( +# 322 "piparser.mly" + ( PRealQuery(PBefore(_1, PFalse)) ) +# 1173 "piparser.ml" + : 'query)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'realquery) in + Obj.repr( +# 324 "piparser.mly" + ( PRealQuery(_1) ) +# 1180 "piparser.ml" + : 'query)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'neidentseq) in + Obj.repr( +# 326 "piparser.mly" + ( PPutBegin(_2, _4) ) +# 1188 "piparser.ml" + : 'query)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 328 "piparser.mly" + ( PBinding(_2,_4) ) +# 1196 "piparser.ml" + : 'query)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'event) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'hyp) in + Obj.repr( +# 333 "piparser.mly" + ( PBefore(_1, _3) ) +# 1204 "piparser.ml" + : 'realquery)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'hyp) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'hyp) in + Obj.repr( +# 337 "piparser.mly" + ( POr(_1, _3) ) +# 1212 "piparser.ml" + : 'hyp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'hyp) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'hyp) in + Obj.repr( +# 339 "piparser.mly" + ( PAnd(_1, _3) ) +# 1220 "piparser.ml" + : 'hyp)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'hyp) in + Obj.repr( +# 341 "piparser.mly" + ( _2 ) +# 1227 "piparser.ml" + : 'hyp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'event) in + Obj.repr( +# 343 "piparser.mly" + ( PQEvent(_1) ) +# 1234 "piparser.ml" + : 'hyp)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'realquery) in + Obj.repr( +# 345 "piparser.mly" + ( PNestedQuery(_2) ) +# 1241 "piparser.ml" + : 'hyp)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gformatseq) in + Obj.repr( +# 351 "piparser.mly" + ( PFGFunApp (_1, _3), parse_extent() ) +# 1249 "piparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 353 "piparser.mly" + ( PFGIdent (_1), parse_extent() ) +# 1256 "piparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'gformatseq) in + Obj.repr( +# 355 "piparser.mly" + ( PFGTuple (_2), parse_extent() ) +# 1263 "piparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'fbindingseq) in + Obj.repr( +# 357 "piparser.mly" + ( PFGName (_1, _3), parse_extent() ) +# 1271 "piparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 359 "piparser.mly" + ( PFGAny (_2), parse_extent() ) +# 1278 "piparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'negformatseq) in + Obj.repr( +# 363 "piparser.mly" + ( _1 :: _3 ) +# 1286 "piparser.ml" + : 'negformatseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 365 "piparser.mly" + ( [_1] ) +# 1293 "piparser.ml" + : 'negformatseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'negformatseq) in + Obj.repr( +# 369 "piparser.mly" + ( _1 ) +# 1300 "piparser.ml" + : 'gformatseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 371 "piparser.mly" + ( [] ) +# 1306 "piparser.ml" + : 'gformatseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'fnesbindingseq) in + Obj.repr( +# 376 "piparser.mly" + ( (("!" ^ (string_of_int (_2)), parse_extent()), _4) :: _6 ) +# 1315 "piparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 378 "piparser.mly" + ( [(("!" ^ (string_of_int (_2)), parse_extent()), _4)] ) +# 1323 "piparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'fnesbindingseq) in + Obj.repr( +# 380 "piparser.mly" + ( (_1, _3) :: _5 ) +# 1332 "piparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 382 "piparser.mly" + ( [(_1, _3)] ) +# 1340 "piparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fnesbindingseq) in + Obj.repr( +# 386 "piparser.mly" + ( _1 ) +# 1347 "piparser.ml" + : 'fbindingseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 388 "piparser.mly" + ( [] ) +# 1353 "piparser.ml" + : 'fbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'fnebindingseq) in + Obj.repr( +# 392 "piparser.mly" + ( (_1, _3) :: _5 ) +# 1362 "piparser.ml" + : 'fnebindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 394 "piparser.mly" + ( [(_1, _3)] ) +# 1370 "piparser.ml" + : 'fnebindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'fnebindingseq) in + Obj.repr( +# 398 "piparser.mly" + ( _2 ) +# 1377 "piparser.ml" + : 'foptbindingseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 400 "piparser.mly" + ( [] ) +# 1383 "piparser.ml" + : 'foptbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gformatseq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'optphase) in + Obj.repr( +# 404 "piparser.mly" + ( (_1,_3,_4) ) +# 1392 "piparser.ml" + : 'gfactformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 410 "piparser.mly" + ( _2 ) +# 1399 "piparser.ml" + : 'optphase)) +; (fun __caml_parser_env -> + Obj.repr( +# 412 "piparser.mly" + ( -1 ) +# 1405 "piparser.ml" + : 'optphase)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 418 "piparser.mly" + ( _2 ) +# 1412 "piparser.ml" + : 'optint)) +; (fun __caml_parser_env -> + Obj.repr( +# 420 "piparser.mly" + ( -1 ) +# 1418 "piparser.ml" + : 'optint)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'termseq) in + Obj.repr( +# 426 "piparser.mly" + ( PSimpleFact(_1,_3), parse_extent() ) +# 1426 "piparser.ml" + : 'fact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 428 "piparser.mly" + ( PSNeq(_1,_3), parse_extent() ) +# 1434 "piparser.ml" + : 'fact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 430 "piparser.mly" + ( PSEqual(_1, _3), parse_extent() ) +# 1442 "piparser.ml" + : 'fact)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'factand) in + Obj.repr( +# 434 "piparser.mly" + ( _1 :: _3 ) +# 1450 "piparser.ml" + : 'factand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 436 "piparser.mly" + ( [_1] ) +# 1457 "piparser.ml" + : 'factand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'factand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 440 "piparser.mly" + ( PClause(_1,_3) ) +# 1465 "piparser.ml" + : 'clause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 442 "piparser.mly" + ( PClause([],_1) ) +# 1472 "piparser.ml" + : 'clause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'factand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 444 "piparser.mly" + ( PEquiv(_1,_3,true) ) +# 1480 "piparser.ml" + : 'clause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'factand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'fact) in + Obj.repr( +# 446 "piparser.mly" + ( PEquiv(_1,_3,false) ) +# 1488 "piparser.ml" + : 'clause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'clause) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'varmayfail) in + Obj.repr( +# 450 "piparser.mly" + ( (_1,_3) ) +# 1496 "piparser.ml" + : 'clausemayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'clause) in + Obj.repr( +# 452 "piparser.mly" + ( (_1,[]) ) +# 1503 "piparser.ml" + : 'clausemayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'clausemayfail) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'clauses) in + Obj.repr( +# 456 "piparser.mly" + ( _1 :: _3 ) +# 1511 "piparser.ml" + : 'clauses)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'clausemayfail) in + Obj.repr( +# 458 "piparser.mly" + ( [_1] ) +# 1518 "piparser.ml" + : 'clauses)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'process) in + Obj.repr( +# 464 "piparser.mly" + ( _2 ) +# 1525 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 466 "piparser.mly" + ( PLetDef _1 ) +# 1532 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 468 "piparser.mly" + ( PRepl _2 ) +# 1539 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 470 "piparser.mly" + ( let x = _1 in + if x = 0 then PNil else + input_error ("The only integer in a process is 0 for the nil process") (parse_extent()) ) +# 1548 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'optprocess) in + Obj.repr( +# 474 "piparser.mly" + ( PRestr(_2, _3) ) +# 1556 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'fact) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'process) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 476 "piparser.mly" + ( PTest(_2,_4,_6) ) +# 1565 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 478 "piparser.mly" + ( PTest(_2,_4,PNil) ) +# 1573 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'optprocess) in + Obj.repr( +# 480 "piparser.mly" + ( PInput(_3,_5,_7) ) +# 1582 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'optprocess) in + Obj.repr( +# 482 "piparser.mly" + ( POutput(_3,_5,_7) ) +# 1591 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'pattern) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 484 "piparser.mly" + ( PLet(_2,_4,_6,PNil) ) +# 1600 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'pattern) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'process) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 486 "piparser.mly" + ( PLet(_2,_4,_6,_8) ) +# 1610 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'neidentseq) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'fact) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 488 "piparser.mly" + ( PLetFilter(_2,_4,_6,PNil) ) +# 1619 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'neidentseq) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'fact) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'process) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 490 "piparser.mly" + ( (* Approximating the else clause with a parallel composition + is not correct for trace reconstruction *) + PLetFilter(_2,_4,_6,_8) ) +# 1631 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'process) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 494 "piparser.mly" + ( PPar(_1,_3) ) +# 1639 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Piptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'termseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'optprocess) in + Obj.repr( +# 496 "piparser.mly" + ( PEvent(_2, _4, _6) ) +# 1648 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : int) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'optprocess) in + Obj.repr( +# 498 "piparser.mly" + ( PPhase(_2, _3) ) +# 1656 "piparser.ml" + : 'process)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'process) in + Obj.repr( +# 502 "piparser.mly" + ( _2 ) +# 1663 "piparser.ml" + : 'optprocess)) +; (fun __caml_parser_env -> + Obj.repr( +# 504 "piparser.mly" + ( PNil ) +# 1669 "piparser.ml" + : 'optprocess)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Piptree.ident) in + Obj.repr( +# 508 "piparser.mly" + ( PPatVar(_1) ) +# 1676 "piparser.ml" + : 'pattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'patternseq) in + Obj.repr( +# 510 "piparser.mly" + ( PPatTuple(_2) ) +# 1683 "piparser.ml" + : 'pattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Piptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'patternseq) in + Obj.repr( +# 512 "piparser.mly" + ( PPatFunApp(_1,_3) ) +# 1691 "piparser.ml" + : 'pattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 514 "piparser.mly" + ( PPatEqual(_2) ) +# 1698 "piparser.ml" + : 'pattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'patternseq) in + Obj.repr( +# 518 "piparser.mly" + ( _1 :: _3 ) +# 1706 "piparser.ml" + : 'patternseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pattern) in + Obj.repr( +# 520 "piparser.mly" + ( [_1] ) +# 1713 "piparser.ml" + : 'patternseq)) +(* Entry all *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +|] +let yytables = + { Parsing.actions=yyact; + Parsing.transl_const=yytransl_const; + Parsing.transl_block=yytransl_block; + Parsing.lhs=yylhs; + Parsing.len=yylen; + Parsing.defred=yydefred; + Parsing.dgoto=yydgoto; + Parsing.sindex=yysindex; + Parsing.rindex=yyrindex; + Parsing.gindex=yygindex; + Parsing.tablesize=yytablesize; + Parsing.table=yytable; + Parsing.check=yycheck; + Parsing.error_function=parse_error; + Parsing.names_const=yynames_const; + Parsing.names_block=yynames_block } +let all (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 1 lexfun lexbuf : Piptree.decl list * Piptree.process) diff --git a/preinstallTTool/linux/proverif/src/piparser.mli b/preinstallTTool/linux/proverif/src/piparser.mli new file mode 100644 index 0000000000000000000000000000000000000000..ce47d92e1092382ffaeafc6a703a1aed776a7174 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/piparser.mli @@ -0,0 +1,59 @@ +type token = + | CHOICE + | STAR + | COMMA + | LPAREN + | RPAREN + | LBRACKET + | RBRACKET + | BAR + | SEMI + | NEW + | OUT + | IN + | IDENT of (Piptree.ident) + | INT of (int) + | REPL + | IF + | THEN + | ELSE + | EQUAL + | FUN + | EQUATION + | REDUCTION + | PREDICATE + | PROCESS + | SLASH + | DOT + | EOF + | LET + | QUERY + | BEFORE + | PUTBEGIN + | NONINTERF + | EVENT + | NOT + | ELIMTRUE + | FREE + | SUCHTHAT + | CLAUSES + | RED + | EQUIV + | EQUIVEQ + | WEDGE + | DIFF + | COLON + | NOUNIF + | PHASE + | AMONG + | WEAKSECRET + | CANTEXT + | FAIL + | WHERE + | OTHERWISE + | DATA + | PARAM + | PRIVATE + +val all : + (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Piptree.decl list * Piptree.process diff --git a/preinstallTTool/linux/proverif/src/piparser.mly b/preinstallTTool/linux/proverif/src/piparser.mly new file mode 100644 index 0000000000000000000000000000000000000000..a72bdfef61835d6e3e670fef5b1838e9b2bff12f --- /dev/null +++ b/preinstallTTool/linux/proverif/src/piparser.mly @@ -0,0 +1,522 @@ +%{ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +%} +%{ + +open Parsing_helper +open Ptree +open Piptree +exception Syntax + +%} + +%token CHOICE +%token STAR +%token COMMA +%token LPAREN +%token RPAREN +%token LBRACKET +%token RBRACKET +%token BAR +%token SEMI +%token NEW +%token OUT +%token IN +%token <Piptree.ident> IDENT +%token <int> INT +%token REPL +%token IF +%token THEN +%token ELSE +%token EQUAL +%token FUN +%token EQUATION +%token REDUCTION +%token PREDICATE +%token PROCESS +%token SLASH +%token DOT +%token EOF +%token LET +%token QUERY +%token BEFORE +%token PUTBEGIN +%token NONINTERF +%token EVENT +%token NOT +%token ELIMTRUE +%token FREE +%token SUCHTHAT +%token CLAUSES +%token RED +%token EQUIV +%token EQUIVEQ +%token WEDGE +%token DIFF +%token COLON +%token NOUNIF +%token PHASE +%token AMONG +%token WEAKSECRET +%token CANTEXT +%token FAIL +%token WHERE +%token OTHERWISE + +/* Untyped front-end only */ +%token DATA +%token PARAM +%token PRIVATE + + +/* Precedence (from low to high) and associativities */ +%right BAR +%right WEDGE +%nonassoc REPL + +%start all +%type <Piptree.decl list * Piptree.process> all + +%% + + +/*** Untyped front-end ***/ + + +lib: + privateopt FUN IDENT SLASH INT DOT lib + { (FunDecl($3, $5, $1)) :: $7 } +| DATA IDENT SLASH INT DOT lib + { (DataFunDecl($2, $4)) :: $6 } +| EQUATION eqlist DOT lib + { (Equation($2)) :: $4 } +| privateopt REDUCTION term EQUAL term SEMI reduc lib + { (Reduc(($3,$5)::$7, $1)) :: $8 } + +| privateopt REDUCTION reducmayfailseq DOT lib + { (ReducFail($3,$1)) :: $5 } + +| PREDICATE IDENT SLASH INT neidentseq DOT lib + { (PredDecl($2, $4, $5)) :: $7 } +| PREDICATE IDENT SLASH INT DOT lib + { (PredDecl($2, $4, [])) :: $6 } +| LET IDENT EQUAL process DOT lib + { (PDef($2,$4)) :: $6 } +| NOUNIF gfactformat optint foptbindingseq DOT lib + { (NoUnif ($2,$3,$4)) :: $6 } +| PARAM IDENT EQUAL IDENT DOT lib + { (Param($2,S $4)) :: $6 } +| PARAM IDENT EQUAL INT DOT lib + { (Param($2,I $4)) :: $6 } +| QUERY queryseq DOT lib + { (Query($2)) :: $4 } +| NONINTERF niseq DOT lib + { (Noninterf($2)) :: $4 } +| WEAKSECRET IDENT DOT lib + { (Weaksecret($2)) :: $4 } +| NOT gterm optphase optbindingseq DOT lib + { (Not(((PGSimpleFact(("attacker",dummy_ext), [$2]),dummy_ext),$3),$4)) :: $6 } +| NOT event optbindingseq DOT lib + { (Not($2,$3)) :: $5 } +| ELIMTRUE fact DOT lib + { (Elimtrue ($2, [])) :: $4 } +| ELIMTRUE fact WHERE varmayfail CANTEXT FAIL DOT lib + { (Elimtrue ($2, $4)) :: $8 } +| privateopt FREE neidentseq DOT lib + { (Free($3,$1)) :: $5 } +| CLAUSES clauses lib + { (Clauses($2)) :: $3 } +| + { [] } + +all: +| lib PROCESS process EOF + { $1, $3 } + +privateopt: + PRIVATE + { true } + | + { false } + +/* Rewrite rules */ + +reduc: + term EQUAL term SEMI reduc + { ($1,$3) :: $5 } +| term EQUAL term DOT + { [($1,$3)] } + +varmayfail: + IDENT COMMA varmayfail + { $1::$3 } +| IDENT + { [$1] } + +reducmayfail: + term EQUAL term WHERE varmayfail CANTEXT FAIL + { ($1,$3,$5) } +| term EQUAL term + { ($1,$3,[]) } + +reducmayfailseq: + reducmayfail OTHERWISE reducmayfailseq + { $1::$3 } +| reducmayfail + { [$1] } + + +/* Equations */ + +eqlist: + term EQUAL term + { [($1, $3)] } +| term EQUAL term SEMI eqlist + { ($1, $3) :: $5 } + +/* Terms */ + +term: +| FAIL + { PFail, parse_extent () } +| + IDENT LPAREN termseq RPAREN + { PFunApp ($1, $3), parse_extent() } +| CHOICE LBRACKET term COMMA term RBRACKET + { Param.has_choice := true; + PFunApp(("choice specident", parse_extent()), [$3; $5]), parse_extent() } +| IDENT + { PIdent ($1), parse_extent() } +| LPAREN termseq RPAREN + { PTuple ($2), parse_extent() } + +netermseq: + term COMMA netermseq + { $1 :: $3 } +| term + { [$1] } + +termseq: + netermseq + { $1 } +| + { [] } + +neidentseq: + IDENT COMMA neidentseq + { $1 :: $3 } +| IDENT + { [$1] } + +ni: + IDENT AMONG LPAREN netermseq RPAREN + { ($1, Some $4) } +| IDENT + { ($1, None) } + +niseq: + ni COMMA niseq + { $1 :: $3 } +| ni + { [$1] } + +/* Queries */ + +gterm: + IDENT LPAREN gtermseq RPAREN + { PGFunApp ($1, $3), parse_extent() } +| IDENT + { PGIdent ($1), parse_extent() } +| LPAREN gtermseq RPAREN + { PGTuple ($2), parse_extent() } +| IDENT LBRACKET bindingseq RBRACKET + { PGName ($1, $3), parse_extent() } + +negtermseq: + gterm COMMA negtermseq + { $1 :: $3 } +| gterm + { [$1] } + +gtermseq: + negtermseq + { $1 } +| + { [] } + + +nesbindingseq: + REPL INT EQUAL gterm SEMI nesbindingseq + { (("!" ^ (string_of_int ($2)), parse_extent()), $4) :: $6 } +| REPL INT EQUAL gterm + { [(("!" ^ (string_of_int ($2)), parse_extent()), $4)] } +| IDENT EQUAL gterm SEMI nesbindingseq + { ($1, $3) :: $5 } +| IDENT EQUAL gterm + { [($1, $3)] } + +bindingseq: + nesbindingseq + { $1 } +| + { [] } + +nebindingseq: + IDENT EQUAL gterm SEMI nebindingseq + { ($1, $3) :: $5 } +| IDENT EQUAL gterm + { [($1, $3)] } + +optbindingseq: + SEMI nebindingseq + { $2 } +| + { [] } + +gfact: + IDENT COLON gtermseq + { PGSimpleFact($1,$3), parse_extent() } +| gterm DIFF gterm + { PGNeq($1,$3), parse_extent() } +| gterm EQUAL gterm + { PGEqual($1, $3), parse_extent() } + +event: + gfact optphase + { ($1,$2) } + +queryseq: + query SEMI queryseq + { $1 :: $3 } +| query + { [$1] } + +query: + event + { PRealQuery(PBefore($1, PFalse)) } +| realquery + { PRealQuery($1) } +| PUTBEGIN IDENT COLON neidentseq + { PPutBegin($2, $4) } +| LET IDENT EQUAL gterm + { PBinding($2,$4) } + + +realquery: + event BEFORE hyp + { PBefore($1, $3) } + +hyp: + hyp BAR hyp + { POr($1, $3) } +| hyp WEDGE hyp + { PAnd($1, $3) } +| LPAREN hyp RPAREN + { $2 } +| event + { PQEvent($1) } +| LPAREN realquery RPAREN + { PNestedQuery($2) } + +/* Nounif */ + +gformat: + IDENT LPAREN gformatseq RPAREN + { PFGFunApp ($1, $3), parse_extent() } +| IDENT + { PFGIdent ($1), parse_extent() } +| LPAREN gformatseq RPAREN + { PFGTuple ($2), parse_extent() } +| IDENT LBRACKET fbindingseq RBRACKET + { PFGName ($1, $3), parse_extent() } +| STAR IDENT + { PFGAny ($2), parse_extent() } + +negformatseq: + gformat COMMA negformatseq + { $1 :: $3 } +| gformat + { [$1] } + +gformatseq: + negformatseq + { $1 } +| + { [] } + + +fnesbindingseq: + REPL INT EQUAL gformat SEMI fnesbindingseq + { (("!" ^ (string_of_int ($2)), parse_extent()), $4) :: $6 } +| REPL INT EQUAL gformat + { [(("!" ^ (string_of_int ($2)), parse_extent()), $4)] } +| IDENT EQUAL gformat SEMI fnesbindingseq + { ($1, $3) :: $5 } +| IDENT EQUAL gformat + { [($1, $3)] } + +fbindingseq: + fnesbindingseq + { $1 } +| + { [] } + +fnebindingseq: + IDENT EQUAL gformat SEMI fnebindingseq + { ($1, $3) :: $5 } +| IDENT EQUAL gformat + { [($1, $3)] } + +foptbindingseq: + SEMI fnebindingseq + { $2 } +| + { [] } + +gfactformat: + IDENT COLON gformatseq optphase + { ($1,$3,$4) } + +/* Phase */ + +optphase: + PHASE INT + { $2 } +| + { -1 } + +/* Integer */ + +optint: + SLASH INT + { $2 } +| + { -1 } + +/* Clauses */ + +fact: + IDENT COLON termseq + { PSimpleFact($1,$3), parse_extent() } +| term DIFF term + { PSNeq($1,$3), parse_extent() } +| term EQUAL term + { PSEqual($1, $3), parse_extent() } + +factand: + fact WEDGE factand + { $1 :: $3 } +| fact + { [$1] } + +clause: + factand RED fact + { PClause($1,$3) } +| fact + { PClause([],$1) } +| factand EQUIV fact + { PEquiv($1,$3,true) } +| factand EQUIVEQ fact + { PEquiv($1,$3,false) } + +clausemayfail: + clause WHERE varmayfail CANTEXT FAIL + { ($1,$3) } +| clause + { ($1,[]) } + +clauses: + clausemayfail SEMI clauses + { $1 :: $3 } +| clausemayfail DOT + { [$1] } + +/* Process */ + +process: + LPAREN process RPAREN + { $2 } +| IDENT + { PLetDef $1 } +| REPL process %prec REPL + { PRepl $2 } +| INT + { let x = $1 in + if x = 0 then PNil else + input_error ("The only integer in a process is 0 for the nil process") (parse_extent()) } +| NEW IDENT optprocess + { PRestr($2, $3) } +| IF fact THEN process ELSE process + { PTest($2,$4,$6) } +| IF fact THEN process + { PTest($2,$4,PNil) } +| IN LPAREN term COMMA pattern RPAREN optprocess + { PInput($3,$5,$7) } +| OUT LPAREN term COMMA term RPAREN optprocess + { POutput($3,$5,$7) } +| LET pattern EQUAL term IN process + { PLet($2,$4,$6,PNil) } +| LET pattern EQUAL term IN process ELSE process + { PLet($2,$4,$6,$8) } +| LET neidentseq SUCHTHAT fact IN process + { PLetFilter($2,$4,$6,PNil) } +| LET neidentseq SUCHTHAT fact IN process ELSE process + { (* Approximating the else clause with a parallel composition + is not correct for trace reconstruction *) + PLetFilter($2,$4,$6,$8) } +| process BAR process + { PPar($1,$3) } +| EVENT IDENT LPAREN termseq RPAREN optprocess + { PEvent($2, $4, $6) } +| PHASE INT optprocess + { PPhase($2, $3) } + +optprocess: + SEMI process + { $2 } +| + { PNil } + +pattern: + IDENT + { PPatVar($1) } +| LPAREN patternseq RPAREN + { PPatTuple($2) } +| IDENT LPAREN patternseq RPAREN + { PPatFunApp($1,$3) } +| EQUAL term + { PPatEqual($2) } + +patternseq: + pattern COMMA patternseq + { $1 :: $3 } +| pattern + { [$1] } + + diff --git a/preinstallTTool/linux/proverif/src/piptree.cmi b/preinstallTTool/linux/proverif/src/piptree.cmi new file mode 100644 index 0000000000000000000000000000000000000000..acfb87357cacae0de1d9be36d8d733a1236d34e1 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/piptree.cmi differ diff --git a/preinstallTTool/linux/proverif/src/piptree.mli b/preinstallTTool/linux/proverif/src/piptree.mli new file mode 100644 index 0000000000000000000000000000000000000000..71593fb25270c50628304528b70cde6689a811f2 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/piptree.mli @@ -0,0 +1,151 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Untyped front-end *) + +(* Terms *) + +type ident = Ptree.ident + +type term = PIdent of ident + | PFail + | PFunApp of ident * term_e list + | PTuple of term_e list + +and term_e = term * Parsing_helper.extent + +(* Equational theory *) + +type equation = term_e * term_e + +(* Functions defined by reduction rules *) + +type fundef = (term_e * term_e) list + +(* Nounif *) + +type gformat = + PFGIdent of ident + | PFGFunApp of ident * gformat_e list + | PFGTuple of gformat_e list + | PFGName of ident * (ident * gformat_e) list + | PFGAny of ident + +and gformat_e = gformat * Parsing_helper.extent + +type gfact_format = + ident * gformat_e list * int + +(* Queries *) + +type gterm = + PGIdent of ident + | PGFunApp of ident * gterm_e list + | PGTuple of gterm_e list + | PGName of ident * (ident * gterm_e) list + +and gterm_e = gterm * Parsing_helper.extent + +type gfact = + PGSimpleFact of ident * gterm_e list + | PGNeq of gterm_e * gterm_e + | PGEqual of gterm_e * gterm_e + +type gfact_e = gfact * Parsing_helper.extent + +type event = gfact_e * int + +type realquery = PBefore of event * hypelem + +and hypelem = + PQEvent of event + | PNestedQuery of realquery + | POr of hypelem * hypelem + | PAnd of hypelem * hypelem + | PFalse + +type query = + PBinding of ident * gterm_e + | PPutBegin of ident * ident list + (* First ident must be "ev" or "evinj" *) + | PRealQuery of realquery + +(* Clauses *) + +type fact = PSimpleFact of ident * term_e list + | PSNeq of term_e * term_e + | PSEqual of term_e * term_e + +type fact_e = fact * Parsing_helper.extent + +type clause = + PClause of fact_e list * fact_e + | PEquiv of fact_e list * fact_e * bool + +(* Processes *) + +type pattern = + PPatVar of ident + | PPatTuple of pattern list + | PPatFunApp of ident * pattern list + | PPatEqual of term_e + +type process = + PNil + | PPar of process * process + | PRepl of process + | PRestr of ident * process + | PLetDef of ident + | PTest of fact_e * process * process + | PInput of term_e * pattern * process + | POutput of term_e * term_e * process + | PLet of pattern * term_e * process * process + | PLetFilter of ident list * fact_e * process * process + | PEvent of ident * term_e list * process + | PPhase of int * process + + +(* Declarations *) + +type decl = + FunDecl of ident * int * bool + | DataFunDecl of ident * int + | Reduc of fundef * bool + | ReducFail of (term_e * term_e * ident list) list * bool + | Equation of equation list + | PredDecl of ident * int * ident list + | Param of ident * Ptree.pval + | PDef of ident * process + | Query of query list + | Noninterf of (ident * term_e list option) list + | Weaksecret of ident + | NoUnif of gfact_format * int * (ident * gformat_e) list + | Not of (gfact_e * int) * (ident * gterm_e) list + | Elimtrue of fact_e * ident list + | Free of ident list * bool + | Clauses of (clause * ident list) list + diff --git a/preinstallTTool/linux/proverif/src/pisyntax.cmi b/preinstallTTool/linux/proverif/src/pisyntax.cmi new file mode 100644 index 0000000000000000000000000000000000000000..fa954a6bda5bf83b8c42c80a45ab39c0e7a42136 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pisyntax.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pisyntax.cmx b/preinstallTTool/linux/proverif/src/pisyntax.cmx new file mode 100644 index 0000000000000000000000000000000000000000..a440f46986436581a4c66a70acd692510a25919f Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pisyntax.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pisyntax.ml b/preinstallTTool/linux/proverif/src/pisyntax.ml new file mode 100644 index 0000000000000000000000000000000000000000..a40dc95d5bcdcd6f63802d5289f4270e5d935f96 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pisyntax.ml @@ -0,0 +1,1477 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + +open Parsing_helper +open Ptree +open Piptree +open Types +open Pitypes +open Stringmap + +(********************************************* + Parsing files +**********************************************) + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + lexbuf.Lexing.lex_curr_p <- { lexbuf.Lexing.lex_curr_p with + Lexing.pos_fname = filename }; + let ptree = + try + Piparser.all Pilexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +let fun_decls = Param.fun_decls + +(********************************************* + Check constructor declaration +**********************************************) + +let check_fun_decl is_tuple (name,ext) arity is_private = + if Hashtbl.mem fun_decls name then + input_error ("function " ^ name ^ " already defined") ext; + let cat = if is_tuple (* || ((arity == 0) && (not is_private)) *) then Tuple else Eq [] in + Hashtbl.add fun_decls name + { f_name = name; + f_type = (Terms.copy_n arity Param.any_type), Param.any_type; + f_cat = cat; + f_initial_cat = cat; + f_private = is_private; + f_options = 0 } + +(********************************************* + Check destructor declaration +**********************************************) + +let destructors_check_deterministic = ref [] + +let get_var env s = + try + Hashtbl.find env s + with Not_found -> + let r = Terms.new_var s Param.any_type in + Hashtbl.add env s r; + r + +let check_may_fail_var env s = + if not (Hashtbl.mem env s) then + begin + let r = Terms.new_unfailing_var s Param.any_type in + Hashtbl.add env s r + end + +let get_fun (s,ext) arity = + try + if s = "choice specident" then + input_error "choice not allowed here" ext; + let r = Hashtbl.find fun_decls s in + let r_arity = List.length (fst r.f_type) in + if r_arity != arity then + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int r_arity) ^ + " but is used with " ^ + (string_of_int arity) ^ + " parameters") ext; + r + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + +let f_eq_tuple f ext = + match f.f_cat with + Eq _ | Tuple -> () + | _ -> input_error ("function " ^ f.f_name ^ " has been defined by reduction. It should not appear in equations or clauses") ext + +let f_any f ext = () + +(* Check messages *) + +let rec check_eq_term f_allowed fail_allowed_top fail_allowed_all varenv (term,ext) = + match term with + | PFail -> input_error "The constant fail should not appear in this term" ext + | (PIdent (s,ext)) -> + begin + try + let f = Hashtbl.find fun_decls s in + let f_arity = List.length (fst f.f_type) in + if f_arity <> 0 then + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used without parameters") ext; + f_allowed f ext; + FunApp(f, []) + with + Not_found -> + begin + let v = get_var varenv s in + + if (not (fail_allowed_top || fail_allowed_all)) && v.unfailing + then input_error ("The may-fail variable " ^ s ^ " cannot be used in this term.") ext; + + Var v + end + end + | (PFunApp (fi, tlist)) -> + let f = get_fun fi (List.length tlist) in + f_allowed f ext; + FunApp(f, List.map (check_eq_term f_allowed false fail_allowed_all varenv) tlist) + | (PTuple tlist) -> + FunApp (Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) tlist), + List.map (check_eq_term f_allowed false fail_allowed_all varenv) tlist) + +(* Check may-fail message *) + +let check_may_fail_term env (mterm,ext) = match mterm with + | PFail -> Terms.get_fail_term Param.any_type + | _ -> check_eq_term f_eq_tuple true false env (mterm,ext) + + +(* Equations *) + +let check_equation l = + let l' = + List.map (fun (t1,t2) -> + let var_env = Hashtbl.create 7 in + let t1' = check_eq_term f_eq_tuple false false var_env t1 in + let t2' = check_eq_term f_eq_tuple false false var_env t2 in + (t1',t2')) l + in + TermsEq.register_equation EqNoInfo l' + +(* Definition of the destructors using Otherwise. *) + +let rec new_n_list f = function + | 0 -> [] + | n -> (f ())::(new_n_list f (n-1)) + +let check_red_may_fail tlist is_private = + + let f,arity = match tlist with + | [] -> input_error "A destructor should have at least one rewrite rule." Parsing_helper.dummy_ext; + | ((PFunApp((f,ext),l),_),_,_)::_ -> + if Hashtbl.mem fun_decls f then + input_error ("identifier " ^ f ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + if f = "choice specident" then + input_error "choice not allowed here" ext; + f, List.length l + | ((_, ext1),_,_)::_ -> input_error "In \"reduc\", all rewrite rules should begin with function application" ext1 + in + + let rec generate_rules prev_args red_list = match red_list with + | [] -> [],prev_args + | ((PFunApp((f',ext'),l1),_), t2, may_fail_env)::q -> + if f <> f' then + input_error ("In \"reduc\", all rewrite rules should begin with the same function " ^ f) ext'; + + if List.length l1 <> arity + then input_error ("In \"reduc\", all rewrite rules should have the same number of arguments") ext'; + let env = Hashtbl.create 7 in + List.iter (fun (v,_) -> check_may_fail_var env v) may_fail_env; + let lhs = List.map (check_may_fail_term env) l1 + and rhs = check_may_fail_term env t2 in + + (* Generate the destructors with side condition *) + + if arity = 0 + then ([[],rhs,[]],[]) + else + begin try + let destructors = Terms.generate_destructor_with_side_cond prev_args lhs rhs ext' in + let next_destructors,all_args = generate_rules (lhs::prev_args) q in + (destructors @ next_destructors), all_args + with Terms.False_inequality -> + ([],prev_args) + end + | ((_, ext1), _, _)::_ -> input_error ("In \"reduc\", all rewrite rules should begin with function application") ext1 + in + + let red_list,all_args = generate_rules [] tlist in + + (* Generate the failing case *) + let may_fail_vars = new_n_list (fun () -> Terms.new_unfailing_var_def Param.any_type) arity + and fail_term = Terms.get_fail_term Param.any_type in + let complete_red_list = + if arity = 0 + then red_list + else + begin try + red_list @ (Terms.generate_destructor_with_side_cond all_args may_fail_vars fail_term Parsing_helper.dummy_ext) + with Terms.False_inequality -> red_list + end + in + assert (complete_red_list != []); + let cat = Red complete_red_list in + let fsymb = + { + f_name = f; + f_type = new_n_list (fun () -> Param.any_type) arity, Param.any_type; + f_private = is_private; + f_options = 0; + f_cat = cat; + f_initial_cat = cat + } in + + (* Adding the destructor in environment *) + (*Display.Text.display_red fsymb complete_red_list;*) + Hashtbl.add fun_decls f fsymb + +(* Old definition of destructors, without otherwise *) + +let check_red tlist is_private = + let f,arity = match tlist with + | [] -> input_error "A destructor should have at least one rewrite rule." Parsing_helper.dummy_ext; + | ((PFunApp((f,ext),l),_),_)::_ -> + if Hashtbl.mem fun_decls f then + input_error ("function " ^ f ^ " already defined") ext; + if f = "choice specident" then + input_error "choice not allowed here" ext; + + f, List.length l + | ((_, ext1),_)::_ -> input_error "In \"reduc\", all rewrite rules should begin with function application" ext1 + in + + let tylhs = new_n_list (fun () -> Param.any_type) arity + and tyrhs = Param.any_type in + + let red_list = List.map (function + | ((PFunApp((f',ext'),l1),_), t2) -> + if f <> f' + then input_error ("In \"reduc\", all rewrite rules should begin with the same function " ^ f) ext'; + + if List.length l1 <> arity + then input_error ("In \"reduc\", all rewrite rules should have the same number of arguments") ext'; + + let env = Hashtbl.create 7 in + + let lhs = List.map (check_eq_term f_eq_tuple false false env) l1 + and rhs = check_eq_term f_eq_tuple false false env t2 in + + let var_list_rhs = ref [] in + Terms.get_vars var_list_rhs rhs; + + if not (List.for_all (fun v -> List.exists (Terms.occurs_var v) lhs) (!var_list_rhs)) then + Parsing_helper.input_error "All variables of the right-hand side of a \"reduc\" definition\nshould also occur in the left-hand side." ext'; + + (lhs, rhs,[]) + | _,(_, ext1)-> input_error ("In \"reduc\", all rewrite rules should begin with function application") ext1 + ) tlist + in + + let red_list' = + let var_list = List.map (fun ty -> Terms.new_var_def ty) tylhs + and fail = Terms.get_fail_term tyrhs + and tuple_symb = Terms.get_tuple_fun tylhs in + let tuple = FunApp(tuple_symb, var_list) in + assert (!Terms.current_bound_vars == []); + let side_cond = + List.map (fun (arg_list,_,_) -> + tuple,FunApp(tuple_symb, List.map (Terms.generalize_vars_not_in []) arg_list) + ) red_list + in + Terms.cleanup (); + red_list @ ((var_list,fail,side_cond)::(Terms.complete_semantics_constructors tylhs tyrhs)) + in + + let cat = Red red_list' in + + let fsymb = { + f_name = f; + f_type = tylhs, tyrhs; + f_private = is_private; + f_options = 0; + f_cat = cat; + f_initial_cat = cat + } in + + (* Adding the destructor for checking *) + + destructors_check_deterministic := fsymb::(!destructors_check_deterministic); + + (*Display.Text.display_red fsymb red_list';*) + + Hashtbl.add fun_decls f fsymb + +(* Check clauses *) + +let pred_env = Param.pred_env + +let rec interpret_info arity r = function + ("memberOptim", ext) -> + if arity != 2 then + input_error "memberOptim makes sense only for predicates of arity 2" ext; + r.p_prop <- r.p_prop lor Param.pred_ELEM + | ("block",_) -> r.p_prop <- r.p_prop lor Param.pred_BLOCKING + (* add other qualifiers here *) + | (s,ext) -> input_error ("unknown predicate qualifier " ^ s) ext + +let check_pred (c,ext) arity info = + if c = "attacker" || c = "mess" || c = "ev" || c = "evinj" then + input_error ("predicate name " ^ c ^ " is reserved. You cannot declare it") ext; + if Hashtbl.mem pred_env c then + input_error ("predicate " ^ c ^ " already declared") ext; + let r = { p_name = c; + p_type = Terms.copy_n arity Param.any_type; + p_prop = 0; + p_info = [] } in + List.iter (interpret_info arity r) info; + Hashtbl.add pred_env c r + +let get_pred (c,ext) arity = + try + let r = Hashtbl.find pred_env c in + let r_arity = List.length r.p_type in + if arity != r_arity then + input_error ("arity of predicate " ^ c ^ + " should be " ^ (string_of_int r_arity)) ext; + r + with Not_found -> + input_error ("undeclared predicate " ^ c ) ext + + +let add_rule hyp concl constra tag = + Param.red_rules := (hyp, concl, constra, tag) :: (!Param.red_rules) + + +let equal_pred = Param.build_pred_memo (Equal(Param.any_type)) + +let check_cterm env (p,t) = + (get_pred p (List.length t), List.map (check_eq_term f_any false true env) t) + +let rec check_one_hyp (hyp_accu,constra_accu) env (fact, ext) = + match fact with + | PSNeq(t1,t2) -> (hyp_accu, [Neq(check_eq_term f_any false true env t1, check_eq_term f_any false true env t2)] :: + constra_accu) + | PSEqual(t1,t2) -> (Pred(equal_pred, [check_eq_term f_any false true env t1; check_eq_term f_any false true env t2])::hyp_accu, constra_accu) + | PSimpleFact(p,l) -> + let (p',l') = check_cterm env (p,l) in + (Pred(p',l')::hyp_accu, constra_accu) + +let check_simple_fact env (fact, ext) = + match fact with + | PSNeq(t1,t2) -> input_error "<> fact not allowed here" ext + | PSEqual(t1,t2) -> input_error "= fact not allowed here" ext + | PSimpleFact(p,l) -> + let (p',l') = check_cterm env (p,l) in + Pred(p',l') + +let check_clause (cl, may_fail_env) = + let env = Hashtbl.create 7 in + List.iter (fun (v,_) -> check_may_fail_var env v) may_fail_env; + match cl with + PClause(i,c) -> + begin + try + let (hyp, constra) = List.fold_right (fun onehyp accu -> check_one_hyp accu env onehyp) i ([],[]) in + let concl = check_simple_fact env c in + add_rule hyp concl + (TermsEq.simplify_constra_list (concl :: hyp) constra) LblClause + with TermsEq.FalseConstraint -> () + end + | PEquiv(i,c,select) -> + let hyp = List.map (check_simple_fact env) i in + let concl = check_simple_fact env c in + add_rule hyp concl [] LblEquiv; + List.iter (fun h -> add_rule [concl] h [] LblEquiv) hyp; + Rules.add_equiv (hyp, concl, -1); (* TO DO should give a real rule number, but that's not easy... *) + if not select then Terms.add_unsel concl + + + +(* Environment of a process. + May contain function symbols, names and variables. + Is a map from strings to the description of the ident. + The elements of the environment are of type Types.envElement, + but only the cases EFun, EVar, and EName are used in the untyped + front-end. *) + +let glob_table = Hashtbl.create 7 + +let init_env () = + let m = ref StringMap.empty in + Hashtbl.iter (fun s f -> + m := StringMap.add s (EFun f) (!m); + Hashtbl.add glob_table s (EFun f)) fun_decls; + !m + +let clear_var_env () = + let list_var = ref [] in + Hashtbl.iter (fun s v -> + match v with + EVar b -> list_var := s :: (!list_var) + | _ -> ()) glob_table; + List.iter (fun s -> Hashtbl.remove glob_table s) (!list_var) + +let check_single ext s = + let vals = Hashtbl.find_all glob_table s in + match vals with + _::_::_ -> input_error (s ^ " cannot be used in queries. Its definition is ambiguous. (For example, several restrictions might define " ^ s ^ ".)") ext + | _ -> () + + +(* List of the free names of the process *) + +let freenames = Param.freenames + +let add_free_name is_pub s = + let r = Terms.create_name s ([], Param.any_type) (not is_pub) in + Hashtbl.add glob_table s (EName r); + freenames := r :: !freenames; + r + +let get_non_interf_name (s,ext) = + try + match Hashtbl.find glob_table s with + | EName r -> + check_single ext s; + if not r.f_private then + input_error ("Non-interference is certainly false on public values, such as " ^ s) ext + else + r + | _ -> + input_error ("Non-interference can only be tested on private free names") ext + with Not_found -> + input_error ("Name " ^ s ^ " is not declared") ext + + +(* Look for a name in the list of free names. + If not found, add it *) + +let free_name s ext = + try + List.find (fun r -> r.f_name = s) (!freenames) + with Not_found -> + input_warning ("Free name " ^ s ^ " not declared") ext; + add_free_name true s + +(* Check non-interference terms *) + +let rec check_ni_term varenv (term,ext) = + match term with + | PFail -> input_error "The constant fail should not appear in this term" ext + | (PIdent (s,ext)) -> + begin + try + let f = Hashtbl.find fun_decls s in + let f_arity = List.length (fst f.f_type) in + if f_arity <> 0 then + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used without parameters") ext; + (match f.f_cat with + Eq _ | Tuple -> () + | _ -> input_error ("function " ^ s ^ " has been defined by reduction. It should not appear in non-interference queries") ext); + FunApp(f, []) + with Not_found -> + try + match Hashtbl.find glob_table s with + EName r -> + check_single ext s; + if fst r.f_type == Param.tmp_type then + internal_error "Arity of a name uninitialized" + else + FunApp (r, Terms.var_gen (fst r.f_type)) + | _ -> internal_error "should not find var/fun here" + with Not_found -> + Var (get_var varenv s) + end +| (PFunApp ((s,ext) as fi, tlist)) -> + let f = get_fun fi (List.length tlist) in + (match f.f_cat with + Eq _ | Tuple -> () + | _ -> input_error ("function " ^ s ^ " has been defined by reduction. It should not appear in non-interference queries") ext); + FunApp(f, List.map (check_ni_term varenv) tlist) +| (PTuple tlist) -> + FunApp (Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) tlist), + List.map (check_ni_term varenv) tlist) + +(* Get an ident when anything is allowed *) + +let get_ident_any s env ext = + try + match StringMap.find s env with + EVar b -> Var b + | EName r -> FunApp (r,[]) + | EFun f -> + let f_arity = List.length (fst f.f_type) in + if f_arity = 0 then + FunApp(f,[]) + else + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used without parameters") ext + | _ -> internal_error "Only Var, Name, Fun should occur in the environment in the untyped front-end" + with Not_found -> + FunApp(free_name s ext, []) + +let get_fun (s,ext) arity env = + try + match StringMap.find s env with + EFun f -> + let f_arity = List.length (fst f.f_type) in + if f_arity = arity then + f + else + input_error ("function " ^ s ^ + " should be applied to " ^ + (string_of_int f_arity) ^ " arguments") + ext + | _ -> + input_error ("only functions can be applied, not " ^ s) ext + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + + +let rec check_term env (term, ext) = + match term with + | PFail -> input_error "The constant fail should not appear in this term" ext + | (PIdent (s,ext)) -> get_ident_any s env ext + | (PFunApp((s,ext) as fi,l)) -> + let f = + if s = "choice specident" then + Param.choice_fun Param.any_type + else + get_fun fi (List.length l) env + in + FunApp(f, List.map (check_term env) l) + | (PTuple l) -> FunApp(Terms.get_tuple_fun (List.map (fun _ -> Param.any_type)l), + List.map (check_term env) l) + +let check_fl_term env (p,t) = + (get_pred p (List.length t), List.map (check_term env) t) + +let pdeftbl = (Hashtbl.create 7 : (string, Piptree.process) Hashtbl.t) + +let rec check_pat old_env env = function + PPatVar (s,e) -> + if (StringMap.mem s env) && (!Param.tulafale != 1) then + input_warning ("identifier " ^ s ^ " rebound") e; + let v = Terms.new_var s Param.any_type in + (PatVar v, StringMap.add s (EVar v) env) +| PPatTuple l -> + let (l',env') = check_pat_list old_env env l in + (PatTuple(Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) l), l'), env') +| PPatFunApp((s,ext) as fi,l) -> + let (l',env') = check_pat_list old_env env l in + let f = get_fun fi (List.length l) env in + if f.f_cat <> Tuple then + input_error ("only data functions are allowed in patterns, not " ^ s) ext; + (PatTuple(f, l'), env') +| PPatEqual t -> + (PatEqual(check_term old_env t), env) + +and check_pat_list old_env env = function + [] -> ([], env) +| (a::l) -> + let (a',env') = check_pat old_env env a in + let (l',env'') = check_pat_list old_env env' l in + (a'::l', env'') + + +let event_fun_table = Hashtbl.create 7 + +let get_event_fun s arity ext = + try + let p = Hashtbl.find event_fun_table s in + let p_arity = List.length (fst p.f_type) in + if p_arity != arity then + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int p_arity) ^ + " but is used with arity " ^ (string_of_int arity)) ext; + p + with Not_found -> + let p = { f_name = s; + f_type = (Terms.copy_n arity Param.any_type), Param.any_type; + f_cat = Eq[]; + f_initial_cat = Eq[]; + f_private = true; + f_options = 0 } in + Hashtbl.add event_fun_table s p; + p + +let rec check_process env = function + PNil -> Nil + | PPar (p1,p2) -> + let p1' = check_process env p1 in + let p2' = check_process env p2 in + Par(p1', p2') + | PRepl p -> + Repl(check_process env p, Terms.new_occurrence()) + | PTest((f,_),p1,p2) -> + let occ' = Terms.new_occurrence() in + begin + match f with + PSimpleFact(pred,l) -> + let p1' = check_process env p1 in + let p2' = check_process env p2 in + let (pred',l') = check_fl_term env (pred,l) in + LetFilter([], Pred(pred',l'), p1', p2', occ') + | PSEqual(t1,t2) -> + let p1' = check_process env p1 in + let p2' = check_process env p2 in + Test(FunApp(Terms.equal_fun Param.any_type, [check_term env t1; check_term env t2]), + p1', p2', occ') + | PSNeq(t1,t2) -> + let p1' = check_process env p1 in + let p2' = check_process env p2 in + Test(FunApp(Terms.diff_fun Param.any_type, [check_term env t1; check_term env t2]), + p1', p2', occ') + end + | PLetDef (s,ext) -> + begin + try + check_process env (Hashtbl.find pdeftbl s) + with Not_found -> + input_error ("process " ^ s ^ " not defined") ext + end + | PRestr((s,ext),p) -> + let r = Terms.create_name (Terms.fresh_id s) (Param.tmp_type, Param.any_type) true in + Hashtbl.add glob_table s (EName r); + if (StringMap.mem s env) && (!Param.tulafale != 1) then + input_warning ("identifier " ^ s ^ " rebound") ext; + Restr(r, (None, env), check_process (StringMap.add s (EName r) env) p, + Terms.new_occurrence()) + | PInput(tc,pat,p) -> + let (pat',env') = check_pat env env pat in + Input(check_term env tc, pat', + check_process env' p, Terms.new_occurrence()) + | POutput(tc,t,p) -> + Output(check_term env tc, + check_term env t, + check_process env p, Terms.new_occurrence()) + | PLet(pat,t,p,p') -> + let (pat', env') = check_pat env env pat in + let occ' = Terms.new_occurrence() in + let p1 = check_process env' p in + let p1' = check_process env p' in + Let(pat',check_term env t, p1, p1', occ') + | PLetFilter(identlist,(f,ext),p,q) -> + let (env', vlist) = List.fold_left (fun (env, vlist) (s,e) -> + if (StringMap.mem s env) && (!Param.tulafale != 1) then + input_warning ("identifier " ^ s ^ " rebound") e; + let v = Terms.new_var s Param.any_type in + (StringMap.add s (EVar v) env, v:: vlist)) (env,[]) identlist in + let vlist = List.rev vlist in + let f' = match f with + PSEqual(t1,t2) -> + Pred(equal_pred, [check_term env' t1; check_term env' t2]) + | PSNeq(t1,t2) -> + input_error "<> fact not allowed here" ext + | PSimpleFact(pred, l) -> + let (pred',l') = check_fl_term env' (pred,l) in + Pred(pred',l') + in + let occ' = Terms.new_occurrence() in + let p' = check_process env' p in + let q' = check_process env q in + LetFilter(vlist, f', p', q', occ') + | PEvent((i,ext),l,p) -> + if !Param.key_compromise == 0 then + let f = get_event_fun i (List.length l) ext in + Event(FunApp(f, List.map (check_term env) l), check_process env p, Terms.new_occurrence()) + else + let f = get_event_fun i (1+List.length l) ext in + Event(FunApp(f, (Terms.new_var_def Param.any_type) :: (List.map (check_term env) l)), check_process env p, Terms.new_occurrence()) + | PPhase(n, p) -> + let occ' = Terms.new_occurrence() in + Phase(n, check_process env p, occ') + +let get_non_interf (id, lopt) = + (get_non_interf_name id, + match lopt with + None -> None + | Some l -> Some (List.map (check_ni_term (Hashtbl.create 7)) l)) + +let query_list = ref ([] : Piptree.query list list) +let need_vars_in_names = Reduction_helper.need_vars_in_names +let noninterf_list = ref ([] : (funsymb * term list option) list list) +let not_list = ref ([] : ((Piptree.gfact_e * int) * (Piptree.ident * Piptree.gterm_e) list) list) +let nounif_list = ref ([] : (Piptree.gfact_format * int * (Piptree.ident * Piptree.gformat_e) list) list) +let weaksecret_list = ref ([] : funsymb list) + +(* Compute need_vars_in_names: the list of pairs (restriction, variable name) + such that the variable "variable name" must occur as argument in the + pattern that models names created by "restriction", because the + structure "restriction[... variable name = ... ]" is used in the input + file. *) + +let rec nvn_t (term, ext0) = + match term with + PGIdent (s,ext) -> () + | PGFunApp((s,ext),l) -> List.iter nvn_t l + | PGTuple l -> List.iter nvn_t l + | PGName ((s,ext),bl) -> + List.iter (fun ((s',ext'),t) -> + (* The replication indices do not need to be added in + need_vars_in_names, because they are always included as + arguments of names, whether or not they occur in + the input file. + They must not be added to need_vars_in_names, because + they are not correctly computed by trace reconstruction, + so adding them would cause bugs in trace reconstruction. *) + if (s' <> "") && (s'.[0] != '!') then + begin + try + match Hashtbl.find glob_table s with + EName r -> + (* print_string ("Need " ^ s' ^ " in " ^ r.f_name ^ "\n"); *) + need_vars_in_names := (r.f_name, s',ext') :: (!need_vars_in_names) + | _ -> () + with Not_found -> + () + end; + need_vars_in_names := (s, s',ext') :: (!need_vars_in_names); + nvn_t t + ) bl + +let nvn_b ((i,e),t) = + nvn_t t + +let nvn_e ((f,e),n) = + match f with + PGNeq(t1,t2) -> nvn_t t1; nvn_t t2 + | PGEqual(t1,t2) -> nvn_t t1; nvn_t t2 + | PGSimpleFact(_, tl) -> + List.iter nvn_t tl + +let rec nvn_rq = function + PBefore(ev, hyp) -> + nvn_e ev; + nvn_he hyp + +and nvn_he = function + PQEvent(ev) -> nvn_e ev + | PNestedQuery(q) -> nvn_rq q + | POr(he1,he2) -> nvn_he he1; nvn_he he2 + | PAnd(he1,he2) -> nvn_he he1; nvn_he he2 + | PFalse -> () + +let nvn_q = function + PRealQuery q -> nvn_rq q + | PPutBegin(i, l) -> () + | PBinding(i,t) -> nvn_t t + +let rec nvn_f (f,ext0) = + match f with + PFGIdent (s,ext) -> () + | PFGFunApp((s,ext),l) -> List.iter nvn_f l + | PFGTuple l -> List.iter nvn_f l + | PFGName ((s,ext),bl) -> + List.iter (fun ((s',ext'),t) -> + (* The replication indices do not need to be added in + need_vars_in_names, because they are always included as + arguments of names, whether or not they occur in + the input file. + They must not be added to need_vars_in_names, because + they are not correctly computed by trace reconstruction, + so adding them would cause bugs in trace reconstruction. *) + if (s' <> "") && (s'.[0] != '!') then + begin + try + match Hashtbl.find glob_table s with + EName r -> + (* print_string ("Need " ^ s' ^ " in " ^ r.f_name ^ "\n"); *) + need_vars_in_names := (r.f_name, s',ext') :: (!need_vars_in_names) + | _ -> () + with Not_found -> + () + end; + nvn_f t + ) bl + | PFGAny (s,ext) -> () + +let nvn_ff (id,fl,n) = + List.iter nvn_f fl + +let set_need_vars_in_names () = + List.iter (List.iter nvn_q) (!query_list); + List.iter (fun (fact,_,bl) -> + nvn_ff fact; + List.iter (fun (_,t) -> nvn_f t) bl) (!nounif_list); + List.iter (fun (f,b) -> + nvn_e f; + List.iter (fun (_,t) -> nvn_t t) b) (!not_list) + +(* Handle all declarations *) + +let rec check_one = function + (FunDecl (f,i,is_private)) -> + check_fun_decl false f i is_private + | (DataFunDecl (f,i)) -> + check_fun_decl true f i false + | (Equation eq) -> + check_equation eq + | (Reduc (r,is_private)) -> + check_red r is_private + | (ReducFail (r,is_private)) -> + check_red_may_fail r is_private + | (PredDecl (p, arity, info)) -> + check_pred p arity info + | (PDef ((s,ext),p)) -> + Hashtbl.add pdeftbl s p + | (Query q) -> + query_list := q :: (!query_list) + | (Noninterf lnoninterf) -> + noninterf_list := (List.map get_non_interf lnoninterf) :: (!noninterf_list) + | (Weaksecret i) -> + weaksecret_list := (get_non_interf_name i) ::(!weaksecret_list) + | (NoUnif (fact,n,bl)) -> + nounif_list := (fact, n, bl) :: (!nounif_list) + | (Elimtrue (fact,may_fail_env)) -> + let env = Hashtbl.create 7 in + List.iter (fun (v,_) -> check_may_fail_var env v) may_fail_env; + Param.elim_true := (check_simple_fact env fact) :: (!Param.elim_true) + | (Not (((_,e) as f,n),b)) -> + not_list := ((f,n),b) :: (!not_list) + | (Free (il,b)) -> + List.iter (fun (i,ext) -> + if (List.exists (fun r -> r.f_name = i) (!freenames)) && (!Param.tulafale != 1) then + input_error ("free name " ^ i ^ " already declared") ext; + ignore(add_free_name (not b) i)) il + | (Clauses c) -> + List.iter check_clause c + | (Param((p,ext),v)) -> + begin + match (p,v) with + "attacker", S ("passive",_) -> Param.active_attacker := false + | "attacker", S ("active",_) -> Param.active_attacker := true + | "keyCompromise", S ("strict",_) -> Param.key_compromise := 2 + | "keyCompromise", S ("approx",_) -> Param.key_compromise := 1 + | "keyCompromise", S ("none",_) -> Param.key_compromise := 0 + | "movenew", _ -> Param.boolean_param Param.move_new p ext v + | "verboseClauses", S ("explained",_) -> Param.verbose_explain_clauses := Param.ExplainedClauses + | "verboseClauses", S ("short",_) -> Param.verbose_explain_clauses := Param.Clauses + | "verboseClauses", S ("none",_) -> Param.verbose_explain_clauses := Param.NoClauses + | "explainDerivation", _ -> Param.boolean_param Param.explain_derivation p ext v + | "removeUselessClausesBeforeDisplay", _ -> Param.boolean_param Param.remove_subsumed_clauses_before_display p ext v + | "predicatesImplementable", S("check",_) -> Param.check_pred_calls := true + | "predicatesImplementable", S("nocheck",_) -> Param.check_pred_calls := false + | "eqInNames", _ -> Param.boolean_param Param.eq_in_names p ext v + | "reconstructTrace", _ -> Param.boolean_param Param.reconstruct_trace p ext v + | "traceBacktracking", _ -> Param.boolean_param Param.trace_backtracking p ext v + | "unifyDerivation", _ -> Param.boolean_param Param.unify_derivation p ext v + | "traceDisplay", S ("none",_) -> Param.trace_display := Param.NoDisplay + | "traceDisplay", S ("short",_) -> Param.trace_display := Param.ShortDisplay + | "traceDisplay", S ("long",_) -> Param.trace_display := Param.LongDisplay + | _, _ -> Param.common_parameters p ext v + end + + +(* Get the maximum phase number *) + +let rec set_max_used_phase = function + Nil -> () + | Par(p1,p2) -> set_max_used_phase p1; set_max_used_phase p2 + | Repl (p,_) -> set_max_used_phase p + | Restr(n,_,p,_) -> set_max_used_phase p + | Test(_,p1,p2,_) -> set_max_used_phase p1; set_max_used_phase p2 + | Input(_,_, p,_) -> set_max_used_phase p + | Output(_,_,p,_) -> set_max_used_phase p + | Let(_,_,p1, p2,_) -> set_max_used_phase p1; set_max_used_phase p2 + | LetFilter(_,_,p,q,_) -> set_max_used_phase p; set_max_used_phase q + | Event(_,p,_) -> set_max_used_phase p + | Get _ | Insert _ -> Parsing_helper.internal_error "get/insert only in typed front-end" + | Phase(n,p,_) -> + if n > !Param.max_used_phase then + Param.max_used_phase := n; + set_max_used_phase p + + + +let parse_file s = + Param.set_ignore_types true; + let decl,p = parse s in + List.iter check_one decl; + let r = check_process (init_env()) p in + if !Param.key_compromise = 2 + then Param.max_used_phase := 1 + else set_max_used_phase r; + set_need_vars_in_names (); + r + +let display () = + print_string "Functions "; + Hashtbl.iter (fun _ fsymb -> + print_string (fsymb.f_name ^ "/" ^ (string_of_int (List.length (fst fsymb.f_type))) ^ ". ") + ) fun_decls; + print_string "\n" + +(* queries *) + +let non_compromised_session = FunApp(Param.session1, []) + + +(* Note: when check_query, get_queries are applied before the + translation of the process into Horn clauses has been done, + the arity of names may not be correctly initialized. In this case, + update_arity_names should be called after the translation of the + process to update it. *) + +let rec get_ident_any names_must_be_encoded s ext = + try + match Hashtbl.find glob_table s with + EVar b -> + begin + match b.link with + TLink t -> t + | NoLink -> Var b + | _ -> internal_error "unexpected link in get_ident_any" + end + | EName r -> + check_single ext s; + if fst r.f_type == Param.tmp_type then + begin + if names_must_be_encoded then + input_error ("You are referring to name " ^ s ^ " in this query or secrecy assumption, but this name will never be generated") ext + else + begin + let v = Terms.new_var Param.def_var_name Param.any_type in + v.link <- PGLink (fun () -> check_query_term true (PGIdent(s, ext),ext)); + Var v + end + end + else + begin + match r.f_cat with + Name { prev_inputs_meaning = sl } -> + let p = List.map (function + MCompSid -> non_compromised_session + | _ -> Terms.new_var_def Param.any_type) sl in + let r_arity = List.length (fst r.f_type) in + if List.length p != r_arity then + internal_error ("name " ^ s ^ " expects " ^ (string_of_int r_arity) ^ " arguments, but has " ^ (string_of_int (List.length p)) ^ " elements in prev_inputs_meaning"); + FunApp(r, p) + | _ -> internal_error "name expected here" + end + | EFun f -> + let f_arity = List.length (fst f.f_type) in + if f_arity = 0 then + FunApp(f,[]) + else + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used without parameters") ext + | _ -> internal_error "Only Var, Name, Fun should occur in the environment in the untyped front-end" + with Not_found -> + let b = Terms.new_var s Param.any_type in + Hashtbl.add glob_table s (EVar b); + Var b + +and check_query_term names_must_be_encoded (term, ext0) = + match term with + PGIdent (s,ext) -> get_ident_any names_must_be_encoded s ext + | PGFunApp((s,ext),l) -> + begin + try + match Hashtbl.find glob_table s with + EFun f -> + (match f.f_cat with + Eq _ | Tuple -> () + | _ -> input_error ("function " ^ s ^ " is defined by reduction. Such a function should not be used in a query") ext); + let f_arity = List.length (fst f.f_type) in + if f_arity = List.length l then + FunApp(f, List.map (check_query_term names_must_be_encoded) l) + else + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used with " ^ + (string_of_int (List.length l)) ^ + " parameters") ext + | _ -> input_error("only functions can be applied, not " ^ s) ext + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + end + | PGTuple l -> FunApp(Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) l), + List.map (check_query_term names_must_be_encoded) l) + | PGName ((s,ext),bl) -> + try + match Hashtbl.find glob_table s with + EName r -> + check_single ext s; + if fst r.f_type == Param.tmp_type then + begin + if names_must_be_encoded then + input_error ("You are referring to name " ^ s ^ " in this query or secrecy assumption, but this name will never be generated") ext + else + begin + let v = Terms.new_var Param.def_var_name Param.any_type in + v.link <- PGLink (fun () -> check_query_term true (term,ext0)); + Var v + end + end + else + begin + match r.f_cat with + Name { prev_inputs_meaning = sl } -> + List.iter (fun ((s',ext'),_) -> + if not (List.exists (function m -> Reduction_helper.meaning_encode m = s') sl) then + input_error ("variable " ^ s' ^ " not defined at restriction " ^ s) ext') bl; + let p = List.map (function + MCompSid -> non_compromised_session + | m -> binding_find names_must_be_encoded (Reduction_helper.meaning_encode m) bl + ) sl + in + let r_arity = List.length (fst r.f_type) in + if List.length p != r_arity then + internal_error ("name " ^ s ^ " expects " ^ (string_of_int r_arity) ^ " arguments, but has " ^ (string_of_int (List.length p)) ^ " elements in prev_inputs_meaning"); + FunApp(r, p) + | _ -> internal_error "name expected here" + end + | _ -> input_error (s ^ " should be a name") ext + with Not_found -> + input_error (s ^ " should be a name") ext + +and binding_find names_must_be_encoded s = function + [] -> Terms.new_var_def Param.any_type + | ((s',_),t)::l -> + if s' = s then + check_query_term names_must_be_encoded t + else + binding_find names_must_be_encoded s l + +let add_binding names_must_be_encoded ((i,e),t) = + if Hashtbl.mem glob_table i then + input_error ("Variable " ^ i ^ " defined after used.") e + else + let v = Terms.new_var i Param.any_type in + v.link <- TLink (check_query_term names_must_be_encoded t); + Hashtbl.add glob_table i (EVar v) + +let find_event_arity s e'' arity = + try + let f = Hashtbl.find event_fun_table s in + let f_arity = List.length (fst f.f_type) in + if f_arity != arity then + input_error ("event " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used with " ^ + (string_of_int arity) ^ + " parameters") e'' + else + f + with Not_found -> + input_error ("unknown event " ^s) e'' + +let check_event names_must_be_encoded ((f,e),n) = + match f with + PGNeq(t1,t2) -> + if n = -1 then + QNeq(check_query_term names_must_be_encoded t1, + check_query_term names_must_be_encoded t2) + else + input_error "inequalities do not depend on phases, so no phase should be specified in inequality facts in queries" e + | PGEqual(t1,t2) -> + if n = -1 then + QEq(check_query_term names_must_be_encoded t1, + check_query_term names_must_be_encoded t2) + else + input_error "equalities do not depend on phases, so no phase should be specified in equality facts in queries" e + | PGSimpleFact(("ev",e'),tl0) -> + begin + match tl0 with + [PGFunApp((s,e''), tl),_] -> + if n = -1 then + if !Param.key_compromise == 0 then + QSEvent(false, FunApp((find_event_arity s e'' (List.length tl)), + List.map (check_query_term names_must_be_encoded) tl)) + else + QSEvent(false, FunApp((find_event_arity s e'' (1+List.length tl)), + (Terms.new_var_def Param.any_type):: + (List.map (check_query_term names_must_be_encoded) tl))) + else + input_error "events have no phases, so no phase should be specified in events in queries" e + | _ -> input_error "predicate ev should have one argument, which is a function application" e' + end + | PGSimpleFact(("evinj",e'),tl0) -> + begin + match tl0 with + [PGFunApp((s,e''), tl),_] -> + if n = -1 then + if !Param.key_compromise == 0 then + QSEvent(true, FunApp((find_event_arity s e'' (List.length tl)), + List.map (check_query_term names_must_be_encoded) tl)) + else + QSEvent(true, FunApp((find_event_arity s e'' (1+List.length tl)), + (Terms.new_var_def Param.any_type):: + (List.map (check_query_term names_must_be_encoded) tl))) + else + input_error "events have no phases, so no phase should be specified in events in queries" e + | _ -> input_error "predicate evinj should have one argument, which is a function application" e' + end + | PGSimpleFact(("attacker",_), tl) -> + if List.length tl != 1 then + input_error "arity of predicate attacker should be 1" e; + if n > !Param.max_used_phase then + begin + input_warning "phase greater than the maximum phase used in the process.\nIs that really what you want?" e; + Param.max_used_phase := n; + end; + let att_n = Param.get_pred (Attacker((if n = -1 then (!Param.max_used_phase) else n), Param.any_type)) in + QFact(att_n, List.map (check_query_term names_must_be_encoded) tl) + | PGSimpleFact(("mess",_), tl) -> + if List.length tl != 2 then + input_error "arity of predicate mess should be 2" e; + if n > !Param.max_used_phase then + begin + input_warning "phase greater than the maximum phase used in the process.\nIs that really what you want?" e; + Param.max_used_phase := n; + end; + let mess_n = Param.get_pred (Mess((if n = -1 then (!Param.max_used_phase) else n), Param.any_type)) in + QFact(mess_n, List.map (check_query_term names_must_be_encoded) tl) + | PGSimpleFact(p, tl) -> + if n != -1 then + input_error "declared predicates do not depend on phases, so no phase should be specified in such facts in queries" e; + let p = get_pred p (List.length tl) in + QFact(p, List.map (check_query_term names_must_be_encoded) tl) + +let rec check_real_query = function + PBefore(ev, hypll) -> + let ev' = check_event false ev in + ( + match ev' with + QNeq _ | QEq _ -> user_error "Inequalities or equalities cannot occur before ==> in queries\n" + | _ -> () + ); + let hypll' = check_hyp hypll in + Before(ev', hypll') + +and check_hyp = function + PQEvent(ev) -> [[QEvent(check_event false ev)]] + | PNestedQuery(q) -> [[NestedQuery(check_real_query q)]] + | PFalse -> [] + | POr(he1,he2) -> + (check_hyp he1) @ (check_hyp he2) + | PAnd(he1,he2) -> + let he1' = check_hyp he1 in + let he2' = check_hyp he2 in + List.concat (List.map (fun e1 -> List.map (fun e2 -> e1 @ e2) he2') he1') + +let check_real_query_top = function + PBefore(ev, hypll) -> + let ev' = check_event false ev in + let ev'' = + match ev' with + QNeq _ | QEq _ -> user_error "Inequalities or equalities cannot occur before ==> in queries\n" + | QFact _ -> ev' + | QSEvent _ when !Param.key_compromise == 0 -> ev' + | QSEvent(inj, FunApp(f, sid::l)) -> + QSEvent(inj, FunApp(f, non_compromised_session::l)) + | QSEvent(_,_) -> + internal_error "Bad format for events in queries" + in + let hypll' = check_hyp hypll in + Before(ev'', hypll') + +let check_query = function + PRealQuery q -> RealQuery(check_real_query_top q) + | PPutBegin(i, l) -> + let i' = match i with + ("ev",_) -> false + | ("evinj",_) -> true + | (s,e) -> input_error ("ev or evinj expected instead of " ^ s) e + in + let l' = List.map (fun (s,e) -> + try + Hashtbl.find event_fun_table s + with Not_found -> + input_error ("unknown event " ^s) e) l + in + PutBegin(i',l') + | PBinding(i,t) -> + add_binding false (i,t); + PutBegin(false,[]) + + +let rec has_inj = function + Before(_,ll) -> + List.exists (List.exists (function + NestedQuery q -> has_inj q + | QEvent (QSEvent (i,_)) -> i + | QEvent (_) -> false)) ll + +let rec check_inj_coherent_r q = + if has_inj q then + match q with + Before(e,ll) -> + let e' = + match e with + QFact _ | QNeq _ | QEq _ -> user_error "In a query e ==> h, if h contains an injective event, then e must be an event ev or better evinj\n" + | QSEvent(_,t) -> QSEvent(true, t) (* set the event injective *) + in + Before(e', List.map (List.map (function + QEvent e -> QEvent e + | NestedQuery q' -> NestedQuery (check_inj_coherent_r q'))) ll) + else q + +let check_inj_coherent = function + (PutBegin(_,_) as q) -> q + | RealQuery q -> RealQuery (check_inj_coherent_r q) + + +(* +let present_inj_in_query = Hashtbl.create 7 + +let check_inj_uniq_e = function + QSEvent(true, FunApp(f,ll)) -> + begin + if Hashtbl.mem present_inj_in_query f then + user_error "Injective events should be unique in one query\n" + else + Hashtbl.add present_inj_in_query f () + end + | _ -> () + +let rec check_inj_uniq_r = function + Before(e,ll) -> + check_inj_uniq_e e; + List.iter (List.iter (function + QEvent e -> check_inj_uniq_e e + | NestedQuery q -> check_inj_uniq_r q)) ll + + +let check_inj_uniq = function + PutBegin(_,_) -> () + | RealQuery q -> check_inj_uniq_r q +*) + +let transl_query q = + clear_var_env(); + let q' = List.map check_query q in + let q'' = List.map check_inj_coherent q' in + Pievent.init_event_status_table event_fun_table; +(* + List.iter (fun q -> + Hashtbl.clear present_inj_in_query; + check_inj_uniq q) q''; +*) + List.iter Pievent.set_event_status q''; + q'' + +(* Give the fact to query from the detailed query + This is used only to create a resembling specification for SPASS + *) + +let query_to_facts q = + let facts = ref [] in + List.iter (function + PutBegin(_) -> () + | RealQuery(Before(e,_)) -> match e with + QSEvent(_,(FunApp(f,l) as param)) -> + facts := + (if (Pievent.get_event_status f).end_status = Inj then + Pred(Param.end_pred_inj, [Var(Terms.new_var "endsid" Param.sid_type);param]) + else + Pred(Param.end_pred, [param])) :: (!facts) + | QSEvent(_, _) -> + user_error ("Events should be function applications\n") + | QFact(p,l) -> + facts := (Pred(p,l)) :: (!facts) + | QNeq _ | QEq _ -> internal_error "no Neq/Eq queries" + ) q; + !facts + +let get_noninterf_queries () = + !noninterf_list + +let get_weaksecret_queries () = + !weaksecret_list + +let get_not() = + List.map (fun (ev,b) -> + clear_var_env(); + List.iter (add_binding true) b; + check_event true ev) (!not_list) + +(* For Nounif. Very similar to queries, except that *v is allowed + and events are not allowed *) + +let fget_ident_any s ext = + try + match Hashtbl.find glob_table s with + EVar b -> + begin + match b.link with + FLink t -> t + | NoLink -> FVar b + | _ -> internal_error "unexpected link in fget_ident_any" + end + | EName r -> + check_single ext s; + if fst r.f_type == Param.tmp_type then + Parsing_helper.input_error ("You are referring to name " ^ s ^ " in this nounif declaration, but this name will never be generated") ext + else + begin + match r.f_cat with + Name { prev_inputs_meaning = sl } -> + let p = List.map (fun _ -> + FAny (Terms.new_var Param.def_var_name Param.any_type)) sl in + let r_arity = List.length (fst r.f_type) in + if List.length p != r_arity then + internal_error ("name " ^ s ^ " expects " ^ (string_of_int r_arity) ^ " arguments, but has " ^ (string_of_int (List.length p)) ^ " elements in prev_inputs_meaning"); + FFunApp(r, p) + | _ -> internal_error "name expected here" + end + | EFun f -> + let f_arity = List.length (fst f.f_type) in + if f_arity = 0 then + FFunApp(f,[]) + else + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used without parameters") ext + | _ -> internal_error "Only Var, Name, Fun should occur in the environment in the untyped front-end" + with Not_found -> + let b = Terms.new_var s Param.any_type in + Hashtbl.add glob_table s (EVar b); + FVar b + + +let rec check_gformat (term, ext0) = + match term with + PFGIdent (s,ext) -> fget_ident_any s ext + | PFGFunApp((s,ext),l) -> + begin + try + match Hashtbl.find glob_table s with + EFun f -> + (match f.f_cat with + Eq _ | Tuple -> () + | _ -> input_error ("function " ^ s ^ " is defined by reduction. Such a function should not be used in a \"nounif\" declaration") ext); + let f_arity = List.length (fst f.f_type) in + if f_arity = List.length l then + FFunApp(f, List.map check_gformat l) + else + input_error ("function " ^ s ^ " has arity " ^ + (string_of_int f_arity) ^ + " but is used with " ^ + (string_of_int (List.length l)) ^ + " parameters") ext + | _ -> input_error("only functions can be applied, not " ^ s) ext + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + end + | PFGTuple l -> FFunApp(Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) l), + List.map check_gformat l) + | PFGAny (s,ext) -> + begin + try + match Hashtbl.find glob_table s with + EVar b -> + begin + match b.link with + NoLink -> FAny b + | FLink _ -> input_error "variables preceded by * must not be defined by a binding" ext + | _ -> internal_error "unexpected link in check_gformat" + end + | _ -> input_error (s ^ " should be a variable") ext + with Not_found -> + let b = Terms.new_var s Param.any_type in + Hashtbl.add glob_table s (EVar b); + FAny b + end + | PFGName ((s,ext),bl) -> + try + match Hashtbl.find glob_table s with + EName r -> + check_single ext s; + if fst r.f_type == Param.tmp_type then + Parsing_helper.input_error ("You are referring to name " ^ s ^ " in this nounif declaration, but this name will never be generated") ext + else + begin + match r.f_cat with + Name { prev_inputs_meaning = sl } -> + List.iter (fun ((s',ext'),_) -> + if not (List.exists (fun m -> Reduction_helper.meaning_encode m = s') sl) then + input_error ("variable " ^ s' ^ " not defined at restriction " ^ s) ext') bl; + let p = List.map (fun m -> + fbinding_find (Reduction_helper.meaning_encode m) bl) sl in + let r_arity = List.length (fst r.f_type) in + if List.length p != r_arity then + internal_error ("name " ^ s ^ " expects " ^ (string_of_int r_arity) ^ " arguments, but has " ^ (string_of_int (List.length p)) ^ " elements in prev_inputs_meaning"); + FFunApp(r, p) + | _ -> internal_error "name expected here" + end + | _ -> input_error (s ^ " should be a name") ext + with Not_found -> + input_error (s ^ " should be a name") ext + +and fbinding_find s = function + [] -> FAny (Terms.new_var Param.def_var_name Param.any_type) + | ((s',_),t)::l -> + if s' = s then + check_gformat t + else + fbinding_find s l + +let add_fbinding ((i,e),t) = + if Hashtbl.mem glob_table i then + input_error ("Variable " ^ i ^ " defined after used.") e + else + let v = Terms.new_var i Param.any_type in + v.link <- FLink (check_gformat t); + Hashtbl.add glob_table i (EVar v) + +let check_gfact_format ((s, ext), tl, n) = + match s with + "ev" | "evinj" -> + input_error "predicates ev and evinj not allowed in nounif" ext + | "attacker" -> + if List.length tl != 1 then + input_error "arity of predicate attacker should be 1" ext; + if n > !Param.max_used_phase then + input_warning "nounif declaration for a phase greater than used" ext; + let att_n = Param.get_pred (Attacker((if n = -1 then (!Param.max_used_phase) else n), Param.any_type)) in + (att_n, List.map check_gformat tl) + | "mess" -> + if List.length tl != 2 then + input_error "arity of predicate mess should be 2" ext; + if n > !Param.max_used_phase then + input_warning "nounif declaration for a phase greater than used" ext; + let mess_n = Param.get_pred (Mess((if n = -1 then (!Param.max_used_phase) else n), Param.any_type)) in + (mess_n, List.map check_gformat tl) + | s -> + if n != -1 then + input_error "declared predicates do not depend on phases, so no phase should be specified in such facts in queries" ext; + let p = get_pred (s,ext) (List.length tl) in + (p, List.map check_gformat tl) + + +let get_nounif() = + List.map (fun (fact,n,b) -> + clear_var_env(); + List.iter add_fbinding b; + (check_gfact_format fact, -n) + ) (!nounif_list) + + diff --git a/preinstallTTool/linux/proverif/src/pisyntax.mli b/preinstallTTool/linux/proverif/src/pisyntax.mli new file mode 100644 index 0000000000000000000000000000000000000000..f1bbbd8b1cacadcb134f1ff84fa0cc1a3727b8ae --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pisyntax.mli @@ -0,0 +1,43 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Pitypes + +val query_list : Piptree.query list list ref + +val parse_file : string -> process +val display : unit -> unit +val transl_query : Piptree.query list -> query list +val query_to_facts : query list -> fact list +val get_noninterf_queries : unit -> (funsymb * term list option) list list +val get_weaksecret_queries : unit -> funsymb list +val get_not : unit -> event list +val get_nounif : unit -> (fact_format * int) list + +val destructors_check_deterministic : funsymb list ref + diff --git a/preinstallTTool/linux/proverif/src/pitlexer.cmi b/preinstallTTool/linux/proverif/src/pitlexer.cmi new file mode 100644 index 0000000000000000000000000000000000000000..686db2128587c30077a4ac814a8c2bca65c046d0 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitlexer.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitlexer.cmx b/preinstallTTool/linux/proverif/src/pitlexer.cmx new file mode 100644 index 0000000000000000000000000000000000000000..2ad87528a4c3fa98f07530e6c7ffddc6706506b5 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitlexer.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pitlexer.ml b/preinstallTTool/linux/proverif/src/pitlexer.ml new file mode 100644 index 0000000000000000000000000000000000000000..bf4698115320c7399b168912c6374a98e94ec5ce --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitlexer.ml @@ -0,0 +1,668 @@ +# 28 "pitlexer.mll" + +open Parsing_helper +open Pitparser + +let create_hashtable size init = + let tbl = Hashtbl.create size in + List.iter (fun (key,data) -> Hashtbl.add tbl key data) init; + tbl + +(* Typed front-end *) + +let keyword_table = + create_hashtable 11 +[ "type", TYPE; + "set", SET; + "forall", FORALL; + "fail", FAIL; + "or", ORTEXT; + "const", CONST; + "letfun", LETFUN; + "channel", CHANNEL; + "def", DEFINE; + "expand", EXPAND; + "yield", YIELD; + "proba", PROBA; + "proof", PROOF; +(* Tables of keys *) + "table", TABLE; + "insert", INSERT; + "get", GET; +(* Common keywords *) + "param", PARAM; + "new", NEW; + "out", OUT; + "in", IN; + "if", IF; + "then", THEN; + "else", ELSE; + "fun", FUN; + "equation", EQUATION; + "reduc", REDUCTION; + "pred", PREDICATE; + "process", PROCESS; + "let", LET; + "query", QUERY; + "putbegin", PUTBEGIN; + "noninterf", NONINTERF; + "event", EVENT; + "not", NOT; + "elimtrue", ELIMTRUE; + "free", FREE; + "clauses", CLAUSES; + "suchthat", SUCHTHAT; + "nounif", NOUNIF; + "phase", PHASE; + "among", AMONG; + "weaksecret", WEAKSECRET; + "equivalence", EQUIVALENCE; + "otherwise", OTHERWISE; + "choice", CHOICE ] + + +# 65 "pitlexer.ml" +let __ocaml_lex_tables = { + Lexing.lex_base = + "\000\000\224\255\225\255\081\000\000\000\233\255\234\255\235\255\ + \236\255\002\000\238\255\239\255\001\000\003\000\243\255\244\255\ + \245\255\246\255\247\255\249\255\001\000\080\000\144\000\097\001\ + \049\002\005\000\001\000\255\255\001\003\218\003\037\000\021\000\ + \039\000\031\000\061\000\226\255\252\255\117\004\250\255\241\255\ + \240\255\002\000\227\255\232\255\228\255\030\000\032\000\229\255\ + \230\255\188\000\252\255\253\255\005\000\254\255\054\000\255\255\ + "; + Lexing.lex_backtrk = + "\255\255\255\255\255\255\031\000\031\000\255\255\255\255\255\255\ + \255\255\018\000\255\255\255\255\031\000\013\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\007\000\004\000\031\000\002\000\ + \002\000\001\000\000\000\255\255\002\000\002\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\024\000\255\255\ + \255\255\255\255\255\255\255\255\001\000\255\255\003\000\255\255\ + "; + Lexing.lex_default = + "\001\000\000\000\000\000\255\255\255\255\000\000\000\000\000\000\ + \000\000\255\255\000\000\000\000\255\255\255\255\000\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\255\255\037\000\255\255\ + \255\255\255\255\255\255\000\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\000\000\000\000\037\000\000\000\000\000\ + \000\000\255\255\000\000\000\000\000\000\255\255\255\255\000\000\ + \000\000\050\000\000\000\000\000\255\255\000\000\255\255\000\000\ + "; + Lexing.lex_trans = + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\025\000\027\000\027\000\025\000\026\000\025\000\053\000\ + \000\000\025\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \025\000\010\000\022\000\000\000\000\000\025\000\012\000\040\000\ + \020\000\018\000\006\000\038\000\019\000\004\000\007\000\008\000\ + \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\005\000\011\000\003\000\009\000\043\000\041\000\ + \042\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\017\000\048\000\016\000\047\000\055\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\024\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\015\000\013\000\014\000\045\000\039\000\ + \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\031\000\032\000\033\000\034\000\046\000\044\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\035\000\036\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\053\000\000\000\ + \000\000\052\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\054\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\ + \023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\051\000\000\000\000\000\000\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\028\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\029\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\000\000\000\000\000\000\000\000\000\000\030\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\000\000\000\000\000\000\ + \000\000\023\000\000\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\000\000\036\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\255\255\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\255\255"; + Lexing.lex_check = + "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\000\000\000\000\026\000\000\000\000\000\025\000\052\000\ + \255\255\025\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\000\000\000\000\255\255\255\255\025\000\000\000\012\000\ + \000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\004\000\009\000\ + \041\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\045\000\000\000\046\000\054\000\ + \255\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\003\000\013\000\ + \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\030\000\031\000\032\000\033\000\003\000\003\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\034\000\022\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\049\000\255\255\ + \255\255\049\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\049\000\255\255\ + \255\255\255\255\255\255\255\255\022\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\022\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\022\000\ + \023\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \022\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\049\000\255\255\255\255\255\255\ + \023\000\255\255\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \024\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\255\255\255\255\255\255\255\255\ + \024\000\255\255\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \255\255\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \028\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\255\255\255\255\255\255\255\255\ + \028\000\255\255\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \255\255\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \255\255\028\000\028\000\028\000\028\000\028\000\028\000\028\000\ + \028\000\029\000\255\255\255\255\255\255\255\255\255\255\029\000\ + \255\255\255\255\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\255\255\255\255\255\255\ + \255\255\029\000\255\255\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\255\255\037\000\ + \255\255\255\255\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\255\255\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\037\000\029\000\029\000\029\000\029\000\029\000\029\000\ + \029\000\029\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\037\000\037\000\037\000\ + \037\000\037\000\037\000\037\000\037\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\037\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\037\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\037\000"; + Lexing.lex_base_code = + ""; + Lexing.lex_backtrk_code = + ""; + Lexing.lex_default_code = + ""; + Lexing.lex_trans_code = + ""; + Lexing.lex_check_code = + ""; + Lexing.lex_code = + ""; +} + +let rec token lexbuf = + __ocaml_lex_token_rec lexbuf 0 +and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 93 "pitlexer.mll" + ( next_line lexbuf; token lexbuf ) +# 467 "pitlexer.ml" + + | 1 -> +# 95 "pitlexer.mll" + ( token lexbuf ) +# 472 "pitlexer.ml" + + | 2 -> +# 97 "pitlexer.mll" + ( let s = Lexing.lexeme lexbuf in + try + Hashtbl.find keyword_table s + with + Not_found -> + IDENT (s, extent lexbuf) + ) +# 483 "pitlexer.ml" + + | 3 -> +# 105 "pitlexer.mll" + ( let s = Lexing.lexeme lexbuf in + STRING (String.sub s 1 (String.length s - 2), extent lexbuf) + ) +# 490 "pitlexer.ml" + + | 4 -> +# 109 "pitlexer.mll" + ( + try + INT (int_of_string(Lexing.lexeme lexbuf)) + with Failure _ -> + input_error "Incorrect integer" (extent lexbuf) + ) +# 500 "pitlexer.ml" + + | 5 -> +# 115 "pitlexer.mll" + ( + comment lexbuf; + token lexbuf + ) +# 508 "pitlexer.ml" + + | 6 -> +# 119 "pitlexer.mll" + ( COMMA ) +# 513 "pitlexer.ml" + + | 7 -> +# 120 "pitlexer.mll" + ( LPAREN ) +# 518 "pitlexer.ml" + + | 8 -> +# 121 "pitlexer.mll" + ( RPAREN ) +# 523 "pitlexer.ml" + + | 9 -> +# 122 "pitlexer.mll" + ( LBRACKET ) +# 528 "pitlexer.ml" + + | 10 -> +# 123 "pitlexer.mll" + ( RBRACKET ) +# 533 "pitlexer.ml" + + | 11 -> +# 124 "pitlexer.mll" + ( LBRACE ) +# 538 "pitlexer.ml" + + | 12 -> +# 125 "pitlexer.mll" + ( RBRACE ) +# 543 "pitlexer.ml" + + | 13 -> +# 126 "pitlexer.mll" + ( BAR ) +# 548 "pitlexer.ml" + + | 14 -> +# 127 "pitlexer.mll" + ( OR ) +# 553 "pitlexer.ml" + + | 15 -> +# 128 "pitlexer.mll" + ( WEDGE ) +# 558 "pitlexer.ml" + + | 16 -> +# 129 "pitlexer.mll" + ( SEMI ) +# 563 "pitlexer.ml" + + | 17 -> +# 130 "pitlexer.mll" + ( REPL ) +# 568 "pitlexer.ml" + + | 18 -> +# 131 "pitlexer.mll" + ( EQUAL ) +# 573 "pitlexer.ml" + + | 19 -> +# 132 "pitlexer.mll" + ( SLASH ) +# 578 "pitlexer.ml" + + | 20 -> +# 133 "pitlexer.mll" + ( DOT ) +# 583 "pitlexer.ml" + + | 21 -> +# 134 "pitlexer.mll" + ( STAR ) +# 588 "pitlexer.ml" + + | 22 -> +# 135 "pitlexer.mll" + ( COLON ) +# 593 "pitlexer.ml" + + | 23 -> +# 136 "pitlexer.mll" + ( RED ) +# 598 "pitlexer.ml" + + | 24 -> +# 137 "pitlexer.mll" + ( LEQ ) +# 603 "pitlexer.ml" + + | 25 -> +# 138 "pitlexer.mll" + ( EQUIV ) +# 608 "pitlexer.ml" + + | 26 -> +# 139 "pitlexer.mll" + ( EQUIVEQ ) +# 613 "pitlexer.ml" + + | 27 -> +# 140 "pitlexer.mll" + ( DIFF ) +# 618 "pitlexer.ml" + + | 28 -> +# 141 "pitlexer.mll" + ( BEFORE ) +# 623 "pitlexer.ml" + + | 29 -> +# 142 "pitlexer.mll" + ( INJEVENT ) +# 628 "pitlexer.ml" + + | 30 -> +# 143 "pitlexer.mll" + ( EOF ) +# 633 "pitlexer.ml" + + | 31 -> +# 144 "pitlexer.mll" + ( input_error "Illegal character" (extent lexbuf) ) +# 638 "pitlexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state + +and comment lexbuf = + __ocaml_lex_comment_rec lexbuf 49 +and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 147 "pitlexer.mll" + ( ) +# 649 "pitlexer.ml" + + | 1 -> +# 149 "pitlexer.mll" + ( next_line lexbuf; comment lexbuf ) +# 654 "pitlexer.ml" + + | 2 -> +# 150 "pitlexer.mll" + ( ) +# 659 "pitlexer.ml" + + | 3 -> +# 151 "pitlexer.mll" + ( comment lexbuf ) +# 664 "pitlexer.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state + +;; + diff --git a/preinstallTTool/linux/proverif/src/pitlexer.mll b/preinstallTTool/linux/proverif/src/pitlexer.mll new file mode 100644 index 0000000000000000000000000000000000000000..719c3808d92c44637519d19095cf9e6b73ef5bb8 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitlexer.mll @@ -0,0 +1,151 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +{ +open Parsing_helper +open Pitparser + +let create_hashtable size init = + let tbl = Hashtbl.create size in + List.iter (fun (key,data) -> Hashtbl.add tbl key data) init; + tbl + +(* Typed front-end *) + +let keyword_table = + create_hashtable 11 +[ "type", TYPE; + "set", SET; + "forall", FORALL; + "fail", FAIL; + "or", ORTEXT; + "const", CONST; + "letfun", LETFUN; + "channel", CHANNEL; + "def", DEFINE; + "expand", EXPAND; + "yield", YIELD; + "proba", PROBA; + "proof", PROOF; +(* Tables of keys *) + "table", TABLE; + "insert", INSERT; + "get", GET; +(* Common keywords *) + "param", PARAM; + "new", NEW; + "out", OUT; + "in", IN; + "if", IF; + "then", THEN; + "else", ELSE; + "fun", FUN; + "equation", EQUATION; + "reduc", REDUCTION; + "pred", PREDICATE; + "process", PROCESS; + "let", LET; + "query", QUERY; + "putbegin", PUTBEGIN; + "noninterf", NONINTERF; + "event", EVENT; + "not", NOT; + "elimtrue", ELIMTRUE; + "free", FREE; + "clauses", CLAUSES; + "suchthat", SUCHTHAT; + "nounif", NOUNIF; + "phase", PHASE; + "among", AMONG; + "weaksecret", WEAKSECRET; + "equivalence", EQUIVALENCE; + "otherwise", OTHERWISE; + "choice", CHOICE ] + +} + +rule token = parse + "\010" | "\013" | "\013\010" + { next_line lexbuf; token lexbuf } +| [ ' ' '\009' '\012' ] + + { token lexbuf } +| [ 'a'-'z' 'A'-'Z' ] (( [ 'a'-'z' 'A'-'Z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9' ] )*) + { let s = Lexing.lexeme lexbuf in + try + Hashtbl.find keyword_table s + with + Not_found -> + IDENT (s, extent lexbuf) + } +| '\"' (( [ '!' '#'-'[' ']'-'~' '\192'-'\214' '\216'-'\246' '\248'-'\255' ] )*) '\"' + { let s = Lexing.lexeme lexbuf in + STRING (String.sub s 1 (String.length s - 2), extent lexbuf) + } +| ([ '0'-'9' ]) + + { + try + INT (int_of_string(Lexing.lexeme lexbuf)) + with Failure _ -> + input_error "Incorrect integer" (extent lexbuf) + } +| "(*" { + comment lexbuf; + token lexbuf + } +| ',' { COMMA } +| '(' { LPAREN } +| ')' { RPAREN } +| '[' { LBRACKET } +| ']' { RBRACKET } +| '{' { LBRACE } +| '}' { RBRACE } +| '|' { BAR } +| "||" { OR } +| "&&" { WEDGE } +| ';' { SEMI } +| '!' { REPL } +| '=' { EQUAL } +| '/' { SLASH } +| '.' { DOT } +| '*' { STAR } +| ':' { COLON } +| "->" { RED } +| "<=" { LEQ } +| "<->" { EQUIV } +| "<=>" { EQUIVEQ } +| "<>" { DIFF } +| "==>" { BEFORE } +| "inj-event" { INJEVENT } +| eof { EOF } +| _ { input_error "Illegal character" (extent lexbuf) } + +and comment = parse +| "*)" { } +| "\010" | "\013" | "\013\010" + { next_line lexbuf; comment lexbuf } +| eof { } +| _ { comment lexbuf } diff --git a/preinstallTTool/linux/proverif/src/pitlexertotex.cmi b/preinstallTTool/linux/proverif/src/pitlexertotex.cmi new file mode 100644 index 0000000000000000000000000000000000000000..eed481f28fd0ce58b4e51636a4290c504a036df1 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitlexertotex.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitlexertotex.cmx b/preinstallTTool/linux/proverif/src/pitlexertotex.cmx new file mode 100644 index 0000000000000000000000000000000000000000..bc1681a3b2730363d8027745bc160d75f3180e82 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitlexertotex.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pitlexertotex.ml b/preinstallTTool/linux/proverif/src/pitlexertotex.ml new file mode 100644 index 0000000000000000000000000000000000000000..4693090c5c6d0eb74828f3ee013b19da85e76f87 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitlexertotex.ml @@ -0,0 +1,687 @@ +# 28 "pitlexertotex.mll" + +open Parsing_helper +open Pitptree +open Fileprint + +let kinds = Hashtbl.create 7 + +let init_kinds d = + Hashtbl.iter (fun keyw _ -> Hashtbl.add kinds keyw "\\kwl") Pitlexer.keyword_table; + Hashtbl.add kinds "channel" "\\kwt"; + Hashtbl.add kinds "bitstring" "\\kwt"; + Hashtbl.add kinds "bool" "\\kwt"; + Hashtbl.add kinds "true" "\\kwc"; + Hashtbl.add kinds "false" "\\kwc"; + List.iter (function + TTypeDecl(t,_) -> Hashtbl.add kinds t "\\kwt" + | TFunDecl((f,_),_,_,_) -> Hashtbl.add kinds f "\\kwf" + | TReducFail((f,_),_,_,_,_) -> Hashtbl.add kinds f "\\kwf" + | TReduc(((_,(PFunApp((f,_),_),_),_)::_),_) -> Hashtbl.add kinds f "\\kwf" + | TPredDecl((p,_),_,_) -> Hashtbl.add kinds p "\\kwp" + | TFree((c,_),_,_) -> Hashtbl.add kinds c "\\kwc" + | TConstDecl((c,_),_,_) -> Hashtbl.add kinds c "\\kwc" + | TTableDecl((t,_),_) -> Hashtbl.add kinds t "\\kwt" + | TEventDecl((e,_),_) -> Hashtbl.add kinds e "\\kwe" + | TLetFun((f,_),_,_) -> Hashtbl.add kinds f "\\kwf" + | _ -> ()) d + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + let ptree = + try + Pitparser.all Pitlexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + + +# 46 "pitlexertotex.ml" +let __ocaml_lex_tables = { + Lexing.lex_base = + "\000\000\222\255\223\255\081\000\000\000\231\255\232\255\233\255\ + \234\255\003\000\236\255\237\255\001\000\004\000\241\255\242\255\ + \243\255\244\255\245\255\005\000\001\000\081\000\144\000\097\001\ + \049\002\002\000\253\255\145\000\001\000\255\255\134\000\001\000\ + \054\000\064\001\062\000\063\000\064\000\065\000\148\000\107\000\ + \108\000\109\000\001\003\218\003\080\000\064\000\083\000\075\000\ + \070\000\224\255\250\255\117\004\248\255\155\000\156\000\127\000\ + \159\000\160\000\189\000\252\255\253\255\005\000\254\255\152\000\ + \255\255"; + Lexing.lex_backtrk = + "\255\255\255\255\255\255\033\000\033\000\255\255\255\255\255\255\ + \255\255\020\000\255\255\255\255\033\000\015\000\255\255\255\255\ + \255\255\255\255\255\255\008\000\009\000\006\000\033\000\004\000\ + \004\000\003\000\255\255\001\000\000\000\255\255\255\255\255\255\ + \255\255\255\255\017\000\025\000\029\000\255\255\026\000\028\000\ + \026\000\027\000\004\000\004\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\016\000\015\000\255\255\ + \020\000\030\000\255\255\255\255\255\255\001\000\255\255\003\000\ + \255\255"; + Lexing.lex_default = + "\001\000\000\000\000\000\255\255\255\255\000\000\000\000\000\000\ + \000\000\255\255\000\000\000\000\255\255\255\255\000\000\000\000\ + \000\000\000\000\000\000\255\255\255\255\255\255\051\000\255\255\ + \255\255\255\255\000\000\255\255\255\255\000\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\000\000\000\000\051\000\000\000\255\255\255\255\255\255\ + \255\255\255\255\059\000\000\000\000\000\255\255\000\000\255\255\ + \000\000"; + Lexing.lex_trans = + "\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\026\000\029\000\029\000\025\000\028\000\025\000\062\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \027\000\010\000\022\000\056\000\054\000\019\000\012\000\034\000\ + \020\000\018\000\006\000\052\000\019\000\004\000\007\000\008\000\ + \021\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\005\000\011\000\003\000\009\000\035\000\035\000\ + \055\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\017\000\034\000\016\000\034\000\035\000\ + \036\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\024\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\015\000\013\000\014\000\037\000\041\000\ + \053\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\021\000\039\000\040\000\041\000\038\000\036\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\033\000\050\000\037\000\040\000\045\000\046\000\032\000\ + \047\000\048\000\049\000\053\000\054\000\057\000\031\000\056\000\ + \057\000\064\000\000\000\038\000\036\000\000\000\000\000\062\000\ + \000\000\000\000\061\000\000\000\000\000\030\000\009\000\000\000\ + \000\000\000\000\039\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\063\000\ + \000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \002\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\013\000\000\000\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \033\000\000\000\000\000\000\000\000\000\000\000\032\000\255\255\ + \000\000\000\000\000\000\000\000\000\000\031\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\030\000\009\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\255\255\ + \023\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\013\000\060\000\000\000\000\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\042\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\043\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \000\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\000\000\000\000\000\000\000\000\000\000\044\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\000\000\000\000\000\000\ + \000\000\023\000\000\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\000\000\050\000\ + \000\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\000\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\255\255\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\255\255\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\255\255"; + Lexing.lex_check = + "\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\000\000\000\000\028\000\000\000\000\000\025\000\061\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\000\000\000\000\009\000\013\000\019\000\000\000\012\000\ + \000\000\000\000\000\000\020\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\004\000\031\000\ + \009\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\032\000\000\000\034\000\035\000\ + \036\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ + \000\000\000\000\000\000\000\000\000\000\000\000\003\000\037\000\ + \013\000\021\000\021\000\021\000\021\000\021\000\021\000\021\000\ + \021\000\021\000\021\000\039\000\040\000\041\000\003\000\003\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\027\000\022\000\030\000\038\000\044\000\045\000\027\000\ + \046\000\047\000\048\000\053\000\054\000\055\000\027\000\056\000\ + \057\000\063\000\255\255\030\000\030\000\255\255\255\255\058\000\ + \255\255\255\255\058\000\255\255\255\255\027\000\027\000\255\255\ + \255\255\255\255\038\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\058\000\ + \255\255\255\255\255\255\255\255\022\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \000\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\027\000\255\255\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \022\000\022\000\022\000\022\000\022\000\022\000\022\000\022\000\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \033\000\255\255\255\255\255\255\255\255\255\255\033\000\022\000\ + \255\255\255\255\255\255\255\255\255\255\033\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\033\000\033\000\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\022\000\ + \023\000\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \022\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\033\000\058\000\255\255\255\255\ + \023\000\255\255\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \255\255\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \024\000\023\000\023\000\023\000\023\000\023\000\023\000\023\000\ + \023\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\255\255\255\255\255\255\255\255\ + \024\000\255\255\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \255\255\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \042\000\024\000\024\000\024\000\024\000\024\000\024\000\024\000\ + \024\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\255\255\255\255\255\255\255\255\ + \042\000\255\255\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \255\255\042\000\042\000\042\000\042\000\042\000\042\000\042\000\ + \042\000\043\000\255\255\255\255\255\255\255\255\255\255\043\000\ + \255\255\255\255\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\255\255\255\255\255\255\ + \255\255\043\000\255\255\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\255\255\051\000\ + \255\255\255\255\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\255\255\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\051\000\043\000\043\000\043\000\043\000\043\000\043\000\ + \043\000\043\000\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\051\000\051\000\051\000\ + \051\000\051\000\051\000\051\000\051\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\051\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\051\000\255\255\255\255\255\255\ + \255\255\255\255\255\255\255\255\255\255\051\000"; + Lexing.lex_base_code = + ""; + Lexing.lex_backtrk_code = + ""; + Lexing.lex_default_code = + ""; + Lexing.lex_trans_code = + ""; + Lexing.lex_check_code = + ""; + Lexing.lex_code = + ""; +} + +let rec token lexbuf = + __ocaml_lex_token_rec lexbuf 0 +and __ocaml_lex_token_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 74 "pitlexertotex.mll" + ( print_string " $\\\\\n$"; token lexbuf ) +# 451 "pitlexertotex.ml" + + | 1 -> +# 76 "pitlexertotex.mll" + ( print_string "\\ "; token lexbuf ) +# 456 "pitlexertotex.ml" + + | 2 -> +# 78 "pitlexertotex.mll" + ( print_string "\\qquad\\qquad "; token lexbuf ) +# 461 "pitlexertotex.ml" + + | 3 -> +# 80 "pitlexertotex.mll" + ( token lexbuf ) +# 466 "pitlexertotex.ml" + + | 4 -> +# 82 "pitlexertotex.mll" + ( + let s = Lexing.lexeme lexbuf in + begin + try + let k = Hashtbl.find kinds s in + print_string (k ^ "{"); + print_sanitize s; + print_string "}" + with Not_found -> + print_string "\\var{"; + print_sanitize s; + print_string "}" + end; + token lexbuf + ) +# 485 "pitlexertotex.ml" + + | 5 -> +# 98 "pitlexertotex.mll" + ( print_string "\\textit{"; + print_sanitize (Lexing.lexeme lexbuf); + print_string "}"; token lexbuf ) +# 492 "pitlexertotex.ml" + + | 6 -> +# 102 "pitlexertotex.mll" + ( print_string (Lexing.lexeme lexbuf); token lexbuf ) +# 497 "pitlexertotex.ml" + + | 7 -> +# 103 "pitlexertotex.mll" + ( + print_string "\\textit{(*"; + comment lexbuf + ) +# 505 "pitlexertotex.ml" + + | 8 -> +# 107 "pitlexertotex.mll" + ( print_string ", "; token lexbuf ) +# 510 "pitlexertotex.ml" + + | 9 -> +# 108 "pitlexertotex.mll" + ( print_string "("; token lexbuf ) +# 515 "pitlexertotex.ml" + + | 10 -> +# 109 "pitlexertotex.mll" + ( print_string ")"; token lexbuf ) +# 520 "pitlexertotex.ml" + + | 11 -> +# 110 "pitlexertotex.mll" + ( print_string "["; token lexbuf ) +# 525 "pitlexertotex.ml" + + | 12 -> +# 111 "pitlexertotex.mll" + ( print_string "]"; token lexbuf ) +# 530 "pitlexertotex.ml" + + | 13 -> +# 112 "pitlexertotex.mll" + ( print_string "\\{"; token lexbuf ) +# 535 "pitlexertotex.ml" + + | 14 -> +# 113 "pitlexertotex.mll" + ( print_string "\\}"; token lexbuf ) +# 540 "pitlexertotex.ml" + + | 15 -> +# 114 "pitlexertotex.mll" + ( print_string "\\mid"; token lexbuf ) +# 545 "pitlexertotex.ml" + + | 16 -> +# 115 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\vee" else "\\mid\\mid"); token lexbuf ) +# 550 "pitlexertotex.ml" + + | 17 -> +# 116 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\wedge" else "\\ \\&\\&\\ "); token lexbuf ) +# 555 "pitlexertotex.ml" + + | 18 -> +# 117 "pitlexertotex.mll" + ( print_string ";"; token lexbuf ) +# 560 "pitlexertotex.ml" + + | 19 -> +# 118 "pitlexertotex.mll" + ( print_string "!"; token lexbuf ) +# 565 "pitlexertotex.ml" + + | 20 -> +# 119 "pitlexertotex.mll" + ( print_string " = "; token lexbuf ) +# 570 "pitlexertotex.ml" + + | 21 -> +# 120 "pitlexertotex.mll" + ( print_string "/"; token lexbuf ) +# 575 "pitlexertotex.ml" + + | 22 -> +# 121 "pitlexertotex.mll" + ( print_string "."; token lexbuf ) +# 580 "pitlexertotex.ml" + + | 23 -> +# 122 "pitlexertotex.mll" + ( print_string "*"; token lexbuf ) +# 585 "pitlexertotex.ml" + + | 24 -> +# 123 "pitlexertotex.mll" + ( print_string "{:}"; token lexbuf ) +# 590 "pitlexertotex.ml" + + | 25 -> +# 124 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\rightarrow" else "\\ {-}{>}\\ "); token lexbuf ) +# 595 "pitlexertotex.ml" + + | 26 -> +# 125 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\leq" else "\\ {<}{=}\\ "); token lexbuf ) +# 600 "pitlexertotex.ml" + + | 27 -> +# 126 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\leftrightarrow" else "\\ {<}{-}{>}\\ "); token lexbuf ) +# 605 "pitlexertotex.ml" + + | 28 -> +# 127 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\Leftrightarrow" else "\\ {<}{=}{>}\\ "); token lexbuf ) +# 610 "pitlexertotex.ml" + + | 29 -> +# 128 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\neq" else "\\ {<}{>}\\ "); token lexbuf ) +# 615 "pitlexertotex.ml" + + | 30 -> +# 129 "pitlexertotex.mll" + ( print_string (if !nice_tex then "\\Longrightarrow" else "\\ {=}{=}{>}\\ "); token lexbuf ) +# 620 "pitlexertotex.ml" + + | 31 -> +# 130 "pitlexertotex.mll" + ( print_string "\\kwl{inj\\textbf{-}event}"; token lexbuf ) +# 625 "pitlexertotex.ml" + + | 32 -> +# 131 "pitlexertotex.mll" + ( print_string "$\n\\end{tabbing}\n" ) +# 630 "pitlexertotex.ml" + + | 33 -> +# 132 "pitlexertotex.mll" + ( input_error "Illegal character" (extent lexbuf) ) +# 635 "pitlexertotex.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_token_rec lexbuf __ocaml_lex_state + +and comment lexbuf = + __ocaml_lex_comment_rec lexbuf 58 +and __ocaml_lex_comment_rec lexbuf __ocaml_lex_state = + match Lexing.engine __ocaml_lex_tables __ocaml_lex_state lexbuf with + | 0 -> +# 135 "pitlexertotex.mll" + ( print_string "*)}"; + token lexbuf ) +# 647 "pitlexertotex.ml" + + | 1 -> +# 138 "pitlexertotex.mll" + ( print_string "}$\\\\\n$\\textit{"; comment lexbuf ) +# 652 "pitlexertotex.ml" + + | 2 -> +# 139 "pitlexertotex.mll" + ( print_string "}$\n\\end{tabbing}\n" ) +# 657 "pitlexertotex.ml" + + | 3 -> +# 140 "pitlexertotex.mll" + ( print_sanitize (Lexing.lexeme lexbuf); comment lexbuf ) +# 662 "pitlexertotex.ml" + + | __ocaml_lex_state -> lexbuf.Lexing.refill_buff lexbuf; __ocaml_lex_comment_rec lexbuf __ocaml_lex_state + +;; + +# 142 "pitlexertotex.mll" + + +let convert filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + print_preamble(); + print_string "\\begin{tabbing}\n$"; + token lexbuf; + close_in ic + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +let converttotex f = + let (d,_,_) = parse f in + init_kinds d; + convert f + + +# 688 "pitlexertotex.ml" diff --git a/preinstallTTool/linux/proverif/src/pitlexertotex.mll b/preinstallTTool/linux/proverif/src/pitlexertotex.mll new file mode 100644 index 0000000000000000000000000000000000000000..70cf0760313067fb19f7210084130c432f871f02 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitlexertotex.mll @@ -0,0 +1,160 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +{ +open Parsing_helper +open Pitptree +open Fileprint + +let kinds = Hashtbl.create 7 + +let init_kinds d = + Hashtbl.iter (fun keyw _ -> Hashtbl.add kinds keyw "\\kwl") Pitlexer.keyword_table; + Hashtbl.add kinds "channel" "\\kwt"; + Hashtbl.add kinds "bitstring" "\\kwt"; + Hashtbl.add kinds "bool" "\\kwt"; + Hashtbl.add kinds "true" "\\kwc"; + Hashtbl.add kinds "false" "\\kwc"; + List.iter (function + TTypeDecl(t,_) -> Hashtbl.add kinds t "\\kwt" + | TFunDecl((f,_),_,_,_) -> Hashtbl.add kinds f "\\kwf" + | TReducFail((f,_),_,_,_,_) -> Hashtbl.add kinds f "\\kwf" + | TReduc(((_,(PFunApp((f,_),_),_),_)::_),_) -> Hashtbl.add kinds f "\\kwf" + | TPredDecl((p,_),_,_) -> Hashtbl.add kinds p "\\kwp" + | TFree((c,_),_,_) -> Hashtbl.add kinds c "\\kwc" + | TConstDecl((c,_),_,_) -> Hashtbl.add kinds c "\\kwc" + | TTableDecl((t,_),_) -> Hashtbl.add kinds t "\\kwt" + | TEventDecl((e,_),_) -> Hashtbl.add kinds e "\\kwe" + | TLetFun((f,_),_,_) -> Hashtbl.add kinds f "\\kwf" + | _ -> ()) d + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + let ptree = + try + Pitparser.all Pitlexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +} + +rule token = parse + "\010" | "\013" | "\013\010" + { print_string " $\\\\\n$"; token lexbuf } +| ' ' + { print_string "\\ "; token lexbuf } +| '\009' + { print_string "\\qquad\\qquad "; token lexbuf } +| [ '\012' ] + + { token lexbuf } +| [ 'a'-'z' 'A'-'Z' ] (( [ 'a'-'z' 'A'-'Z' '_' '\192'-'\214' '\216'-'\246' '\248'-'\255' '\'' '0'-'9' ] )*) + { + let s = Lexing.lexeme lexbuf in + begin + try + let k = Hashtbl.find kinds s in + print_string (k ^ "{"); + print_sanitize s; + print_string "}" + with Not_found -> + print_string "\\var{"; + print_sanitize s; + print_string "}" + end; + token lexbuf + } +| '\"' (( [ '!' '#'-'[' ']'-'~' '\192'-'\214' '\216'-'\246' '\248'-'\255' ] )*) '\"' + { print_string "\\textit{"; + print_sanitize (Lexing.lexeme lexbuf); + print_string "}"; token lexbuf } +| ([ '0'-'9' ]) + + { print_string (Lexing.lexeme lexbuf); token lexbuf } +| "(*" { + print_string "\\textit{(*"; + comment lexbuf + } +| ',' (' ' *) { print_string ", "; token lexbuf } +| '(' { print_string "("; token lexbuf } +| ')' { print_string ")"; token lexbuf } +| '[' { print_string "["; token lexbuf } +| ']' { print_string "]"; token lexbuf } +| '{' { print_string "\\{"; token lexbuf } +| '}' { print_string "\\}"; token lexbuf } +| (' ' *) '|' (' ' *) { print_string "\\mid"; token lexbuf } +| (' ' *) "||" (' ' *) { print_string (if !nice_tex then "\\vee" else "\\mid\\mid"); token lexbuf } +| (' ' *) "&&" (' ' *) { print_string (if !nice_tex then "\\wedge" else "\\ \\&\\&\\ "); token lexbuf } +| ';' { print_string ";"; token lexbuf } +| '!' { print_string "!"; token lexbuf } +| (' ' *) '=' (' ' *) { print_string " = "; token lexbuf } +| '/' { print_string "/"; token lexbuf } +| '.' { print_string "."; token lexbuf } +| '*' { print_string "*"; token lexbuf } +| ':' { print_string "{:}"; token lexbuf } +| (' ' *) "->" (' ' *) { print_string (if !nice_tex then "\\rightarrow" else "\\ {-}{>}\\ "); token lexbuf } +| (' ' *) "<=" (' ' *) { print_string (if !nice_tex then "\\leq" else "\\ {<}{=}\\ "); token lexbuf } +| (' ' *) "<->" (' ' *) { print_string (if !nice_tex then "\\leftrightarrow" else "\\ {<}{-}{>}\\ "); token lexbuf } +| (' ' *) "<=>" (' ' *) { print_string (if !nice_tex then "\\Leftrightarrow" else "\\ {<}{=}{>}\\ "); token lexbuf } +| (' ' *) "<>" (' ' *) { print_string (if !nice_tex then "\\neq" else "\\ {<}{>}\\ "); token lexbuf } +| (' ' *) "==>" (' ' *) { print_string (if !nice_tex then "\\Longrightarrow" else "\\ {=}{=}{>}\\ "); token lexbuf } +| "inj-event" { print_string "\\kwl{inj\\textbf{-}event}"; token lexbuf } +| eof { print_string "$\n\\end{tabbing}\n" } +| _ { input_error "Illegal character" (extent lexbuf) } + +and comment = parse +| "*)" { print_string "*)}"; + token lexbuf } +| "\010" | "\013" | "\013\010" + { print_string "}$\\\\\n$\\textit{"; comment lexbuf } +| eof { print_string "}$\n\\end{tabbing}\n" } +| _ { print_sanitize (Lexing.lexeme lexbuf); comment lexbuf } + +{ + +let convert filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + print_preamble(); + print_string "\\begin{tabbing}\n$"; + token lexbuf; + close_in ic + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +let converttotex f = + let (d,_,_) = parse f in + init_kinds d; + convert f + +} diff --git a/preinstallTTool/linux/proverif/src/pitparser.cmi b/preinstallTTool/linux/proverif/src/pitparser.cmi new file mode 100644 index 0000000000000000000000000000000000000000..ed697bc86b298270a339d9cca76c3e4a8167275b Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitparser.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitparser.cmx b/preinstallTTool/linux/proverif/src/pitparser.cmx new file mode 100644 index 0000000000000000000000000000000000000000..3512f3733017eb68a669c81f4fbd3f1c4bac87dd Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitparser.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pitparser.ml b/preinstallTTool/linux/proverif/src/pitparser.ml new file mode 100644 index 0000000000000000000000000000000000000000..dcb2de5c0b74f69f5bd6bec881b3bc6b6a2ea50d --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitparser.ml @@ -0,0 +1,2852 @@ +type token = + | CHOICE + | STAR + | COMMA + | LPAREN + | RPAREN + | LBRACKET + | RBRACKET + | BAR + | SEMI + | NEW + | OUT + | IN + | IDENT of (Pitptree.ident) + | STRING of (Pitptree.ident) + | INT of (int) + | REPL + | IF + | THEN + | ELSE + | EQUAL + | FUN + | EQUATION + | REDUCTION + | PREDICATE + | PROCESS + | SLASH + | DOT + | EOF + | LET + | QUERY + | BEFORE + | PUTBEGIN + | NONINTERF + | EVENT + | NOT + | ELIMTRUE + | FREE + | SUCHTHAT + | CLAUSES + | RED + | EQUIV + | EQUIVEQ + | WEDGE + | DIFF + | COLON + | NOUNIF + | PHASE + | AMONG + | WEAKSECRET + | PARAM + | ORTEXT + | FAIL + | TYPE + | SET + | FORALL + | CONST + | INJEVENT + | OR + | CHANNEL + | LETFUN + | DEFINE + | EXPAND + | YIELD + | LEQ + | PROBA + | LBRACE + | RBRACE + | PROOF + | EQUIVALENCE + | OTHERWISE + | TABLE + | INSERT + | GET + +open Parsing;; +let _ = parse_error;; +# 2 "pitparser.mly" +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +# 31 "pitparser.mly" + +open Parsing_helper +open Ptree +open Pitptree +exception Syntax + +# 114 "pitparser.ml" +let yytransl_const = [| + 257 (* CHOICE *); + 258 (* STAR *); + 259 (* COMMA *); + 260 (* LPAREN *); + 261 (* RPAREN *); + 262 (* LBRACKET *); + 263 (* RBRACKET *); + 264 (* BAR *); + 265 (* SEMI *); + 266 (* NEW *); + 267 (* OUT *); + 268 (* IN *); + 272 (* REPL *); + 273 (* IF *); + 274 (* THEN *); + 275 (* ELSE *); + 276 (* EQUAL *); + 277 (* FUN *); + 278 (* EQUATION *); + 279 (* REDUCTION *); + 280 (* PREDICATE *); + 281 (* PROCESS *); + 282 (* SLASH *); + 283 (* DOT *); + 0 (* EOF *); + 284 (* LET *); + 285 (* QUERY *); + 286 (* BEFORE *); + 287 (* PUTBEGIN *); + 288 (* NONINTERF *); + 289 (* EVENT *); + 290 (* NOT *); + 291 (* ELIMTRUE *); + 292 (* FREE *); + 293 (* SUCHTHAT *); + 294 (* CLAUSES *); + 295 (* RED *); + 296 (* EQUIV *); + 297 (* EQUIVEQ *); + 298 (* WEDGE *); + 299 (* DIFF *); + 300 (* COLON *); + 301 (* NOUNIF *); + 302 (* PHASE *); + 303 (* AMONG *); + 304 (* WEAKSECRET *); + 305 (* PARAM *); + 306 (* ORTEXT *); + 307 (* FAIL *); + 308 (* TYPE *); + 309 (* SET *); + 310 (* FORALL *); + 311 (* CONST *); + 312 (* INJEVENT *); + 313 (* OR *); + 314 (* CHANNEL *); + 315 (* LETFUN *); + 316 (* DEFINE *); + 317 (* EXPAND *); + 318 (* YIELD *); + 319 (* LEQ *); + 320 (* PROBA *); + 321 (* LBRACE *); + 322 (* RBRACE *); + 323 (* PROOF *); + 324 (* EQUIVALENCE *); + 325 (* OTHERWISE *); + 326 (* TABLE *); + 327 (* INSERT *); + 328 (* GET *); + 0|] + +let yytransl_block = [| + 269 (* IDENT *); + 270 (* STRING *); + 271 (* INT *); + 0|] + +let yylhs = "\255\255\ +\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\002\000\002\000\002\000\ +\002\000\002\000\002\000\002\000\002\000\001\000\001\000\022\000\ +\022\000\022\000\022\000\022\000\022\000\022\000\022\000\023\000\ +\023\000\018\000\018\000\003\000\003\000\008\000\008\000\024\000\ +\024\000\024\000\013\000\013\000\011\000\011\000\025\000\025\000\ +\005\000\005\000\004\000\004\000\026\000\026\000\020\000\020\000\ +\020\000\020\000\020\000\020\000\020\000\020\000\020\000\020\000\ +\028\000\028\000\027\000\027\000\029\000\029\000\016\000\016\000\ +\015\000\015\000\030\000\030\000\030\000\017\000\017\000\017\000\ +\017\000\017\000\017\000\017\000\017\000\017\000\017\000\017\000\ +\017\000\017\000\017\000\017\000\017\000\017\000\017\000\033\000\ +\033\000\031\000\031\000\034\000\034\000\034\000\034\000\032\000\ +\032\000\014\000\014\000\014\000\014\000\037\000\037\000\038\000\ +\038\000\035\000\035\000\035\000\035\000\035\000\035\000\035\000\ +\035\000\040\000\040\000\036\000\036\000\041\000\041\000\041\000\ +\041\000\039\000\039\000\042\000\042\000\019\000\019\000\043\000\ +\043\000\044\000\044\000\006\000\006\000\007\000\007\000\009\000\ +\009\000\045\000\045\000\045\000\045\000\021\000\021\000\010\000\ +\010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ +\010\000\010\000\010\000\010\000\010\000\010\000\010\000\010\000\ +\010\000\010\000\010\000\010\000\010\000\047\000\047\000\051\000\ +\051\000\048\000\048\000\049\000\049\000\049\000\049\000\049\000\ +\052\000\052\000\050\000\050\000\012\000\012\000\012\000\012\000\ +\012\000\012\000\012\000\012\000\012\000\012\000\012\000\012\000\ +\012\000\012\000\012\000\012\000\053\000\053\000\046\000\046\000\ +\000\000\000\000" + +let yylen = "\002\000\ +\005\000\010\000\012\000\005\000\007\000\005\000\004\000\007\000\ +\008\000\005\000\007\000\006\000\009\000\006\000\009\000\006\000\ +\006\000\006\000\004\000\006\000\004\000\006\000\004\000\004\000\ +\006\000\004\000\005\000\004\000\005\000\006\000\004\000\004\000\ +\007\000\003\000\009\000\007\000\000\000\004\000\005\000\001\000\ +\001\000\001\000\001\000\001\000\001\000\001\000\001\000\001\000\ +\002\000\001\000\003\000\003\000\000\000\003\000\001\000\000\000\ +\002\000\003\000\005\000\003\000\001\000\000\000\003\000\000\000\ +\001\000\001\000\001\000\000\000\003\000\001\000\001\000\004\000\ +\006\000\001\000\003\000\003\000\004\000\003\000\003\000\003\000\ +\003\000\001\000\001\000\000\000\005\000\001\000\003\000\001\000\ +\003\000\001\000\001\000\004\000\004\000\004\000\001\000\006\000\ +\006\000\003\000\003\000\004\000\003\000\003\000\006\000\004\000\ +\004\000\004\000\003\000\003\000\005\000\002\000\006\000\003\000\ +\001\000\001\000\000\000\006\000\004\000\005\000\003\000\001\000\ +\000\000\006\000\006\000\002\000\006\000\002\000\000\000\002\000\ +\000\000\004\000\006\000\001\000\003\000\005\000\002\000\002\000\ +\006\000\003\000\001\000\001\000\000\000\006\000\004\000\005\000\ +\003\000\001\000\000\000\003\000\005\000\003\000\001\000\003\000\ +\000\000\006\000\005\000\005\000\004\000\006\000\004\000\004\000\ +\006\000\003\000\001\000\003\000\003\000\004\000\003\000\003\000\ +\001\000\004\000\002\000\005\000\001\000\001\000\006\000\005\000\ +\007\000\007\000\004\000\007\000\004\000\007\000\006\000\007\000\ +\009\000\003\000\006\000\003\000\003\000\002\000\000\000\002\000\ +\000\000\002\000\000\000\001\000\003\000\003\000\004\000\002\000\ +\003\000\001\000\001\000\000\000\004\000\006\000\001\000\003\000\ +\003\000\004\000\003\000\003\000\007\000\004\000\006\000\006\000\ +\008\000\006\000\008\000\003\000\003\000\001\000\001\000\000\000\ +\002\000\002\000" + +let yydefred = "\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\225\000\000\000\226\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\071\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\114\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\083\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\034\000\000\000\000\000\000\000\000\000\124\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\043\000\ +\047\000\040\000\041\000\042\000\046\000\044\000\045\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\173\000\000\000\000\000\000\000\000\000\000\000\174\000\000\000\ +\000\000\000\000\000\000\065\000\066\000\000\000\000\000\067\000\ +\063\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\061\000\000\000\000\000\000\000\108\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\021\000\000\000\000\000\000\000\099\000\000\000\089\000\ +\000\000\000\000\000\000\023\000\087\000\000\000\007\000\000\000\ +\026\000\000\000\000\000\080\000\000\000\000\000\000\000\000\000\ +\000\000\031\000\000\000\076\000\000\000\150\000\054\000\000\000\ +\152\000\000\000\000\000\000\000\000\000\167\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\140\000\128\000\ +\000\000\000\000\000\000\000\000\019\000\024\000\000\000\000\000\ +\000\000\000\000\000\000\032\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\028\000\ +\000\000\049\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\171\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\038\000\000\000\ +\000\000\000\000\052\000\006\000\000\000\004\000\000\000\000\000\ +\010\000\000\000\000\000\000\000\112\000\000\000\000\000\000\000\ +\120\000\000\000\000\000\000\000\092\000\093\000\104\000\100\000\ +\105\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\081\000\072\000\000\000\077\000\000\000\000\000\000\000\000\000\ +\000\000\166\000\000\000\136\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\027\000\001\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\223\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\029\000\051\000\000\000\168\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\203\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\188\000\189\000\000\000\000\000\000\000\039\000\ +\000\000\069\000\000\000\000\000\000\000\000\000\012\000\000\000\ +\000\000\000\000\109\000\000\000\059\000\000\000\000\000\020\000\ +\085\000\022\000\000\000\025\000\000\000\149\000\030\000\000\000\ +\000\000\133\000\000\000\000\000\000\000\138\000\000\000\000\000\ +\000\000\000\000\018\000\016\000\017\000\000\000\000\000\000\000\ +\000\000\220\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\014\000\000\000\209\000\000\000\000\000\000\000\000\000\ +\057\000\000\000\000\000\000\000\000\000\170\000\000\000\000\000\ +\000\000\000\000\198\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\161\000\158\000\000\000\000\000\ +\103\000\000\000\000\000\096\000\000\000\097\000\008\000\073\000\ +\033\000\000\000\000\000\000\000\000\000\146\000\130\000\000\000\ +\126\000\123\000\122\000\125\000\005\000\000\000\000\000\221\000\ +\000\000\205\000\000\000\000\000\000\000\210\000\000\000\036\000\ +\011\000\058\000\000\000\000\000\000\000\172\000\000\000\176\000\ +\197\000\201\000\199\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\009\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\134\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\175\000\000\000\000\000\000\000\000\000\000\000\ +\187\000\183\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\013\000\118\000\000\000\131\000\000\000\000\000\137\000\015\000\ +\206\000\000\000\000\000\000\000\000\000\035\000\178\000\177\000\ +\182\000\180\000\000\000\000\000\184\000\000\000\000\000\002\000\ +\116\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\144\000\000\000\000\000\000\000\185\000\003\000\000\000\ +\142\000\000\000\156\000\000\000\000\000\000\000\000\000\154\000" + +let yydgoto = "\003\000\ +\029\000\030\000\097\000\206\000\207\000\078\002\036\000\070\000\ +\034\000\202\000\217\000\133\001\218\000\078\000\051\000\056\000\ +\108\000\184\000\066\000\138\000\072\000\185\000\186\000\154\001\ +\035\000\208\000\139\000\140\000\057\000\053\000\109\000\088\001\ +\110\000\089\001\021\001\022\001\208\001\160\000\013\002\023\001\ +\014\002\068\000\073\000\123\002\157\000\134\001\171\001\040\002\ +\161\001\162\001\077\002\163\001\135\001" + +let yysindex = "\253\001\ +\025\005\025\005\000\000\022\255\018\255\018\255\063\255\184\255\ +\052\255\042\000\056\000\246\000\183\255\074\000\061\255\008\255\ +\080\000\074\000\096\000\110\000\074\000\074\000\125\000\135\000\ +\162\000\190\000\205\255\202\000\000\000\038\255\000\000\129\000\ +\247\000\006\001\185\000\006\001\185\000\075\000\038\000\020\001\ +\200\002\016\001\048\255\025\001\152\255\029\001\059\001\067\001\ +\070\001\073\001\066\001\212\004\092\001\105\000\093\001\077\001\ +\104\001\009\000\103\001\045\005\108\001\185\000\057\255\111\001\ +\000\000\118\001\222\255\131\001\132\001\094\001\126\001\025\005\ +\185\000\043\255\129\001\139\001\136\001\120\001\138\001\006\001\ +\006\001\148\001\127\001\147\001\078\000\175\001\176\001\149\001\ +\083\001\178\001\135\004\135\004\016\255\142\001\174\001\074\000\ +\160\001\184\001\153\000\162\001\038\001\016\255\163\001\247\000\ +\135\004\200\002\189\001\124\255\190\001\000\000\188\001\200\002\ +\016\255\179\001\169\001\180\001\200\002\200\002\200\002\200\002\ +\160\255\025\005\200\002\200\002\200\002\200\002\200\002\160\255\ +\214\001\206\001\025\005\206\001\016\255\025\005\200\002\025\005\ +\185\000\024\255\217\001\000\000\185\000\016\255\185\000\185\000\ +\185\000\025\005\185\000\185\000\185\000\126\001\074\000\016\255\ +\181\001\218\001\000\000\224\000\046\255\165\002\208\001\000\000\ +\210\001\165\002\026\255\025\005\025\005\201\001\205\001\106\000\ +\016\255\025\005\247\000\124\005\016\255\016\255\025\005\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\170\001\ +\083\001\229\001\016\255\135\004\230\001\237\001\238\001\243\001\ +\000\000\149\004\124\005\124\000\249\001\235\001\000\000\250\001\ +\254\001\008\000\108\004\000\000\000\000\009\002\012\002\000\000\ +\000\000\010\002\025\005\185\000\025\005\185\000\014\002\025\005\ +\018\002\000\000\149\255\111\000\200\002\000\000\018\000\032\002\ +\037\002\200\002\074\000\074\000\036\002\172\001\041\002\227\003\ +\021\002\000\000\006\002\244\002\136\255\000\000\244\002\000\000\ +\185\000\004\002\025\002\000\000\000\000\049\002\000\000\070\005\ +\000\000\055\255\185\000\000\000\050\002\016\002\100\000\244\004\ +\028\002\000\000\031\000\000\000\005\004\000\000\000\000\006\001\ +\000\000\185\000\185\000\185\000\061\255\000\000\053\002\064\002\ +\165\002\065\002\079\002\073\002\084\002\086\002\000\000\000\000\ +\165\002\093\002\198\255\081\002\000\000\000\000\025\005\025\005\ +\083\002\085\002\006\001\000\000\115\002\117\002\124\005\111\002\ +\121\002\124\005\124\000\122\002\255\004\125\002\126\002\000\000\ +\025\005\000\000\083\001\127\002\156\000\131\002\124\005\124\005\ +\124\005\027\255\000\000\206\003\015\001\119\255\124\005\090\002\ +\118\002\156\255\130\002\139\002\154\002\135\004\000\000\013\000\ +\124\002\016\255\000\000\000\000\034\255\000\000\062\255\006\001\ +\000\000\142\002\025\005\200\002\000\000\170\002\144\002\182\002\ +\000\000\146\002\247\000\125\003\000\000\000\000\000\000\000\000\ +\000\000\149\002\025\005\193\002\025\005\176\002\025\005\185\000\ +\000\000\000\000\155\002\000\000\025\005\178\002\005\004\005\004\ +\005\004\000\000\165\002\000\000\202\002\205\002\165\002\192\002\ +\165\002\173\002\213\002\173\002\025\005\000\000\000\000\025\005\ +\025\005\197\002\207\002\124\005\232\255\224\002\000\000\131\002\ +\124\005\244\003\199\002\210\002\124\005\124\005\025\005\124\005\ +\124\005\124\005\172\002\216\002\000\000\000\000\221\002\000\000\ +\096\255\208\002\082\000\250\000\254\002\247\002\135\004\148\255\ +\006\003\005\003\000\000\015\001\016\255\149\000\124\005\124\005\ +\124\005\135\004\000\000\000\000\124\005\015\001\004\003\000\000\ +\016\255\000\000\018\255\018\255\246\002\135\004\000\000\021\003\ +\200\002\255\002\000\000\017\003\000\000\200\002\018\003\000\000\ +\000\000\000\000\025\005\000\000\114\002\000\000\000\000\025\005\ +\031\003\000\000\195\000\030\003\165\002\000\000\027\003\022\003\ +\026\255\022\003\000\000\000\000\000\000\025\005\124\005\019\001\ +\124\005\000\000\248\002\039\003\124\005\124\005\124\005\038\002\ +\019\003\000\000\170\000\000\000\208\004\025\005\025\005\025\005\ +\000\000\053\003\016\255\124\005\015\001\000\000\135\004\214\255\ +\016\255\015\001\000\000\061\003\037\002\158\003\177\003\062\003\ +\004\003\063\003\069\003\034\000\000\000\000\000\025\005\230\255\ +\000\000\252\001\200\002\000\000\212\004\000\000\000\000\000\000\ +\000\000\165\002\045\003\068\003\070\003\000\000\000\000\073\003\ +\000\000\000\000\000\000\000\000\000\000\074\005\124\005\000\000\ +\016\255\000\000\049\001\017\004\192\004\000\000\023\003\000\000\ +\000\000\000\000\130\002\212\002\071\003\000\000\135\004\000\000\ +\000\000\000\000\000\000\135\004\135\004\130\002\130\002\045\255\ +\061\255\078\003\000\000\025\005\018\000\064\003\084\003\165\002\ +\076\003\000\000\165\002\025\005\215\002\091\003\124\005\124\005\ +\124\005\025\005\000\000\130\002\130\002\004\003\214\255\214\255\ +\000\000\000\000\135\004\124\005\089\003\006\001\185\000\025\005\ +\000\000\000\000\018\000\000\000\107\003\165\002\000\000\000\000\ +\000\000\124\005\208\004\060\003\092\003\000\000\000\000\000\000\ +\000\000\000\000\004\003\204\004\000\000\093\003\216\004\000\000\ +\000\000\195\000\117\003\208\004\124\005\124\005\089\003\025\005\ +\185\000\000\000\195\000\208\004\208\004\000\000\000\000\246\254\ +\000\000\061\255\000\000\185\000\078\005\185\000\246\254\000\000" + +let yyrindex = "\000\000\ +\039\255\123\004\000\000\000\000\071\001\071\001\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\187\002\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\105\003\000\000\105\003\000\000\105\003\000\000\000\000\ +\131\003\000\000\124\001\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\194\255\111\003\159\255\000\000\000\000\ +\112\003\000\000\000\000\000\000\000\000\135\003\076\005\000\000\ +\000\000\000\000\000\000\134\003\040\000\000\000\000\000\004\000\ +\000\000\119\003\000\000\000\000\000\000\000\000\000\000\105\003\ +\105\003\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\143\003\000\000\000\000\000\000\ +\000\000\087\004\000\000\000\000\000\000\143\003\000\000\147\003\ +\000\000\000\000\023\000\159\003\000\000\000\000\210\004\131\003\ +\000\000\000\000\000\000\000\000\131\003\000\000\131\003\000\000\ +\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\004\000\000\000\143\003\004\000\000\000\004\000\ +\000\000\161\003\000\000\000\000\135\003\000\000\000\000\000\000\ +\000\000\004\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\239\255\000\000\164\003\000\000\000\000\ +\000\000\164\003\000\000\004\000\004\000\000\000\000\000\000\000\ +\000\000\004\000\147\003\000\000\143\003\143\003\004\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\029\255\106\003\143\003\000\000\000\000\000\000\000\000\234\002\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\166\003\000\000\ +\000\000\000\000\004\000\000\000\004\000\000\000\000\000\004\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\168\003\000\000\ +\195\255\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\167\000\133\005\106\002\000\000\102\005\000\000\ +\000\000\159\255\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\179\000\000\000\000\000\ +\204\255\000\000\169\004\000\000\160\000\000\000\000\000\105\003\ +\000\000\000\000\000\000\000\000\187\002\000\000\000\000\000\000\ +\164\003\000\000\228\001\000\000\172\003\000\000\000\000\000\000\ +\000\000\000\000\119\003\000\000\000\000\000\000\004\000\004\000\ +\000\000\000\000\105\003\000\000\000\000\000\000\175\003\000\000\ +\215\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\004\000\000\000\000\000\000\000\000\000\137\003\000\000\000\000\ +\175\003\234\002\000\000\000\000\178\003\167\003\000\000\000\000\ +\000\000\010\003\084\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\098\255\000\000\141\255\105\003\ +\000\000\000\000\004\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\236\004\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\009\005\004\000\000\000\004\000\000\000\004\000\000\000\ +\000\000\000\000\000\000\000\000\004\000\000\000\241\255\251\255\ +\059\000\000\000\000\000\000\000\000\000\211\002\164\003\000\000\ +\000\000\051\001\000\000\051\001\004\000\000\000\000\000\004\000\ +\004\000\000\000\000\000\000\000\190\001\000\000\000\000\137\003\ +\175\003\000\000\000\000\000\000\000\000\000\000\004\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\211\000\ +\179\003\000\000\000\000\178\003\000\000\010\001\000\000\000\000\ +\175\003\000\000\000\000\000\000\175\003\178\003\042\003\000\000\ +\000\000\000\000\071\001\071\001\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\004\000\000\000\000\000\000\000\000\000\004\000\ +\000\000\000\000\181\003\000\000\000\000\000\000\000\000\119\003\ +\000\000\119\003\000\000\000\000\000\000\004\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\037\001\000\000\113\001\000\000\145\001\124\003\004\000\004\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\071\004\ +\000\000\000\000\000\000\000\000\169\255\082\003\114\003\000\000\ +\146\003\000\000\000\000\105\003\000\000\000\000\004\000\000\000\ +\000\000\184\003\000\000\000\000\141\005\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\089\002\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\084\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\084\000\084\000\194\003\ +\187\002\000\000\000\000\004\000\000\000\186\003\000\000\000\000\ +\000\000\000\000\000\000\004\000\000\000\000\000\000\000\000\000\ +\000\000\004\000\000\000\084\000\084\000\226\003\071\004\071\004\ +\000\000\000\000\000\000\000\000\007\004\105\003\000\000\004\000\ +\000\000\000\000\000\000\000\000\187\003\000\000\000\000\000\000\ +\000\000\000\000\193\001\137\002\169\002\000\000\000\000\000\000\ +\000\000\000\000\039\004\194\003\000\000\000\000\000\000\000\000\ +\000\000\000\000\188\003\241\001\000\000\000\000\007\004\004\000\ +\000\000\000\000\000\000\017\002\057\002\000\000\000\000\021\000\ +\000\000\187\002\000\000\000\000\000\000\000\000\120\000\000\000" + +let yygindex = "\000\000\ +\000\000\007\000\221\255\171\255\155\255\000\000\016\003\254\255\ +\024\003\201\255\035\004\095\255\016\000\099\255\001\001\119\001\ +\249\255\163\003\199\255\243\255\199\003\000\000\031\004\087\003\ +\001\000\151\003\088\004\174\255\000\000\000\000\171\001\000\000\ +\012\004\243\253\241\254\109\255\104\003\136\000\000\000\123\003\ +\161\254\000\000\225\253\108\002\000\000\229\254\212\254\103\254\ +\102\255\031\255\150\002\009\003\029\003" + +let yytablesize = 1704 +let yytable = "\067\000\ +\100\000\052\000\103\000\037\000\060\000\028\001\037\000\071\001\ +\031\000\123\001\045\001\225\000\176\001\154\000\026\001\080\000\ +\215\000\079\002\083\000\084\000\074\000\099\000\172\001\101\000\ +\050\000\055\000\251\000\059\000\204\000\157\001\057\001\077\000\ +\148\000\060\001\032\000\075\000\203\000\048\000\027\001\082\002\ +\254\000\065\001\179\001\145\000\166\000\167\000\158\000\246\000\ +\095\000\219\000\008\001\112\000\040\000\075\000\013\001\041\000\ +\075\002\104\001\122\002\156\000\141\000\042\000\091\000\037\000\ +\043\000\147\000\148\000\035\001\159\000\105\002\180\001\033\000\ +\014\001\205\000\145\000\038\000\148\000\076\000\155\000\044\000\ +\149\000\076\002\045\000\191\000\046\000\047\000\113\000\046\001\ +\047\001\158\001\124\002\113\000\006\001\210\000\048\000\076\000\ +\147\000\148\000\220\000\201\001\142\000\052\001\233\001\160\000\ +\148\000\092\000\037\000\048\000\069\000\220\001\230\000\149\000\ +\232\000\052\000\071\000\235\000\236\000\237\000\238\000\239\000\ +\052\000\049\000\164\001\250\000\160\000\117\001\221\000\248\000\ +\234\000\255\000\000\001\001\001\053\001\003\001\004\001\005\001\ +\138\001\244\000\059\001\075\000\247\000\248\001\249\000\123\000\ +\140\001\250\001\159\000\072\001\007\001\155\001\156\001\164\001\ +\002\001\124\000\075\000\123\000\070\001\166\001\100\001\169\001\ +\040\000\086\000\165\001\041\000\170\001\125\000\126\000\159\000\ +\105\001\042\000\029\001\030\001\107\000\097\002\098\002\083\001\ +\036\001\125\000\126\000\101\002\127\000\048\001\075\000\061\000\ +\115\000\086\000\062\000\044\000\197\000\016\002\045\000\241\001\ +\046\000\047\000\244\001\063\000\039\000\075\000\077\001\060\000\ +\079\001\158\000\091\000\060\000\251\001\060\000\075\000\116\000\ +\075\000\075\000\075\000\064\001\075\000\118\002\207\000\048\000\ +\064\000\076\001\092\001\078\001\091\000\070\001\081\001\159\000\ +\093\001\094\001\216\001\204\001\110\001\049\000\075\000\060\000\ +\039\002\065\000\217\001\224\001\225\001\070\001\227\001\228\001\ +\229\001\145\000\075\000\075\000\075\000\075\000\067\002\163\000\ +\146\000\162\000\055\002\142\001\111\001\112\001\113\001\130\001\ +\052\002\073\002\074\002\164\000\075\000\246\001\247\001\147\000\ +\148\000\163\000\114\002\162\000\133\000\089\000\175\001\070\001\ +\075\000\144\001\145\001\121\002\070\001\164\000\149\000\095\002\ +\096\002\095\000\157\000\095\000\037\000\095\000\086\001\095\000\ +\146\001\087\001\095\000\134\000\208\000\126\001\127\001\096\000\ +\085\002\104\000\095\000\087\002\181\001\055\000\055\000\157\000\ +\055\000\095\000\145\000\019\002\095\000\022\002\054\000\149\001\ +\049\002\105\000\139\001\027\002\028\002\029\002\075\000\245\001\ +\095\000\095\000\055\000\165\000\058\000\037\000\107\002\037\000\ +\147\000\148\000\036\002\252\001\184\001\075\000\102\000\095\000\ +\096\000\171\000\037\002\055\000\236\001\165\000\069\000\191\000\ +\191\000\183\001\197\001\191\000\079\000\191\000\191\000\191\000\ +\191\000\172\000\191\000\191\000\191\000\142\001\191\000\240\001\ +\108\001\192\001\189\001\194\001\081\000\196\001\191\000\191\000\ +\212\000\084\001\249\001\199\001\191\000\061\002\033\001\145\000\ +\034\001\233\000\082\000\144\001\145\001\155\000\000\002\061\001\ +\240\000\191\000\123\000\211\001\093\000\035\002\212\001\213\001\ +\062\001\085\000\146\001\041\002\124\000\147\000\148\000\063\001\ +\211\000\191\000\155\000\086\000\113\000\226\001\234\001\129\000\ +\125\000\126\000\191\000\191\000\149\000\091\002\092\002\093\002\ +\152\001\075\000\078\000\070\001\078\000\078\000\078\000\127\000\ +\078\000\098\000\100\002\098\000\212\000\098\000\087\000\098\000\ +\075\000\002\002\098\000\062\002\037\000\148\000\005\002\038\002\ +\108\002\061\000\078\000\148\000\062\000\142\001\144\001\145\001\ +\215\000\098\000\147\000\148\000\098\000\098\000\078\000\078\000\ +\078\000\007\002\088\000\116\002\117\002\146\001\009\002\011\002\ +\098\000\149\000\012\002\144\001\145\001\196\000\090\000\196\000\ +\050\002\207\000\064\000\207\000\021\002\207\000\207\000\098\000\ +\207\000\207\000\207\000\207\000\078\000\207\000\207\000\207\000\ +\207\000\207\000\207\000\065\000\031\002\032\002\033\002\070\002\ +\213\000\207\000\207\000\145\000\071\002\072\002\040\000\207\000\ +\243\000\041\000\245\000\054\002\237\001\001\000\002\000\042\000\ +\207\000\207\000\043\000\094\000\207\000\051\002\010\001\011\001\ +\012\001\147\000\148\000\096\000\200\000\142\001\200\000\207\000\ +\219\000\044\000\061\001\099\002\207\000\023\002\046\000\047\000\ +\149\000\106\000\224\000\160\001\111\000\207\000\207\000\229\000\ +\117\000\231\000\063\001\144\001\145\001\114\000\142\001\208\000\ +\208\000\208\000\102\002\208\000\208\000\048\000\208\000\208\000\ +\208\000\208\000\146\001\208\000\208\000\208\000\208\000\208\000\ +\217\000\214\000\081\002\049\000\144\001\145\001\118\000\208\000\ +\208\000\103\002\088\002\063\002\142\001\208\000\119\000\064\000\ +\094\002\120\000\064\000\146\001\127\000\127\000\208\000\147\000\ +\148\000\121\000\208\000\064\000\176\000\177\000\104\002\018\002\ +\214\000\020\002\144\001\145\001\122\000\208\000\149\000\178\000\ +\179\000\180\000\208\000\120\002\128\000\130\000\181\000\131\000\ +\064\000\146\001\132\000\208\000\208\000\182\000\125\002\135\000\ +\127\002\137\000\143\000\212\000\212\000\212\000\119\002\212\000\ +\212\000\064\000\212\000\212\000\212\000\212\000\144\000\212\000\ +\212\000\212\000\212\000\212\000\095\000\150\000\151\000\183\000\ +\218\000\152\000\153\000\212\000\212\000\161\000\162\000\095\000\ +\163\000\212\000\164\000\211\000\211\000\211\000\095\000\211\000\ +\211\000\095\000\211\000\211\000\211\000\211\000\212\000\211\000\ +\211\000\211\000\211\000\211\000\165\000\095\000\095\000\168\000\ +\216\000\212\000\169\000\211\000\211\000\170\000\212\000\175\000\ +\096\001\211\000\173\000\174\000\095\000\187\000\209\000\212\000\ +\212\000\113\000\211\000\141\000\213\000\216\000\211\000\123\000\ +\112\000\223\000\222\000\215\000\215\000\215\000\226\000\215\000\ +\215\000\124\000\215\000\215\000\215\000\215\000\211\000\215\000\ +\215\000\215\000\215\000\215\000\227\000\125\000\126\000\211\000\ +\211\000\241\000\242\000\215\000\215\000\252\000\024\001\228\000\ +\142\000\215\000\009\001\031\001\127\000\025\001\132\000\032\001\ +\132\000\169\000\132\000\049\001\132\000\051\001\215\000\132\000\ +\055\001\056\001\054\001\213\000\213\000\213\000\057\001\213\000\ +\213\000\067\001\213\000\213\000\213\000\213\000\215\000\213\000\ +\213\000\213\000\213\000\213\000\053\002\066\001\068\001\215\000\ +\215\000\191\000\069\001\213\000\213\000\073\001\074\001\123\000\ +\075\001\213\000\080\001\219\000\219\000\219\000\082\001\219\000\ +\219\000\124\000\219\000\219\000\219\000\219\000\213\000\219\000\ +\219\000\219\000\219\000\219\000\090\001\125\000\126\000\091\001\ +\095\001\186\000\030\002\219\000\219\000\097\001\213\000\099\001\ +\126\000\219\000\129\000\101\001\127\000\102\001\106\001\213\000\ +\213\000\142\001\115\001\217\000\217\000\217\000\219\000\217\000\ +\217\000\107\001\217\000\217\000\217\000\217\000\148\000\217\000\ +\217\000\217\000\217\000\217\000\116\001\118\001\219\000\144\001\ +\145\001\181\000\119\001\217\000\217\000\120\001\121\001\219\000\ +\219\000\217\000\122\001\214\000\214\000\214\000\146\001\214\000\ +\214\000\124\001\214\000\214\000\214\000\214\000\217\000\214\000\ +\214\000\214\000\214\000\125\001\102\000\128\001\102\000\129\001\ +\102\000\179\000\102\000\214\000\214\000\102\000\217\000\131\001\ +\008\002\214\000\132\001\136\001\137\001\141\001\167\001\217\000\ +\217\000\147\001\148\001\151\001\102\000\145\000\214\000\102\000\ +\153\001\168\001\170\001\218\000\218\000\218\000\173\001\218\000\ +\218\000\190\000\218\000\218\000\218\000\218\000\214\000\218\000\ +\218\000\218\000\218\000\147\000\148\000\174\001\186\001\214\000\ +\214\000\182\001\102\000\218\000\218\000\015\001\016\001\177\001\ +\017\001\218\000\149\000\216\000\216\000\216\000\018\001\216\000\ +\216\000\019\001\216\000\216\000\216\000\216\000\218\000\216\000\ +\216\000\216\000\216\000\153\000\187\001\185\001\153\000\188\001\ +\020\001\193\000\191\001\216\000\216\000\193\001\218\000\153\000\ +\040\000\216\000\195\001\041\000\200\001\198\001\202\001\218\000\ +\218\000\042\000\203\001\205\001\107\000\135\000\216\000\135\000\ +\068\002\135\000\207\001\135\000\153\000\089\002\135\000\214\001\ +\209\001\194\000\215\001\044\000\218\001\223\001\216\000\142\001\ +\046\000\047\000\142\001\222\001\230\001\153\000\169\000\216\000\ +\216\000\169\000\231\001\169\000\169\000\169\000\169\000\232\001\ +\169\000\169\000\169\000\235\001\169\000\144\001\145\001\048\000\ +\144\001\145\001\238\001\239\001\169\000\169\000\195\000\123\000\ +\242\001\243\001\169\000\070\001\146\001\049\000\191\000\146\001\ +\255\001\191\000\003\002\191\000\191\000\191\000\191\000\169\000\ +\191\000\191\000\191\000\001\002\191\000\125\000\126\000\004\002\ +\006\002\010\002\015\002\025\002\191\000\191\000\192\000\169\000\ +\123\000\017\002\191\000\026\002\127\000\186\000\186\000\159\000\ +\169\000\169\000\124\000\186\000\186\000\186\000\186\000\191\000\ +\186\000\186\000\186\000\034\002\186\000\145\001\125\000\126\000\ +\056\002\043\002\046\002\047\002\186\000\186\000\195\000\191\000\ +\083\002\048\002\186\000\069\002\058\002\127\000\109\002\142\001\ +\191\000\191\000\057\002\123\000\059\002\181\000\181\000\186\000\ +\066\002\181\000\084\002\181\000\181\000\124\000\181\000\086\002\ +\181\000\181\000\181\000\090\002\181\000\144\001\145\001\186\000\ +\080\002\125\000\126\000\039\002\181\000\181\000\110\002\142\001\ +\186\000\186\000\181\000\106\002\146\001\179\000\179\000\112\002\ +\127\000\179\000\037\000\179\000\179\000\115\002\179\000\181\000\ +\179\000\179\000\179\000\053\000\179\000\144\001\145\001\115\000\ +\190\001\090\000\088\000\084\000\179\000\179\000\151\000\181\000\ +\123\000\129\000\179\000\068\000\146\001\190\000\190\000\062\000\ +\181\000\181\000\124\000\190\000\190\000\190\000\190\000\179\000\ +\190\000\190\000\190\000\113\000\190\000\082\000\125\000\126\000\ +\141\000\044\002\070\000\050\000\190\000\190\000\121\000\179\000\ +\139\000\142\001\190\000\224\000\056\000\127\000\204\000\202\000\ +\179\000\179\000\196\000\147\000\045\002\037\000\119\000\190\000\ +\117\000\145\000\143\000\254\001\142\001\193\000\193\000\144\001\ +\145\001\193\000\253\001\193\000\193\000\037\001\193\000\190\000\ +\193\000\193\000\193\000\114\001\193\000\150\001\146\001\050\001\ +\190\000\190\000\144\001\145\001\193\000\193\000\219\001\159\001\ +\178\001\142\001\193\000\210\001\253\000\194\000\194\000\098\001\ +\085\001\146\001\128\002\194\000\194\000\194\000\194\000\193\000\ +\194\000\194\000\194\000\206\001\194\000\024\002\123\000\144\001\ +\145\001\111\002\042\002\000\000\194\000\194\000\000\000\193\000\ +\124\000\000\000\194\000\000\000\000\000\221\001\146\001\142\001\ +\193\000\193\000\195\000\195\000\125\000\126\000\195\000\194\000\ +\195\000\195\000\195\000\195\000\000\000\195\000\195\000\195\000\ +\145\000\000\000\000\000\127\000\064\002\144\001\145\001\194\000\ +\000\000\195\000\195\000\000\000\142\001\000\000\000\000\195\000\ +\194\000\194\000\192\000\192\000\146\001\000\000\147\000\148\000\ +\192\000\192\000\192\000\192\000\195\000\192\000\192\000\192\000\ +\000\000\192\000\144\001\145\001\000\000\149\000\000\000\000\000\ +\000\000\192\000\192\000\000\000\195\000\000\000\000\000\192\000\ +\000\000\146\001\195\000\195\000\000\000\195\000\195\000\000\000\ +\195\000\195\000\195\000\195\000\192\000\195\000\195\000\195\000\ +\000\000\074\000\000\000\074\000\074\000\074\000\000\000\074\000\ +\000\000\195\000\195\000\000\000\192\000\000\000\000\000\195\000\ +\000\000\000\000\074\000\000\000\000\000\192\000\192\000\188\000\ +\000\000\074\000\000\000\070\001\195\000\189\000\190\000\191\000\ +\192\000\000\000\193\000\194\000\195\000\074\000\074\000\074\000\ +\074\000\074\000\000\000\000\000\195\000\000\000\000\000\196\000\ +\000\000\000\000\188\000\000\000\197\000\195\000\195\000\074\000\ +\189\000\190\000\191\000\192\000\000\000\193\000\194\000\195\000\ +\188\000\198\000\000\000\074\000\000\000\000\000\189\000\190\000\ +\191\000\058\001\196\000\193\000\194\000\195\000\000\000\197\000\ +\000\000\199\000\000\000\079\000\000\000\079\000\079\000\079\000\ +\196\000\079\000\200\000\201\000\198\000\197\000\000\000\000\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\ +\000\000\000\000\198\000\079\000\199\000\000\000\000\000\000\000\ +\000\000\000\000\000\000\065\002\000\000\200\000\201\000\079\000\ +\079\000\079\000\199\000\142\001\110\000\000\000\110\000\075\002\ +\110\000\000\000\110\000\200\000\201\000\110\000\000\000\142\001\ +\000\000\079\000\000\000\142\001\000\000\110\000\000\000\123\000\ +\000\000\144\001\145\001\113\002\110\000\079\000\094\000\110\000\ +\094\000\124\000\094\000\000\000\094\000\144\001\145\001\094\000\ +\146\001\144\001\145\001\110\000\110\000\125\000\126\000\094\000\ +\000\000\147\000\148\000\000\000\146\001\000\000\094\000\145\000\ +\146\001\094\000\110\000\106\000\127\000\106\000\109\001\106\000\ +\149\000\106\000\142\001\000\000\106\000\094\000\094\000\000\000\ +\000\000\143\001\000\000\000\000\106\000\147\000\148\000\000\000\ +\000\000\000\000\000\000\106\000\094\000\000\000\106\000\000\000\ +\144\001\145\001\000\000\000\000\149\000\004\000\005\000\006\000\ +\007\000\000\000\106\000\106\000\008\000\009\000\000\000\146\001\ +\010\000\011\000\012\000\013\000\014\000\000\000\015\000\000\000\ +\123\000\106\000\000\000\000\000\000\000\016\000\000\000\136\000\ +\017\000\018\000\124\000\000\000\019\000\020\000\000\000\021\000\ +\000\000\000\000\022\000\023\000\024\000\025\000\125\000\126\000\ +\026\000\123\000\000\000\027\000\000\000\142\001\028\000\074\000\ +\103\001\126\002\000\000\124\000\060\002\127\000\074\000\000\000\ +\101\000\000\000\101\000\000\000\101\000\000\000\101\000\125\000\ +\126\000\101\000\000\000\144\001\145\001\074\000\074\000\147\000\ +\148\000\000\000\000\000\000\000\038\001\000\000\127\000\039\001\ +\101\000\000\000\146\001\101\000\074\000\040\001\149\000\107\000\ +\041\001\107\000\000\000\107\000\042\001\107\000\000\000\111\000\ +\107\000\111\000\000\000\111\000\000\000\111\000\000\000\043\001\ +\111\000\000\000\000\000\000\000\000\000\044\001\000\000\107\000\ +\000\000\000\000\000\000\000\000\000\000\000\000\000\000\111\000" + +let yycheck = "\013\000\ +\036\000\009\000\038\000\000\000\012\000\163\000\006\000\000\000\ +\002\000\025\001\172\000\113\000\000\000\071\000\162\000\018\000\ +\102\000\049\002\021\000\022\000\013\001\035\000\067\001\037\000\ +\009\000\010\000\003\001\012\000\013\001\057\001\004\001\016\000\ +\043\001\195\000\013\001\028\001\092\000\009\001\013\001\053\002\ +\142\000\196\000\009\001\020\001\080\000\081\000\004\001\133\000\ +\033\000\105\000\152\000\004\001\001\001\028\001\009\001\004\001\ +\012\001\003\001\069\001\073\000\004\001\010\001\025\001\025\001\ +\013\001\042\001\043\001\169\000\026\001\083\002\009\001\054\001\ +\027\001\058\001\020\001\013\001\043\001\070\001\072\000\028\001\ +\057\001\037\001\031\001\000\000\033\001\034\001\044\001\173\000\ +\174\000\063\001\122\002\044\001\150\000\096\000\066\001\070\001\ +\042\001\043\001\106\000\115\001\044\001\187\000\007\001\006\001\ +\043\001\068\001\068\001\056\001\013\001\137\001\118\000\057\001\ +\120\000\121\000\054\001\123\000\124\000\125\000\126\000\127\000\ +\128\000\070\001\004\001\137\000\027\001\017\001\003\001\135\000\ +\122\000\143\000\144\000\145\000\188\000\147\000\148\000\149\000\ +\042\001\131\000\194\000\042\001\134\000\169\001\136\000\020\001\ +\043\001\173\001\006\001\203\000\151\000\055\001\056\001\004\001\ +\146\000\030\001\057\001\020\001\008\001\063\001\241\000\004\001\ +\001\001\003\001\044\001\004\001\009\001\042\001\043\001\027\001\ +\251\000\010\001\164\000\165\000\013\001\071\002\072\002\027\001\ +\170\000\042\001\043\001\077\002\057\001\175\000\042\001\001\001\ +\033\001\027\001\004\001\028\001\020\001\205\001\031\001\044\001\ +\033\001\034\001\164\001\013\001\013\001\057\001\212\000\005\001\ +\214\000\004\001\009\001\009\001\174\001\037\001\003\001\056\001\ +\005\001\006\001\007\001\196\000\009\001\111\002\000\000\056\001\ +\034\001\211\000\226\000\213\000\027\001\008\001\216\000\026\001\ +\227\000\228\000\132\001\119\001\008\001\070\001\027\001\037\001\ +\019\001\051\001\003\001\141\001\142\001\008\001\144\001\145\001\ +\146\001\020\001\039\001\040\001\041\001\042\001\035\002\009\001\ +\027\001\009\001\010\002\020\001\010\001\011\001\012\001\035\001\ +\027\001\046\002\047\002\009\001\057\001\167\001\168\001\042\001\ +\043\001\027\001\106\002\027\001\004\001\065\001\070\001\008\001\ +\069\001\042\001\043\001\115\002\008\001\027\001\057\001\068\002\ +\069\002\003\001\006\001\005\001\025\001\007\001\013\001\009\001\ +\057\001\016\001\012\001\027\001\000\000\031\001\032\001\006\001\ +\056\002\004\001\020\001\059\002\080\001\006\001\007\001\027\001\ +\009\001\027\001\020\001\209\001\030\001\215\001\013\001\049\001\ +\023\001\020\001\043\001\221\001\222\001\223\001\042\001\165\001\ +\042\001\043\001\027\001\009\001\013\001\066\001\086\002\068\001\ +\042\001\043\001\236\001\177\001\084\001\057\001\004\001\057\001\ +\006\001\004\001\237\001\044\001\003\001\027\001\013\001\004\001\ +\005\001\083\001\104\001\008\001\013\001\010\001\011\001\012\001\ +\013\001\020\001\015\001\016\001\017\001\020\001\019\001\159\001\ +\005\001\099\001\091\001\101\001\013\001\103\001\027\001\028\001\ +\000\000\003\001\170\001\109\001\033\001\023\002\013\001\020\001\ +\015\001\121\000\013\001\042\001\043\001\006\001\182\001\004\001\ +\128\000\046\001\020\001\125\001\004\001\235\001\128\001\129\001\ +\013\001\013\001\057\001\241\001\030\001\042\001\043\001\020\001\ +\000\000\062\001\027\001\013\001\044\001\143\001\153\001\047\001\ +\042\001\043\001\071\001\072\001\057\001\063\002\064\002\065\002\ +\005\001\042\001\003\001\008\001\005\001\006\001\007\001\057\001\ +\009\001\003\001\076\002\005\001\020\001\007\001\013\001\009\001\ +\057\001\185\001\012\001\025\002\180\001\003\001\190\001\239\001\ +\090\002\001\001\027\001\009\001\004\001\020\001\042\001\043\001\ +\000\000\027\001\042\001\043\001\030\001\013\001\039\001\040\001\ +\041\001\195\001\013\001\109\002\110\002\057\001\200\001\013\001\ +\042\001\057\001\016\001\042\001\043\001\003\001\013\001\005\001\ +\252\001\003\001\034\001\005\001\214\001\007\001\008\001\057\001\ +\010\001\011\001\012\001\013\001\069\001\015\001\016\001\017\001\ +\018\001\019\001\020\001\051\001\230\001\231\001\232\001\039\002\ +\000\000\027\001\028\001\020\001\044\002\045\002\001\001\033\001\ +\130\000\004\001\132\000\003\002\003\001\001\000\002\000\010\001\ +\042\001\043\001\013\001\013\001\046\001\255\001\039\001\040\001\ +\041\001\042\001\043\001\006\001\003\001\020\001\005\001\057\001\ +\000\000\028\001\004\001\075\002\062\001\003\001\033\001\034\001\ +\057\001\006\001\112\000\013\001\013\001\071\001\072\001\117\000\ +\004\001\119\000\020\001\042\001\043\001\013\001\020\001\003\001\ +\004\001\005\001\078\002\007\001\008\001\056\001\010\001\011\001\ +\012\001\013\001\057\001\015\001\016\001\017\001\018\001\019\001\ +\000\000\020\001\052\002\070\001\042\001\043\001\004\001\027\001\ +\028\001\079\002\060\002\019\001\020\001\033\001\004\001\001\001\ +\066\002\004\001\004\001\057\001\026\001\027\001\042\001\042\001\ +\043\001\009\001\046\001\013\001\002\001\003\001\080\002\208\001\ +\000\000\210\001\042\001\043\001\027\001\057\001\057\001\013\001\ +\014\001\015\001\062\001\113\002\009\001\009\001\020\001\027\001\ +\034\001\057\001\003\001\071\001\072\001\027\001\124\002\009\001\ +\126\002\006\001\004\001\003\001\004\001\005\001\112\002\007\001\ +\008\001\051\001\010\001\011\001\012\001\013\001\009\001\015\001\ +\016\001\017\001\018\001\019\001\009\001\003\001\003\001\053\001\ +\000\000\044\001\013\001\027\001\028\001\013\001\004\001\020\001\ +\009\001\033\001\027\001\003\001\004\001\005\001\027\001\007\001\ +\008\001\030\001\010\001\011\001\012\001\013\001\046\001\015\001\ +\016\001\017\001\018\001\019\001\027\001\042\001\043\001\020\001\ +\000\000\057\001\044\001\027\001\028\001\027\001\062\001\027\001\ +\005\001\033\001\004\001\004\001\057\001\004\001\009\001\071\001\ +\072\001\044\001\027\001\004\001\027\001\027\001\046\001\020\001\ +\004\001\006\001\005\001\003\001\004\001\005\001\020\001\007\001\ +\008\001\030\001\010\001\011\001\012\001\013\001\062\001\015\001\ +\016\001\017\001\018\001\019\001\044\001\042\001\043\001\071\001\ +\072\001\004\001\013\001\027\001\028\001\005\001\015\001\044\001\ +\044\001\033\001\009\001\027\001\057\001\020\001\003\001\027\001\ +\005\001\000\000\007\001\066\001\009\001\009\001\046\001\012\001\ +\004\001\004\001\013\001\003\001\004\001\005\001\004\001\007\001\ +\008\001\015\001\010\001\011\001\012\001\013\001\062\001\015\001\ +\016\001\017\001\018\001\019\001\009\001\013\001\013\001\071\001\ +\072\001\000\000\013\001\027\001\028\001\005\001\003\001\020\001\ +\007\001\033\001\005\001\003\001\004\001\005\001\005\001\007\001\ +\008\001\030\001\010\001\011\001\012\001\013\001\046\001\015\001\ +\016\001\017\001\018\001\019\001\005\001\042\001\043\001\003\001\ +\005\001\000\000\005\001\027\001\028\001\005\001\062\001\027\001\ +\043\001\033\001\047\001\027\001\057\001\005\001\005\001\071\001\ +\072\001\020\001\006\001\003\001\004\001\005\001\046\001\007\001\ +\008\001\050\001\010\001\011\001\012\001\013\001\043\001\015\001\ +\016\001\017\001\018\001\019\001\013\001\013\001\062\001\042\001\ +\043\001\000\000\004\001\027\001\028\001\013\001\003\001\071\001\ +\072\001\033\001\005\001\003\001\004\001\005\001\057\001\007\001\ +\008\001\005\001\010\001\011\001\012\001\013\001\046\001\015\001\ +\016\001\017\001\018\001\027\001\003\001\027\001\005\001\027\001\ +\007\001\000\000\009\001\027\001\028\001\012\001\062\001\005\001\ +\007\001\033\001\006\001\013\001\004\001\004\001\037\001\071\001\ +\072\001\005\001\005\001\005\001\027\001\020\001\046\001\030\001\ +\006\001\020\001\009\001\003\001\004\001\005\001\004\001\007\001\ +\008\001\000\000\010\001\011\001\012\001\013\001\062\001\015\001\ +\016\001\017\001\018\001\042\001\043\001\004\001\015\001\071\001\ +\072\001\020\001\057\001\027\001\028\001\001\001\002\001\044\001\ +\004\001\033\001\057\001\003\001\004\001\005\001\010\001\007\001\ +\008\001\013\001\010\001\011\001\012\001\013\001\046\001\015\001\ +\016\001\017\001\018\001\001\001\007\001\020\001\004\001\046\001\ +\028\001\000\000\046\001\027\001\028\001\005\001\062\001\013\001\ +\001\001\033\001\027\001\004\001\027\001\051\001\005\001\071\001\ +\072\001\010\001\006\001\020\001\013\001\003\001\046\001\005\001\ +\005\001\007\001\046\001\009\001\034\001\007\001\012\001\027\001\ +\012\001\000\000\020\001\028\001\005\001\020\001\062\001\020\001\ +\033\001\034\001\020\001\037\001\065\001\051\001\005\001\071\001\ +\072\001\008\001\027\001\010\001\011\001\012\001\013\001\027\001\ +\015\001\016\001\017\001\044\001\019\001\042\001\043\001\056\001\ +\042\001\043\001\005\001\013\001\027\001\028\001\000\000\020\001\ +\003\001\005\001\033\001\008\001\057\001\070\001\005\001\057\001\ +\027\001\008\001\020\001\010\001\011\001\012\001\013\001\046\001\ +\015\001\016\001\017\001\007\001\019\001\042\001\043\001\015\001\ +\015\001\003\001\005\001\044\001\027\001\028\001\000\000\062\001\ +\020\001\015\001\033\001\005\001\057\001\004\001\005\001\026\001\ +\071\001\072\001\030\001\010\001\011\001\012\001\013\001\046\001\ +\015\001\016\001\017\001\007\001\019\001\043\001\042\001\043\001\ +\020\001\005\001\005\001\005\001\027\001\028\001\000\000\062\001\ +\009\001\005\001\033\001\005\001\007\001\057\001\019\001\020\001\ +\071\001\072\001\015\001\020\001\012\001\004\001\005\001\046\001\ +\066\001\008\001\007\001\010\001\011\001\030\001\013\001\020\001\ +\015\001\016\001\017\001\009\001\019\001\042\001\043\001\062\001\ +\027\001\042\001\043\001\019\001\027\001\028\001\019\001\020\001\ +\071\001\072\001\033\001\009\001\057\001\004\001\005\001\027\001\ +\057\001\008\001\000\000\010\001\011\001\009\001\013\001\046\001\ +\015\001\016\001\017\001\027\001\019\001\042\001\043\001\005\001\ +\012\001\027\001\027\001\005\001\027\001\028\001\009\001\062\001\ +\020\001\027\001\033\001\005\001\057\001\004\001\005\001\005\001\ +\071\001\072\001\030\001\010\001\011\001\012\001\013\001\046\001\ +\015\001\016\001\017\001\005\001\019\001\005\001\042\001\043\001\ +\005\001\012\001\005\001\066\001\027\001\028\001\007\001\062\001\ +\005\001\020\001\033\001\005\001\044\001\057\001\005\001\005\001\ +\071\001\072\001\020\001\007\001\012\001\066\001\007\001\046\001\ +\007\001\007\001\007\001\180\001\020\001\004\001\005\001\042\001\ +\043\001\008\001\179\001\010\001\011\001\171\000\013\001\062\001\ +\015\001\016\001\017\001\013\001\019\001\051\001\057\001\185\000\ +\071\001\072\001\042\001\043\001\027\001\028\001\136\001\018\001\ +\074\001\020\001\033\001\124\001\141\000\004\001\005\001\005\001\ +\221\000\057\001\127\002\010\001\011\001\012\001\013\001\046\001\ +\015\001\016\001\017\001\121\001\019\001\217\001\020\001\042\001\ +\043\001\100\002\242\001\255\255\027\001\028\001\255\255\062\001\ +\030\001\255\255\033\001\255\255\255\255\018\001\057\001\020\001\ +\071\001\072\001\004\001\005\001\042\001\043\001\008\001\046\001\ +\010\001\011\001\012\001\013\001\255\255\015\001\016\001\017\001\ +\020\001\255\255\255\255\057\001\012\001\042\001\043\001\062\001\ +\255\255\027\001\028\001\255\255\020\001\255\255\255\255\033\001\ +\071\001\072\001\004\001\005\001\057\001\255\255\042\001\043\001\ +\010\001\011\001\012\001\013\001\046\001\015\001\016\001\017\001\ +\255\255\019\001\042\001\043\001\255\255\057\001\255\255\255\255\ +\255\255\027\001\028\001\255\255\062\001\255\255\255\255\033\001\ +\255\255\057\001\004\001\005\001\255\255\071\001\072\001\255\255\ +\010\001\011\001\012\001\013\001\046\001\015\001\016\001\017\001\ +\255\255\003\001\255\255\005\001\006\001\007\001\255\255\009\001\ +\255\255\027\001\028\001\255\255\062\001\255\255\255\255\033\001\ +\255\255\255\255\020\001\255\255\255\255\071\001\072\001\004\001\ +\255\255\027\001\255\255\008\001\046\001\010\001\011\001\012\001\ +\013\001\255\255\015\001\016\001\017\001\039\001\040\001\041\001\ +\042\001\043\001\255\255\255\255\062\001\255\255\255\255\028\001\ +\255\255\255\255\004\001\255\255\033\001\071\001\072\001\057\001\ +\010\001\011\001\012\001\013\001\255\255\015\001\016\001\017\001\ +\004\001\046\001\255\255\069\001\255\255\255\255\010\001\011\001\ +\012\001\013\001\028\001\015\001\016\001\017\001\255\255\033\001\ +\255\255\062\001\255\255\003\001\255\255\005\001\006\001\007\001\ +\028\001\009\001\071\001\072\001\046\001\033\001\255\255\255\255\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\255\ +\255\255\255\255\046\001\027\001\062\001\255\255\255\255\255\255\ +\255\255\255\255\255\255\012\001\255\255\071\001\072\001\039\001\ +\040\001\041\001\062\001\020\001\003\001\255\255\005\001\012\001\ +\007\001\255\255\009\001\071\001\072\001\012\001\255\255\020\001\ +\255\255\057\001\255\255\020\001\255\255\020\001\255\255\020\001\ +\255\255\042\001\043\001\020\001\027\001\069\001\003\001\030\001\ +\005\001\030\001\007\001\255\255\009\001\042\001\043\001\012\001\ +\057\001\042\001\043\001\042\001\043\001\042\001\043\001\020\001\ +\255\255\042\001\043\001\255\255\057\001\255\255\027\001\020\001\ +\057\001\030\001\057\001\003\001\057\001\005\001\027\001\007\001\ +\057\001\009\001\020\001\255\255\012\001\042\001\043\001\255\255\ +\255\255\027\001\255\255\255\255\020\001\042\001\043\001\255\255\ +\255\255\255\255\255\255\027\001\057\001\255\255\030\001\255\255\ +\042\001\043\001\255\255\255\255\057\001\021\001\022\001\023\001\ +\024\001\255\255\042\001\043\001\028\001\029\001\255\255\057\001\ +\032\001\033\001\034\001\035\001\036\001\255\255\038\001\255\255\ +\020\001\057\001\255\255\255\255\255\255\045\001\255\255\027\001\ +\048\001\049\001\030\001\255\255\052\001\053\001\255\255\055\001\ +\255\255\255\255\058\001\059\001\060\001\061\001\042\001\043\001\ +\064\001\020\001\255\255\067\001\255\255\020\001\070\001\020\001\ +\027\001\020\001\255\255\030\001\027\001\057\001\027\001\255\255\ +\003\001\255\255\005\001\255\255\007\001\255\255\009\001\042\001\ +\043\001\012\001\255\255\042\001\043\001\042\001\043\001\042\001\ +\043\001\255\255\255\255\255\255\001\001\255\255\057\001\004\001\ +\027\001\255\255\057\001\030\001\057\001\010\001\057\001\003\001\ +\013\001\005\001\255\255\007\001\017\001\009\001\255\255\003\001\ +\012\001\005\001\255\255\007\001\255\255\009\001\255\255\028\001\ +\012\001\255\255\255\255\255\255\255\255\034\001\255\255\027\001\ +\255\255\255\255\255\255\255\255\255\255\255\255\255\255\027\001" + +let yynames_const = "\ + CHOICE\000\ + STAR\000\ + COMMA\000\ + LPAREN\000\ + RPAREN\000\ + LBRACKET\000\ + RBRACKET\000\ + BAR\000\ + SEMI\000\ + NEW\000\ + OUT\000\ + IN\000\ + REPL\000\ + IF\000\ + THEN\000\ + ELSE\000\ + EQUAL\000\ + FUN\000\ + EQUATION\000\ + REDUCTION\000\ + PREDICATE\000\ + PROCESS\000\ + SLASH\000\ + DOT\000\ + EOF\000\ + LET\000\ + QUERY\000\ + BEFORE\000\ + PUTBEGIN\000\ + NONINTERF\000\ + EVENT\000\ + NOT\000\ + ELIMTRUE\000\ + FREE\000\ + SUCHTHAT\000\ + CLAUSES\000\ + RED\000\ + EQUIV\000\ + EQUIVEQ\000\ + WEDGE\000\ + DIFF\000\ + COLON\000\ + NOUNIF\000\ + PHASE\000\ + AMONG\000\ + WEAKSECRET\000\ + PARAM\000\ + ORTEXT\000\ + FAIL\000\ + TYPE\000\ + SET\000\ + FORALL\000\ + CONST\000\ + INJEVENT\000\ + OR\000\ + CHANNEL\000\ + LETFUN\000\ + DEFINE\000\ + EXPAND\000\ + YIELD\000\ + LEQ\000\ + PROBA\000\ + LBRACE\000\ + RBRACE\000\ + PROOF\000\ + EQUIVALENCE\000\ + OTHERWISE\000\ + TABLE\000\ + INSERT\000\ + GET\000\ + " + +let yynames_block = "\ + IDENT\000\ + STRING\000\ + INT\000\ + " + +let yyact = [| + (fun _ -> failwith "parser") +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 138 "pitparser.mly" + ( (* Options are ignored, they are supported for compatibility with + CryptoVerif only *) + TTypeDecl(_2) :: _5 ) +# 1041 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 8 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 6 : 'typeidseq) in + let _7 = (Parsing.peek_val __caml_parser_env 3 : 'typeid) in + let _8 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _10 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 142 "pitparser.mly" + ( (TFunDecl(_2, _4, _7, _8)) :: _10 ) +# 1052 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 10 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 8 : 'typeidseq) in + let _7 = (Parsing.peek_val __caml_parser_env 5 : 'typeid) in + let _9 = (Parsing.peek_val __caml_parser_env 3 : 'treducmayfail) in + let _10 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _12 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 145 "pitparser.mly" + ( (TReducFail(_2,_4,_7,_9, _10)) :: _12 ) +# 1064 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'treduc) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 148 "pitparser.mly" + ( (TReduc(_2,_3)) :: _5 ) +# 1073 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'neidentseq) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'typeid) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 151 "pitparser.mly" + ( (List.map (fun x -> TConstDecl(x, _4, _5)) _2) @ _7 ) +# 1083 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'eqlist) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 153 "pitparser.mly" + ( (TEquation(_2, _3)) :: _5 ) +# 1092 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 155 "pitparser.mly" + ( (TEventDecl(_2, [])) :: _4 ) +# 1100 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'typeidseq) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 157 "pitparser.mly" + ( (TEventDecl(_2, _4)) :: _7 ) +# 1109 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'typeidseq) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 159 "pitparser.mly" + ( (TPredDecl(_2, _4, _6)) :: _8 ) +# 1119 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 161 "pitparser.mly" + ( (TPredDecl(_2, [], _3)) :: _5 ) +# 1128 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'typeidseq) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 163 "pitparser.mly" + ( (TTableDecl(_2, _4)) :: _7 ) +# 1137 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'tprocess) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 165 "pitparser.mly" + ( (TPDef(_2,[],_4)) :: _6 ) +# 1146 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 7 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 5 : 'vartype) in + let _7 = (Parsing.peek_val __caml_parser_env 2 : 'tprocess) in + let _9 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 167 "pitparser.mly" + ( (TPDef(_2,_4,_7)) :: _9 ) +# 1156 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 169 "pitparser.mly" + ( (TLetFun(_2,[],_4)) :: _6 ) +# 1165 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 7 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 5 : 'vartype) in + let _7 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _9 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 171 "pitparser.mly" + ( (TLetFun(_2,_4,_7)) :: _9 ) +# 1175 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 173 "pitparser.mly" + ( (TSet(_2,S _4)) :: _6 ) +# 1184 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 175 "pitparser.mly" + ( (TSet(_2,I _4)) :: _6 ) +# 1193 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'tfnebindingseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 177 "pitparser.mly" + ( (TNoUnif (_2, _4)) :: _6 ) +# 1202 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tfnebindingseq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 179 "pitparser.mly" + ( (TNoUnif ([], _2)) :: _4 ) +# 1210 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'tqueryseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 181 "pitparser.mly" + ( (TQuery(_2,_4)) :: _6 ) +# 1219 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tqueryseq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 183 "pitparser.mly" + ( (TQuery([],_2)) :: _4 ) +# 1227 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'niseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 185 "pitparser.mly" + ( (TNoninterf(_2, _4)) :: _6 ) +# 1236 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'niseq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 187 "pitparser.mly" + ( (TNoninterf([], _2)) :: _4 ) +# 1244 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 189 "pitparser.mly" + ( (TWeaksecret(_2)) :: _4 ) +# 1252 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 191 "pitparser.mly" + ( (TNot(_2, _4)) :: _6 ) +# 1261 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 193 "pitparser.mly" + ( (TNot([], _2)) :: _4 ) +# 1269 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'neidentseq) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 195 "pitparser.mly" + ( (* Supported for compatility with CryptoVerif only *) + _5 ) +# 1279 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 198 "pitparser.mly" + ( (* Supported for compatility with CryptoVerif only *) + _4 ) +# 1288 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'proof) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 201 "pitparser.mly" + ( (* Supported for compatility with CryptoVerif only *) + _5 ) +# 1297 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'mayfailvartypeseq) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 204 "pitparser.mly" + ( (TElimtrue (_2,_4)) :: _6 ) +# 1306 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 206 "pitparser.mly" + ( (TElimtrue ([],_2)) :: _4 ) +# 1314 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'neidentseq) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 208 "pitparser.mly" + ( (* For compatibility with CryptoVerif, allow + channel c1...cn. + as a synonym for + free c1...cn:channel. *) + (List.map (fun x -> TFree(x, ("channel", dummy_ext), [])) _2) @ _4 ) +# 1326 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'neidentseq) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'typeid) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'options) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 214 "pitparser.mly" + ( (List.map (fun x -> TFree(x, _4, _5)) _2) @ _7 ) +# 1336 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tclauses) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 216 "pitparser.mly" + ( (TClauses(_2)) :: _3 ) +# 1344 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 7 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 5 : 'typeidseq) in + let _7 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.tdecl list) in + let _9 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 218 "pitparser.mly" + ( (TDefine(_2, _4, _7)) :: _9 ) +# 1354 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'typeidseq) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.tdecl list) in + Obj.repr( +# 220 "pitparser.mly" + ( (TExpand(_2, _4)) :: _7 ) +# 1363 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + Obj.repr( +# 222 "pitparser.mly" + ( [] ) +# 1369 "pitparser.ml" + : Pitptree.tdecl list)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.tdecl list) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'tprocess) in + Obj.repr( +# 226 "pitparser.mly" + ( _1, _3, None ) +# 1377 "pitparser.ml" + : Pitptree.tdecl list * Pitptree.tprocess * Pitptree.tprocess option)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.tdecl list) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'tprocess) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'tprocess) in + Obj.repr( +# 228 "pitparser.mly" + ( + Param.equivalence := true; + _1, _3, Some _4 ) +# 1388 "pitparser.ml" + : Pitptree.tdecl list * Pitptree.tprocess * Pitptree.tprocess option)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 236 "pitparser.mly" + ( _1 ) +# 1395 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 238 "pitparser.mly" + ( _1 ) +# 1402 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 240 "pitparser.mly" + ( string_of_int _1, parse_extent() ) +# 1409 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + Obj.repr( +# 242 "pitparser.mly" + ( "*", parse_extent() ) +# 1415 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + Obj.repr( +# 244 "pitparser.mly" + ( ".", parse_extent() ) +# 1421 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + Obj.repr( +# 246 "pitparser.mly" + ( "set", parse_extent() ) +# 1427 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + Obj.repr( +# 248 "pitparser.mly" + ( "=", parse_extent() ) +# 1433 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + Obj.repr( +# 250 "pitparser.mly" + ( ",", parse_extent() ) +# 1439 "pitparser.ml" + : 'prooftoken)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'prooftoken) in + Obj.repr( +# 254 "pitparser.mly" + ( [_1] ) +# 1446 "pitparser.ml" + : 'proofcommand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : 'prooftoken) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'proofcommand) in + Obj.repr( +# 256 "pitparser.mly" + ( _1 :: _2 ) +# 1454 "pitparser.ml" + : 'proofcommand)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'proofcommand) in + Obj.repr( +# 260 "pitparser.mly" + ( [_1] ) +# 1461 "pitparser.ml" + : 'proof)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'proofcommand) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'proof) in + Obj.repr( +# 262 "pitparser.mly" + ( _1 :: _3 ) +# 1469 "pitparser.ml" + : 'proof)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'neidentseq) in + Obj.repr( +# 268 "pitparser.mly" + ( _2 ) +# 1476 "pitparser.ml" + : 'options)) +; (fun __caml_parser_env -> + Obj.repr( +# 270 "pitparser.mly" + ( [] ) +# 1482 "pitparser.ml" + : 'options)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'neidentseq) in + Obj.repr( +# 274 "pitparser.mly" + ( _1 :: _3 ) +# 1490 "pitparser.ml" + : 'neidentseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 276 "pitparser.mly" + ( [_1] ) +# 1497 "pitparser.ml" + : 'neidentseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 280 "pitparser.mly" + ( None ) +# 1503 "pitparser.ml" + : 'newarg)) +; (fun __caml_parser_env -> + Obj.repr( +# 282 "pitparser.mly" + ( Some [] ) +# 1509 "pitparser.ml" + : 'newarg)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'neidentseq) in + Obj.repr( +# 284 "pitparser.mly" + ( Some (_2) ) +# 1516 "pitparser.ml" + : 'newarg)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'typeid) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'nevartype) in + Obj.repr( +# 288 "pitparser.mly" + ( (_1,_3)::_5 ) +# 1525 "pitparser.ml" + : 'nevartype)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'typeid) in + Obj.repr( +# 291 "pitparser.mly" + ( [(_1,_3)] ) +# 1533 "pitparser.ml" + : 'nevartype)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'nevartype) in + Obj.repr( +# 295 "pitparser.mly" + ( _1 ) +# 1540 "pitparser.ml" + : 'vartype)) +; (fun __caml_parser_env -> + Obj.repr( +# 297 "pitparser.mly" + ( [] ) +# 1546 "pitparser.ml" + : 'vartype)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'nevartype) in + Obj.repr( +# 301 "pitparser.mly" + ( _2 ) +# 1553 "pitparser.ml" + : 'forallvartype)) +; (fun __caml_parser_env -> + Obj.repr( +# 303 "pitparser.mly" + ( [] ) +# 1559 "pitparser.ml" + : 'forallvartype)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 307 "pitparser.mly" + ( _1 ) +# 1566 "pitparser.ml" + : 'typeid)) +; (fun __caml_parser_env -> + Obj.repr( +# 309 "pitparser.mly" + ( (* channel is allowed as a type, even though it is also a keyword for the declaration channel c1...cn. *) + "channel", parse_extent() ) +# 1573 "pitparser.ml" + : 'typeid)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'netypeidseq) in + Obj.repr( +# 314 "pitparser.mly" + ( _1 ) +# 1580 "pitparser.ml" + : 'typeidseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 316 "pitparser.mly" + ( [] ) +# 1586 "pitparser.ml" + : 'typeidseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'typeid) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'netypeidseq) in + Obj.repr( +# 320 "pitparser.mly" + ( _1 :: _3 ) +# 1594 "pitparser.ml" + : 'netypeidseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'typeid) in + Obj.repr( +# 322 "pitparser.mly" + ( [_1] ) +# 1601 "pitparser.ml" + : 'netypeidseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 328 "pitparser.mly" + ( PFail, parse_extent () ) +# 1607 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 330 "pitparser.mly" + ( PFunApp (_1, _3), parse_extent() ) +# 1615 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'term) in + Obj.repr( +# 332 "pitparser.mly" + ( Param.has_choice := true; + PFunApp(("choice", parse_extent()), [_3; _5]), parse_extent() ) +# 1624 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 335 "pitparser.mly" + ( PIdent (_1), parse_extent() ) +# 1631 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 337 "pitparser.mly" + ( PFunApp(("=", parse_extent()), [_1; _3]), parse_extent() ) +# 1639 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 339 "pitparser.mly" + ( PFunApp(("<>", parse_extent()), [_1; _3]), parse_extent() ) +# 1647 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'term) in + Obj.repr( +# 341 "pitparser.mly" + ( PFunApp(("not", parse_extent()), [_3]), parse_extent() ) +# 1654 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 343 "pitparser.mly" + ( PFunApp(("||", parse_extent()), [_1; _3]), parse_extent() ) +# 1662 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 345 "pitparser.mly" + ( PFunApp(("&&", parse_extent()), [_1; _3]), parse_extent() ) +# 1670 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'termseq) in + Obj.repr( +# 347 "pitparser.mly" + ( match _2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PTuple (l), parse_extent() ) +# 1680 "pitparser.ml" + : 'term)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'netermseq) in + Obj.repr( +# 354 "pitparser.mly" + ( _1 :: _3 ) +# 1688 "pitparser.ml" + : 'netermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 356 "pitparser.mly" + ( [_1] ) +# 1695 "pitparser.ml" + : 'netermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'netermseq) in + Obj.repr( +# 360 "pitparser.mly" + ( _1 ) +# 1702 "pitparser.ml" + : 'termseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 362 "pitparser.mly" + ( [] ) +# 1708 "pitparser.ml" + : 'termseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'netermseq) in + Obj.repr( +# 368 "pitparser.mly" + ( (_1, Some _4) ) +# 1716 "pitparser.ml" + : 'ni)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 370 "pitparser.mly" + ( (_1, None) ) +# 1723 "pitparser.ml" + : 'ni)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'ni) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'niseq) in + Obj.repr( +# 374 "pitparser.mly" + ( _1 :: _3 ) +# 1731 "pitparser.ml" + : 'niseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'ni) in + Obj.repr( +# 376 "pitparser.mly" + ( [_1] ) +# 1738 "pitparser.ml" + : 'niseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tquery) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tqueryseq) in + Obj.repr( +# 382 "pitparser.mly" + ( _1 :: _3 ) +# 1746 "pitparser.ml" + : 'tqueryseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tquery) in + Obj.repr( +# 384 "pitparser.mly" + ( [_1] ) +# 1753 "pitparser.ml" + : 'tqueryseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 388 "pitparser.mly" + ( PRealQuery(_1) ) +# 1760 "pitparser.ml" + : 'tquery)) +; (fun __caml_parser_env -> + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'neidentseq) in + Obj.repr( +# 390 "pitparser.mly" + ( PPutBegin(false, _4) ) +# 1767 "pitparser.ml" + : 'tquery)) +; (fun __caml_parser_env -> + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'neidentseq) in + Obj.repr( +# 392 "pitparser.mly" + ( PPutBegin(true, _4) ) +# 1774 "pitparser.ml" + : 'tquery)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gtermseq) in + Obj.repr( +# 396 "pitparser.mly" + ( PGFunApp (_1, _3), parse_extent() ) +# 1782 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 398 "pitparser.mly" + ( PGIdent (_1), parse_extent() ) +# 1789 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'gtermseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 400 "pitparser.mly" + ( PGPhase(_1, _3, _6), parse_extent() ) +# 1798 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'gterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 402 "pitparser.mly" + ( PGPhase(("table", parse_extent()), [_3], _6), parse_extent() ) +# 1806 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 404 "pitparser.mly" + ( PGFunApp(("=", parse_extent()), [_1; _3]), parse_extent() ) +# 1814 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 406 "pitparser.mly" + ( PGFunApp(("<>", parse_extent()), [_1; _3]), parse_extent() ) +# 1822 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gterm) in + Obj.repr( +# 408 "pitparser.mly" + ( PGFunApp(("not", parse_extent()), [_3]), parse_extent() ) +# 1829 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 410 "pitparser.mly" + ( PGFunApp(("||", parse_extent()), [_1; _3]), parse_extent() ) +# 1837 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 412 "pitparser.mly" + ( PGFunApp(("&&", parse_extent()), [_1; _3]), parse_extent() ) +# 1845 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'gterm) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'gterm) in + Obj.repr( +# 414 "pitparser.mly" + ( PGFunApp(("choice", parse_extent()), [_3; _5]), parse_extent() ) +# 1853 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gtermseq) in + Obj.repr( +# 416 "pitparser.mly" + ( PGFunApp(("event",parse_extent()), _3), parse_extent() ) +# 1860 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gtermseq) in + Obj.repr( +# 418 "pitparser.mly" + ( PGFunApp(("inj-event",parse_extent()), _3), parse_extent() ) +# 1867 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gterm) in + Obj.repr( +# 420 "pitparser.mly" + ( PGFunApp(("table",parse_extent()), [_3]), parse_extent() ) +# 1874 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 422 "pitparser.mly" + ( PGFunApp(("==>", parse_extent()), [_1;_3]), parse_extent() ) +# 1882 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'gtermseq) in + Obj.repr( +# 424 "pitparser.mly" + ( match _2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PGTuple (l), parse_extent() ) +# 1892 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'bindingseq) in + Obj.repr( +# 429 "pitparser.mly" + ( PGName (_2, _4), parse_extent() ) +# 1900 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 431 "pitparser.mly" + ( PGName (_2, []), parse_extent() ) +# 1907 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 433 "pitparser.mly" + ( PGLet(_2, _4, _6), parse_extent() ) +# 1916 "pitparser.ml" + : 'gterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'negtermseq) in + Obj.repr( +# 437 "pitparser.mly" + ( _1 :: _3 ) +# 1924 "pitparser.ml" + : 'negtermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 439 "pitparser.mly" + ( [_1] ) +# 1931 "pitparser.ml" + : 'negtermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'negtermseq) in + Obj.repr( +# 443 "pitparser.mly" + ( _1 ) +# 1938 "pitparser.ml" + : 'gtermseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 445 "pitparser.mly" + ( [] ) +# 1944 "pitparser.ml" + : 'gtermseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'nesbindingseq) in + Obj.repr( +# 450 "pitparser.mly" + ( (("!" ^ (string_of_int (_2)), parse_extent()), _4) :: _6 ) +# 1953 "pitparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 452 "pitparser.mly" + ( [(("!" ^ (string_of_int (_2)), parse_extent()), _4)] ) +# 1961 "pitparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'gterm) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'nesbindingseq) in + Obj.repr( +# 454 "pitparser.mly" + ( (_1, _3) :: _5 ) +# 1970 "pitparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gterm) in + Obj.repr( +# 456 "pitparser.mly" + ( [(_1, _3)] ) +# 1978 "pitparser.ml" + : 'nesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'nesbindingseq) in + Obj.repr( +# 460 "pitparser.mly" + ( _1 ) +# 1985 "pitparser.ml" + : 'bindingseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 462 "pitparser.mly" + ( [] ) +# 1991 "pitparser.ml" + : 'bindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'tfnebindingseq) in + Obj.repr( +# 468 "pitparser.mly" + ( BFLet(_2, _4, _6) ) +# 2000 "pitparser.ml" + : 'tfnebindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'gformatseq) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'optphase) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'optint) in + Obj.repr( +# 470 "pitparser.mly" + ( BFNoUnif((_1,_3,_5), _6) ) +# 2010 "pitparser.ml" + : 'tfnebindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 1 : Pitptree.ident) in + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'optint) in + Obj.repr( +# 472 "pitparser.mly" + ( BFNoUnif((_1,[],-1),_2) ) +# 2018 "pitparser.ml" + : 'tfnebindingseq)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'gformatseq) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'optphase) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'optint) in + Obj.repr( +# 474 "pitparser.mly" + ( BFNoUnif((("table", parse_extent()),_3,_5), _6) ) +# 2027 "pitparser.ml" + : 'tfnebindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 478 "pitparser.mly" + ( _2 ) +# 2034 "pitparser.ml" + : 'optphase)) +; (fun __caml_parser_env -> + Obj.repr( +# 480 "pitparser.mly" + ( -1 ) +# 2040 "pitparser.ml" + : 'optphase)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 484 "pitparser.mly" + ( _2 ) +# 2047 "pitparser.ml" + : 'optint)) +; (fun __caml_parser_env -> + Obj.repr( +# 486 "pitparser.mly" + ( -1 ) +# 2053 "pitparser.ml" + : 'optint)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'gformatseq) in + Obj.repr( +# 490 "pitparser.mly" + ( PFGFunApp (_1, _3), parse_extent() ) +# 2061 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'gformat) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'gformat) in + Obj.repr( +# 492 "pitparser.mly" + ( PFGFunApp (("choice", parse_extent()), [_3; _5]), parse_extent() ) +# 2069 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 494 "pitparser.mly" + ( PFGIdent (_1), parse_extent() ) +# 2076 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'gformatseq) in + Obj.repr( +# 496 "pitparser.mly" + ( match _2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PFGTuple (_2), parse_extent() ) +# 2086 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'fbindingseq) in + Obj.repr( +# 501 "pitparser.mly" + ( PFGName (_2, _4), parse_extent() ) +# 2094 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 503 "pitparser.mly" + ( PFGName (_2, []), parse_extent() ) +# 2101 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 505 "pitparser.mly" + ( PFGAny (_2), parse_extent() ) +# 2108 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 507 "pitparser.mly" + ( PFGLet(_2, _4, _6), parse_extent() ) +# 2117 "pitparser.ml" + : 'gformat)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'negformatseq) in + Obj.repr( +# 512 "pitparser.mly" + ( _1 :: _3 ) +# 2125 "pitparser.ml" + : 'negformatseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 514 "pitparser.mly" + ( [_1] ) +# 2132 "pitparser.ml" + : 'negformatseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'negformatseq) in + Obj.repr( +# 518 "pitparser.mly" + ( _1 ) +# 2139 "pitparser.ml" + : 'gformatseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 520 "pitparser.mly" + ( [] ) +# 2145 "pitparser.ml" + : 'gformatseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'fnesbindingseq) in + Obj.repr( +# 525 "pitparser.mly" + ( (("!" ^ (string_of_int (_2)), parse_extent()), _4) :: _6 ) +# 2154 "pitparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : int) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 527 "pitparser.mly" + ( [(("!" ^ (string_of_int (_2)), parse_extent()), _4)] ) +# 2162 "pitparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'gformat) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'fnesbindingseq) in + Obj.repr( +# 529 "pitparser.mly" + ( (_1, _3) :: _5 ) +# 2171 "pitparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'gformat) in + Obj.repr( +# 531 "pitparser.mly" + ( [(_1, _3)] ) +# 2179 "pitparser.ml" + : 'fnesbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'fnesbindingseq) in + Obj.repr( +# 535 "pitparser.mly" + ( _1 ) +# 2186 "pitparser.ml" + : 'fbindingseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 537 "pitparser.mly" + ( [] ) +# 2192 "pitparser.ml" + : 'fbindingseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'typeid) in + Obj.repr( +# 543 "pitparser.mly" + ( (_1,_3, false) ) +# 2200 "pitparser.ml" + : 'mayfailvartype)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'typeid) in + Obj.repr( +# 546 "pitparser.mly" + ( (_1,_3, true) ) +# 2208 "pitparser.ml" + : 'mayfailvartype)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'mayfailvartype) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'mayfailvartypeseq) in + Obj.repr( +# 550 "pitparser.mly" + ( _1::_3 ) +# 2216 "pitparser.ml" + : 'mayfailvartypeseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'mayfailvartype) in + Obj.repr( +# 553 "pitparser.mly" + ( [_1] ) +# 2223 "pitparser.ml" + : 'mayfailvartypeseq)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'mayfailvartypeseq) in + Obj.repr( +# 557 "pitparser.mly" + ( _2 ) +# 2230 "pitparser.ml" + : 'forallmayfailvartype)) +; (fun __caml_parser_env -> + Obj.repr( +# 559 "pitparser.mly" + ( [] ) +# 2236 "pitparser.ml" + : 'forallmayfailvartype)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'forallmayfailvartype) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'treducotherwise) in + Obj.repr( +# 564 "pitparser.mly" + ( (_2,_3,_5) :: _6 ) +# 2246 "pitparser.ml" + : 'treducotherwise)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'forallmayfailvartype) in + let _3 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 566 "pitparser.mly" + ( [_2,_3,_5] ) +# 2255 "pitparser.ml" + : 'treducotherwise)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 4 : 'forallmayfailvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'term) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'treducotherwise) in + Obj.repr( +# 570 "pitparser.mly" + ( (_1,_2,_4) :: _5 ) +# 2265 "pitparser.ml" + : 'treducmayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'forallmayfailvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 572 "pitparser.mly" + ( [_1,_2,_4] ) +# 2274 "pitparser.ml" + : 'treducmayfail)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'treduc) in + Obj.repr( +# 576 "pitparser.mly" + ( (_1,_2,_4) :: _6 ) +# 2284 "pitparser.ml" + : 'treduc)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 578 "pitparser.mly" + ( [_1,_2,_4] ) +# 2293 "pitparser.ml" + : 'treduc)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 584 "pitparser.mly" + ( [(_1, _2, _4)] ) +# 2302 "pitparser.ml" + : 'eqlist)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 5 : 'forallvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'term) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'eqlist) in + Obj.repr( +# 586 "pitparser.mly" + ( (_1, _2, _4)::_6 ) +# 2312 "pitparser.ml" + : 'eqlist)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 592 "pitparser.mly" + ( PClause(_1,_3) ) +# 2320 "pitparser.ml" + : 'tclause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 594 "pitparser.mly" + ( PFact(_1) ) +# 2327 "pitparser.ml" + : 'tclause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 596 "pitparser.mly" + ( PEquiv(_1,_3,true) ) +# 2335 "pitparser.ml" + : 'tclause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'term) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'term) in + Obj.repr( +# 598 "pitparser.mly" + ( PEquiv(_1,_3,false) ) +# 2343 "pitparser.ml" + : 'tclause)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : 'forallmayfailvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tclause) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'tclauses) in + Obj.repr( +# 602 "pitparser.mly" + ( (_1,_2) :: _4 ) +# 2352 "pitparser.ml" + : 'tclauses)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'forallmayfailvartype) in + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tclause) in + Obj.repr( +# 604 "pitparser.mly" + ( [_1,_2] ) +# 2360 "pitparser.ml" + : 'tclauses)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tprocess) in + Obj.repr( +# 610 "pitparser.mly" + ( _2 ) +# 2367 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 612 "pitparser.mly" + ( PLetDef (_1,[]) ) +# 2374 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'ptermseq) in + Obj.repr( +# 614 "pitparser.mly" + ( PLetDef (_1, _3) ) +# 2382 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tprocess) in + Obj.repr( +# 616 "pitparser.mly" + ( PRepl _2 ) +# 2389 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : Pitptree.ident) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'tprocess) in + Obj.repr( +# 618 "pitparser.mly" + ( (* For convergence with CryptoVerif, we allow an identifier (bound on the number of copies) after a replication; it is simply ignored in ProVerif. *) + PRepl _5 ) +# 2399 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : int) in + Obj.repr( +# 621 "pitparser.mly" + ( let x = _1 in + if x = 0 then PNil else + input_error ("The only integer in a process is 0 for the nil process") (parse_extent()) ) +# 2408 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + Obj.repr( +# 625 "pitparser.mly" + ( (* For convergence with CryptoVerif, we allow yield instead of 0 *) + PNil ) +# 2415 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'newarg) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'typeid) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'opttprocess) in + Obj.repr( +# 628 "pitparser.mly" + ( PRestr(_2, _3, _5, _6) ) +# 2425 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 3 : 'pterm) in + let _4 = (Parsing.peek_val __caml_parser_env 1 : 'tprocess) in + let _5 = (Parsing.peek_val __caml_parser_env 0 : 'optelseprocess) in + Obj.repr( +# 630 "pitparser.mly" + ( PTest(_2,_4,_5) ) +# 2434 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'pterm) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'tpattern) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'opttprocess) in + Obj.repr( +# 632 "pitparser.mly" + ( PInput(_3,_5,_7) ) +# 2443 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'pterm) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'opttprocess) in + Obj.repr( +# 634 "pitparser.mly" + ( POutput(_3,_5,_7) ) +# 2452 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'tpattern) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 636 "pitparser.mly" + ( PLet(_2,_4,PNil,PNil) ) +# 2460 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'tpattern) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 1 : 'tprocess) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'optelseprocess) in + Obj.repr( +# 638 "pitparser.mly" + ( PLet(_2,_4,_6,_7) ) +# 2470 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 640 "pitparser.mly" + ( PLetFilter(_2,_4,PNil,PNil) ) +# 2478 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 1 : 'tprocess) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'optelseprocess) in + Obj.repr( +# 642 "pitparser.mly" + ( (* Approximating the else clause with a parallel composition + is not correct for trace reconstruction *) + PLetFilter(_2,_4,_6,_7) ) +# 2490 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'ptermseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'opttprocess) in + Obj.repr( +# 646 "pitparser.mly" + ( PInsert(_2, _4, _6) ) +# 2499 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 3 : 'tpatternseq) in + let _6 = (Parsing.peek_val __caml_parser_env 1 : 'optinprocess) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'optelseprocess) in + Obj.repr( +# 648 "pitparser.mly" + ( PGet(_2, _4, None, _6, _7) ) +# 2509 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 7 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 5 : 'tpatternseq) in + let _7 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _8 = (Parsing.peek_val __caml_parser_env 1 : 'optinprocess) in + let _9 = (Parsing.peek_val __caml_parser_env 0 : 'optelseprocess) in + Obj.repr( +# 650 "pitparser.mly" + ( PGet(_2, _4, Some _7, _8, _9) ) +# 2520 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tprocess) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'tprocess) in + Obj.repr( +# 652 "pitparser.mly" + ( PPar(_1,_3) ) +# 2528 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : Pitptree.ident) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'ptermseq) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'opttprocess) in + Obj.repr( +# 654 "pitparser.mly" + ( PEvent(_2, _4, _6) ) +# 2537 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'opttprocess) in + Obj.repr( +# 656 "pitparser.mly" + ( PEvent(_2, [], _3) ) +# 2545 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : int) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'opttprocess) in + Obj.repr( +# 658 "pitparser.mly" + ( PPhase(_2, _3) ) +# 2553 "pitparser.ml" + : 'tprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tprocess) in + Obj.repr( +# 662 "pitparser.mly" + ( _2 ) +# 2560 "pitparser.ml" + : 'opttprocess)) +; (fun __caml_parser_env -> + Obj.repr( +# 664 "pitparser.mly" + ( PNil ) +# 2566 "pitparser.ml" + : 'opttprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tprocess) in + Obj.repr( +# 668 "pitparser.mly" + ( _2 ) +# 2573 "pitparser.ml" + : 'optinprocess)) +; (fun __caml_parser_env -> + Obj.repr( +# 670 "pitparser.mly" + ( PNil ) +# 2579 "pitparser.ml" + : 'optinprocess)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'tprocess) in + Obj.repr( +# 674 "pitparser.mly" + ( _2 ) +# 2586 "pitparser.ml" + : 'optelseprocess)) +; (fun __caml_parser_env -> + Obj.repr( +# 676 "pitparser.mly" + ( PNil ) +# 2592 "pitparser.ml" + : 'optelseprocess)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 680 "pitparser.mly" + ( PPatVar(_1, None) ) +# 2599 "pitparser.ml" + : 'tpattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'typeid) in + Obj.repr( +# 682 "pitparser.mly" + ( PPatVar(_1, Some _3) ) +# 2607 "pitparser.ml" + : 'tpattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'tpatternseq) in + Obj.repr( +# 684 "pitparser.mly" + ( match _2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PPatTuple(_2) ) +# 2617 "pitparser.ml" + : 'tpattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'tpatternseq) in + Obj.repr( +# 689 "pitparser.mly" + ( PPatFunApp(_1,_3) ) +# 2625 "pitparser.ml" + : 'tpattern)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 691 "pitparser.mly" + ( PPatEqual(_2) ) +# 2632 "pitparser.ml" + : 'tpattern)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'tpattern) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'nepatternseq) in + Obj.repr( +# 695 "pitparser.mly" + ( _1 :: _3 ) +# 2640 "pitparser.ml" + : 'nepatternseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'tpattern) in + Obj.repr( +# 697 "pitparser.mly" + ( [_1] ) +# 2647 "pitparser.ml" + : 'nepatternseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'nepatternseq) in + Obj.repr( +# 701 "pitparser.mly" + ( _1 ) +# 2654 "pitparser.ml" + : 'tpatternseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 703 "pitparser.mly" + ( [] ) +# 2660 "pitparser.ml" + : 'tpatternseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 3 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'ptermseq) in + Obj.repr( +# 709 "pitparser.mly" + ( PPFunApp (_1, _3), parse_extent() ) +# 2668 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 3 : 'pterm) in + let _5 = (Parsing.peek_val __caml_parser_env 1 : 'pterm) in + Obj.repr( +# 711 "pitparser.mly" + ( Param.has_choice := true; + PPFunApp(("choice", parse_extent()), [_3; _5]), parse_extent() ) +# 2677 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : Pitptree.ident) in + Obj.repr( +# 714 "pitparser.mly" + ( PPIdent (_1), parse_extent() ) +# 2684 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 716 "pitparser.mly" + ( PPFunApp(("=", parse_extent()), [_1; _3]), parse_extent() ) +# 2692 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 718 "pitparser.mly" + ( PPFunApp(("<>", parse_extent()), [_1; _3]), parse_extent() ) +# 2700 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _3 = (Parsing.peek_val __caml_parser_env 1 : 'pterm) in + Obj.repr( +# 720 "pitparser.mly" + ( PPFunApp(("not", parse_extent()), [_3]), parse_extent() ) +# 2707 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 722 "pitparser.mly" + ( PPFunApp(("||", parse_extent()), [_1; _3]), parse_extent() ) +# 2715 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 724 "pitparser.mly" + ( PPFunApp(("&&", parse_extent()), [_1; _3]), parse_extent() ) +# 2723 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 5 : Pitptree.ident) in + let _3 = (Parsing.peek_val __caml_parser_env 4 : 'newarg) in + let _5 = (Parsing.peek_val __caml_parser_env 2 : 'typeid) in + let _7 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 726 "pitparser.mly" + ( PPRestr(_2, _3, _5, _7), parse_extent() ) +# 2733 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _4 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 728 "pitparser.mly" + ( PPTest(_2,_4,None), parse_extent() ) +# 2741 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'pterm) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 730 "pitparser.mly" + ( PPTest(_2,_4,Some _6), parse_extent() ) +# 2750 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'tpattern) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 732 "pitparser.mly" + ( PPLet(_2,_4,_6,None), parse_extent() ) +# 2759 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'tpattern) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 734 "pitparser.mly" + ( PPLet(_2,_4,_6,Some _8), parse_extent() ) +# 2769 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 4 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 736 "pitparser.mly" + ( PPLetFilter(_2,_4,_6,None), parse_extent() ) +# 2778 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 6 : 'nevartype) in + let _4 = (Parsing.peek_val __caml_parser_env 4 : 'pterm) in + let _6 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _8 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 738 "pitparser.mly" + ( PPLetFilter(_2,_4,_6,Some _8), parse_extent() ) +# 2788 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _2 = (Parsing.peek_val __caml_parser_env 1 : 'ptermseq) in + Obj.repr( +# 740 "pitparser.mly" + ( match _2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PPTuple (l), parse_extent() ) +# 2798 "pitparser.ml" + : 'pterm)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 2 : 'pterm) in + let _3 = (Parsing.peek_val __caml_parser_env 0 : 'neptermseq) in + Obj.repr( +# 747 "pitparser.mly" + ( _1 :: _3 ) +# 2806 "pitparser.ml" + : 'neptermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'pterm) in + Obj.repr( +# 749 "pitparser.mly" + ( [_1] ) +# 2813 "pitparser.ml" + : 'neptermseq)) +; (fun __caml_parser_env -> + let _1 = (Parsing.peek_val __caml_parser_env 0 : 'neptermseq) in + Obj.repr( +# 753 "pitparser.mly" + ( _1 ) +# 2820 "pitparser.ml" + : 'ptermseq)) +; (fun __caml_parser_env -> + Obj.repr( +# 755 "pitparser.mly" + ( [] ) +# 2826 "pitparser.ml" + : 'ptermseq)) +(* Entry all *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +(* Entry lib *) +; (fun __caml_parser_env -> raise (Parsing.YYexit (Parsing.peek_val __caml_parser_env 0))) +|] +let yytables = + { Parsing.actions=yyact; + Parsing.transl_const=yytransl_const; + Parsing.transl_block=yytransl_block; + Parsing.lhs=yylhs; + Parsing.len=yylen; + Parsing.defred=yydefred; + Parsing.dgoto=yydgoto; + Parsing.sindex=yysindex; + Parsing.rindex=yyrindex; + Parsing.gindex=yygindex; + Parsing.tablesize=yytablesize; + Parsing.table=yytable; + Parsing.check=yycheck; + Parsing.error_function=parse_error; + Parsing.names_const=yynames_const; + Parsing.names_block=yynames_block } +let all (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 1 lexfun lexbuf : Pitptree.tdecl list * Pitptree.tprocess * Pitptree.tprocess option) +let lib (lexfun : Lexing.lexbuf -> token) (lexbuf : Lexing.lexbuf) = + (Parsing.yyparse yytables 2 lexfun lexbuf : Pitptree.tdecl list) diff --git a/preinstallTTool/linux/proverif/src/pitparser.mli b/preinstallTTool/linux/proverif/src/pitparser.mli new file mode 100644 index 0000000000000000000000000000000000000000..d25f3c7c041160eb9db9d9e7c7eb898b5845a095 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitparser.mli @@ -0,0 +1,79 @@ +type token = + | CHOICE + | STAR + | COMMA + | LPAREN + | RPAREN + | LBRACKET + | RBRACKET + | BAR + | SEMI + | NEW + | OUT + | IN + | IDENT of (Pitptree.ident) + | STRING of (Pitptree.ident) + | INT of (int) + | REPL + | IF + | THEN + | ELSE + | EQUAL + | FUN + | EQUATION + | REDUCTION + | PREDICATE + | PROCESS + | SLASH + | DOT + | EOF + | LET + | QUERY + | BEFORE + | PUTBEGIN + | NONINTERF + | EVENT + | NOT + | ELIMTRUE + | FREE + | SUCHTHAT + | CLAUSES + | RED + | EQUIV + | EQUIVEQ + | WEDGE + | DIFF + | COLON + | NOUNIF + | PHASE + | AMONG + | WEAKSECRET + | PARAM + | ORTEXT + | FAIL + | TYPE + | SET + | FORALL + | CONST + | INJEVENT + | OR + | CHANNEL + | LETFUN + | DEFINE + | EXPAND + | YIELD + | LEQ + | PROBA + | LBRACE + | RBRACE + | PROOF + | EQUIVALENCE + | OTHERWISE + | TABLE + | INSERT + | GET + +val all : + (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Pitptree.tdecl list * Pitptree.tprocess * Pitptree.tprocess option +val lib : + (Lexing.lexbuf -> token) -> Lexing.lexbuf -> Pitptree.tdecl list diff --git a/preinstallTTool/linux/proverif/src/pitparser.mly b/preinstallTTool/linux/proverif/src/pitparser.mly new file mode 100644 index 0000000000000000000000000000000000000000..bac3e25cf0a630d98f7ad5a2f8321098ef418d2b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitparser.mly @@ -0,0 +1,756 @@ +%{ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +%} +%{ + +open Parsing_helper +open Ptree +open Pitptree +exception Syntax + +%} + +%token CHOICE +%token STAR +%token COMMA +%token LPAREN +%token RPAREN +%token LBRACKET +%token RBRACKET +%token BAR +%token SEMI +%token NEW +%token OUT +%token IN +%token <Pitptree.ident> IDENT +%token <Pitptree.ident> STRING +%token <int> INT +%token REPL +%token IF +%token THEN +%token ELSE +%token EQUAL +%token FUN +%token EQUATION +%token REDUCTION +%token PREDICATE +%token PROCESS +%token SLASH +%token DOT +%token EOF +%token LET +%token QUERY +%token BEFORE +%token PUTBEGIN +%token NONINTERF +%token EVENT +%token NOT +%token ELIMTRUE +%token FREE +%token SUCHTHAT +%token CLAUSES +%token RED +%token EQUIV +%token EQUIVEQ +%token WEDGE +%token DIFF +%token COLON +%token NOUNIF +%token PHASE +%token AMONG +%token WEAKSECRET +%token PARAM +%token ORTEXT +%token FAIL + +/* Typed front-end only */ +%token TYPE +%token SET +%token FORALL +%token CONST +%token INJEVENT +%token OR +%token CHANNEL +%token LETFUN +%token DEFINE +%token EXPAND +%token YIELD +%token LEQ +%token PROBA +%token LBRACE +%token RBRACE +%token PROOF +%token EQUIVALENCE +%token OTHERWISE + +/* Tables of keys */ +%token TABLE +%token INSERT +%token GET + +/* Precedence (from low to high) and associativities */ +%nonassoc BEFORE +%right BAR +%right OR +%right WEDGE +%nonassoc EQUAL +%nonassoc DIFF +%nonassoc REPL + +%start all +%type <Pitptree.tdecl list * Pitptree.tprocess * Pitptree.tprocess option> all + +%start lib +%type <Pitptree.tdecl list> lib + +%% + +/*** Typed front-end ***/ + +lib: + TYPE IDENT options DOT lib + { (* Options are ignored, they are supported for compatibility with + CryptoVerif only *) + TTypeDecl($2) :: $5 } +| FUN IDENT LPAREN typeidseq RPAREN COLON typeid options DOT lib + { (TFunDecl($2, $4, $7, $8)) :: $10 } + +| FUN IDENT LPAREN typeidseq RPAREN COLON typeid REDUCTION treducmayfail options DOT lib + { (TReducFail($2,$4,$7,$9, $10)) :: $12 } + +| REDUCTION treduc options DOT lib + { (TReduc($2,$3)) :: $5 } + +| CONST neidentseq COLON typeid options DOT lib + { (List.map (fun x -> TConstDecl(x, $4, $5)) $2) @ $7 } +| EQUATION eqlist options DOT lib + { (TEquation($2, $3)) :: $5 } +| EVENT IDENT DOT lib + { (TEventDecl($2, [])) :: $4 } +| EVENT IDENT LPAREN typeidseq RPAREN DOT lib + { (TEventDecl($2, $4)) :: $7 } +| PREDICATE IDENT LPAREN typeidseq RPAREN options DOT lib + { (TPredDecl($2, $4, $6)) :: $8 } +| PREDICATE IDENT options DOT lib + { (TPredDecl($2, [], $3)) :: $5 } +| TABLE IDENT LPAREN typeidseq RPAREN DOT lib + { (TTableDecl($2, $4)) :: $7 } +| LET IDENT EQUAL tprocess DOT lib + { (TPDef($2,[],$4)) :: $6 } +| LET IDENT LPAREN vartype RPAREN EQUAL tprocess DOT lib + { (TPDef($2,$4,$7)) :: $9 } +| LETFUN IDENT EQUAL pterm DOT lib + { (TLetFun($2,[],$4)) :: $6 } +| LETFUN IDENT LPAREN vartype RPAREN EQUAL pterm DOT lib + { (TLetFun($2,$4,$7)) :: $9 } +| SET IDENT EQUAL IDENT DOT lib + { (TSet($2,S $4)) :: $6 } +| SET IDENT EQUAL INT DOT lib + { (TSet($2,I $4)) :: $6 } +| NOUNIF nevartype SEMI tfnebindingseq DOT lib + { (TNoUnif ($2, $4)) :: $6 } +| NOUNIF tfnebindingseq DOT lib + { (TNoUnif ([], $2)) :: $4 } +| QUERY nevartype SEMI tqueryseq DOT lib + { (TQuery($2,$4)) :: $6 } +| QUERY tqueryseq DOT lib + { (TQuery([],$2)) :: $4 } +| NONINTERF nevartype SEMI niseq DOT lib + { (TNoninterf($2, $4)) :: $6 } +| NONINTERF niseq DOT lib + { (TNoninterf([], $2)) :: $4 } +| WEAKSECRET IDENT DOT lib + { (TWeaksecret($2)) :: $4 } +| NOT nevartype SEMI gterm DOT lib + { (TNot($2, $4)) :: $6 } +| NOT gterm DOT lib + { (TNot([], $2)) :: $4 } +| PARAM neidentseq options DOT lib + { (* Supported for compatility with CryptoVerif only *) + $5 } +| PROBA IDENT DOT lib + { (* Supported for compatility with CryptoVerif only *) + $4 } +| PROOF LBRACE proof RBRACE lib + { (* Supported for compatility with CryptoVerif only *) + $5 } +| ELIMTRUE mayfailvartypeseq SEMI term DOT lib + { (TElimtrue ($2,$4)) :: $6 } +| ELIMTRUE term DOT lib + { (TElimtrue ([],$2)) :: $4 } +| CHANNEL neidentseq DOT lib + { (* For compatibility with CryptoVerif, allow + channel c1...cn. + as a synonym for + free c1...cn:channel. *) + (List.map (fun x -> TFree(x, ("channel", dummy_ext), [])) $2) @ $4 } +| FREE neidentseq COLON typeid options DOT lib + { (List.map (fun x -> TFree(x, $4, $5)) $2) @ $7 } +| CLAUSES tclauses lib + { (TClauses($2)) :: $3 } +| DEFINE IDENT LPAREN typeidseq RPAREN LBRACE lib RBRACE lib + { (TDefine($2, $4, $7)) :: $9 } +| EXPAND IDENT LPAREN typeidseq RPAREN DOT lib + { (TExpand($2, $4)) :: $7 } +| + { [] } + +all: +| lib PROCESS tprocess EOF + { $1, $3, None } +| lib EQUIVALENCE tprocess tprocess EOF + { + Param.equivalence := true; + $1, $3, Some $4 } + +/* Proofs (for CryptoVerif compatibility only) */ + +prooftoken: + IDENT + { $1 } +| STRING + { $1 } +| INT + { string_of_int $1, parse_extent() } +| STAR + { "*", parse_extent() } +| DOT + { ".", parse_extent() } +| SET + { "set", parse_extent() } +| EQUAL + { "=", parse_extent() } +| COMMA + { ",", parse_extent() } + +proofcommand: + prooftoken + { [$1] } +| prooftoken proofcommand + { $1 :: $2 } + +proof: + proofcommand + { [$1] } +| proofcommand SEMI proof + { $1 :: $3 } + +/* Options, environments, ... */ + +options: + LBRACKET neidentseq RBRACKET + { $2 } +| + { [] } + +neidentseq: + IDENT COMMA neidentseq + { $1 :: $3 } +| IDENT + { [$1] } + +newarg: + + { None } +| LBRACKET RBRACKET + { Some [] } +| LBRACKET neidentseq RBRACKET + { Some ($2) } + +nevartype: + IDENT COLON typeid COMMA nevartype + { ($1,$3)::$5 } +| + IDENT COLON typeid + { [($1,$3)] } + +vartype: + nevartype + { $1 } +| + { [] } + +forallvartype: + FORALL nevartype SEMI + { $2 } +| + { [] } + +typeid: + IDENT + { $1 } +| CHANNEL + { (* channel is allowed as a type, even though it is also a keyword for the declaration channel c1...cn. *) + "channel", parse_extent() } + +typeidseq: + netypeidseq + { $1 } +| + { [] } + +netypeidseq: + typeid COMMA netypeidseq + { $1 :: $3 } +| typeid + { [$1] } + +/* Terms */ + +term: +| FAIL + { PFail, parse_extent () } +| IDENT LPAREN termseq RPAREN + { PFunApp ($1, $3), parse_extent() } +| CHOICE LBRACKET term COMMA term RBRACKET + { Param.has_choice := true; + PFunApp(("choice", parse_extent()), [$3; $5]), parse_extent() } +| IDENT + { PIdent ($1), parse_extent() } +| term EQUAL term + { PFunApp(("=", parse_extent()), [$1; $3]), parse_extent() } +| term DIFF term + { PFunApp(("<>", parse_extent()), [$1; $3]), parse_extent() } +| NOT LPAREN term RPAREN + { PFunApp(("not", parse_extent()), [$3]), parse_extent() } +| term OR term + { PFunApp(("||", parse_extent()), [$1; $3]), parse_extent() } +| term WEDGE term + { PFunApp(("&&", parse_extent()), [$1; $3]), parse_extent() } +| LPAREN termseq RPAREN + { match $2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PTuple (l), parse_extent() } + +netermseq: + term COMMA netermseq + { $1 :: $3 } +| term + { [$1] } + +termseq: + netermseq + { $1 } +| + { [] } + +/* Noninterf */ + +ni: + IDENT AMONG LPAREN netermseq RPAREN + { ($1, Some $4) } +| IDENT + { ($1, None) } + +niseq: + ni COMMA niseq + { $1 :: $3 } +| ni + { [$1] } + +/* Queries */ + +tqueryseq: + tquery SEMI tqueryseq + { $1 :: $3 } +| tquery + { [$1] } + +tquery: + gterm + { PRealQuery($1) } +| PUTBEGIN EVENT COLON neidentseq + { PPutBegin(false, $4) } +| PUTBEGIN INJEVENT COLON neidentseq + { PPutBegin(true, $4) } + +gterm: + IDENT LPAREN gtermseq RPAREN + { PGFunApp ($1, $3), parse_extent() } +| IDENT + { PGIdent ($1), parse_extent() } +| IDENT LPAREN gtermseq RPAREN PHASE INT + { PGPhase($1, $3, $6), parse_extent() } +| TABLE LPAREN gterm RPAREN PHASE INT + { PGPhase(("table", parse_extent()), [$3], $6), parse_extent() } +| gterm EQUAL gterm + { PGFunApp(("=", parse_extent()), [$1; $3]), parse_extent() } +| gterm DIFF gterm + { PGFunApp(("<>", parse_extent()), [$1; $3]), parse_extent() } +| NOT LPAREN gterm RPAREN + { PGFunApp(("not", parse_extent()), [$3]), parse_extent() } +| gterm OR gterm + { PGFunApp(("||", parse_extent()), [$1; $3]), parse_extent() } +| gterm WEDGE gterm + { PGFunApp(("&&", parse_extent()), [$1; $3]), parse_extent() } +| CHOICE LBRACKET gterm COMMA gterm RBRACKET + { PGFunApp(("choice", parse_extent()), [$3; $5]), parse_extent() } +| EVENT LPAREN gtermseq RPAREN + { PGFunApp(("event",parse_extent()), $3), parse_extent() } +| INJEVENT LPAREN gtermseq RPAREN + { PGFunApp(("inj-event",parse_extent()), $3), parse_extent() } +| TABLE LPAREN gterm RPAREN + { PGFunApp(("table",parse_extent()), [$3]), parse_extent() } +| gterm BEFORE gterm + { PGFunApp(("==>", parse_extent()), [$1;$3]), parse_extent() } +| LPAREN gtermseq RPAREN + { match $2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PGTuple (l), parse_extent() } +| NEW IDENT LBRACKET bindingseq RBRACKET + { PGName ($2, $4), parse_extent() } +| NEW IDENT + { PGName ($2, []), parse_extent() } +| LET IDENT EQUAL gterm IN gterm + { PGLet($2, $4, $6), parse_extent() } + +negtermseq: + gterm COMMA negtermseq + { $1 :: $3 } +| gterm + { [$1] } + +gtermseq: + negtermseq + { $1 } +| + { [] } + + +nesbindingseq: + REPL INT EQUAL gterm SEMI nesbindingseq + { (("!" ^ (string_of_int ($2)), parse_extent()), $4) :: $6 } +| REPL INT EQUAL gterm + { [(("!" ^ (string_of_int ($2)), parse_extent()), $4)] } +| IDENT EQUAL gterm SEMI nesbindingseq + { ($1, $3) :: $5 } +| IDENT EQUAL gterm + { [($1, $3)] } + +bindingseq: + nesbindingseq + { $1 } +| + { [] } + +/* Nounif */ + +tfnebindingseq: + LET IDENT EQUAL gformat IN tfnebindingseq + { BFLet($2, $4, $6) } +| IDENT LPAREN gformatseq RPAREN optphase optint + { BFNoUnif(($1,$3,$5), $6) } +| IDENT optint + { BFNoUnif(($1,[],-1),$2) } +| TABLE LPAREN gformatseq RPAREN optphase optint + { BFNoUnif((("table", parse_extent()),$3,$5), $6) } + +optphase: + PHASE INT + { $2 } +| + { -1 } + +optint: + SLASH INT + { $2 } +| + { -1 } + +gformat: + IDENT LPAREN gformatseq RPAREN + { PFGFunApp ($1, $3), parse_extent() } +| CHOICE LBRACKET gformat COMMA gformat RBRACKET + { PFGFunApp (("choice", parse_extent()), [$3; $5]), parse_extent() } +| IDENT + { PFGIdent ($1), parse_extent() } +| LPAREN gformatseq RPAREN + { match $2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PFGTuple ($2), parse_extent() } +| NEW IDENT LBRACKET fbindingseq RBRACKET + { PFGName ($2, $4), parse_extent() } +| NEW IDENT + { PFGName ($2, []), parse_extent() } +| STAR IDENT + { PFGAny ($2), parse_extent() } +| LET IDENT EQUAL gformat IN gformat + { PFGLet($2, $4, $6), parse_extent() } + + +negformatseq: + gformat COMMA negformatseq + { $1 :: $3 } +| gformat + { [$1] } + +gformatseq: + negformatseq + { $1 } +| + { [] } + + +fnesbindingseq: + REPL INT EQUAL gformat SEMI fnesbindingseq + { (("!" ^ (string_of_int ($2)), parse_extent()), $4) :: $6 } +| REPL INT EQUAL gformat + { [(("!" ^ (string_of_int ($2)), parse_extent()), $4)] } +| IDENT EQUAL gformat SEMI fnesbindingseq + { ($1, $3) :: $5 } +| IDENT EQUAL gformat + { [($1, $3)] } + +fbindingseq: + fnesbindingseq + { $1 } +| + { [] } + +/* Rewrite rules */ + +mayfailvartype: + IDENT COLON typeid + { ($1,$3, false) } +| + IDENT COLON typeid ORTEXT FAIL + { ($1,$3, true) } + +mayfailvartypeseq: + mayfailvartype COMMA mayfailvartypeseq + { $1::$3 } +| + mayfailvartype + { [$1] } + +forallmayfailvartype: + FORALL mayfailvartypeseq SEMI + { $2 } +| + { [] } + + +treducotherwise: + OTHERWISE forallmayfailvartype term EQUAL term treducotherwise + { ($2,$3,$5) :: $6 } +| OTHERWISE forallmayfailvartype term EQUAL term + { [$2,$3,$5] } + +treducmayfail: + forallmayfailvartype term EQUAL term treducotherwise + { ($1,$2,$4) :: $5 } +| forallmayfailvartype term EQUAL term + { [$1,$2,$4] } + +treduc: + forallvartype term EQUAL term SEMI treduc + { ($1,$2,$4) :: $6 } +| forallvartype term EQUAL term + { [$1,$2,$4] } + +/* Equations */ + +eqlist: + forallvartype term EQUAL term + { [($1, $2, $4)] } +| forallvartype term EQUAL term SEMI eqlist + { ($1, $2, $4)::$6 } + +/* Clauses */ + +tclause: + term RED term + { PClause($1,$3) } +| term + { PFact($1) } +| term EQUIV term + { PEquiv($1,$3,true) } +| term EQUIVEQ term + { PEquiv($1,$3,false) } + +tclauses: + forallmayfailvartype tclause SEMI tclauses + { ($1,$2) :: $4 } +| forallmayfailvartype tclause DOT + { [$1,$2] } + +/* Process */ + +tprocess: + LPAREN tprocess RPAREN + { $2 } +| IDENT + { PLetDef ($1,[]) } +| IDENT LPAREN ptermseq RPAREN + { PLetDef ($1, $3) } +| REPL tprocess %prec REPL + { PRepl $2 } +| REPL IDENT LEQ IDENT tprocess %prec REPL + { (* For convergence with CryptoVerif, we allow an identifier (bound on the number of copies) after a replication; it is simply ignored in ProVerif. *) + PRepl $5 } +| INT + { let x = $1 in + if x = 0 then PNil else + input_error ("The only integer in a process is 0 for the nil process") (parse_extent()) } +| YIELD + { (* For convergence with CryptoVerif, we allow yield instead of 0 *) + PNil } +| NEW IDENT newarg COLON typeid opttprocess + { PRestr($2, $3, $5, $6) } +| IF pterm THEN tprocess optelseprocess + { PTest($2,$4,$5) } +| IN LPAREN pterm COMMA tpattern RPAREN opttprocess + { PInput($3,$5,$7) } +| OUT LPAREN pterm COMMA pterm RPAREN opttprocess + { POutput($3,$5,$7) } +| LET tpattern EQUAL pterm + { PLet($2,$4,PNil,PNil) } +| LET tpattern EQUAL pterm IN tprocess optelseprocess + { PLet($2,$4,$6,$7) } +| LET nevartype SUCHTHAT pterm + { PLetFilter($2,$4,PNil,PNil) } +| LET nevartype SUCHTHAT pterm IN tprocess optelseprocess + { (* Approximating the else clause with a parallel composition + is not correct for trace reconstruction *) + PLetFilter($2,$4,$6,$7) } +| INSERT IDENT LPAREN ptermseq RPAREN opttprocess + { PInsert($2, $4, $6) } +| GET IDENT LPAREN tpatternseq RPAREN optinprocess optelseprocess + { PGet($2, $4, None, $6, $7) } +| GET IDENT LPAREN tpatternseq RPAREN SUCHTHAT pterm optinprocess optelseprocess + { PGet($2, $4, Some $7, $8, $9) } +| tprocess BAR tprocess + { PPar($1,$3) } +| EVENT IDENT LPAREN ptermseq RPAREN opttprocess + { PEvent($2, $4, $6) } +| EVENT IDENT opttprocess + { PEvent($2, [], $3) } +| PHASE INT opttprocess + { PPhase($2, $3) } + +opttprocess: + SEMI tprocess + { $2 } +| + { PNil } + +optinprocess: + IN tprocess + { $2 } +| + { PNil } + +optelseprocess: + ELSE tprocess + { $2 } +| + { PNil } + +tpattern: + IDENT + { PPatVar($1, None) } +| IDENT COLON typeid + { PPatVar($1, Some $3) } +| LPAREN tpatternseq RPAREN + { match $2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PPatTuple($2) } +| IDENT LPAREN tpatternseq RPAREN + { PPatFunApp($1,$3) } +| EQUAL pterm + { PPatEqual($2) } + +nepatternseq: + tpattern COMMA nepatternseq + { $1 :: $3 } +| tpattern + { [$1] } + +tpatternseq: + nepatternseq + { $1 } +| + { [] } + +/* Process terms */ + +pterm: + IDENT LPAREN ptermseq RPAREN + { PPFunApp ($1, $3), parse_extent() } +| CHOICE LBRACKET pterm COMMA pterm RBRACKET + { Param.has_choice := true; + PPFunApp(("choice", parse_extent()), [$3; $5]), parse_extent() } +| IDENT + { PPIdent ($1), parse_extent() } +| pterm EQUAL pterm + { PPFunApp(("=", parse_extent()), [$1; $3]), parse_extent() } +| pterm DIFF pterm + { PPFunApp(("<>", parse_extent()), [$1; $3]), parse_extent() } +| NOT LPAREN pterm RPAREN + { PPFunApp(("not", parse_extent()), [$3]), parse_extent() } +| pterm OR pterm + { PPFunApp(("||", parse_extent()), [$1; $3]), parse_extent() } +| pterm WEDGE pterm + { PPFunApp(("&&", parse_extent()), [$1; $3]), parse_extent() } +| NEW IDENT newarg COLON typeid SEMI pterm + { PPRestr($2, $3, $5, $7), parse_extent() } +| IF pterm THEN pterm + { PPTest($2,$4,None), parse_extent() } +| IF pterm THEN pterm ELSE pterm + { PPTest($2,$4,Some $6), parse_extent() } +| LET tpattern EQUAL pterm IN pterm + { PPLet($2,$4,$6,None), parse_extent() } +| LET tpattern EQUAL pterm IN pterm ELSE pterm + { PPLet($2,$4,$6,Some $8), parse_extent() } +| LET nevartype SUCHTHAT pterm IN pterm + { PPLetFilter($2,$4,$6,None), parse_extent() } +| LET nevartype SUCHTHAT pterm IN pterm ELSE pterm + { PPLetFilter($2,$4,$6,Some $8), parse_extent() } +| LPAREN ptermseq RPAREN + { match $2 with + [t] -> t (* Allow parentheses for priorities of infix operators; + Tuples cannot have one element. *) + | l -> PPTuple (l), parse_extent() } + +neptermseq: + pterm COMMA neptermseq + { $1 :: $3 } +| pterm + { [$1] } + +ptermseq: + neptermseq + { $1 } +| + { [] } + diff --git a/preinstallTTool/linux/proverif/src/pitptree.cmi b/preinstallTTool/linux/proverif/src/pitptree.cmi new file mode 100644 index 0000000000000000000000000000000000000000..7ef795fc1d9b4d98f495fec446ecd966f2956b79 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitptree.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitptree.mli b/preinstallTTool/linux/proverif/src/pitptree.mli new file mode 100644 index 0000000000000000000000000000000000000000..7c83701467fd17642771d21fcdc5effd588a7390 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitptree.mli @@ -0,0 +1,153 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Typed front-end *) + +(* Terms *) + +type ident = Ptree.ident + +type term = PIdent of ident + | PFail + | PFunApp of ident * term_e list + | PTuple of term_e list + +and term_e = term * Parsing_helper.extent + +(* Equational theory *) + +type equation = term_e * term_e + +(* Functions defined by reduction rules *) + +type fundef = (term_e * term_e) list + +(* Nounif *) + +type gformat = + PFGIdent of ident + | PFGFunApp of ident * gformat_e list + | PFGTuple of gformat_e list + | PFGName of ident * (ident * gformat_e) list + | PFGAny of ident + | PFGLet of ident * gformat_e * gformat_e + +and gformat_e = gformat * Parsing_helper.extent + +type nounif_t = + BFLet of ident * gformat_e * nounif_t + | BFNoUnif of (ident * gformat_e list * int) * int + +(* Queries *) + +type gterm = + PGIdent of ident + | PGFunApp of ident * gterm_e list + | PGPhase of ident * gterm_e list * int + | PGTuple of gterm_e list + | PGName of ident * (ident * gterm_e) list + | PGLet of ident * gterm_e * gterm_e + +and gterm_e = gterm * Parsing_helper.extent + +type tquery = + PPutBegin of bool * ident list + (* bool value: false -> non-inj event, true -> inj event *) + | PRealQuery of gterm_e + +(* Clauses *) + +type tclause = + PClause of term_e * term_e + | PFact of term_e + | PEquiv of term_e * term_e * bool + +(* Processes *) + +type pterm = + PPIdent of ident + | PPFunApp of ident * pterm_e list + | PPTuple of pterm_e list + | PPRestr of ident * ident list option(*variables to include as arguments*) * ident(*type*) * pterm_e + | PPTest of pterm_e * pterm_e * pterm_e option + | PPLet of tpattern * pterm_e * pterm_e * pterm_e option + | PPLetFilter of (ident * ident(*type*)) list * pterm_e * pterm_e * pterm_e option + +and pterm_e = pterm * Parsing_helper.extent + +and tpattern = + PPatVar of ident * ident option(*type*) + | PPatTuple of tpattern list + | PPatFunApp of ident * tpattern list + | PPatEqual of pterm_e + +type tprocess = + PNil + | PPar of tprocess * tprocess + | PRepl of tprocess + | PRestr of ident * ident list option(*variables to include as arguments*) * ident(*type*) * tprocess + | PLetDef of ident * pterm_e list + | PTest of pterm_e * tprocess * tprocess + | PInput of pterm_e * tpattern * tprocess + | POutput of pterm_e * pterm_e * tprocess + | PLet of tpattern * pterm_e * tprocess * tprocess + | PLetFilter of (ident * ident(*type*)) list * pterm_e * tprocess * tprocess + | PEvent of ident * pterm_e list * tprocess + | PPhase of int * tprocess + | PInsert of ident * pterm_e list * tprocess + | PGet of ident * tpattern list * pterm_e option * tprocess * tprocess + +(* Declarations *) + +type envdecl = (ident(*variable*) * ident(*type*)) list +type may_fail_env_decl = (ident(*variable*) * ident(*type*) * bool (* may-fail*)) list + +type tdecl = + TTypeDecl of ident (* type declaration *) + | TFunDecl of ident * ident list(*argument types*) * ident(*result type*) * ident list(*options*) + | TEventDecl of ident * ident list(*argument types*) + | TConstDecl of ident * ident(*type*) * ident list(*options*) + | TReduc of (envdecl * term_e * term_e) list * ident list(*options*) + | TReducFail of ident * ident list * ident * (may_fail_env_decl * term_e * term_e) list * ident list(*options*) + | TEquation of (envdecl * term_e * term_e) list * ident list(*options*) + | TPredDecl of ident * ident list(*argument types*) * ident list(*options*) + | TTableDecl of ident * ident list(*argument types*) + | TSet of ident * Ptree.pval + | TPDef of ident * envdecl * tprocess + | TQuery of envdecl * tquery list + | TNoninterf of envdecl * (ident * term_e list option) list + | TWeaksecret of ident + | TNoUnif of envdecl * nounif_t + | TNot of envdecl * gterm_e + | TElimtrue of may_fail_env_decl * term_e + | TFree of ident * ident(*type*) * ident list(*options*) + | TClauses of (may_fail_env_decl * tclause) list + | TDefine of ident * ident list * tdecl list + | TExpand of ident * ident list + | TLetFun of ident * envdecl * pterm_e + + diff --git a/preinstallTTool/linux/proverif/src/pitransl.cmi b/preinstallTTool/linux/proverif/src/pitransl.cmi new file mode 100644 index 0000000000000000000000000000000000000000..2aedf14a35ea6b7bf94cc017ce69dff23e167875 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitransl.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitransl.cmx b/preinstallTTool/linux/proverif/src/pitransl.cmx new file mode 100644 index 0000000000000000000000000000000000000000..1a621cefab9ba22a043d2e5863efa93cee8747ff Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitransl.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pitransl.ml b/preinstallTTool/linux/proverif/src/pitransl.ml new file mode 100644 index 0000000000000000000000000000000000000000..3aca521ee67b54e66d6c46ae1c1de1b1256ca309 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitransl.ml @@ -0,0 +1,1720 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types +open Pitypes + +(* For key compromise *) +let session0 = { f_name = "session0"; + f_type = [], Param.sid_type; + f_private = false; + f_options = 0; + f_cat = Eq []; + f_initial_cat = Eq [] + } +let compromised_session = FunApp(session0, []) + +let session1 = Param.session1 +let comp_session_var = Terms.new_var "session" Param.sid_type + +(* For non-interference *) + +let bad_pred = Param.bad_pred + +(* Returns true when event f is present in the process. + Raises an error when event f is present several times in the same + then/else branch, so that it could be executed several times with + the same session identifiers *) + +let rec check_uniq_ev f = function + Nil -> false + | Par(p,q) -> + let present_p = check_uniq_ev f p in + let present_q = check_uniq_ev f q in + if present_p && present_q then + user_error ("Error: the event " ^ f.f_name ^ " is present several times in the same branch of a test.\nInjective agreement cannot be proved.\n"); + present_p || present_q + | Repl (p,_) -> check_uniq_ev f p + | Restr(a,_,p,_) -> check_uniq_ev f p + | Test(t,p,q,_) -> (check_uniq_ev f p) || (check_uniq_ev f q) + | Input(tc,pat,p,_) -> check_uniq_ev f p + | Output(tc,t,p,_) -> check_uniq_ev f p + | Let(pat,t,p,p',_) -> (check_uniq_ev f p) || (check_uniq_ev f p') + | LetFilter(_,_,p,q,_) -> (check_uniq_ev f p) || (check_uniq_ev f q) + | Event (FunApp(f',_),p,_) -> + let present_p = check_uniq_ev f p in + if f' == f then + begin + if present_p then + user_error ("Error: the event " ^ f.f_name ^ " is present several times in the same branch of a test.\nInjective agreement cannot be proved.\n"); + true + end + else + present_p + | Event (_,p,_) -> + user_error ("Events should be function applications\n") + | Insert(_,p,_) -> check_uniq_ev f p + | Get(_,_,p,q,_) -> (check_uniq_ev f p) || (check_uniq_ev f q) + | Phase(n,p,_) -> + check_uniq_ev f p + +(* Compute in accu the list of events that are injective, so that + they must be executed at most once for each value of the session + identifiers *) + +let rec get_uniq_ev_proc accu = function + Nil -> () + | Par(p,q) -> get_uniq_ev_proc accu p; get_uniq_ev_proc accu q + | Repl (p,_) -> get_uniq_ev_proc accu p + | Restr(a,_,p,_) -> get_uniq_ev_proc accu p + | Test(t,p,q,_) -> get_uniq_ev_proc accu p; get_uniq_ev_proc accu q + | Input(tc,pat,p,_) -> get_uniq_ev_proc accu p + | Output(tc,t,p,_) -> get_uniq_ev_proc accu p + | Let(pat,t,p,p',_) -> get_uniq_ev_proc accu p; get_uniq_ev_proc accu p' + | LetFilter(_,_,p,q,_) -> get_uniq_ev_proc accu p; get_uniq_ev_proc accu q + | Event (FunApp(f,_),p,_) -> + let fstatus = Pievent.get_event_status f in + if fstatus.end_status = Inj || fstatus.begin_status = Inj then + accu := f :: (!accu); + get_uniq_ev_proc accu p + | Event (_,p,_) -> + user_error ("Events should be function applications\n") + | Insert(_,p,_) -> get_uniq_ev_proc accu p + | Get(_,_,p,q,_) -> get_uniq_ev_proc accu p; get_uniq_ev_proc accu q + | Phase(n,p,_) -> + get_uniq_ev_proc accu p + +(* Check that all injective events can be executed at most once + for each value of the session identifiers *) + +let check_uniq_ev_proc p = + let must_uniq_ev = ref [] in + get_uniq_ev_proc must_uniq_ev p; + List.iter (fun f -> ignore(check_uniq_ev f p)) (!must_uniq_ev) + +(* Check that predicate calls are implementable *) + +let rec get_other_vars other_vars vlist = function + Var v -> + if not (List.memq v vlist) then + other_vars := v :: (!other_vars) + | FunApp(f,l) -> + List.iter (get_other_vars other_vars vlist) l + +let rec is_ground bound_vars t = + match t with + Var v -> List.memq v bound_vars + | FunApp(f,l) -> List.for_all (is_ground bound_vars) l + +let check_constra error_message bound_vars c = + List.iter (function + |Neq(t,t') -> + if not (is_ground (!bound_vars) t && is_ground (!bound_vars) t') then + begin + error_message(); + user_error "In clauses, variables in inequalities and equalities should all be bound.\n" + end) c + +let rec binds_vars error_message bound_vars = function + FunApp(f,l) -> + begin + match f.f_cat with + Tuple -> List.iter (binds_vars error_message bound_vars) l + | _ -> + if not (List.for_all (is_ground (!bound_vars)) l) then + begin + error_message(); + user_error ("Cannot bind variables under non-data constructors (" + ^ f.f_name ^ ").\n") + end + (* Do not bind variables under non-data constructors *) + end + | Var v -> + if not (List.memq v (!bound_vars)) then + bound_vars := v :: (!bound_vars) + +let rec check_fact error_message seen_pred_calls bound_vars = function + Pred(p, l) -> + check_pred error_message seen_pred_calls (p, List.map (is_ground (!bound_vars)) l); + List.iter (binds_vars error_message bound_vars) l + | Out(_,_) -> + internal_error "Out fact not allowed in user clauses in pi input" + +and check_pred error_message seen_pred_calls (p, ground_list) = + try + let ground_list_seen = List.assq p seen_pred_calls in + if List.exists2 (fun g_seen g -> g_seen && (not g)) ground_list_seen ground_list then + begin + error_message(); + user_error ("Too many unbound vars in recursive call to predicate " ^ p.p_name ^ "\n") + end + with Not_found -> + let seen_pred_calls' = (p, ground_list) :: seen_pred_calls in + List.iter (function + (hyp, (Pred(p', l') as concl), constra, _) -> + if p == p' then + let error_message' () = + error_message(); + print_string "Clause "; + Display.Text.display_rule (hyp, concl, Empty concl, constra) + in + let error_message'' () = + error_message'(); + print_string "Conclusion "; + Display.Text.display_fact concl; + Display.Text.newline() + in + let bound_vars = ref [] in + List.iter2 (fun t g -> + if g then binds_vars error_message'' bound_vars t) l' ground_list; + List.iter (fun f -> + check_fact + (fun () -> + error_message'(); + print_string "Hypothesis "; + Display.Text.display_fact f; + Display.Text.newline() + ) + seen_pred_calls' bound_vars f) hyp; + List.iter (fun f -> + check_constra + (fun () -> + error_message'(); + print_string "Hypothesis "; + Display.Text.display_constra f; + Display.Text.newline() + ) + bound_vars f) constra; + List.iter (fun t -> + if not (is_ground (!bound_vars) t) then + begin + error_message''(); + user_error "In the conclusion of a clause, all variables should have been bound by evaluating the hypothesis\n" + end) l' + | (_, Out(_,_), _, _) -> + internal_error "No Out fact allowed in conclusion (check_pred)" + ) (!Param.red_rules); + List.iter (function + (Pred(p', l') as concl) -> + if p == p' then + let error_message' () = + error_message(); + print_string "Elimtrue fact "; + Display.Text.display_fact concl; + Display.Text.newline() + in + let bound_vars = ref [] in + List.iter2 (fun t g -> + if g then binds_vars error_message' bound_vars t) l' ground_list; + List.iter (fun t -> + if not (is_ground (!bound_vars) t) then + begin + error_message'(); + user_error "In a fact, all variables should have been bound\n" + end) l' + | Out(_,_) -> + internal_error "No Out fact allowed in conclusion (check_pred)" + ) (!Param.elim_true) + +let check_first_fact vlist = function + Pred(p,l) as f -> + let bound_vars = ref [] in + List.iter (get_other_vars bound_vars vlist) l; + let error_message = fun () -> + print_string "Error while checking implementability of \""; + begin + match vlist with + [] -> + Display.Text.display_keyword "if" + | (a::restv) -> + Display.Text.display_keyword "let"; + print_string (" " ^ (Display.Text.varname a)); + List.iter (fun v -> print_string (", " ^ (Display.Text.varname v))) restv; + print_string " "; + Display.Text.display_keyword "suchthat" + end; + print_string " "; + Display.Text.display_fact2 f; + print_string "\""; + Display.Text.newline() + in + List.iter (fun v -> + if not (List.exists (Terms.occurs_var v) l) then + begin + error_message(); + user_error ("Variable " ^ (Display.Text.varname v) ^ " should occur in the fact.\n") + end + ) vlist; + check_fact error_message [] bound_vars f + | Out(_,_) -> + internal_error "No Out fact in let...suchthat" + +(* Rule base *) + +let nrule = ref 0 +let red_rules = ref ([] : reduction list) + +let no_gen_var = ref [] + +let add_rule hyp concl constra tags = + red_rules := (hyp, concl, + Rule (!nrule, tags, hyp, concl, constra), constra) + :: (!red_rules); + incr nrule + +type name_param_info = + arg_meaning * binder * term * when_include +(* arg_meaning: meaning of the argument + binder: variable for the first component of the environment in Out facts + term: to put as parameter of name function symbol +*) + + +type transl_state = + { hypothesis : fact list; (* Current hypotheses of the rule *) + constra : constraints list list; (* Current constraints of the rule *) + unif : (term * term) list; (* Current unifications. + I keep the field unif here, since I use it for determining + which variables should be generalized in end_destructor_group, + although I perform unifications immediately when I add elements to unif. *) + last_step_unif : (term * term) list; + (* Unifications to do for the last group of destructor applications. + last_step_unif will be appended to unif before emitting clauses. + The separation between last_step_unif and unif is useful only + for non-interference. *) + last_step_constra : constraints list list; + (* Constraints for the last group of destructor applications. *) + neg_success_conditions : constraints list list ref option ref; + (* List of constraints that should be false for the evaluation + of destructors to succeed *) + name_params : name_param_info list; (* List of parameters of names *) + repl_count : int; + (* Session identifier, to include in the parameter of + end events for injective agreement *) + current_session_id : binder option; + is_below_begin : bool; + cur_phase : int; + input_pred : predicate; + output_pred : predicate; + hyp_tags : hypspec list + } + +let att_fact phase t = + Pred(Param.get_pred (Attacker(phase, Terms.get_term_type t)), [t]) + +let mess_fact phase tc tm = + Pred(Param.get_pred (Mess(phase, Terms.get_term_type tm)), [tc;tm]) + +let table_fact phase t = + Pred(Param.get_pred (Table(phase)), [t]) + +let testunif_fact t1 t2 = + Pred(Param.get_pred (TestUnifP(Terms.get_term_type t1)), [t1;t2]) + +let remove_snd_comp l = List.map (fun (x,_,y,z) -> (x,y,z)) l + +let output_rule { hypothesis = prev_input; constra = constra; unif = unif; + last_step_unif = lsu; + hyp_tags = hyp_tags; name_params = name_params1 } out_fact = + let name_params = Reduction_helper.extract_name_params_noneed (remove_snd_comp name_params1) in + Terms.auto_cleanup (fun _ -> + assert (lsu == []); (* "last_step_unif should have been appended to unif" *) + (*Unification is now useless here since we unify when with + add elements to unif + List.iter (fun (p1,p2) -> Terms.unify p1 p2) unif;*) + let hyp = List.map Terms.copy_fact2 prev_input in + let concl = Terms.copy_fact2 out_fact in + let constra2 = List.map Terms.copy_constra2 constra in + let name_params2 = List.map Terms.copy_term2 name_params in + Terms.cleanup(); + begin + try + add_rule hyp concl (TermsEq.simplify_constra_list (concl::hyp) constra2) + (ProcessRule(hyp_tags, name_params2)) + with TermsEq.FalseConstraint -> () + end; + if !Param.key_compromise = 2 then + begin + assert (!Terms.current_bound_vars == []); + + (* substitutes session1 for session0, attacker_p1 for + attacker_p0 and mess_p1 for mess_p0 *) + let rec copy_term3 = function + FunApp(f,l) -> + FunApp((if f == session0 then session1 else f), + List.map copy_term3 l) + | Var v -> match v.link with + NoLink -> + let r = Terms.copy_var v in + Terms.link v (VLink r); + Var r + | TLink l -> copy_term3 l + | VLink r -> Var r + | _ -> internal_error "unexpected link in copy_term3" + in + let copy_term_pair3 = fun (v,t) -> (v, copy_term3 t) in + let copy_fact3 = function + Pred(chann, t) -> + Pred((match chann.p_info with + [Attacker(0,ty)] -> Param.get_pred (Attacker(1,ty)) + | [Mess(0,ty)] -> Param.get_pred(Mess(1,ty)) + | [Table(0)] -> Param.get_pred(Table(1)) + | _ -> chann), List.map copy_term3 t) + | Out(t,l) -> Out(copy_term3 t, List.map copy_term_pair3 l) + in + let rec copy_constra3 c = List.map (function + Neq(t1,t2) -> Neq(copy_term3 t1, copy_term3 t2)) c + in + (*List.iter (fun (p1,p2) -> Terms.unify p1 p2) unif;*) + let hyp = List.map copy_fact3 prev_input in + let concl = copy_fact3 out_fact in + let constra3 = List.map copy_constra3 constra in + let name_params3 = List.map copy_term3 name_params in + Terms.cleanup(); + try + add_rule hyp concl (TermsEq.simplify_constra_list (concl::hyp) constra3) + (ProcessRule(hyp_tags, name_params3)) + with TermsEq.FalseConstraint -> () + end + ) + +(* Raises Terms.Unify when cur_state does not need to be considered + Do the unifications, but undo them immediately, before calling next_f, + because we need to have non-unified variables in generalize_vars_not_in, + called from end_destructor_group. + Moreover, we cannot do basic syntactic unifications for two reasons: + - In the case non-interference, we need to keep the + branch if it unifies for some value of the secrets, + not only when the secrets are names. + - When we want to compute the negation of success conditions, + we need to perform unification modulo the equational theory, + because in the negation, the inequalities are modulo the + equational theory. *) + +let check_feasible cur_state = + Terms.auto_cleanup (fun () -> + if not (!Param.non_interference) then + begin + let l1, l2 = List.split cur_state.last_step_unif in + let constra' = cur_state.last_step_constra @ cur_state.constra in + TermsEq.unify_modulo_list (fun () -> + ignore (TermsEq.check_constraint_list constra')) l1 l2 + end + else + begin + (* In the case non-interference, we need to keep the + branch if it unifies for some value of the secrets, + so we replace the secrets with variables. *) + let vlsecr = List.map (fun f -> (f,Terms.new_var f.f_name (snd f.f_type))) (!Param.secret_vars) in + let rec replace_secr_var = function + | Var v -> Var v + | FunApp(f2,[]) -> + begin + try + Var (List.assq f2 vlsecr) + with Not_found -> + FunApp(f2,[]) + end + | FunApp(f2,l) -> FunApp(f2, List.map replace_secr_var l) + in + let (l1, l2) = List.split (List.map (fun (t1,t2) -> + (replace_secr_var t1, replace_secr_var t2) + ) cur_state.last_step_unif) + in + let constra' = List.map (List.map (fun (Neq(t1,t2)) -> + let t1' = replace_secr_var t1 in + let t2' = replace_secr_var t2 in + Neq(t1',t2'))) (cur_state.last_step_constra @ cur_state.constra) + in + TermsEq.unify_modulo_list (fun () -> + ignore (TermsEq.check_constraint_list constra')) l1 l2 + end) + +(* For non-interference *) + +let end_destructor_group_no_test_unif next_f cur_state = + Terms.auto_cleanup (fun _ -> + try + List.iter (fun (t1,t2) -> Terms.unify t1 t2) cur_state.last_step_unif; + (* Check that constraints are still satisfiable. + We check all constraints and not only the new ones, because + the old constraints may have been modified by unification, + so they may no longer be satisfiable. *) + let constra' = cur_state.last_step_constra @ cur_state.constra in + ignore (TermsEq.check_constraint_list constra'); + next_f { cur_state with + unif = cur_state.last_step_unif @ cur_state.unif; + constra = constra'; + last_step_unif = []; + last_step_constra = []; + neg_success_conditions = ref None } + with Terms.Unify -> () + ) + +let end_destructor_group next_f occ cur_state = + end_destructor_group_no_test_unif next_f cur_state; + if (!Param.non_interference) || (!(cur_state.neg_success_conditions) != None) then + try + check_feasible cur_state; + + (* First compute the generalization of last_step_unif *) + let l1, l2 = + if cur_state.last_step_unif != [] then + (* Get all vars in cur_state.hypothesis/unif/constra *) + let var_list = ref (!no_gen_var) in + List.iter (Terms.get_vars_fact var_list) cur_state.hypothesis; + List.iter (fun (t1,t2) -> Terms.get_vars var_list t1; Terms.get_vars var_list t2) cur_state.unif; + List.iter (List.iter (Terms.get_vars_constra var_list)) cur_state.constra; + (* Generalize all vars not in cur_state.hypothesis/unif/constra *) + Terms.auto_cleanup (fun _ -> + List.map (fun (t,_) -> Terms.generalize_vars_not_in (!var_list) t) cur_state.last_step_unif, + List.map (fun (_,t) -> Terms.generalize_vars_not_in (!var_list) t) cur_state.last_step_unif) + else + [], [] + in + + (* Update the success conditions *) + begin + match !(cur_state.neg_success_conditions) with + None -> () + | Some r -> + if cur_state.last_step_constra = [] then + (* The success condition contains no inequality, + we store in cur_state.neg_success_conditions the + negation of the unifications, to serve to detect failure *) + let new_constra = List.map2 (fun t1 t2 -> Neq(t1,t2)) l1 l2 in + r:= new_constra :: (!r) + else + (* The success condition contains an inequality. + Taking its negation is too complicated, + we forget about neg_success_conditions, and will + compute the failure condition in another way. *) + cur_state.neg_success_conditions := None + end; + + (* Treat the non-interference *) + if !Param.non_interference then + begin + if cur_state.last_step_unif != [] then + begin + let tuple_fun = Terms.get_tuple_fun (List.map Terms.get_term_type l1) in + let new_hyp = testunif_fact (FunApp(tuple_fun, l1)) (FunApp(tuple_fun, l2)) in + output_rule { cur_state with + hypothesis = new_hyp :: cur_state.hypothesis; + hyp_tags = TestUnifTag(occ) :: cur_state.hyp_tags; + last_step_unif = []; + last_step_constra = [] } (Pred(bad_pred, [])) + end; + + Terms.auto_cleanup (fun _ -> + try + List.iter (fun (t1,t2) -> Terms.unify t1 t2) cur_state.last_step_unif; + List.iter (fun constra -> + let (l1, l2) = List.split (List.map (fun (Neq(t1,t2)) -> (t1,t2)) constra) in + let tuple_fun = Terms.get_tuple_fun (List.map Terms.get_term_type l1) in + let new_hyp = testunif_fact (FunApp(tuple_fun, l1)) (FunApp(tuple_fun, l2)) in + output_rule { cur_state with + hypothesis = new_hyp :: cur_state.hypothesis; + hyp_tags = TestUnifTag(occ) :: cur_state.hyp_tags; + unif = cur_state.last_step_unif @ cur_state.unif; + last_step_unif = []; + last_step_constra = [] } (Pred(bad_pred, [])) + ) cur_state.last_step_constra + with Terms.Unify -> () + ) + end + with Terms.Unify -> () + +(* Functions that modify last_step_unif, and that should + therefore be followed by a call to end_destructor_group + + transl_term + transl_term_list + transl_term_incl_destructor + transl_term_list_incl_destructor + transl_pat + transl_fact + +*) + +(* Translate term *) + +(* next_f takes a state and a pattern as parameter *) +let rec transl_term next_f cur_state = function + Var v -> + begin + match v.link with + TLink t -> next_f cur_state t + | _ -> internal_error "unexpected link in transl_term" + end + | FunApp(f,l) -> + let transl_red red_rules = + transl_term_list (fun cur_state1 term_list -> + List.iter (fun red_rule -> + (* Fresh rewrite rule *) + let (left_list, right, side_c) = Terms.auto_cleanup (fun _ -> Terms.copy_red red_rule) in + let cur_state2 = + { cur_state1 with + last_step_unif = (List.combine term_list left_list) @ cur_state1.last_step_unif; + last_step_constra = (List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c) @ cur_state1.last_step_constra } + in + (* Optimization: check that the branch is still feasible. *) + try + check_feasible cur_state2; + next_f cur_state2 right + with Terms.Unify -> () + ) red_rules + ) cur_state l + in + + match f.f_cat with + Name n -> + begin + match n.prev_inputs with + Some t -> next_f cur_state t + | _ -> internal_error "unexpected prev_inputs in transl_term" + end + | Tuple | Eq _ | Red _ | Failure -> + transl_red (Terms.red_rules_fun f) + | _ -> + Parsing_helper.internal_error "function symbols of these categories should not appear in input terms (pitransl)" + + +(* next_f takes a state and a list of patterns as parameter *) +and transl_term_list next_f cur_state = function + [] -> next_f cur_state [] + | (a::l) -> + transl_term (fun cur_state1 p -> + transl_term_list (fun cur_state2 patlist -> + next_f cur_state2 (p::patlist)) cur_state1 l) cur_state a + +(* To associate a variable to a syntax element without creating + a fresh variable everytime. Useful for the first component of + the environment in Out facts *) +let var_cache_term = ref ([] : (term * binder) list) +let var_cache_process = ref ([] : (process * binder) list) + +let get_var_for_term a s = + try + List.assq a (!var_cache_term) + with Not_found -> + let r = Terms.new_var s (Terms.get_term_type a) in + var_cache_term := (a, r) :: (!var_cache_term); + r + +let get_var_for_process a v = + try + List.assq a (!var_cache_process) + with Not_found -> + var_cache_process := (a, v) :: (!var_cache_process); + v + +let transl_term_incl_destructor f cur_state occ t = + let may_have_several_types = Reduction_helper.transl_check_several_patterns occ t in + transl_term (fun cur_state1 pat1 -> + if may_have_several_types then + f { cur_state1 with + name_params = (MUnknown, (get_var_for_term t (if !Param.tulafale != 1 then "@destrv" else "destrv")), pat1, Always)::cur_state1.name_params } pat1 + else + f cur_state1 pat1 + ) cur_state t + +let transl_term_list_incl_destructor f cur_state occ tl = + let may_have_several_types = List.exists (Reduction_helper.transl_check_several_patterns occ) tl in + transl_term_list (fun cur_state1 patlist -> + if may_have_several_types then + f { cur_state1 with + name_params = (List.map2 (fun t pat -> (MUnknown, get_var_for_term t (if !Param.tulafale != 1 then "@destrv" else "destrv"), pat, Always)) tl patlist) @ cur_state1.name_params } patlist + else + f cur_state1 patlist + ) cur_state tl + +(* This predicate is for Out facts before their environment is set + It should never occur in finally generated rules. *) +let pred_begin_tmp = { p_name = "begin_tmp"; + p_type = [Param.event_type]; + p_prop = 0; + p_info = [] } + +let occ_cst = FunApp({ f_name = "@occ_cst"; + f_type = [], Param.any_type; + f_cat = Tuple; + f_initial_cat = Tuple; + f_private = false; + f_options = 0 }, []) + +let occ_var_map = Hashtbl.create 7 + +let get_occ_var occ = + try + Hashtbl.find occ_var_map occ + with Not_found -> + let r = Terms.new_var ("@occ" ^ (string_of_int occ)) Param.any_type in + Hashtbl.add occ_var_map occ r; + r + +let replace_begin_out name_params tags hyp = + let rec make_out_fun np = match np with + [] -> [] + | (_,ve,Var v,Always)::l -> (ve, Var v) :: make_out_fun l + | _ :: l -> make_out_fun l + in + let make_out = make_out_fun name_params in + let tag_ref = ref tags in + List.map (function + Pred(pred_begin_x, [FunApp(f,l) as pat_begin]) when pred_begin_x == pred_begin_tmp -> + let fstatus = Pievent.get_event_status f in + let rec find_occ = function + [] -> Parsing_helper.internal_error "Should find BeginFact and BeginEvent tags" + | BeginFact :: BeginEvent(occ) :: l -> + tag_ref := l; + occ + | _ :: l -> find_occ l + in + let occ = find_occ (!tag_ref) in + if fstatus.begin_status = Inj then + (* Store the occurrence of the "begin" event in the environment, + to be able to find it back in piauth.ml *) + Out(pat_begin, make_out @ [get_occ_var occ, occ_cst] ) + else + Out(pat_begin, []) + | Pred(pred_begin_x,_) when pred_begin_x == pred_begin_tmp -> + user_error ("Events should be function applications\n") + | c -> c) hyp + +(* Detect failure *) + +let no_fail next_f cur_state t = + let x = Terms.new_var_def (Terms.get_term_type t) in + next_f { cur_state with + last_step_unif = (t,x)::cur_state.last_step_unif } t + +let no_fail_list next_f cur_state tl = + let unifl = List.map (fun t -> (t, Terms.new_var_def (Terms.get_term_type t))) tl in + next_f { cur_state with + last_step_unif = unifl @ cur_state.last_step_unif } tl + +let must_fail next_f cur_state t = + let fail = Terms.get_fail_term (Terms.get_term_type t) in + next_f { cur_state with + last_step_unif = (t,fail)::cur_state.last_step_unif } + +(* Translate pattern *) + +let rec transl_pat put_var f cur_state pat = + match pat with + PatVar b -> + let b' = Terms.copy_var b in + let pat' = Var b' in + b.link <- TLink pat'; + f { cur_state with name_params = (MVar(b, None), b, pat', put_var) :: cur_state.name_params } (Var b'); + b.link <- NoLink + | PatTuple (fsymb,pat_list) -> + transl_pat_list put_var (fun cur_state2 term_list -> + f cur_state2 (FunApp(fsymb, term_list)) + ) cur_state pat_list; + | PatEqual t -> + transl_term (no_fail f) cur_state t + +and transl_pat_list put_var f cur_state = function + [] -> f cur_state [] + | p::pl -> + (* It is important to translate the head first, like the head is + checked first in pisyntax.ml, because variables may be bound in the + head and used in equality tests in the tail *) + transl_pat put_var (fun cur_state2 term -> + transl_pat_list put_var (fun cur_state3 term_list -> + f cur_state3 (term::term_list) + ) cur_state2 pl + ) cur_state p + + +let rec transl_unif next_f cur_state accu = function + [] -> next_f { cur_state with + last_step_constra = accu :: cur_state.last_step_constra } + | (p,t)::l -> + (* We have a term =t in the pattern, and its expected value is p *) + transl_term (fun cur_state' t' -> + (* t fails *) + must_fail next_f cur_state' t'; + (* t does not fail, it is different from its expected value p *) + no_fail (fun cur_state'' _ -> + transl_unif next_f cur_state'' ((Neq(p, t'))::accu) l + ) cur_state' t' + ) cur_state t + +(* Handles the case in which one the terms =M in the pattern fails *) + +let rec transl_pat_fail_term next_f cur_state = function + PatVar b -> () + | PatTuple(f,l) -> + List.iter (transl_pat_fail_term next_f cur_state) l + | PatEqual t -> + (* t fails *) + transl_term (must_fail next_f) cur_state t + +(* Handles the case in which the terms =M in the pattern succeed, + but the result does not match + [transl_pat_fail_rec] calls [next_f] with the current state + and a term that represents the pattern, with general variables + instead of variables bound by the pattern. *) + +let rec transl_pat_fail_rec next_f cur_state = function + PatVar b -> + let gvar = Terms.new_gen_var b.btype false in + next_f cur_state (FunApp(gvar, [])); + | PatTuple (fsymb,pat_list) -> + transl_pat_fail_list (fun cur_state gen_list -> + next_f cur_state (FunApp(fsymb, gen_list)) + ) cur_state pat_list + | PatEqual t -> + (* term t succeeds *) + transl_term (no_fail next_f) cur_state t + +and transl_pat_fail_list next_f cur_state = function + [] -> next_f cur_state [] + | p::pl -> + transl_pat_fail_rec (fun cur_state1 gen -> + transl_pat_fail_list (fun cur_state2 gen_list -> + next_f cur_state2 (gen::gen_list) + ) cur_state1 pl + ) cur_state p + +let transl_pat_fail next_f cur_state pat pat' = + (* one the terms =M in the pattern fails *) + transl_pat_fail_term next_f cur_state pat; + (* the terms =M in the pattern succeed, but the result does not match *) + transl_pat_fail_rec (fun cur_state1 pat_gen -> + next_f { cur_state1 with + last_step_constra = [Neq(pat_gen, pat')] :: cur_state1.last_step_constra }; + ) cur_state pat + +(* Translate fact *) + +let transl_fact next_fun cur_state occ f = + match f with + Out(_, _) -> Parsing_helper.internal_error "Out fact not allowed in let... suchthat" + | Pred(p,tl) -> + transl_term_list_incl_destructor (no_fail_list (fun cur_state1 patl -> + next_fun (Pred(p,patl)) cur_state1)) cur_state occ tl + +(* Translate process *) + +let rec transl_process cur_state = function + Nil -> () + | Par(p,q) -> transl_process cur_state p; + transl_process cur_state q + | (Repl (p,occ)) as p' -> + let cur_state = { cur_state with repl_count = cur_state.repl_count + 1 } in + let sid_meaning = MSid cur_state.repl_count in + (* Always introduce session identifiers ! *) + let cur_state = + if cur_state.is_below_begin then + { cur_state with + is_below_begin = false; + hypothesis = replace_begin_out cur_state.name_params cur_state.hyp_tags cur_state.hypothesis + } + else + cur_state + in + let v = Terms.new_var (if !Param.tulafale != 1 then "@sid" else "sid") Param.sid_type in + no_gen_var := v :: (!no_gen_var); + let v' = get_var_for_process p' v in + let count_params = Reduction_helper.count_name_params (remove_snd_comp cur_state.name_params) in + begin + if !Param.non_interference then + begin + if (!Param.key_compromise == 0) then + transl_process { cur_state with + hypothesis = (att_fact cur_state.cur_phase (Var v)) :: cur_state.hypothesis; + current_session_id = Some v; + name_params = (sid_meaning, v', Var v, Always) :: cur_state.name_params; + hyp_tags = (ReplTag(occ, count_params)) :: cur_state.hyp_tags + } p + else if (!Param.key_compromise == 1) then + transl_process { cur_state with + hypothesis = (att_fact cur_state.cur_phase (Var v)) :: (att_fact cur_state.cur_phase (Var comp_session_var)) :: cur_state.hypothesis; + current_session_id = Some v; + name_params = (MCompSid, comp_session_var, Var comp_session_var, Always) :: + (sid_meaning, v', Var v, Always) :: cur_state.name_params; + hyp_tags = (ReplTag(occ, count_params)) :: cur_state.hyp_tags + } p + else + transl_process { cur_state with + hypothesis = (att_fact cur_state.cur_phase (Var v)) :: cur_state.hypothesis; + current_session_id = Some v; + name_params = (MCompSid, v', compromised_session, Always) :: + (sid_meaning, v', Var v, Always) :: cur_state.name_params; + hyp_tags = (ReplTag(occ, count_params)) :: cur_state.hyp_tags + } p + end + else + begin + if (!Param.key_compromise == 0) then + transl_process { cur_state with + current_session_id = Some v; + name_params = (sid_meaning, v', Var v, Always) :: cur_state.name_params; + hyp_tags = (ReplTag(occ, count_params)) :: cur_state.hyp_tags + } p + else if (!Param.key_compromise == 1) then + transl_process { cur_state with + current_session_id = Some v; + name_params = (MCompSid, comp_session_var, Var comp_session_var, Always) :: + (sid_meaning, v', Var v, Always) :: cur_state.name_params; + hyp_tags = (ReplTag(occ, count_params)) :: cur_state.hyp_tags + } p + else + transl_process { cur_state with + current_session_id = Some v; + name_params = (MCompSid, v', compromised_session, Always) :: + (sid_meaning, v', Var v, Always) :: cur_state.name_params; + hyp_tags = (ReplTag(occ, count_params)) :: cur_state.hyp_tags + } p + end + end; + | Restr(n,(args, env),p,_) -> + begin + let need_list = Reduction_helper.get_need_vars n.f_name in + let include_info = Reduction_helper.prepare_include_info env args need_list in + let name_params = remove_snd_comp cur_state.name_params in + let npm = Reduction_helper.extract_name_params_meaning n.f_name include_info name_params in + let np = Reduction_helper.extract_name_params n.f_name include_info name_params in + match n.f_cat with + Name r -> + let nptype = List.map Terms.get_term_type np in + if fst n.f_type == Param.tmp_type then + begin + n.f_type <- nptype, snd n.f_type; + r.prev_inputs_meaning <- npm + end + else if Param.get_ignore_types() then + begin + (* When we ignore types, the types of the arguments may vary, + only the number of arguments is preserved. *) + if List.length (fst n.f_type) != List.length nptype then + internal_error ("Name " ^ n.f_name ^ " has bad arity") + end + else + begin + if not (Terms.eq_lists (fst n.f_type) nptype) then + internal_error ("Name " ^ n.f_name ^ " has bad type") + end; + r.prev_inputs <- Some (FunApp(n, np)); + transl_process cur_state p; + r.prev_inputs <- None + | _ -> internal_error "A restriction should have a name as parameter" + end + | Test(t,p,q,occ) -> + if q == Nil then + (* We optimize the case q == Nil. + In this case, the adversary cannot distinguish the situation + in which t fails from the situation in which t is false. *) + transl_term_incl_destructor (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + transl_process { cur_state2 with + hyp_tags = (TestTag occ) :: cur_state2.hyp_tags } p + ) occ { cur_state1 with + last_step_unif = (pat1,Terms.true_term) :: cur_state1.last_step_unif } + )) cur_state (OTest(occ)) t + else + transl_term_incl_destructor (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + if !Param.non_interference then + output_rule { cur_state2 with + hypothesis = (testunif_fact pat1 Terms.true_term) :: cur_state2.hypothesis; + hyp_tags = TestUnifTag(occ) :: cur_state2.hyp_tags + } (Pred(bad_pred, [])); + Terms.auto_cleanup (fun _ -> + try + Terms.unify pat1 Terms.true_term; + transl_process { cur_state2 with + unif = (pat1,Terms.true_term) :: cur_state2.unif; + hyp_tags = (TestTag occ) :: cur_state2.hyp_tags } p + with Terms.Unify -> () + ); + Terms.auto_cleanup (fun _ -> + try + let constra' = [Neq(pat1, Terms.true_term)] :: cur_state2.constra in + ignore (TermsEq.check_constraint_list constra'); + transl_process { cur_state2 with + constra = constra'; + hyp_tags = (TestTag occ) :: cur_state2.hyp_tags } q + with Terms.Unify -> () + ); + ) occ cur_state1 + )) cur_state (OTest(occ)) t + | Input(tc,pat,p,occ) -> + begin + match tc with + FunApp({ f_cat = Name _; f_private = false },_) when !Param.active_attacker -> + let x = Reduction_helper.new_var_pat pat in + transl_pat Always (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> transl_process cur_state2 p) occ + { cur_state1 with + last_step_unif = (pat1, x) :: cur_state1.last_step_unif; + hypothesis = (att_fact cur_state1.cur_phase x) :: cur_state1.hypothesis; + hyp_tags = (InputTag(occ)) :: cur_state1.hyp_tags + } + ) cur_state pat; + + if !Param.non_interference then + transl_term_incl_destructor (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (InputPTag(occ)) :: cur_state.hyp_tags } + (Pred(cur_state.input_pred, [pat1])) + ) occ cur_state1 + )) cur_state (OInChannel(occ)) tc + | _ -> + transl_term_incl_destructor (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + let x = Reduction_helper.new_var_pat pat in + transl_pat Always (fun cur_state3 pat2 -> + end_destructor_group (fun cur_state4 -> transl_process cur_state4 p) occ + { cur_state3 with + last_step_unif = (pat2, x) :: cur_state3.last_step_unif; + hypothesis = (mess_fact cur_state3.cur_phase pat1 x) :: cur_state3.hypothesis; + hyp_tags = (InputTag(occ)) :: cur_state3.hyp_tags + } + ) cur_state2 pat; + + if !Param.non_interference then + output_rule { cur_state2 with + hyp_tags = (InputPTag(occ)) :: cur_state.hyp_tags } + (Pred(cur_state.input_pred, [pat1])) + ) occ cur_state1 + )) cur_state (OInChannel(occ)) tc + end + | Output(tc,t,p,occ) -> + begin + match tc with + FunApp({ f_cat = Name _; f_private = false },_) when !Param.active_attacker -> + if !Param.non_interference then + begin + transl_term (no_fail (fun cur_state1 patc -> + end_destructor_group (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (OutputPTag occ) :: cur_state2.hyp_tags } + (Pred(cur_state.output_pred, [patc])) + ) occ cur_state1 + )) cur_state tc + end; + transl_term (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + output_rule { cur_state2 with + hypothesis = replace_begin_out cur_state2.name_params cur_state2.hyp_tags cur_state2.hypothesis; + hyp_tags = (OutputTag occ) :: cur_state2.hyp_tags + } (att_fact cur_state.cur_phase pat1) + ) occ cur_state1 + )) cur_state t + | _ -> transl_term (no_fail (fun cur_state1 patc -> + transl_term (no_fail (fun cur_state2 pat1 -> + end_destructor_group (fun cur_state3 -> + if !Param.non_interference then + output_rule { cur_state3 with + hyp_tags = (OutputPTag occ) :: cur_state3.hyp_tags } + (Pred(cur_state.output_pred, [patc])); + output_rule { cur_state3 with + hypothesis = replace_begin_out cur_state3.name_params cur_state3.hyp_tags cur_state3.hypothesis; + hyp_tags = (OutputTag occ) :: cur_state2.hyp_tags + } (mess_fact cur_state.cur_phase patc pat1) + ) occ cur_state2 + )) cur_state1 t + )) cur_state tc + end; + transl_process { cur_state with + hyp_tags = (OutputTag occ) :: cur_state.hyp_tags } p + | Let(pat,t,p,p',occ) -> + assert (cur_state.last_step_unif == []); (* last_step_unif should have been appended to unif *) + (* Case "in" branch taken *) + let neg_success_conditions = ref (Some (ref [])) in + transl_term_incl_destructor (no_fail (fun cur_state1 pat1 -> + transl_pat IfQueryNeedsIt (fun cur_state2 pat2 -> + end_destructor_group (fun cur_state3 -> transl_process cur_state3 p) occ + { cur_state2 with + last_step_unif = (pat1, pat2)::cur_state2.last_step_unif } + ) cur_state1 pat + )) { cur_state with + neg_success_conditions = neg_success_conditions; + hyp_tags = (LetTag occ) :: cur_state.hyp_tags } (OLet(occ)) t; + (* Case "else" branch taken *) + begin + match !neg_success_conditions with + None -> (* The neg_success_conditions have been forgotten because they + were too complicated to compute *) + transl_term_incl_destructor (fun cur_state1 pat1 -> + must_fail (end_destructor_group_no_test_unif (fun cur_state2 -> transl_process cur_state2 p')) cur_state1 pat1; + no_fail (fun cur_state2 _ -> + transl_pat_fail (end_destructor_group_no_test_unif (fun cur_state6 -> transl_process cur_state6 p')) + cur_state2 pat pat1 + ) cur_state1 pat1 + ) { cur_state with + hyp_tags = (LetTag occ) :: cur_state.hyp_tags } (OLet(occ)) t + | Some r -> (* Use the neg_success_conditions has condition for taking + the else branch *) + transl_process { cur_state with + constra = (!r) @ cur_state.constra; + hyp_tags = (LetTag occ) :: cur_state.hyp_tags } p' + + end + | LetFilter(vlist,f,p,q,occ) -> + (* TO DO Warning! LetFilter is currently not compatible with + non-interference! We have to generate more "test" clauses. + + For a predicate clause: + F1 & ... & Fn -> F + we should add the clauses: + testF -> testF1 + testF & F1 -> testF2 + .... + testF & F1 ... & Fn-1 -> testFn + where, if Fi = p(M1, ..., Mn), testFi = testp(M1, ..., Mn) + + The process let v1...vn suchthat p(M1,...,Mn) generates + h -> testp(testM1, ..., testMn) + where testMi is obtained from Mi by existentially quantifying + variables v1...vn. (???) + *) + if !Param.non_interference then + user_error "Predicates are currently incompatible with non-interference.\n"; + if !Param.check_pred_calls then check_first_fact vlist f; + let vlist' = List.map (fun v -> + let v' = Var (Terms.copy_var v) in + v.link <- TLink v'; + v') vlist in + transl_fact (fun f1 cur_state1 -> + end_destructor_group_no_test_unif (fun cur_state2 -> + transl_process { cur_state2 with + hypothesis = f1 :: cur_state2.hypothesis; + hyp_tags = LetFilterFact :: (LetFilterTag(occ)) :: cur_state2.hyp_tags + } p + ) cur_state1 + ) { cur_state with name_params = (List.map2 (fun v v' -> (MVar(v, None), v, v', Always)) vlist vlist') @ cur_state.name_params } (OLetFilter(occ)) f; + List.iter (fun v -> v.link <- NoLink) vlist; + transl_process { cur_state with hyp_tags = LetFilterTag(occ) :: cur_state.hyp_tags } q + | Event(FunApp(f,l) as lendbegin, p,occ) -> + begin + if !Param.key_compromise == 0 then + () + else + match l with + (Var v)::l' -> + if !Param.key_compromise == 1 then + v.link <- TLink (Var comp_session_var) + else + v.link <- TLink compromised_session + | _ -> internal_error "Bad event format in queries" + end; + let fstatus = Pievent.get_event_status f in + begin + match fstatus.end_status with + No -> () + | Inj -> + if cur_state.repl_count == 0 then + user_error "Error: injective events should always be under a replication. (Otherwise,\nthe injective property is a trivial consequence of the non-injective one.)\n" + else + let first_param = + match cur_state.current_session_id with + Some v -> Var v + | None -> FunApp(Terms.get_tuple_fun [], []) + in + transl_term (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (BeginEvent(occ)) :: cur_state.hyp_tags; + hypothesis = replace_begin_out cur_state2.name_params cur_state2.hyp_tags cur_state2.hypothesis + } (Pred(Param.end_pred_inj, [first_param; pat1])) + ) occ cur_state1 + )) cur_state lendbegin + | NonInj -> + transl_term (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (BeginEvent(occ)) :: cur_state.hyp_tags; + hypothesis = replace_begin_out cur_state2.name_params cur_state2.hyp_tags cur_state2.hypothesis + } (Pred(Param.end_pred, [pat1])) + ) occ cur_state1 + )) cur_state lendbegin + + end; + begin + match fstatus.begin_status with + No -> + (* Even if the event does nothing, the term lendbegin is evaluated *) + transl_term + (no_fail (fun cur_state0 pat_begin -> end_destructor_group + (fun cur_state1 -> + transl_process { cur_state1 with hyp_tags = (BeginEvent(occ)) :: cur_state1.hyp_tags } p + ) occ cur_state0 + )) cur_state lendbegin + | Inj | NonInj -> + transl_term_incl_destructor + (no_fail (fun cur_state0 pat_begin -> end_destructor_group + (fun cur_state1 -> + transl_process { cur_state1 with + hypothesis = Pred(pred_begin_tmp, [pat_begin]) :: cur_state1.hypothesis; + hyp_tags = BeginFact :: (BeginEvent(occ)) :: cur_state1.hyp_tags + } p + ) occ cur_state0 + )) { cur_state with is_below_begin = true } (OEvent(occ)) lendbegin + end + | Event(_,_,_) -> user_error ("Events should be function applications\n") + | Insert(t,p,occ) -> + transl_term (no_fail (fun cur_state1 pat1 -> + end_destructor_group (fun cur_state2 -> + output_rule { cur_state2 with + hypothesis = replace_begin_out cur_state2.name_params cur_state2.hyp_tags cur_state2.hypothesis; + hyp_tags = (InsertTag occ) :: cur_state2.hyp_tags + } (table_fact cur_state.cur_phase pat1) + ) occ cur_state1 + )) cur_state t; + transl_process { cur_state with + hyp_tags = (InsertTag occ) :: cur_state.hyp_tags } p + | Get(pat,t,p,q,occ) -> + transl_pat Always (fun cur_state1 pat1 -> + transl_term (no_fail (fun cur_state2 patt -> + end_destructor_group (fun cur_state3 -> transl_process cur_state3 p) occ + { cur_state2 with + hypothesis = (table_fact cur_state2.cur_phase pat1) :: cur_state2.hypothesis; + hyp_tags = (GetTag(occ)) :: cur_state2.hyp_tags; + last_step_unif = (patt, Terms.true_term) :: cur_state2.last_step_unif } + )) cur_state1 t + ) cur_state pat; + transl_process { cur_state with hyp_tags = GetTagElse(occ) :: cur_state.hyp_tags } q + | Phase(n,p,_) -> + transl_process { cur_state with + cur_phase = n; + input_pred = Param.get_pred (InputP(n)); + output_pred = Param.get_pred (OutputP(n)) } p + +(* [rules_for_red] does not need the rewrite rules f(...fail...) -> fail + for categories Eq and Tuple in [red_rules]. Indeed, clauses + that come from these rewrite rules are useless: + 1/ clauses att(u1) & ... & att(fail_ti) & ... & att(un) -> att(fail) + are subsumed by att(fail). + 2/ clauses att(u1) & ... & att(un) & testunif((u1...un), (Gu1...fail...Gun)) -> bad + disappears because ui can be either a message or fail, and in both cases + testunif((x1...xn), (...fail...)) is false: if ui is a message, unification + always fails; if ui is fail, unification always succeeds, independently + of the value of secrets. *) + +let rules_for_red phase f red_rules = + List.iter (fun red_rule -> + let res_pred = Param.get_pred (Attacker(phase, snd f.f_type)) in + let (hyp, concl, side_c) = Terms.copy_red red_rule in + add_rule (List.map (att_fact phase) hyp) + (att_fact phase concl) + (List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c) + (Apply(f, res_pred)); + if !Param.non_interference then + begin + (* The definition of destructors by rules + g(M11...M1n) -> M1 + otherwise g(M21...M2n) -> M2 + otherwise g(M31...M3n) -> M3 + etc + allows verifying that the same rule applies for any value of the secret + by just testunif((x1...xn),(M11...M1n)), + testunif((x1...xn),(M21...M2n)), + testunif((x1...xn),(M31...M3n)), etc. *) + assert (!Terms.current_bound_vars == []); + let hyp' = List.map (Terms.generalize_vars_not_in []) hyp in + Terms.cleanup(); + + let thyp = List.map Terms.get_term_type hyp in + let tuple_fun = Terms.get_tuple_fun thyp in + let vlist = List.map Terms.new_unfailing_var_def thyp in + add_rule + ((testunif_fact (FunApp(tuple_fun, vlist)) (FunApp(tuple_fun, hyp'))) + :: List.map (att_fact phase) vlist) + (Pred(bad_pred, [])) + [] + (TestApply(f, res_pred)) + end) red_rules + +let transl_attacker phase = + (* The attacker can apply all functions *) + Hashtbl.iter (Terms.clauses_for_function (rules_for_red phase)) Param.fun_decls; + Hashtbl.iter (Terms.clauses_for_function (rules_for_red phase)) Terms.tuple_table; + + List.iter (fun t -> + let att_pred = Param.get_pred (Attacker(phase,t)) in + let mess_pred = Param.get_pred (Mess(phase,t)) in + + (* The attacker has any message sent on a channel he has *) + let v = Terms.new_var_def t in + let vc = Terms.new_var_def Param.channel_type in + add_rule [Pred(mess_pred, [vc; v]); att_fact phase vc] + (Pred(att_pred, [v])) [] (Rl(att_pred,mess_pred)); + + if (!Param.active_attacker) then + begin + (* The attacker can send any message he has on any channel he has *) + let v = Terms.new_var_def t in + let vc = Terms.new_var_def Param.channel_type in + add_rule [att_fact phase vc; Pred(att_pred, [v])] + (Pred(mess_pred, [vc; v])) [] (Rs(att_pred, mess_pred)) + end) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types); + + + if (!Param.non_interference) then + begin + let att_pred = Param.get_pred (Attacker(phase,Param.channel_type)) in + let input_pred = Param.get_pred (InputP(phase)) in + let output_pred = Param.get_pred (OutputP(phase)) in + + (* The attacker can do communications *) + let vc = Terms.new_var_def Param.channel_type in + add_rule [Pred(att_pred, [vc])] (Pred(input_pred, [vc])) [] (Ri(att_pred, input_pred)); + let vc = Terms.new_var_def Param.channel_type in + add_rule [Pred(att_pred, [vc])] (Pred(output_pred, [vc])) [] (Ro(att_pred, output_pred)); + + (* Check communications do not reveal secrets *) + let vc = Terms.new_var_def Param.channel_type in + let vc2 = Terms.new_var_def Param.channel_type in + add_rule [Pred(input_pred, [vc]); + Pred(output_pred, [vc2]); + testunif_fact vc vc2] + (Pred(bad_pred, [])) [] (TestComm(input_pred, output_pred)) + + end + + +(* Weak secrets *) + +let weak_memo = Param.memo (fun t -> + { f_name = "@weaksecretcst"; + f_type = [], t; + f_private = true; + f_options = 0; + f_cat = Eq []; + f_initial_cat = Eq [] + }) + +let weaksecretcst t = + weak_memo (Param.get_type t) + +let att_guess_fact t1 t2 = + Pred(Param.get_pred (AttackerGuess(Terms.get_term_type t1)), [t1;t2]) + +(* [rules_for_red_guess] does not need the rewrite rules f(...fail...) -> fail + for categories Eq and Tuple in [red_rules]. Indeed, clauses + that come from these rewrite rules are useless: + 1/ if we use twice the same of these rewrite rules, we get + att(u1,u1') & ... & att(fail_ti, fail_ti) & ... & att(un,un') -> att(fail, fail) + which is subsumed by att(fail, fail) + 2/ if we use two distinct such rewrite rules, we get + att(u1,u1') & ... & att(fail_ti, ui') & ... & att(uj, fail_tj) & ... & att(un,un') -> att(fail, fail) + which is subsumed by att(fail, fail) + 3/ if we use one such rewrite rule and another rewrite rule, we get + att(u1,M1) & ... & att(fail_ti, Mi) & ... & att(un, Mn) -> att(fail, M') + which is subsumed by att(fail_ti, x) -> bad (recall that bad subsumes all conclusions) + Mi are messages, they are not fail nor may-fail variables. *) + +let rules_for_red_guess f red_rules = + List.iter (fun red1 -> + List.iter (fun red2 -> + let (hyp1, concl1, side_c1) = Terms.copy_red red1 in + let (hyp2, concl2, side_c2) = Terms.copy_red red2 in + add_rule (List.map2 att_guess_fact hyp1 hyp2) + (att_guess_fact concl1 concl2) + ((List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c1) @ (List.map (function (t1,t2) -> [Neq(t1,t2)]) side_c2)) + (Apply(f, Param.get_pred (AttackerGuess(snd f.f_type)))) + ) red_rules + ) red_rules + + +let weak_secret_clauses w = + add_rule [] (att_guess_fact (FunApp(w, [])) (FunApp(weaksecretcst (snd w.f_type), []))) [] WeakSecr; + + (* rules_for_function_guess for each function, including tuples *) + Hashtbl.iter (Terms.clauses_for_function rules_for_red_guess) Param.fun_decls; + Hashtbl.iter (Terms.clauses_for_function rules_for_red_guess) Terms.tuple_table; + + Weaksecr.attrulenum := + List.map (fun t -> + let att_guess = Param.get_pred (AttackerGuess(t)) in + + let x = Terms.new_var_def t + and fail = Terms.get_fail_term t in + add_rule [Pred(att_guess, [x; fail])] (Pred(Param.bad_pred, [])) [] (Rfail(att_guess)); + add_rule [Pred(att_guess, [fail; x])] (Pred(Param.bad_pred, [])) [] (Rfail(att_guess)); + + let v = Terms.new_var_def t in + let hyp = [att_fact (!Param.max_used_phase) v] in + let concl = Pred(att_guess, [v; v]) in + let r = (t, Rule(!nrule, PhaseChange, hyp, concl, [])) in + add_rule hyp concl [] PhaseChange; + + let v1 = Terms.new_var_def t in + let v2 = Terms.new_var_def t in + let v3 = Terms.new_var_def t in + add_rule [Pred(att_guess, [v1; v2]); Pred(att_guess, [v1; v3])] + (Pred(Param.bad_pred, [])) [[Neq(v2,v3)]] (TestEq(att_guess)); + + let v1 = Terms.new_var_def t in + let v2 = Terms.new_var_def t in + let v3 = Terms.new_var_def t in + add_rule [Pred(att_guess, [v2; v1]); Pred(att_guess, [v3; v1])] + (Pred(Param.bad_pred, [])) [[Neq(v2,v3)]] (TestEq(att_guess)); + + (* adjust the selection function *) + let v1 = Terms.new_var Param.def_var_name t in + let v2 = Terms.new_var Param.def_var_name t in + (* Selfun.add_no_unif (att_guess, [FAny v1; FVar v2]) + (Selfun.never_select_weight+30); + Selfun.add_no_unif (att_guess, [FVar v1; FAny v2]) + (Selfun.never_select_weight+20); *) + Selfun.add_no_unif (att_guess, [FVar v1; FVar v2]) + (Selfun.never_select_weight+10); + + r) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types) + + +(* Handle key_compromise *) + +let comp_output_rule prev_input out_fact = + assert (!Terms.current_bound_vars == []); + add_rule (List.map Terms.copy_fact2 prev_input) + (Terms.copy_fact2 out_fact) [] LblComp; + Terms.cleanup() + +let comp_fact t = + Pred(Param.get_pred (Compromise(Terms.get_term_type t)), [t]) + +let rec comp_transl_process = function + Nil -> () + | Par(p,q) -> comp_transl_process p; + comp_transl_process q + | Repl (p,_) -> + comp_transl_process p + | Restr(n,_,p,_) -> + begin + match n.f_cat with + Name { prev_inputs_meaning = l } -> + let rec build_params ml tl = + match (ml, tl) with + [],[] -> [],[] + | (m::l),(ty::tyl) -> + let (name_params, prev_input) = build_params l tyl in + begin + match m with + MCompSid -> + (compromised_session :: name_params, prev_input) + | _ -> + let v = Var (Terms.new_var (Reduction_helper.meaning_name m) ty) in + (v :: name_params, (comp_fact v) :: prev_input) + end + | _ -> Parsing_helper.internal_error "bad length in comp_transl_process" + in + let (name_params, prev_input) = build_params l (fst n.f_type) in + comp_output_rule prev_input + (comp_fact (FunApp(n, name_params))); + if List.exists (fun x -> x == compromised_session) name_params then + comp_output_rule prev_input + (att_fact 0 (FunApp(n, name_params))) + | _ -> internal_error "name expected in comp_transl_process" + end; + comp_transl_process p + | Test(t1,p,q,_) -> + comp_transl_process p; + comp_transl_process q + | Input(tc,pat,p,_) -> + comp_transl_process p + | Output(tc,t,p,_) -> + comp_transl_process p + | Let(pat,t,p,p',_) -> + comp_transl_process p; + comp_transl_process p' + | LetFilter(_,_,p,q,_) -> + comp_transl_process p; + comp_transl_process q + | Event (l,p,_) -> + comp_transl_process p (* TO DO *) + | Insert (_,p,_) -> + comp_transl_process p + | Get (_,_,p,q,_) -> + comp_transl_process p; + comp_transl_process q + | Phase _ -> + user_error "Phases are incompatible with key compromise.\nKey compromise is itself already a phase scenario\n" + +let comp_rules_for_function _ f = + match f.f_cat with + Eq _ | Tuple -> + let vars = Terms.var_gen (fst f.f_type) in + add_rule (List.map comp_fact vars) + (comp_fact (FunApp(f,vars))) [] + (Apply(f, Param.get_pred (Compromise(snd f.f_type)))) + | _ -> () + +(* Global translation *) + +let transl p = + Rules.reset (); + Reduction_helper.main_process := p; + Reduction_helper.terms_to_add_in_name_params := []; + nrule := 0; + red_rules := []; + no_gen_var := []; + List.iter (fun (hyp1, concl1, constra1, tag1) -> + TermsEq.close_rule_destr_eq (fun (hyp, concl, constra) -> + add_rule hyp concl constra tag1) (hyp1, concl1, constra1)) + (!Param.red_rules); + List.iter (fun fact -> + TermsEq.close_rule_destr_eq (fun (hyp, concl, constra) -> + (* The elimtrue optimization is ignored when the constraint is + not empty, which may happen if the fact contains destructors + with side conditions *) + if constra == [] then Rules.add_elimtrue (!nrule, concl); + add_rule hyp concl constra LblClause) ([], fact, [])) + (!Param.elim_true); + (* Initialize the selection function. + In particular, when there is a predicate + member:x,y -> member:x,cons(z,y) + we would like nounif member:*x,y + It is important to initialize this very early, so that + the simplification of the initial rules is performed with + the good selection function. *) + List.iter (fun r -> ignore(Selfun.selection_fun r)) (!red_rules); + + (* Check that injective events occur only once *) + check_uniq_ev_proc p; + + for i = 0 to !Param.max_used_phase do + transl_attacker i; + List.iter (fun t -> + (* The attacker has fail *) + add_rule [] (att_fact i (Terms.get_fail_term t)) [] Init; + + let att_i = Param.get_pred (Attacker(i,t)) in + let v = Terms.new_var Param.def_var_name t in + Selfun.add_no_unif (att_i, [FVar v]) Selfun.never_select_weight; + if i > 0 then + (* It is enough to transmit only messages from one phase to the next + because the attacker already has fail in all phases. *) + let w = Terms.new_var_def t in + let att_im1 = Param.get_pred (Attacker(i-1,t)) in + add_rule [Pred(att_im1, [w])] (Pred(att_i, [w])) [] PhaseChange + ) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types); + if i > 0 then + let tbl_i = Param.get_pred (Table(i)) in + let tbl_im1 = Param.get_pred (Table(i-1)) in + let w = Terms.new_var_def Param.table_type in + add_rule [Pred(tbl_im1, [w])] (Pred(tbl_i, [w])) [] TblPhaseChange + done; + + (* Knowing the free names and creating new names is necessary only in phase 0. + The subsequent phases will get them by attacker_i(x) -> attacker_{i+1}(x) *) + + (* The attacker has the public free names. + The non-interference queries have their private flag set. *) + List.iter (fun ch -> + if not ch.f_private then + add_rule [] (att_fact 0 (FunApp(ch, []))) [] Init) (!Param.freenames); + + List.iter (fun t -> + (* Clauses for equality *) + let v = Terms.new_var_def t in + add_rule [] (Pred(Param.get_pred (Equal(t)), [v;v])) [] LblEq; + + (* The attacker can create new names *) + let att_pred0 = Param.get_pred (Attacker(0, t)) in + let v = Terms.new_var_def Param.sid_type in + let new_name_fun = Terms.new_name_fun t in + if !Param.non_interference then + add_rule [att_fact 0 v] (att_fact 0 (FunApp(new_name_fun, [v]))) + [] (Rn att_pred0) + else + add_rule [] (att_fact 0 (FunApp(new_name_fun, [v]))) + [] (Rn att_pred0); + + if (!Param.non_interference) then + begin + (* Rules that derive bad from attacker are necessary only in the last phase. + Previous phases will get them by attacker_i(x) -> attacker_{i+1}(x) *) + + let att_pred = Param.get_pred (Attacker(!Param.max_used_phase, t)) in + + (* The attacker can do all equality tests on data he has *) + let v = Terms.new_var_def t in + let vc = Terms.new_var_def t in + add_rule [Pred(att_pred, [vc]); Pred(att_pred, [v]); testunif_fact vc v] + (Pred(bad_pred, [])) [] (TestEq(att_pred)); + + end + ) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types); + + + begin + (* Weak secrets *) + match !Param.weaksecret with + None -> () + | Some w -> weak_secret_clauses w + end; + + (* Remove subsumed clauses and tautologies among attacker clauses, + to avoid displaying many useless clauses. *) + + if !Param.remove_subsumed_clauses_before_display then + begin + let tmp_rules = ref [] in + (* Store in tmp_rules the rules after removing subsumed rules and tautologies *) + List.iter (function (hyp, concl, _, _) as rule -> + (* eliminate tautologies *) + if List.exists (Terms.equal_facts concl) hyp then () else + (* eliminate subsumed clauses *) + if List.exists (fun r -> Rules.implies r rule) (!tmp_rules) then () else + tmp_rules := rule :: (List.filter (fun r -> not (Rules.implies rule r)) (!tmp_rules)) + ) (!red_rules); + (* Renumber the rules *) + red_rules := []; + nrule := 0; + List.iter (function + (hyp', concl', Rule(_, tags, hyp, concl, constra), constra') -> + red_rules := (hyp', concl', Rule(!nrule, tags, hyp, concl, constra), constra') :: (!red_rules); + incr nrule + | _ -> Parsing_helper.internal_error "All clauses should have history Rule(...) at this point" + ) (!tmp_rules) + end; + + List.iter (fun ch -> + match ch.f_cat with + Name r -> r.prev_inputs <- Some (FunApp(ch, [])) + | _ -> internal_error "should be a name 1") + (!Param.freenames); + transl_process + { hypothesis = []; constra = []; unif = []; last_step_unif = []; + last_step_constra = []; neg_success_conditions = ref None; + name_params = []; repl_count = 0; current_session_id = None; + is_below_begin = false; cur_phase = 0; + input_pred = Param.get_pred (InputP(0)); + output_pred = Param.get_pred (OutputP(0)); + hyp_tags = []; + } p; + List.iter (fun ch -> + match ch.f_cat with + Name r -> r.prev_inputs <- None + | _ -> internal_error "should be a name 2") + (!Param.freenames); + + if !Param.key_compromise > 0 then + begin + List.iter (fun t -> + let v = Terms.new_var Param.def_var_name t in + Selfun.add_no_unif (Param.get_pred (Compromise(t)), [FVar v]) Selfun.never_select_weight + ) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types); + comp_transl_process p; + List.iter (fun ch -> + if not ch.f_private then + add_rule [] (comp_fact (FunApp(ch, []))) [] Init) (!Param.freenames); + Hashtbl.iter comp_rules_for_function Param.fun_decls; + Hashtbl.iter comp_rules_for_function Terms.tuple_table + end; + + List.iter (function + QFact(p,l) -> + (* For attacker: not declarations, the not declaration is also + valid in previous phases, because of the implication + attacker_p(i):x => attacker_p(i+1):x. + A similar point holds for table. *) + begin + match p.p_info with + [Attacker(i,t)] -> + for j = 0 to i-1 do + let att_j = Param.get_pred (Attacker(j,t)) in + Rules.add_not(Pred(att_j,l)) + done + | [Table(i)] -> + for j = 0 to i-1 do + let table_j = Param.get_pred (Table(j)) in + Rules.add_not(Pred(table_j,l)) + done + | _ -> () + end; + Rules.add_not(Pred(p,l)) + | _ -> Parsing_helper.user_error "The only allowed facts in \"not\" declarations are attacker, mess, table, and user-defined predicates.\n" + ) (if !Param.typed_frontend then Pitsyntax.get_not() else Pisyntax.get_not()); + + List.iter (function (f,n) -> + Selfun.add_no_unif f n) (if !Param.typed_frontend then Pitsyntax.get_nounif() else Pisyntax.get_nounif()); + + List.rev (!red_rules) + +(* Move restrictions under inputs to make the analysis more precise *) + +let rec put_new l p = + match l with + [] -> p + | ((a,args,occ)::l') -> Restr(a,args,put_new l' p,occ) + +let rec move_new accu = function + Nil -> Nil + | Par(p1,p2) -> put_new accu (Par(move_new [] p1, move_new [] p2)) + | Repl(p,occ) -> put_new accu (Repl (move_new [] p,occ)) + | Restr(f, args, p,occ) -> move_new ((f,args, occ)::accu) p + | Test(t,p1,p2,occ) -> + if p2 <> Nil then + put_new accu (Test(t, move_new [] p1, move_new [] p2,occ)) + else + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f f t) accu in + put_new l1 (Test(t,move_new l2 p1,Nil,occ)) + | Input(t,pat,p,occ) -> + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f f t || Terms.occurs_f_pat f pat) accu in + put_new l1 (Input(t,pat, move_new l2 p,occ)) + | Output(t1,t2,p,occ) -> + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f f t1 || Terms.occurs_f f t2) accu in + put_new l1 (Output(t1,t2,move_new l2 p,occ)) + | Let(pat,t,p,p',occ) -> + if p' <> Nil then + put_new accu (Let(pat, t, move_new [] p, move_new [] p',occ)) + else + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f f t || Terms.occurs_f_pat f pat) accu in + put_new l1 (Let(pat, t, move_new l2 p, Nil,occ)) + | LetFilter(vl,fact,p,q,occ) -> + if q <> Nil then + put_new accu (LetFilter(vl,fact,move_new [] p, move_new [] q,occ)) + else + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f_fact f fact) accu in + put_new l1 (LetFilter(vl, fact, move_new l2 p,Nil,occ)) + | Event(t1,p,occ) -> + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f f t1) accu in + put_new l1 (Event(t1, move_new l2 p, occ)) + | Insert(t1,p,occ) -> + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f f t1) accu in + put_new l1 (Insert(t1, move_new l2 p, occ)) + | Get(pat,t1,p,q,occ) -> + if q <> Nil then + put_new accu (Get(pat,t1,move_new [] p, move_new [] q,occ)) + else + let (l1,l2) = List.partition (fun (f,_,_) -> Terms.occurs_f f t1 || Terms.occurs_f_pat f pat) accu in + put_new l1 (Get(pat, t1, move_new l2 p, Nil, occ)) + | Phase(n,p,occ) -> + Phase(n, move_new accu p,occ) + +let move_new p = move_new [] p diff --git a/preinstallTTool/linux/proverif/src/pitransl.mli b/preinstallTTool/linux/proverif/src/pitransl.mli new file mode 100644 index 0000000000000000000000000000000000000000..80bbd373ae9bf4c8232b2c3144e0f7aaf8963f7c --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitransl.mli @@ -0,0 +1,31 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +val transl : process -> reduction list +val move_new : process -> process diff --git a/preinstallTTool/linux/proverif/src/pitranslweak.cmi b/preinstallTTool/linux/proverif/src/pitranslweak.cmi new file mode 100644 index 0000000000000000000000000000000000000000..74caf1078c8b70872a7ddab0f913a3d1a4c69276 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitranslweak.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitranslweak.cmx b/preinstallTTool/linux/proverif/src/pitranslweak.cmx new file mode 100644 index 0000000000000000000000000000000000000000..ed49039ddcc52ebaeec7bf4cb39e06ba27a0beac Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitranslweak.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pitranslweak.ml b/preinstallTTool/linux/proverif/src/pitranslweak.ml new file mode 100644 index 0000000000000000000000000000000000000000..047804374415d7b3eb4d78018d5ef0a3c56a98ef --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitranslweak.ml @@ -0,0 +1,1737 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types +open Pitypes + +(********************************************* + Function For Phases +**********************************************) + +(* Find the minimum phase in which choice is used *) + +let rec has_choice = function + Var _ -> false + | FunApp(f,l) -> + (f.f_cat == Choice) || (List.exists has_choice l) + +let rec has_choice_pat = function + PatVar _ -> false + | PatTuple(_,l) -> List.exists has_choice_pat l + | PatEqual t -> has_choice t + +let min_choice_phase = ref max_int + +let rec find_min_choice_phase current_phase = function + Nil -> () + | Par(p,q) -> + find_min_choice_phase current_phase p; + find_min_choice_phase current_phase q + | Repl (p,_) -> + find_min_choice_phase current_phase p + | Restr(n,_,p,_) -> + find_min_choice_phase current_phase p + | Test(t,p,q,_) -> + if has_choice t then + begin + if current_phase < !min_choice_phase then + min_choice_phase := current_phase + end; + find_min_choice_phase current_phase p; + find_min_choice_phase current_phase q + | Input(tc,pat,p,_) -> + if (has_choice tc) || (has_choice_pat pat) then + begin + if current_phase < !min_choice_phase then + min_choice_phase := current_phase + end; + find_min_choice_phase current_phase p + | Output(tc,t,p,_) -> + if has_choice tc || has_choice t then + begin + if current_phase < !min_choice_phase then + min_choice_phase := current_phase + end; + find_min_choice_phase current_phase p + + | Let(pat,t,p,q,_) -> + if (has_choice t) || (has_choice_pat pat) then + begin + if current_phase < !min_choice_phase then + min_choice_phase := current_phase + end; + find_min_choice_phase current_phase p; + find_min_choice_phase current_phase q + | LetFilter(vlist,f,p,q,_) -> + user_error "Predicates are currently incompatible with proofs of equivalences.\n" + | Event(t,p,_) -> + if has_choice t then + begin + if current_phase < !min_choice_phase then + min_choice_phase := current_phase + end; + find_min_choice_phase current_phase p + | Insert(t,p,_) -> + if has_choice t then + begin + if current_phase < !min_choice_phase then + min_choice_phase := current_phase + end; + find_min_choice_phase current_phase p + | Get(pat,t,p,q,_) -> + if (has_choice t) || (has_choice_pat pat) then + begin + if current_phase < !min_choice_phase then + min_choice_phase := current_phase + end; + find_min_choice_phase current_phase p; + find_min_choice_phase current_phase q + | Phase(n,p,_) -> + find_min_choice_phase n p + +(********************************************* + Function For Rules +**********************************************) + +(** Indicate the number of rules created *) +let nrule = ref 0 + +(** List of the rules created *) +let red_rules = ref ([] : reduction list) + +let mergelr = function + Pred(p,[t1;t2]) as x -> + begin + match p.p_info with + | [AttackerBin(i,t)] -> + if i >= (!min_choice_phase) then x else + let att1_i = Param.get_pred (Attacker(i,t)) in + Terms.unify t1 t2; + Pred(att1_i, [t1]) + | [TableBin(i)] -> + if i >= (!min_choice_phase) then x else + let tbl1_i = Param.get_pred (Table(i)) in + Terms.unify t1 t2; + Pred(tbl1_i, [t1]) + | [InputPBin(i)] -> + if i >= (!min_choice_phase) then x else + let input1_i = Param.get_pred (InputP(i)) in + Terms.unify t1 t2; + Pred(input1_i, [t1]) + | [OutputPBin(i)] -> + if i >= (!min_choice_phase) then x else + let output1_i = Param.get_pred (OutputP(i)) in + Terms.unify t1 t2; + Pred(output1_i, [t1]) + | _ -> x + end + | Pred(p,[t1;t2;t3;t4]) as x -> + begin + match p.p_info with + | [MessBin(i,t)] -> + if i >= (!min_choice_phase) then x else + let mess1_i = Param.get_pred (Mess(i,t)) in + Terms.unify t1 t3; + Terms.unify t2 t4; + Pred(mess1_i, [t1;t2]) + | _ -> x + end + | x -> x + +let rec nb_rule_total = ref 0 + + +let add_rule hyp concl constra tags = + if !min_choice_phase > 0 then + begin + assert (!Terms.current_bound_vars == []); + try + let hyp' = List.map mergelr hyp in + let concl' = mergelr concl in + let hyp'' = List.map Terms.copy_fact2 hyp' in + let concl'' = Terms.copy_fact2 concl' in + let constra'' = List.map Terms.copy_constra2 constra in + let tags'' = + match tags with + ProcessRule(hsl, nl) -> ProcessRule(hsl, List.map Terms.copy_term2 nl) + | x -> x + in + Terms.cleanup(); + + let constra''' = TermsEq.simplify_constra_list (concl''::hyp'') constra'' in + let rule = (hyp'', concl'', Rule (!nrule, tags'', hyp'', concl'', constra'''), constra''') in + red_rules := rule :: !red_rules; + incr nrule; + with + | Terms.Unify -> Terms.cleanup () + | TermsEq.FalseConstraint -> () + end + else + begin + try + let constra' = TermsEq.simplify_constra_list (concl::hyp) constra in + let rule = (hyp, concl, Rule (!nrule, tags, hyp, concl, constra'), constra') in + red_rules := rule :: !red_rules; + incr nrule; + with + TermsEq.FalseConstraint -> () + end + +(********************************************* + Preliminary functions +**********************************************) + +type transl_state = + { hypothesis : fact list; (* Current hypotheses of the rule *) + constra : constraints list list; (* Current constraints of the rule *) + + name_params : name_param_info list; (* List of parameters of names *) + name_params_types : typet list; + repl_count : int; (* Counter for replication *) + + input_pred : predicate; + output_pred : predicate; + cur_phase : int; (* Current phase *) + + hyp_tags : hypspec list + } + +let display_transl_state cur_state = + Printf.printf "\n--- Display current state ---\n"; + Printf.printf "\nHypothesis:\n"; + Display.Text.display_list (Display.Text.WithLinks.fact) " ; " cur_state.hypothesis; + Printf.printf "\nConstraint:\n"; + Display.Text.WithLinks.constra_list cur_state.constra + +(* Tools *) + +let get_type_from_pattern = function + | PatVar(v) -> v.btype + | PatTuple(f,_) -> snd f.f_type + | PatEqual(t) -> Terms.get_term_type t + +(* Creation of fact of attacker', mess' and table. *) + +let att_fact phase t1 t2 = + Pred(Param.get_pred (AttackerBin(phase, Terms.get_term_type t1)), [t1; t2]) + +let mess_fact phase tc1 tm1 tc2 tm2 = + Pred(Param.get_pred (MessBin(phase, Terms.get_term_type tm1)), [tc1;tm1;tc2;tm2]) + +let table_fact phase t1 t2 = + Pred(Param.get_pred (TableBin(phase)), [t1;t2]) + +(* Outputing a rule *) + +let output_rule cur_state out_fact = + Terms.auto_cleanup (fun _ -> + (* Apply the unification *) + let hyp = List.map Terms.copy_fact2 cur_state.hypothesis in + let concl = Terms.copy_fact2 out_fact in + let constra = List.map Terms.copy_constra2 cur_state.constra in + let name_params = List.map Terms.copy_term2 (Reduction_helper.extract_name_params_noneed cur_state.name_params) in + Terms.cleanup(); + begin + try + let constra2 = (TermsEq.simplify_constra_list (concl::hyp) constra) in + add_rule hyp concl constra2 (ProcessRule(cur_state.hyp_tags, name_params)) + with TermsEq.FalseConstraint -> + () + end + ) + + +(********************************************* + Translate Terms +**********************************************) + +(* [transl_term : (transl_state -> Types.terms -> Types.terms -> unit) -> transl_state -> Types.term -> unit +[transl_term f cur t] represent the translation of [t] in the current state [cur]. The two patterns that [f] +accepts as argument reprensent the result of the evalution +on open term on the left part and right part of [t]. + +Invariant : All variables should be linked with two closed terms when applied on the translation (due to closed processes) +*) +let rec transl_term next_f cur_state term = match term with + | Var v -> + begin + match v.link with + | TLink (FunApp(_,[t1;t2])) -> next_f cur_state t1 t2 + | _ -> internal_error "unexpected link in translate_term (1)" + end + | FunApp(f,args) -> + let transl_red red_rules = + transl_term_list (fun cur_state1 term_list1 term_list2 -> + if cur_state.cur_phase < !min_choice_phase then + List.iter (fun red_rule -> + let (left_list1, right1, side_c1) = Terms.auto_cleanup (fun _ -> Terms.copy_red red_rule) in + let (left_list2, right2, side_c2) = Terms.auto_cleanup (fun _ -> Terms.copy_red red_rule) in + + Terms.auto_cleanup (fun _ -> + try + List.iter2 Terms.unify term_list1 left_list1; + List.iter2 Terms.unify term_list2 left_list2; + let cur_state2 = + { cur_state1 with + constra = + (List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c1) @ + (List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c2) @ cur_state1.constra + } in + + ignore (TermsEq.check_constraint_list cur_state2.constra); + next_f cur_state2 right1 right2 + with Terms.Unify -> () + ) + ) red_rules + else + List.iter (fun red_rule1 -> + List.iter (fun red_rule2 -> + (* Fresh rewrite rules *) + let (left_list1, right1, side_c1) = Terms.auto_cleanup (fun _ -> Terms.copy_red red_rule1) in + let (left_list2, right2, side_c2) = Terms.auto_cleanup (fun _ -> Terms.copy_red red_rule2) in + + Terms.auto_cleanup (fun _ -> + try + List.iter2 Terms.unify term_list1 left_list1; + List.iter2 Terms.unify term_list2 left_list2; + let cur_state2 = + { cur_state1 with + constra = + (List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c1) @ + (List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c2) @ cur_state1.constra + } in + + ignore (TermsEq.check_constraint_list cur_state2.constra); + next_f cur_state2 right1 right2 + with Terms.Unify -> () + ) + ) red_rules + ) red_rules + ) cur_state args + in + + match f.f_cat with + | Name n -> + (* Parameters of names are now equals on the left and right side *) + begin + match n.prev_inputs with + | Some (name_term) -> next_f cur_state name_term name_term + | _ -> internal_error "unexpected prev_inputs in transl_term" + end + | Tuple | Eq _ | Red _ -> + transl_red (Terms.red_rules_fun f) + | Choice -> + begin + match args with + | [t1;t2] -> + transl_term (fun cur_state1 t11 t12 -> + transl_term (fun cur_state2 t21 t22 -> + next_f cur_state2 t11 t22 + ) cur_state1 t2 + ) cur_state t1 + | _ -> Parsing_helper.internal_error "Choice should have two arguments" + end + | Failure -> next_f cur_state (FunApp(f,[])) (FunApp(f,[])) + + | _ -> + Parsing_helper.internal_error "function symbols of these categories should not appear in input terms (pitranslweak)" + +(* next_f takes a state and two lists of patterns as parameter *) +and transl_term_list next_f cur_state = function + [] -> next_f cur_state [] [] + | (a::l) -> + transl_term (fun cur_state1 p1 p2 -> + transl_term_list (fun cur_state2 patlist1 patlist2 -> + next_f cur_state2 (p1::patlist1) (p2::patlist2)) cur_state1 l) cur_state a + +let transl_term_incl_destructor next_f cur_state occ term = + let may_have_several_patterns = Reduction_helper.transl_check_several_patterns occ term in + transl_term (fun cur_state1 term1 term2 -> + if may_have_several_patterns + then + let type_t = Terms.get_term_type term1 in + next_f { cur_state1 with + name_params = (MUnknown, FunApp(Param.choice_fun type_t,[term1;term2]), Always)::cur_state1.name_params; + name_params_types = type_t (* this type may not be accurate when types are ignored + (a type conversion function may have been removed); we + don't use it since it is not associated to a variable *) + :: cur_state1.name_params_types + } term1 term2 + else + next_f cur_state1 term1 term2 + ) cur_state term + + +(********************************************* + Translate Patterns +**********************************************) + +let rec transl_pat next_f cur_state pattern = + match pattern with + | PatVar b -> + let x_left = Var (Terms.copy_var b) + and x_right = Var (Terms.copy_var b) in + b.link <- TLink (FunApp(Param.choice_fun b.btype, [x_left; x_right])); + next_f cur_state (Var b) [b]; + b.link <- NoLink + | PatTuple(fsymb,pat_list) -> + transl_pat_list (fun cur_state2 term_list binder_list -> + next_f cur_state2 (FunApp(fsymb,term_list)) binder_list + ) cur_state pat_list + | PatEqual t -> next_f cur_state t [] + +and transl_pat_list next_f cur_state = function + | [] -> next_f cur_state [] [] + | pat::q -> + transl_pat (fun cur_state2 term binders2 -> + transl_pat_list (fun cur_state3 term_list binders3 -> + next_f cur_state3 (term::term_list) (binders2@binders3) + ) cur_state2 q + ) cur_state pat + +(********************************************* + Equation of success or failure +**********************************************) + +exception Failure_Unify + +(* Unify term t with a message variable. + Raises Unify in case t is fail. *) + +let unify_var t = + let x = Terms.new_var_def (Terms.get_term_type t) in + Terms.unify t x + +(* Unify term t with fail *) + +let unify_fail t = + let fail = Terms.get_fail_term (Terms.get_term_type t) in + Terms.unify fail t + +let transl_both_side_succeed nextf cur_state list_left list_right = + Terms.auto_cleanup (fun _ -> + try + List.iter unify_var list_left; + List.iter unify_var list_right; + nextf cur_state + with Terms.Unify -> () + ) + +let transl_both_side_fail nextf cur_state list_left list_right = + List.iter (fun t_left -> + List.iter (fun t_right -> + Terms.auto_cleanup (fun _ -> + try + unify_fail t_left; + unify_fail t_right; + nextf cur_state + with Terms.Unify -> () + ) + ) list_right; + ) list_left + + +let transl_one_side_fails nextf cur_state list_failure list_success = + List.iter (fun t -> + Terms.auto_cleanup (fun _ -> + try + List.iter unify_var list_success; + unify_fail t; + nextf cur_state + with Terms.Unify -> () + ) + ) list_failure + +(********************************************************** + Generation of pattern with universal variables +***********************************************************) + +let generate_pattern_with_uni_var binders_list term_pat_left term_pat_right = + let var_pat_l,var_pat_r = + List.split ( + List.map (fun b -> + match b.link with + | TLink(FunApp(_,[Var(x1);Var(x2)])) -> (x1,x2) + | _ -> internal_error "unexpected link in translate_term (2)" + ) binders_list + ) in + + (* TO DO this code may cause internal errors in the presence of patterns + let (b, =g(b)) = .... when b gets unified with a term that is not a variable. + However, such patterns are forbidden, so this is not a problem. *) + + let new_var_pat_l = List.map (fun v -> + match Terms.follow_link (fun b -> Var b) (Var v) with + |Var v' -> v' + |_ -> internal_error "unexpected term in translate_process (3)") var_pat_l + + and new_var_pat_r = List.map (fun v -> + match Terms.follow_link (fun b -> Var b) (Var v) with + |Var v' -> v' + |_ -> internal_error "unexpected term in translate_process (4)") var_pat_r in + + let new_term_pat_left = Terms.follow_link (fun b -> Var b) term_pat_left + and new_term_pat_right = Terms.follow_link (fun b -> Var b) term_pat_right in + + let gen_pat_l = Terms.auto_cleanup (fun _ -> Terms.generalize_vars_in new_var_pat_l new_term_pat_left) + and gen_pat_r = Terms.auto_cleanup (fun _ -> Terms.generalize_vars_in new_var_pat_r new_term_pat_right) in + + gen_pat_l,gen_pat_r + +(********************************************* + Translate Process +**********************************************) + +let rec transl_process cur_state process = + + (* DEBUG mode *) + + (*Printf.printf "\n\n**********************\n\n"; + Display.Text.display_process_occ "" process; + display_transl_state cur_state; + flush_all ();*) + + match process with + | Nil -> () + | Par(proc1,proc2) -> + transl_process cur_state proc1; + transl_process cur_state proc2 + | Repl(proc,occ) -> + (* Always introduce session identifiers ! *) + let var = Terms.new_var "@sid" Param.sid_type in + let sid_meaning = MSid (cur_state.repl_count + 1) in + let cur_state' = + { + cur_state with + repl_count = cur_state.repl_count + 1; + name_params = (sid_meaning, Var var, Always)::cur_state.name_params; + name_params_types = Param.sid_type ::cur_state.name_params_types; + hyp_tags = (ReplTag(occ, Reduction_helper.count_name_params cur_state.name_params)) :: cur_state.hyp_tags + } in + transl_process cur_state' proc + + | Restr(name,(args,env),proc,occ) -> + begin + match name.f_cat with + | Name r -> + let need_list = Reduction_helper.get_need_vars name.f_name in + let include_info = Reduction_helper.prepare_include_info env args need_list in + let npm = Reduction_helper.extract_name_params_meaning name.f_name include_info cur_state.name_params in + let np = Reduction_helper.extract_name_params name.f_name include_info cur_state.name_params in + let name_prev_type = Reduction_helper.extract_name_params_types name.f_name include_info cur_state.name_params cur_state.name_params_types in + if Terms.eq_lists (fst name.f_type) Param.tmp_type + then + begin + name.f_type <- name_prev_type, snd name.f_type; + r.prev_inputs_meaning <- npm + end + else if Param.get_ignore_types() then + begin + (* When we ignore types, the types of the arguments may vary, + only the number of arguments is preserved. *) + if List.length (fst name.f_type) != List.length name_prev_type then + internal_error ("Name " ^ name.f_name ^ " has bad arity") + end + else + begin + if not (Terms.eq_lists (fst name.f_type) name_prev_type) then + internal_error ("Name " ^ name.f_name ^ " has bad type") + end; + if List.length r.prev_inputs_meaning <> List.length np + then internal_error "prev_inputs_meaning and np should have the same size"; + + r.prev_inputs <- Some (FunApp(name, np)); + transl_process cur_state proc; + r.prev_inputs <- None + + | _ -> internal_error "A restriction should have a name as parameter" + end + + | Test(term1,proc_then,proc_else,occ) -> + (* This case is equivalent to : + Let z = equals(condition,True) in proc_then else proc_else *) + + if proc_else == Nil then + (* We optimize the case q == Nil. + In this case, the adversary cannot distinguish the situation + in which t fails from the situation in which t is false. *) + transl_term_incl_destructor (fun cur_state1 term1_left term1_right -> + (* Branch THEN (both sides are true) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_left Terms.true_term; + Terms.unify term1_right Terms.true_term; + transl_process { cur_state1 with + hyp_tags = (TestTag occ)::cur_state1.hyp_tags + } proc_then; + with Terms.Unify -> () + ); + + (* BAD (Left is true / Right is false) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_left Terms.true_term; + unify_var term1_right; + output_rule { cur_state1 with + constra = [Neq(term1_right,Terms.true_term)]::cur_state1.constra; + hyp_tags = (TestUnifTag2 occ)::cur_state1.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ); + + (* BAD (Left is true / Right fails) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_left Terms.true_term; + unify_fail term1_right; + output_rule { cur_state1 with + hyp_tags = (TestUnifTag2 occ)::cur_state1.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ); + + (* BAD (Left is false / Right is true) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_right Terms.true_term; + unify_var term1_left; + output_rule { cur_state1 with + constra = [Neq(term1_left,Terms.true_term)]::cur_state1.constra; + hyp_tags = (TestUnifTag2 occ)::cur_state1.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ); + + (* BAD (Left fails / Right is true) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_right Terms.true_term; + unify_fail term1_left; + output_rule { cur_state1 with + hyp_tags = (TestUnifTag2 occ)::cur_state1.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ) + + ) cur_state (OTest(occ)) term1 + else + transl_term_incl_destructor (fun cur_state1 term1_left term1_right -> + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state2 -> + (* Branch THEN *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_left Terms.true_term; + Terms.unify term1_right Terms.true_term; + transl_process { cur_state2 with + hyp_tags = (TestTag occ)::cur_state2.hyp_tags + } proc_then; + with Terms.Unify -> () + ); + + (* Branch ELSE *) + transl_process { cur_state2 with + constra = [Neq(term1_left,Terms.true_term)]::[Neq(term1_right,Terms.true_term)]::cur_state2.constra; + hyp_tags = (TestTag occ)::cur_state2.hyp_tags + } proc_else; + + (* BAD (Left ok / Right ko) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_left Terms.true_term; + output_rule { cur_state2 with + constra = [Neq(term1_right,Terms.true_term)]::cur_state2.constra; + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ); + + (* BAD (Left ko / Right ok) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term1_right Terms.true_term; + output_rule { cur_state2 with + constra = [Neq(term1_left,Terms.true_term)]::cur_state2.constra; + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ) + ) cur_state1 [term1_left] [term1_right]; + + (* Case left side succeed and right side fail *) + transl_one_side_fails (fun cur_state2 -> + (* BAD *) + output_rule { cur_state2 with + hyp_tags = TestUnifTag2(occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])); + ) cur_state1 [term1_right] [term1_left]; + + (* Case right side succeed and left side fail *) + transl_one_side_fails (fun cur_state2 -> + (* BAD *) + output_rule { cur_state2 with + hyp_tags = TestUnifTag2(occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])); + ) cur_state1 [term1_left] [term1_right] + ) cur_state (OTest(occ)) term1 + + | Let(pat,term,proc_then,proc_else, occ) -> + + transl_term_incl_destructor (fun cur_state1 term_left term_right -> + transl_pat (fun cur_state2 term_pattern binders_list -> + transl_term (fun cur_state3 term_pat_left term_pat_right -> + (* Generate the pattern with universal_variable *) + let gen_pat_l, gen_pat_r = generate_pattern_with_uni_var binders_list term_pat_left term_pat_right in + + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state4 -> + (* Branch THEN *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_left term_pat_left; + Terms.unify term_right term_pat_right; + transl_process { cur_state4 with + name_params = (List.map + (fun b -> (MVar(b, None), (match b.link with + | TLink t -> t + | _ ->internal_error "unexpected link in translate_term (4)"), IfQueryNeedsIt) + ) binders_list) @ cur_state4.name_params; + name_params_types = (List.map (fun b -> b.btype) binders_list)@cur_state4.name_params_types; + hyp_tags = (LetTag occ)::cur_state4.hyp_tags + } proc_then; + with Terms.Unify -> () + ); + + (* Branch ELSE *) + transl_process { cur_state4 with + constra = [Neq(gen_pat_l,term_left)]::[Neq(gen_pat_r,term_right)]::cur_state4.constra; + hyp_tags = (LetTag occ)::cur_state4.hyp_tags + } proc_else; + + (* BAD (Left ok / Right ko) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_left term_pat_left; + output_rule { cur_state4 with + constra = [Neq(gen_pat_r,term_right)]::cur_state4.constra; + hyp_tags = TestUnifTag2(occ)::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])) + with Terms.Unify -> () + ); + + (* BAD (Left ko / Right ok) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_right term_pat_right; + output_rule { cur_state4 with + constra = [Neq(gen_pat_l,term_left)]::cur_state4.constra; + hyp_tags = TestUnifTag2(occ)::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ) + ) cur_state3 [term_pat_left;term_left] [term_pat_right;term_right]; + + (* Case both sides fail *) + transl_both_side_fail (fun cur_state4 -> + transl_process { cur_state4 with + hyp_tags = (LetTag occ)::cur_state4.hyp_tags + } proc_else + ) cur_state3 [term_pat_left;term_left] [term_pat_right;term_right]; + + (* Case left side succeed and right side fail *) + transl_one_side_fails (fun cur_state4 -> + (* Branch ELSE *) + transl_process { cur_state4 with + constra = [Neq(gen_pat_l,term_left)]::cur_state4.constra; + hyp_tags = (LetTag occ)::cur_state4.hyp_tags + } proc_else; + + (* BAD (Left ok) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_left term_pat_left; + output_rule { cur_state4 with + hyp_tags = TestUnifTag2(occ)::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])) + with Terms.Unify -> () + ) + ) cur_state3 [term_pat_right;term_right] [term_pat_left;term_left]; + + (* Case right side succeed and left side fail *) + transl_one_side_fails (fun cur_state4 -> + (* Branch ELSE *) + transl_process { cur_state4 with + constra = [Neq(gen_pat_r,term_right)]::cur_state4.constra; + hyp_tags = (LetTag occ)::cur_state4.hyp_tags + } proc_else; + + (* BAD (Left ko) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_right term_pat_right; + output_rule { cur_state4 with + hyp_tags = TestUnifTag2(occ)::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])) + with Terms.Unify -> () + ) + ) cur_state3 [term_pat_left;term_left] [term_pat_right;term_right] + ) cur_state2 term_pattern + ) cur_state1 pat + ) cur_state (OLet(occ)) term + + | Input(tc,pat,proc,occ) -> + begin + match tc with + | FunApp({ f_cat = Name _; f_private = false },_) when !Param.active_attacker -> + transl_pat (fun cur_state1 term_pattern binders -> + transl_term (fun cur_state2 term_pat_left term_pat_right -> + (* Generate the basic pattern variables *) + let x_right = Terms.new_var_def (Terms.get_term_type term_pat_right) + and x_left = Terms.new_var_def (Terms.get_term_type term_pat_left) in + + (* Generate the pattern with universal_variable *) + let gen_pat_l, gen_pat_r = generate_pattern_with_uni_var binders term_pat_left term_pat_right in + + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state3 -> + + (* Pattern satisfied in both sides *) + transl_process { cur_state3 with + name_params = (List.map + (fun b -> (MVar(b,None), (match b.link with + | TLink t -> t + | _ ->internal_error "unexpected link in translate_term (3)"), Always) + ) binders) @ cur_state3.name_params; + name_params_types = (List.map (fun b -> b.btype) binders)@cur_state3.name_params_types; + hypothesis = (att_fact cur_state.cur_phase term_pat_left term_pat_right) :: cur_state3.hypothesis; + hyp_tags = (InputTag occ)::cur_state3.hyp_tags + } proc; + + (* Pattern satisfied only on left side *) + output_rule { cur_state3 with + constra = [Neq(gen_pat_r,x_right)]::cur_state3.constra; + hypothesis = (att_fact cur_state3.cur_phase term_pat_left x_right) :: cur_state3.hypothesis; + hyp_tags = TestUnifTag2(occ)::(InputTag occ)::cur_state3.hyp_tags + } (Pred(Param.bad_pred, [])); + + (* Pattern satisfied only on right side *) + output_rule { cur_state3 with + constra = [Neq(gen_pat_l,x_left)]::cur_state3.constra; + hypothesis = (att_fact cur_state3.cur_phase x_left term_pat_right) :: cur_state3.hypothesis; + hyp_tags = TestUnifTag2(occ)::(InputTag occ)::cur_state3.hyp_tags + } (Pred(Param.bad_pred, [])) + + ) cur_state2 [term_pat_left] [term_pat_right]; + + (* Case left side succeed and right side fail *) + transl_one_side_fails (fun cur_state3 -> + output_rule { cur_state3 with + hypothesis = (att_fact cur_state3.cur_phase term_pat_left x_right) :: cur_state3.hypothesis; + hyp_tags = (TestUnifTag2 occ)::(InputTag occ)::cur_state3.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state2 [term_pat_right] [term_pat_left]; + + (* Case right side succeed and left side fail *) + transl_one_side_fails (fun cur_state3 -> + output_rule { cur_state3 with + hypothesis = (att_fact cur_state3.cur_phase x_left term_pat_right) :: cur_state3.hypothesis; + hyp_tags = (TestUnifTag2 occ)::(InputTag occ)::cur_state3.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state2 [term_pat_left] [term_pat_right] + ) cur_state1 term_pattern + ) cur_state pat + + | _ -> + transl_term_incl_destructor (fun cur_state1 channel_left channel_right -> + (* Case both channel succeed *) + transl_both_side_succeed (fun cur_state2 -> + transl_pat (fun cur_state3 term_pattern binders -> + transl_term (fun cur_state4 term_pat_left term_pat_right -> + (* Generate the basic pattern variables *) + let x_right = Terms.new_var_def (Terms.get_term_type term_pat_right) + and x_left = Terms.new_var_def (Terms.get_term_type term_pat_left) in + + (* Generate the pattern with universal_variable *) + let gen_pat_l, gen_pat_r = generate_pattern_with_uni_var binders term_pat_left term_pat_right in + + (* Case where both pattern succeed *) + + transl_both_side_succeed (fun cur_state5 -> + let cur_state6 = { cur_state5 with + name_params = (List.map + (fun b -> (MVar(b, None), (match b.link with + | TLink t -> t + | _ ->internal_error "unexpected link in translate_term (4)"), Always) + ) binders) @ cur_state5.name_params; + name_params_types = (List.map (fun b -> b.btype) binders)@cur_state5.name_params_types; + } in + + (* Pattern satisfied in both sides *) + transl_process { cur_state6 with + hypothesis = (mess_fact cur_state.cur_phase channel_left term_pat_left channel_right term_pat_right)::cur_state6.hypothesis; + hyp_tags = (InputTag occ)::cur_state6.hyp_tags + } proc; + + output_rule { cur_state6 with + hyp_tags = (InputPTag occ) :: cur_state6.hyp_tags + } (Pred(cur_state6.input_pred, [channel_left; channel_right])); + + (* Pattern satisfied only on left side *) + output_rule { cur_state5 with + constra = [Neq(gen_pat_r,x_right)]::cur_state5.constra; + hypothesis = (mess_fact cur_state.cur_phase channel_left term_pat_left channel_right x_right)::cur_state5.hypothesis; + hyp_tags = TestUnifTag2(occ)::(InputTag occ)::cur_state5.hyp_tags + } (Pred(Param.bad_pred, [])); + + (* Pattern satisfied only on right side *) + output_rule { cur_state5 with + constra = [Neq(gen_pat_l,x_left)]::cur_state5.constra; + hypothesis = (mess_fact cur_state.cur_phase channel_left x_left channel_right term_pat_right)::cur_state5.hypothesis; + hyp_tags = TestUnifTag2(occ)::(InputTag occ)::cur_state5.hyp_tags + } (Pred(Param.bad_pred, [])) + + ) cur_state4 [term_pat_left] [term_pat_right]; + + (* Case with left pattern succeed but right fail *) + + transl_one_side_fails (fun cur_state5 -> + output_rule { cur_state5 with + hypothesis = (mess_fact cur_state.cur_phase channel_left term_pat_left channel_right x_right)::cur_state5.hypothesis; + hyp_tags = TestUnifTag2(occ)::(InputTag occ)::cur_state5.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state4 [term_pat_right] [term_pat_left]; + + (* Case with right pattern succeed but left fail *) + + transl_one_side_fails (fun cur_state5 -> + output_rule { cur_state5 with + hypothesis = (mess_fact cur_state.cur_phase channel_left x_left channel_right term_pat_right)::cur_state5.hypothesis; + hyp_tags = TestUnifTag2(occ)::(InputTag occ)::cur_state5.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state4 [term_pat_left] [term_pat_right] + ) cur_state3 term_pattern + ) cur_state2 pat + ) cur_state1 [channel_left] [channel_right]; + + (* Case left channel succeed and right channel fail *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [channel_right] [channel_left]; + + (* Case right side succeed and left side fail *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [channel_left] [channel_right] + ) cur_state (OInChannel(occ)) tc + end + + | Output(term_ch, term, proc, occ) -> + begin + match term_ch with + | FunApp({ f_cat = Name _; f_private = false },_) when !Param.active_attacker -> + transl_term (fun cur_state1 term_left term_right -> + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state2 -> + transl_process { cur_state2 with + hyp_tags = (OutputTag occ)::cur_state2.hyp_tags + } proc; + + output_rule { cur_state2 with + hyp_tags = (OutputTag occ)::cur_state2.hyp_tags + } (att_fact cur_state2.cur_phase term_left term_right) + ) cur_state1 [term_left] [term_right]; + + (* Case left side succeed and right side fail *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [term_right] [term_left]; + + (* Case right side succeed and left side fail *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [term_left] [term_right] + ) cur_state term + | _ -> + transl_term (fun cur_state1 channel_left channel_right -> + transl_term (fun cur_state2 term_left term_right -> + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state3 -> + transl_process { cur_state3 with + hyp_tags = (OutputTag occ)::cur_state3.hyp_tags + } proc; + + output_rule { cur_state3 with + hyp_tags = (OutputPTag occ) :: cur_state3.hyp_tags + } (Pred(cur_state3.output_pred, [channel_left; channel_right])); + + output_rule { cur_state3 with + hyp_tags = (OutputTag occ)::cur_state3.hyp_tags + } (mess_fact cur_state3.cur_phase channel_left term_left channel_right term_right) + ) cur_state2 [channel_left;term_left] [channel_right;term_right]; + + (* Case left side succeed and right side fail *) + transl_one_side_fails (fun cur_state3 -> + output_rule { cur_state3 with + hyp_tags = (TestUnifTag2 occ)::cur_state3.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state2 [channel_right;term_right] [channel_left;term_left]; + + (* Case right side succeed and left side fail *) + transl_one_side_fails (fun cur_state3 -> + output_rule { cur_state3 with + hyp_tags = (TestUnifTag2 occ)::cur_state3.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state2 [channel_left;term_left] [channel_right;term_right] + ) cur_state1 term + ) cur_state term_ch + end + + | LetFilter(_,_,_,_,_) -> + user_error "Predicates are currently incompatible with proofs of equivalences.\n" + + | Event(t,p,occ) -> + (* Even if the event does nothing, the term t is evaluated *) + transl_term (fun cur_state1 term_left term_right -> + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state2 -> + transl_process cur_state2 p + ) cur_state1 [term_left] [term_right]; + + (* Case left side succeeds and right side fails *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [term_right] [term_left]; + + (* Case right side succeeds and left side fails *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [term_left] [term_right] + + ) cur_state t + + | Insert(term,proc,occ) -> + transl_term (fun cur_state1 term_left term_right -> + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (InsertTag occ) :: cur_state2.hyp_tags + } (table_fact cur_state2.cur_phase term_left term_right); + + transl_process { cur_state2 with + hyp_tags = (InsertTag occ) :: cur_state2.hyp_tags + } proc; + ) cur_state1 [term_left] [term_right]; + + (* Case left side succeeds and right side fails *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [term_right] [term_left]; + + (* Case right side succeeds and left side fails *) + transl_one_side_fails (fun cur_state2 -> + output_rule { cur_state2 with + hyp_tags = (TestUnifTag2 occ)::cur_state2.hyp_tags + } (Pred(Param.bad_pred, [])) + ) cur_state1 [term_left] [term_right] + ) cur_state term + + | Get(pat,term,proc,proc_else,occ) -> + transl_pat (fun cur_state1 term_pattern binders -> + transl_term (fun cur_state2 term_pat_left term_pat_right -> + + let x_right = Terms.new_var_def (Terms.get_term_type term_pat_right) + and x_left = Terms.new_var_def (Terms.get_term_type term_pat_right) in + + (* Generate the pattern with universal_variable *) + let gen_pat_l, gen_pat_r = generate_pattern_with_uni_var binders term_pat_left term_pat_right in + + transl_term (fun cur_state3 term_left term_right -> + + (* Case both sides succeed *) + transl_both_side_succeed (fun cur_state4 -> + (* Success *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_left Terms.true_term; + Terms.unify term_right Terms.true_term; + transl_process { cur_state4 with + name_params = (List.map + (fun b -> (MVar(b,None), (match b.link with + | TLink t -> t + | _ ->internal_error "unexpected link in translate_term (6)"), Always) + ) binders) @ cur_state4.name_params; + name_params_types = (List.map (fun b -> b.btype) binders)@cur_state4.name_params_types; + hypothesis = (table_fact cur_state4.cur_phase term_pat_left term_pat_right) :: cur_state4.hypothesis; + hyp_tags = (GetTag(occ)) :: cur_state4.hyp_tags; + } proc; + with Terms.Unify -> () + ); + + (* BAD (Left ok / Right ko) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_left Terms.true_term; + output_rule { cur_state4 with + hypothesis = (table_fact cur_state4.cur_phase term_pat_left term_pat_right) :: cur_state4.hypothesis; + constra = [Neq(term_right,Terms.true_term)]::cur_state4.constra; + hyp_tags = TestUnifTag2(occ)::(GetTag occ)::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ); + + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_left Terms.true_term; + output_rule { cur_state4 with + hypothesis = (table_fact cur_state4.cur_phase term_pat_left x_right) :: cur_state4.hypothesis; + constra = [Neq(x_right,gen_pat_r)]::cur_state4.constra; + hyp_tags = TestUnifTag2(occ)::(GetTag(occ))::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ); + + (* BAD (Left ko / Right ok) *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_right Terms.true_term; + output_rule { cur_state4 with + hypothesis = (table_fact cur_state4.cur_phase term_pat_left term_pat_right) :: cur_state4.hypothesis; + constra = [Neq(term_left,Terms.true_term)]::cur_state4.constra; + hyp_tags = TestUnifTag2(occ)::(GetTag(occ))::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])); + with Terms.Unify -> () + ); + + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_right Terms.true_term; + output_rule { cur_state4 with + hypothesis = (table_fact cur_state4.cur_phase x_left term_pat_right) :: cur_state4.hypothesis; + constra = [Neq(x_left,gen_pat_l)]::cur_state4.constra; + hyp_tags = TestUnifTag2(occ)::(GetTag(occ))::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])) + with Terms.Unify -> () + ) + ) cur_state3 [term_pat_left;term_left] [term_pat_right;term_right]; + + (* Case left side succeed and right side fail *) + transl_one_side_fails (fun cur_state4 -> + (* BAD *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_left Terms.true_term; + output_rule { cur_state4 with + hypothesis = (table_fact cur_state4.cur_phase term_pat_left x_right) :: cur_state4.hypothesis; + hyp_tags = TestUnifTag2(occ)::(GetTag(occ))::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])) + with Terms.Unify -> () + ) + ) cur_state3 [term_pat_right;term_right] [term_pat_left;term_left]; + + (* Case right side succeed and left side fail *) + transl_one_side_fails (fun cur_state4 -> + (* BAD *) + Terms.auto_cleanup (fun _ -> + try + Terms.unify term_right Terms.true_term; + output_rule { cur_state4 with + hypothesis = (table_fact cur_state4.cur_phase x_left term_pat_right) :: cur_state4.hypothesis; + hyp_tags = TestUnifTag2(occ)::(GetTag(occ))::cur_state4.hyp_tags + } (Pred(Param.bad_pred, [])) + with Terms.Unify -> () + ) + ) cur_state3 [term_pat_left;term_left] [term_pat_right;term_right] + + ) cur_state2 term + ) cur_state1 term_pattern + ) cur_state pat; + transl_process { cur_state with hyp_tags = GetTagElse(occ) :: cur_state.hyp_tags } proc_else + + | Phase(n,proc,_) -> + transl_process { cur_state with + input_pred = Param.get_pred (InputPBin(n)); + output_pred = Param.get_pred (OutputPBin(n)); + cur_phase = n } proc + + +(*********************************** + The attacker clauses +************************************) + + +(* Clauses corresponding to an application of a function + + [rules_Rf_for_red] does not need the rewrite rules f(...fail...) -> fail + for categories Eq and Tuple in [red_rules]. Indeed, clauses + that come from these rewrite rules are useless: + 1/ if we use twice the same of these rewrite rules, we get + att(u1,u1') & ... & att(fail_ti, fail_ti) & ... & att(un,un') -> att(fail, fail) + which is subsumed by att(fail, fail) + 2/ if we use two distinct such rewrite rules, we get + att(u1,u1') & ... & att(fail_ti, ui') & ... & att(uj, fail_tj) & ... & att(un,un') -> att(fail, fail) + which is subsumed by att(fail, fail) + 3/ if we use one such rewrite rule and another rewrite rule, we get + att(u1,M1) & ... & att(fail_ti, Mi) & ... & att(un, Mn) -> att(fail, M') + which is subsumed by att(fail_ti, x) -> bad (recall that bad subsumes all conclusions) + Mi are messages, they are not fail nor may-fail variables. *) + +let rules_Rf_for_red phase f_symb red_rules = + let result_predicate = Param.get_pred (AttackerBin(phase, snd f_symb.f_type)) in + if phase < !min_choice_phase then + (* Optimize generation when no choice in the current phase *) + List.iter (fun red_rule -> + let (hyp1, concl1, side_c1) = Terms.copy_red red_rule in + + add_rule (List.map (fun t1 -> att_fact phase t1 t1) hyp1) + (att_fact phase concl1 concl1) + (List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c1) + (Apply(f_symb, result_predicate)) + ) red_rules + else + List.iter (fun red_rule1 -> + List.iter (fun red_rule2 -> + let (hyp1, concl1, side_c1) = Terms.copy_red red_rule1 + and (hyp2, concl2, side_c2) = Terms.copy_red red_rule2 in + + add_rule (List.map2 (fun t1 t2 -> att_fact phase t1 t2) hyp1 hyp2) + (att_fact phase concl1 concl2) + ((List.map (fun (t1,t2) -> [Neq(t1,t2)]) side_c1) @ (List.map (function (t1,t2) -> [Neq(t1,t2)]) side_c2)) + (Apply(f_symb, result_predicate)) + ) red_rules + ) red_rules + +let transl_attacker phase = + + (* The attacker can apply all functions, including tuples *) + Hashtbl.iter (Terms.clauses_for_function (rules_Rf_for_red phase)) Param.fun_decls; + Hashtbl.iter (Terms.clauses_for_function (rules_Rf_for_red phase)) Terms.tuple_table; + + List.iter (fun t -> + let att_pred = Param.get_pred (AttackerBin(phase,t)) in + let mess_pred = Param.get_pred (MessBin(phase,t)) in + + (* The attacker has any message sent on a channel he has (Rule Rl)*) + let v1 = Terms.new_var_def t in + let vc1 = Terms.new_var_def Param.channel_type in + let v2 = Terms.new_var_def t in + let vc2 = Terms.new_var_def Param.channel_type in + add_rule [Pred(mess_pred, [vc1; v1; vc2; v2]); att_fact phase vc1 vc2] + (Pred(att_pred, [v1; v2])) [] (Rl(att_pred, mess_pred)); + + if (!Param.active_attacker) then + begin + (* The attacker can send any message he has on any channel he has (Rule Rs) *) + let v1 = Terms.new_var_def t in + let vc1 = Terms.new_var_def Param.channel_type in + let v2 = Terms.new_var_def t in + let vc2 = Terms.new_var_def Param.channel_type in + add_rule [att_fact phase vc1 vc2; Pred(att_pred, [v1; v2])] + (Pred(mess_pred, [vc1; v1; vc2; v2])) [] (Rs(att_pred, mess_pred)) + end; + + (* Clauses for equality *) + let v = Terms.new_var_def t in + add_rule [] (Pred(Param.get_pred (Equal(t)), [v;v])) [] LblEq; + + (* Check for destructor failure (Rfailure) *) + + if phase >= !min_choice_phase + then + begin + let x = Terms.new_var_def t + and fail = Terms.get_fail_term t in + + add_rule [Pred(att_pred, [x; fail])] (Pred(Param.bad_pred, [])) [] (Rfail(att_pred)); + add_rule [Pred(att_pred, [fail; x])] (Pred(Param.bad_pred, [])) [] (Rfail(att_pred)) + end; + + + ) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types); + + if phase >= !min_choice_phase then + begin + let att_pred = Param.get_pred (AttackerBin(phase,Param.channel_type)) in + let input_pred = Param.get_pred (InputPBin(phase)) in + let output_pred = Param.get_pred (OutputPBin(phase)) in + + (* The attacker can do communications (Rule Ri and Ro)*) + let vc1 = Terms.new_var_def Param.channel_type in + let vc2 = Terms.new_var_def Param.channel_type in + add_rule [Pred(att_pred, [vc1; vc2])] (Pred(input_pred, [vc1;vc2])) [] (Ri(att_pred, input_pred)); + let vc1 = Terms.new_var_def Param.channel_type in + let vc2 = Terms.new_var_def Param.channel_type in + add_rule [Pred(att_pred, [vc1; vc2])] (Pred(output_pred, [vc1; vc2])) [] (Ro(att_pred, output_pred)); + + (* Check communications do not reveal secrets (Rule Rcom and Rcom')*) + let vc = Terms.new_var_def Param.channel_type in + let vc1 = Terms.new_var_def Param.channel_type in + let vc2 = Terms.new_var_def Param.channel_type in + add_rule [Pred(input_pred, [vc; vc1]); + Pred(output_pred, [vc; vc2])] + (Pred(Param.bad_pred, [])) [[Neq(vc1,vc2)]] + (TestComm(input_pred, output_pred)); + + let vc = Terms.new_var_def Param.channel_type in + let vc1 = Terms.new_var_def Param.channel_type in + let vc2 = Terms.new_var_def Param.channel_type in + add_rule [Pred(input_pred, [vc1; vc]); + Pred(output_pred, [vc2; vc])] + (Pred(Param.bad_pred, [])) [[Neq(vc1,vc2)]] + (TestComm(input_pred, output_pred)) + + end + +(* Convert terms (possibly with choice) to one term or to + a pair of terms. + You need to cleanup links after calling convert_to_1 and + convert_to_2. *) + +let rec convert_to_2 = function + Var x -> + begin + match x.link with + TLink (FunApp(_,[t1;t2])) -> (t1,t2) + | NoLink -> + let x1 = Var (Terms.copy_var x) in + let x2 = Var (Terms.copy_var x) in + Terms.link x (TLink (FunApp(Param.choice_fun x.btype, [x1; x2]))); + (x1, x2) + | _ -> assert false + end + | FunApp(f, [t1;t2]) when f.f_cat == Choice -> + let (t1',_) = convert_to_2 t1 in + let (_,t2') = convert_to_2 t2 in + (t1', t2') + | FunApp(f, l) -> + match f.f_cat with + Name { prev_inputs_meaning = pim } -> + let l' = List.map2 (fun t m -> + match m with + MSid _ | MCompSid | MAttSid -> + begin + try + convert_to_1 t + with Terms.Unify -> + user_error "Error: In not declarations, session identifiers should be variables.\n" + end + | _ -> + (* The arguments of names are always choice, except for session identifiers *) + let (t1,t2) = convert_to_2 t in + FunApp(Param.choice_fun (Terms.get_term_type t1), [t1;t2]) + ) l pim + in + (FunApp(f, l'), FunApp(f, l')) + | _ -> + let (l1, l2) = List.split (List.map convert_to_2 l) in + (FunApp(f, l1), FunApp(f, l2)) + +(* convert_to_1 raises Terms.Unify when there is a choice + that cannot be unified into one term. *) + +and convert_to_1 t = + let (t1, t2) = convert_to_2 t in + Terms.unify t1 t2; + t1 + +let convert_to_2 t = + let (t1, t2) = convert_to_2 t in + (Terms.copy_term2 t1, Terms.copy_term2 t2) + +let convert_to_1 t = + Terms.copy_term2 (convert_to_1 t) + +(* Convert formats (possibly with choice) to one format or to + a pair of formats. + Since nounif cannot be used for a phase earlier than the + one mentioned in the nounif declaration, it is not essential + that we can convert a nounif made with choice into a single format. + Moreover, we do not have a unification for formats ready, + so we prefer forbidding choice when a single format is needed. + *) + +let rec convertformat_to_1 = function + FVar x -> FVar x + | FAny x -> FAny x + | FFunApp(f, [t1;t2]) when f.f_cat == Choice -> + Parsing_helper.user_error "Error: choice not allowed in nounif declarations for phases in which choice is not used in the process\n" + | FFunApp(f, l) -> + match f.f_cat with + Name { prev_inputs_meaning = pim } -> + (* The arguments of names are always choice, except for + session identifiers *) + let l' = List.map2 (fun t m -> + match m with + MSid _ | MCompSid | MAttSid -> + convertformat_to_1 t + | _ -> + let t' = convertformat_to_1 t in + FFunApp(Param.choice_fun (Terms.get_format_type t'), [t';t']) + ) l pim + in + FFunApp(f, l') + | _ -> + FFunApp(f, List.map convertformat_to_1 l) + +(* You need to cleanup links after calling convertformat_to_2 *) + +let rec convertformat_to_2 = function + FVar x -> + begin + match x.link with + TLink (FunApp(_,[Var x1;Var x2])) -> (FVar x1,FVar x2) + | NoLink -> + if x.btype == Param.sid_type then + Parsing_helper.internal_error "convertformat_to_2: session identifiers should occur only inside names (1)\n"; + let x1 = Terms.copy_var x in + let x2 = Terms.copy_var x in + Terms.link x (TLink (FunApp(Param.choice_fun x.btype, [Var x1; Var x2]))); + (FVar x1, FVar x2) + | _ -> assert false + end + | FAny x -> + begin + match x.link with + TLink (FunApp(_,[Var x1;Var x2])) -> (FAny x1,FAny x2) + | NoLink -> + if x.btype == Param.sid_type then + Parsing_helper.internal_error "convertformat_to_2: session identifiers should occur only inside names (2)\n"; + let x1 = Terms.copy_var x in + let x2 = Terms.copy_var x in + Terms.link x (TLink (FunApp(Param.choice_fun x.btype, [Var x1; Var x2]))); + (FAny x1, FAny x2) + | _ -> assert false + end + | FFunApp(f, [t1;t2]) when f.f_cat == Choice -> + let (t1',_) = convertformat_to_2 t1 in + let (_,t2') = convertformat_to_2 t2 in + (t1', t2') + | FFunApp(f, l) -> + match f.f_cat with + Name { prev_inputs_meaning = pim } -> + (* The arguments of names are always choice, except for + session identifiers *) + let l' = List.map2 (fun t m -> + match m with + MSid _ | MCompSid | MAttSid -> + begin + match t with + FVar x -> assert (x.btype == Param.sid_type); FVar x + | FAny x -> assert (x.btype == Param.sid_type); FAny x + | _ -> Parsing_helper.user_error "Error: In nounif declarations, session identifiers should be variables.\n" + end + | _ -> + let (t1,t2) = convertformat_to_2 t in + FFunApp(Param.choice_fun (Terms.get_format_type t1), [t1;t2]) + ) l pim + in + (FFunApp(f, l'), FFunApp(f, l')) + | _ -> + let (l1, l2) = List.split (List.map convertformat_to_2 l) in + (FFunApp(f, l1), FFunApp(f, l2)) + +(* Global translation *) + +let transl p = + Rules.reset (); + Reduction_helper.main_process := p; + Reduction_helper.terms_to_add_in_name_params := []; + nrule := 0; + red_rules := []; + + find_min_choice_phase 0 p; + Reduction_helper.min_choice_phase := !min_choice_phase; + + (* Initialize the selection function. + In particular, when there is a predicate + member:x,y -> member:x,cons(z,y) + we would like nounif member:*x,y + It is important to initialize this very early, so that + the simplification of the initial rules is performed with + the good selection function. *) + List.iter (fun r -> ignore(Selfun.selection_fun r)) (!red_rules); + + for i = 0 to !Param.max_used_phase do + + transl_attacker i; + + List.iter (fun t -> + (* The attacker has the fail constants *) + let fail_term = Terms.get_fail_term t in + add_rule [] (att_fact i fail_term fail_term) [] Init; + + let att_i = Param.get_pred (AttackerBin(i,t)) in + if i < !min_choice_phase then + begin + (* Phase coded by unary predicates *) + let v = Terms.new_var Param.def_var_name t in + let att_i = Param.get_pred (Attacker(i,t)) in + Selfun.add_no_unif (att_i, [FVar v]) Selfun.never_select_weight + end + else + begin + (* Phase coded by binary predicates *) + let v1 = Terms.new_var Param.def_var_name t in + let v2 = Terms.new_var Param.def_var_name t in + Selfun.add_no_unif (att_i, [FVar v1; FVar v2]) Selfun.never_select_weight + end; + + if i > 0 then + (* It is enough to transmit only messages from one phase to the next, + because the attacker already has (fail, fail) in all phases + and the cases (fail, x) and (x, fail) immediately lead + to bad in all cases. *) + let w1 = Terms.new_var_def t in + let w2 = Terms.new_var_def t in + let att_im1 = Param.get_pred (AttackerBin(i-1,t)) in + add_rule [Pred(att_im1, [w1; w2])] (Pred(att_i, [w1; w2])) [] PhaseChange + ) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types); + + if i > 0 then + let w1 = Terms.new_var_def Param.table_type in + let w2 = Terms.new_var_def Param.table_type in + let tbl_i = Param.get_pred (TableBin(i)) in + let tbl_im1 = Param.get_pred (TableBin(i-1)) in + add_rule [Pred(tbl_im1, [w1; w2])] (Pred(tbl_i, [w1; w2])) [] TblPhaseChange + + done; + + + (* Knowing the free names and creating new names is necessary only in phase 0. + The subsequent phases will get them by attacker'_i(x,y) -> attacker'_{i+1}(x,y) *) + + (* The attacker has the public free names *) + List.iter (fun ch -> + if not ch.f_private then + add_rule [] (att_fact 0 (FunApp(ch, [])) (FunApp(ch, []))) [] Init) (!Param.freenames); + + List.iter (fun t -> + (* The attacker can create new names *) + let v1 = Terms.new_var_def Param.sid_type in + let new_name_fun = Terms.new_name_fun t in + add_rule [] (att_fact 0 (FunApp(new_name_fun, [v1])) (FunApp(new_name_fun, [v1]))) + [] (Rn (Param.get_pred (AttackerBin(0, t)))); + + (* Rules that derive bad are necessary only in the last phase. + Previous phases will get them by attacker'_i(x,y) -> attacker'_{i+1}(x,y) *) + + let att_pred = Param.get_pred (AttackerBin(!Param.max_used_phase, t)) in + + (* The attacker can perform equality tests *) + let v1 = Terms.new_var_def t in + let v2 = Terms.new_var_def t in + let v3 = Terms.new_var_def t in + add_rule [Pred(att_pred, [v1; v2]); Pred(att_pred, [v1; v3])] + (Pred(Param.bad_pred, [])) [[Neq(v2,v3)]] (TestEq(att_pred)); + + let v1 = Terms.new_var_def t in + let v2 = Terms.new_var_def t in + let v3 = Terms.new_var_def t in + add_rule [Pred(att_pred, [v2; v1]); Pred(att_pred, [v3; v1])] + (Pred(Param.bad_pred, [])) [[Neq(v2,v3)]] (TestEq(att_pred)) + + ) (if Param.get_ignore_types() then [Param.any_type] else !Param.all_types); + + (* Remove subsumed clauses and tautologies among attacker clauses, + to avoid displaying many useless clauses. *) + + if !Param.remove_subsumed_clauses_before_display then + begin + let tmp_rules = ref [] in + (* Store in tmp_rules the rules after removing subsumed rules and tautologies *) + List.iter (function (hyp, concl, _, _) as rule -> + (* eliminate tautologies *) + if List.exists (Terms.equal_facts concl) hyp then () else + (* eliminate subsumed clauses *) + if List.exists (fun r -> Rules.implies r rule) (!tmp_rules) then () else + tmp_rules := rule :: (List.filter (fun r -> not (Rules.implies rule r)) (!tmp_rules)) + ) (!red_rules); + (* Renumber the rules *) + red_rules := []; + nrule := 0; + List.iter (function + (hyp', concl', Rule(_, tags, hyp, concl, constra), constra') -> + red_rules := (hyp', concl', Rule(!nrule, tags, hyp, concl, constra), constra') :: (!red_rules); + incr nrule + | _ -> Parsing_helper.internal_error "All clauses should have history Rule(...) at this point" + ) (!tmp_rules) + end; + + List.iter (fun ch -> + match ch.f_cat with + | Name r -> r.prev_inputs <- Some (FunApp(ch, [])) + | _ -> internal_error "should be a name 1" + ) (!Param.freenames); + + (* Translate the process into clauses *) + + Terms.auto_cleanup (fun _ -> transl_process + { hypothesis = []; constra = []; + name_params = []; name_params_types = []; + repl_count = 0; + input_pred = Param.get_pred (InputPBin(0)); + output_pred = Param.get_pred (OutputPBin(0)); + cur_phase = 0; + hyp_tags = [] + } p; + ); + + List.iter (fun ch -> match ch.f_cat with + Name r -> r.prev_inputs <- None + | _ -> internal_error "should be a name 2") + (!Param.freenames); + + (* Take into account "not fact" declarations (secrecy assumptions) *) + + List.iter (function + QFact({ p_info = [Attacker(i,ty)] },[t]) -> + (* For attacker: not declarations, the not declaration is also + valid in previous phases, because of the implication + attacker_p(i):x => attacker_p(i+1):x + Furthermore, we have to translate unary to binary not declarations *) + for j = 0 to i do + if j < !min_choice_phase then + (* Phase coded by unary predicate, since it does not use choice *) + let att_j = Param.get_pred (Attacker(j,ty)) in + try + Rules.add_not(Pred(att_j,[Terms.auto_cleanup (fun () -> convert_to_1 t)])) + with Terms.Unify -> () + else + (* Phase coded by binary predicate *) + let att2_j = Param.get_pred (AttackerBin(j,ty)) in + let (t',t'') = Terms.auto_cleanup (fun () -> convert_to_2 t) in + Rules.add_not(Pred(att2_j,[t';t''])) + done + | QFact({ p_info = [Mess(i,ty)] } as p,[t1;t2]) -> + (* translate unary to binary not declarations *) + if i < !min_choice_phase then + (* Phase coded by unary predicate, since it does not use choice *) + try + let t1', t2' = Terms.auto_cleanup (fun () -> + convert_to_1 t1, convert_to_1 t2) + in + Rules.add_not(Pred(p, [t1'; t2'])) + with Terms.Unify -> () + else + (* Phase coded by binary predicate *) + let mess2_i = Param.get_pred (MessBin(i,ty)) in + let (t1', t1''), (t2', t2'') = Terms.auto_cleanup (fun () -> + convert_to_2 t1, convert_to_2 t2) + in + Rules.add_not(Pred(mess2_i,[t1';t2';t1'';t2''])) + | QFact({ p_info = [Table(i)] },[t]) -> + (* For "table" not declarations, the not declaration is also + valid in previous phases, because of the implication + table_p(i):x => table_p(i+1):x + Furthermore, we have to translate unary to binary not declarations *) + for j = 0 to i do + if j < !min_choice_phase then + (* Phase coded by unary predicate, since it does not use choice *) + let table_j = Param.get_pred (Table(j)) in + try + Rules.add_not(Pred(table_j,[Terms.auto_cleanup (fun () -> convert_to_1 t)])) + with Terms.Unify -> () + else + (* Phase coded by binary predicate *) + let table2_j = Param.get_pred (TableBin(j)) in + let (t',t'') = Terms.auto_cleanup (fun () -> convert_to_2 t) in + Rules.add_not(Pred(table2_j,[t';t''])) + done + | _ -> Parsing_helper.user_error "The only allowed facts in \"not\" declarations are attacker, mess, and table predicates (for process equivalences, user-defined predicates are forbidden).\n" + ) (if !Param.typed_frontend then Pitsyntax.get_not() else Pisyntax.get_not()); + + (* Take into account "nounif" declarations *) + + List.iter (function (f,n) -> + (* translate unary to binary nounif declarations *) + match f with + ({ p_info = [Attacker(i,ty)] } as pred, [t]) -> + if i < !min_choice_phase then + (* Phase coded by unary predicate, since it does not use choice *) + Selfun.add_no_unif (pred, [convertformat_to_1 t]) n + else + (* Phase coded by binary predicate *) + let att2_i = Param.get_pred (AttackerBin(i,ty)) in + let (t', t'') = Terms.auto_cleanup (fun () -> convertformat_to_2 t) in + Selfun.add_no_unif (att2_i, [t';t'']) n + | ({ p_info = [Mess(i,ty)] } as pred, [t1;t2]) -> + if i < !min_choice_phase then + (* Phase coded by unary predicate, since it does not use choice *) + Selfun.add_no_unif (pred, [convertformat_to_1 t1; convertformat_to_1 t2]) n + else + (* Phase coded by binary predicate *) + let mess2_i = Param.get_pred (MessBin(i,ty)) in + let (t1', t1''), (t2', t2'') = + Terms.auto_cleanup (fun () -> + convertformat_to_2 t1, + convertformat_to_2 t2) + in + Selfun.add_no_unif (mess2_i,[t1';t2';t1'';t2'']) n + | ({ p_info = [Table(i)] } as pred, [t]) -> + if i < !min_choice_phase then + (* Phase coded by unary predicate, since it does not use choice *) + Selfun.add_no_unif (pred, [convertformat_to_1 t]) n + else + (* Phase coded by binary predicate *) + let table2_i = Param.get_pred (TableBin(i)) in + let (t', t'') = Terms.auto_cleanup (fun () -> convertformat_to_2 t) in + Selfun.add_no_unif (table2_i, [t';t'']) n + | _ -> Parsing_helper.user_error "The only allowed facts in \"nounif\" declarations are attacker, mess, and table predicates (for process equivalences, user-defined predicates are forbidden).\n" + ) (if !Param.typed_frontend then Pitsyntax.get_nounif() else Pisyntax.get_nounif()); + + List.rev (!red_rules) + +(* This code was used to renumber the clauses when + we simplified them before displaying them. + It is currently useless. We keep it just in case. + + let red_rule_old_nb = List.rev (!red_rules) in + + let rec change_nb n = function + | [] -> [] + | (hyp,cl,Rule(_,tag,hyp',cl',cons'),cons)::q -> + (hyp,cl,Rule(n,tag,hyp',cl',cons'),cons)::(change_nb (n+1) q) + | t::q -> t::(change_nb n q) in + + change_nb 1 red_rule_old_nb + + red_rule_old_nb +*) diff --git a/preinstallTTool/linux/proverif/src/pitranslweak.mli b/preinstallTTool/linux/proverif/src/pitranslweak.mli new file mode 100644 index 0000000000000000000000000000000000000000..6da1d544d7273d8a443713292637baa0d319a3b1 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitranslweak.mli @@ -0,0 +1,32 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +val transl : process -> reduction list + + diff --git a/preinstallTTool/linux/proverif/src/pitsyntax.cmi b/preinstallTTool/linux/proverif/src/pitsyntax.cmi new file mode 100644 index 0000000000000000000000000000000000000000..0c22a355e21e9e5a8693e054d5ea5f55f95298ba Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitsyntax.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitsyntax.cmx b/preinstallTTool/linux/proverif/src/pitsyntax.cmx new file mode 100644 index 0000000000000000000000000000000000000000..c454044d528c3cfc48381b084c23d93c0723ab5c Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitsyntax.cmx differ diff --git a/preinstallTTool/linux/proverif/src/pitsyntax.ml b/preinstallTTool/linux/proverif/src/pitsyntax.ml new file mode 100644 index 0000000000000000000000000000000000000000..00c0da5978ab468d28123a7cef7c3fbaa1794a2d --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitsyntax.ml @@ -0,0 +1,2906 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Ptree +open Pitptree +open Types +open Pitypes +open Stringmap + +(********************************************* + Parsing files +**********************************************) + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + lexbuf.Lexing.lex_curr_p <- { lexbuf.Lexing.lex_curr_p with + Lexing.pos_fname = filename }; + let ptree = + try + Pitparser.all Pitlexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +let parse_lib filename = + let filename = filename ^ ".pvl" in + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + lexbuf.Lexing.lex_curr_p <- { lexbuf.Lexing.lex_curr_p with + Lexing.pos_fname = filename }; + let ptree = + try + Pitparser.lib Pitlexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +let parse_with_lib filename = + let l1 = + if (!Param.lib_name) <> "" then + parse_lib (!Param.lib_name) + else + [] + in + let (l,p,second_p) = parse filename in + (l1 @ l, p,second_p) + + +(********* Types *********** +This section is composed of two main functions : +- [get_type : Ptree.ident -> Types.typet] + [get_type (s,_)] returns the type associated to [s] in [Param.all_types] if [s] isn't the pre-defined type ["sid"] and ["any_type"] +- [check_type : Ptree.ident -> unit] + [check_type_decl (s,_)] first checks if [s] is not ["any_type"], ["sid"], or already defined. +If not, then the type is added into [Param.all_types] and [global_env] +****************************) + +let global_env = ref (StringMap.empty : envElement StringMap.t) + +let get_type_polym polym sid_allowed (s, ext) = + if s = "any_type" then + if polym then + Param.any_type + else + input_error "polymorphic type not allowed here" ext + else if s = "sid" then + if sid_allowed then + Param.sid_type + else + input_error "sid type not allowed here" ext + else + try + List.find (fun t -> t.tname = s) (!Param.all_types) + with Not_found -> + input_error ("type " ^ s ^ " not declared") ext + +let get_type ty = get_type_polym false false ty + +(** [check_type_decl (s,ext)] first checks if [s] is not ["any_type"], ["sid"], or already defined. +If not, then the type is added into [Param.all_types] and [global_env] *) +let check_type_decl (s, ext) = + if s = "any_type" then + input_error "type any_type reserved for polymorphism" ext; + if s = "sid" then + input_error "type sid reserved for session identifiers" ext; + if StringMap.mem s (!global_env) then + input_error ("identifier " ^ s ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + let r = { tname = s } in + Param.all_types := r :: (!Param.all_types); + global_env := StringMap.add s (EType r) (!global_env) + +(* Table of bound names of the process *) + +let glob_table = Simplify.glob_table + +let check_single ext s = + let vals = Hashtbl.find_all glob_table s in + match vals with + _::_::_ -> input_error (s ^ " cannot be used in queries. Its definition is ambiguous. (For example, several restrictions might define " ^ s ^ ".)") ext + | _ -> () + + +(********************************************* + Functions For Environment +**********************************************) + +let fun_decls = Param.fun_decls + +let initialize_env_and_fun_decl () = + (* Initial functions and constant *) + Hashtbl.add fun_decls "true" Terms.true_cst; + Terms.record_id "true" dummy_ext; + global_env := StringMap.add "true" (EFun Terms.true_cst) (!global_env); + + Hashtbl.add fun_decls "false" Terms.false_cst; + Terms.record_id "false" dummy_ext; + global_env := StringMap.add "false" (EFun Terms.false_cst) (!global_env); + + Hashtbl.add fun_decls "not" (Terms.not_fun()); + Terms.record_id "not" dummy_ext; + global_env := StringMap.add "not" (EFun (Terms.not_fun())) (!global_env); + + Hashtbl.add fun_decls "&&" (Terms.and_fun()); + Terms.record_id "&&" dummy_ext; + global_env := StringMap.add "&&" (EFun (Terms.and_fun())) (!global_env); + + Hashtbl.add fun_decls "||" (Terms.or_fun()); + Terms.record_id "||" dummy_ext; + global_env := StringMap.add "||" (EFun (Terms.or_fun())) (!global_env); + + List.iter (fun t -> + Terms.record_id t.tname dummy_ext; + global_env := StringMap.add t.tname (EType t) (!global_env) + ) (!Param.all_types) + +let special_functions = ["choice"; "||"; "&&"; "="; "<>"] + +let args_to_string tl = + let l = List.length tl in + if l=0 then + "0 argument" + else if l=1 then + "1 argument of type " ^ (Terms.tl_to_string ", " tl) + else + (string_of_int l) ^ " arguments of types " ^ (Terms.tl_to_string ", " tl) + +let get_apply_symb env (s,ext) tl = + match s, tl with + "=", [t1;t2] -> + if t1 != t2 then + input_error ("function " ^ s ^ " expects two arguments of same type but is here given " ^ + (args_to_string tl)) ext; + (EFun (Terms.equal_fun t1), Param.bool_type) + | "<>", [t1;t2] -> + if t1 != t2 then + input_error ("function " ^ s ^ " expects two arguments of same type but is here given " ^ + (args_to_string tl)) ext; + (EFun (Terms.diff_fun t1), Param.bool_type) + | "choice", [t1;t2] -> + if t1 != t2 then + input_error ("function " ^ s ^ " expects two arguments of same type but is here given " ^ + (args_to_string tl)) ext; + (EFun (Param.choice_fun t1), t1) + | ("=" | "<>" | "choice"), _ -> + input_error (s ^ "expects two arguments") ext + | _ -> + try + match StringMap.find s env with + (EFun r) as x -> + if not (Terms.eq_lists (fst r.f_type) tl) then + input_error ("function " ^ s ^ " expects " ^ + (args_to_string (fst r.f_type)) ^ + " but is here given " ^ + (args_to_string tl)) ext; + (x, snd r.f_type) + | (EPred r) as x -> + if not ((List.length r.p_type == List.length tl) && + (List.for_all2 (fun t1 t2 -> t1 == t2 || t1 == Param.any_type) r.p_type tl)) then + input_error ("predicate " ^ s ^ " expects " ^ + (args_to_string r.p_type) ^ + " but is here given " ^ + (args_to_string tl)) ext; + if List.exists (fun t -> t == Param.any_type) r.p_type then + (EPred (Param.get_pred (PolymPred(r.p_name, r.p_prop, tl))), Param.bool_type) + else + (x, Param.bool_type) + | (ELetFun (func_proc_layer, arg_type_list, result_type)) as x -> + if not (Terms.eq_lists tl arg_type_list) then + input_error ("letfun function " ^ s ^ " expects " ^ + (args_to_string arg_type_list) ^ + " but is here given " ^ + (args_to_string tl)) ext; + (x, result_type) + | x -> (x, Param.any_type) (* This case will cause an error in the caller of get_apply_symb *) + with Not_found -> + input_error (s ^ " not defined") ext + +(* The difference with the previous get_fun is that =, <>, &&, ||, choice are allowed + get_fun returns the function symbol and the type of the result. + (The type of the result is often (snd r.f_type), but + this is not true for choice when we ignore types: in that case, + (snd r.f_type) is Param.any_type, while the real return type is the + type of the argument of choice.) *) +let get_fun env (s,ext) tl = + match get_apply_symb env (s,ext) tl with + (EFun r, result_type) -> (r, result_type) + | _ -> input_error (s ^ " should be a function") ext + +(* The only difference with the previous get_pred is in error messages: + when using =, <>, choice, you get "should be a predicate" rather than "not defined". *) +let get_pred env (c, ext) tl = + match get_apply_symb env (c,ext) tl with + (EPred r, result_type) -> r + | _ -> input_error (c ^ " should be a predicate") ext + +let get_var env (s,ext) = + try + match StringMap.find s env with + EVar v -> v + | _ -> input_error (s ^ " should be a variable") ext + with Not_found -> + input_error ("variable " ^ s ^ " not declared") ext + +(* environment *) + +let add_env sid_allowed env l = + let env_ref = ref env in + List.iter (fun ((s,ext),ty) -> + let t = get_type_polym false sid_allowed ty in + begin + try + match StringMap.find s (!env_ref) with + EVar _ -> input_error ("variable " ^ s ^ " already defined") ext + | _ -> input_warning ("identifier " ^ s ^ " rebound") ext + with Not_found -> () + end; + let v = Terms.new_var s t in + env_ref := StringMap.add s (EVar v) (!env_ref) + ) l; + !env_ref + +let create_env l = + add_env false (!global_env) l + +(* May-fail environment *) + +let add_env_may_fail sid_allowed env l = + let env_ref = ref env in + List.iter (fun ((s,ext),ty,can_fail) -> + let t = get_type_polym false sid_allowed ty in + begin + try + match StringMap.find s (!env_ref) with + | EVar v when v.unfailing && can_fail -> input_error ("variable " ^ s ^ " already defined") ext + | EVar _ when can_fail -> input_error ("variable "^s^" was already defined as a may fail variable") ext + | EVar _ -> input_error ("variable "^s^" was already defined as a message variable") ext + | _ -> input_warning ("identifier " ^ s ^ " rebound") ext + with Not_found -> () + end; + + let var = + if can_fail + then Terms.new_unfailing_var s t + else Terms.new_var s t + in + env_ref := StringMap.add s (EVar var) (!env_ref) + ) l; + !env_ref + +let create_may_fail_env l = + add_env_may_fail false (!global_env) l + +(********************************************* + Check constructor declaration +**********************************************) + +let check_fun_decl (name, ext) argtypes restype options = + let tyarg = List.map get_type argtypes in + let tyres = get_type restype in + if StringMap.mem name (!global_env) then + input_error ("identifier " ^ name ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + let is_tuple = ref false in + let is_private = ref false in + let opt = ref 0 in + List.iter (function + ("data",_) -> is_tuple := true + | ("private",_) -> is_private := true + | ("typeConverter",_) -> + if List.length tyarg != 1 then + input_error "only unary functions can be declared \"typeConverter\"" ext; + is_tuple := true; + opt := (!opt) lor Param.fun_TYPECONVERTER + | (_,ext) -> + input_error "for functions, the only allowed options are data, private, and typeConverter" ext) options; + if (!is_tuple) && (!is_private) then + input_error "a function cannot be declared both data or typeConverter and private" ext; + let cat = if !is_tuple (* || ((arity == 0) && (not is_private)) *) then Tuple else Eq [] in + let r = { f_name = name; + f_type = tyarg, tyres; + f_cat = cat; + f_initial_cat = cat; + f_private = !is_private; + f_options = !opt } + in + Hashtbl.add fun_decls name r; + global_env := StringMap.add name (EFun r) (!global_env) + +(********************************************* + Check destructor declaration +**********************************************) + +(* Destructor to check *) + +let destructors_check_deterministic = ref [] + +let f_eq_tuple f ext = + match f.f_cat with + Eq _ | Tuple -> () + | Name _ -> input_error (f.f_name ^ " is a name; it should not appear in equations or rewrite rules") ext + | Red _ -> input_error (f.f_name ^ " is a function defined by rewrite rules; it should not appear in equations or rewrite rules") ext + | _ -> input_error (f.f_name ^ " should not appear in equations or rewrite rules") ext + +let f_any f ext = + match f.f_cat with + Choice -> input_error "function choice should not appear in clauses or elimtrue" ext + | Name _ -> input_error "names should not appear in clauses or elimtrue" ext + | _ -> () + +let f_eq_tuple_name f ext = + match f.f_cat with + Eq _ | Tuple | Name _ -> () + | Red _ -> input_error (f.f_name ^ " is a function defined by rewrite rules. It should not appear in non-interference queries") ext + | _ -> input_error (f.f_name ^ " should not appear in non-interference queries") ext + + +(* Check messages *) + +let rec check_eq_term f_allowed fail_allowed_top fail_allowed_all env (term,ext) = + match term with + | PFail -> input_error "The constant fail should not appear in this term" ext + | (PIdent (s,ext)) -> + let t = + try + match StringMap.find s env with + | EVar v when (not (fail_allowed_top || fail_allowed_all)) && v.unfailing -> + input_error ("The may-fail variable " ^ s ^ " cannot be used in this term.") ext + | EVar v -> Var v + | EFun f -> + if fst f.f_type <> [] then + input_error ("function " ^ s ^ " expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " arguments but is used without arguments") ext; + + f_allowed f ext; + FunApp(f, []) + | EName r -> + f_allowed r ext; + FunApp (r, []) + | _ -> input_error ("identifier " ^ s ^ " should be a function, a variable, or a name") ext + with Not_found -> + input_error ("identifier " ^ s ^ " not defined") ext + in + (t, Terms.get_term_type t) + + | (PFunApp ((f,ext), tlist)) -> + (* FunApp: the allowed functions depend on f_allowed + Three values of f_allowed are used: + - f_eq_tuple: allow constructors only (for equations and definitions of destructors) + - f_any: allow all functions except choice and names (for clauses and elimtrue) + - f_eq_tuple_name: allow constructors and names (for non-interference queries) + Predicates are never allowed. *) + let (tl', tyl) = List.split (List.map (check_eq_term f_allowed false fail_allowed_all env) tlist) in + let (f', result_type) = get_fun env (f,ext) tyl in + f_allowed f' ext; + if (f'.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) then + match tl' with + [t] -> (t, result_type) + | _ -> internal_error "type converter functions should always be unary" + else + (FunApp(f', tl'), result_type) + + | (PTuple tlist) -> + let (tl', tyl) = List.split (List.map (check_eq_term f_allowed false fail_allowed_all env) tlist) in + (FunApp (Terms.get_tuple_fun tyl, tl'), Param.bitstring_type) + +(* Check may-fail message *) + +let check_may_fail_term env type_term (mterm,ext) = match mterm with + | PFail -> + Terms.get_fail_term type_term + | _ -> + let t, type_t = check_eq_term f_eq_tuple true false env (mterm,ext) in + if type_t != type_term then + input_error ("the term is of type "^type_t.tname^" but the type "^type_term.tname^" was expected") ext; + t + + +(* Equations *) + +let check_equation l eqinfo = + let l' = List.map (fun (env, t1, t2) -> + let var_env = create_env env in + let (t1', ty1) = check_eq_term f_eq_tuple false false var_env t1 in + let (t2', ty2) = check_eq_term f_eq_tuple false false var_env t2 in + if ty1 != ty2 then + begin + let ext = merge_ext (snd t1) (snd t2) in + input_error "the two members of an equation should have the same type" ext + end; + (t1', t2')) l + in + let eqinfo' = match eqinfo with + [] -> EqNoInfo + | ["convergent",ext] -> EqConvergent + | ["linear",ext] -> EqLinear + | (_,ext)::_ -> Parsing_helper.input_error "for equations, the only allowed options are either convergent or linear" ext + in + TermsEq.register_equation eqinfo' l' + +(* Definition of destructors using Otherwise. *) + + +let check_red_may_fail (f,ext) type_arg type_res tlist options = + let ty_arg = List.map get_type type_arg in + let ty_res = get_type type_res in + + if StringMap.mem f (!global_env) then + input_error ("identifier " ^ f ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + + if List.mem f special_functions then + input_error (f ^ " not allowed here") ext; + + let rec generate_rules prev_args red_list = match red_list with + | [] -> [],prev_args + | (var_def,(PFunApp((f',ext'),l1),_), t2)::q -> + if f <> f' then + input_error ("In \"reduc\", all rewrite rules should begin with the same function " ^ f) ext'; + + if List.length ty_arg != List.length l1 then + input_error ("Function " ^ f ^ " expects " ^ + (string_of_int (List.length ty_arg)) ^ + " argument(s) but is here given " ^ + (string_of_int (List.length l1)) ^ " argument(s)") ext'; + + let env = create_may_fail_env var_def in + + let lhs = List.map2 (check_may_fail_term env) ty_arg l1 + and rhs = check_may_fail_term env ty_res t2 in + + (* Generate the destructors from side condition *) + + if lhs = [] + then ([[],rhs,[]], []) + else + begin try + let destructors = Terms.generate_destructor_with_side_cond prev_args lhs rhs ext' in + let next_destructors,all_args = generate_rules (lhs::prev_args) q in + + (destructors @ next_destructors), all_args + with Terms.False_inequality -> + (* This otherwise and all the next ones are not satisfiable anymore (we should raise a warning probably) *) + ([],prev_args) + end + | (_,(_, ext1), _)::_ -> input_error ("In \"reduc\", all rewrite rules should begin with function application") ext1 + + in + + let red_list,all_args = generate_rules [] tlist in + + (* Generate the failing case *) + let may_fail_vars = List.map Terms.new_unfailing_var_def ty_arg + and fail_term = Terms.get_fail_term ty_res in + + let complete_red_list = + if may_fail_vars = [] + then red_list + else + begin try + red_list @ (Terms.generate_destructor_with_side_cond all_args may_fail_vars fail_term Parsing_helper.dummy_ext) + with + Terms.False_inequality -> red_list + end + in + + assert (complete_red_list != []); + + let cat = Red complete_red_list in + let is_private = ref false in + + List.iter (function + | ("private",_) -> is_private := true + | (_,ext) -> input_error "for functions defined by rewrite rules, the only allowed option is private" ext + ) options; + + let fsymb = + { + f_name = f; + f_type = ty_arg, ty_res; + f_private = !is_private; + f_options = 0; + f_cat = cat; + f_initial_cat = cat + } in + + (* Adding the destructor in environment *) + + (*Display.Text.display_red fsymb complete_red_list;*) + + Hashtbl.add fun_decls f fsymb; + global_env := StringMap.add f (EFun fsymb) (!global_env) + + +(* Old definition of destructors, without otherwise *) + +let check_red tlist options = + match tlist with + | (_,(PFunApp((f,ext),_),_),_)::_ -> + begin + if List.mem f special_functions then + input_error (f ^ " not allowed here") ext; + + if StringMap.mem f (!global_env) then + input_error ("identifier " ^ f ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + + let red_list, ty_red_list = List.split ( + List.map (function + | (var_def,(PFunApp((f',ext'),l1),_), t2) -> + if f <> f' then + input_error ("In \"reduc\", all rewrite rules should begin with the same function " ^ f) ext'; + + let env = create_env var_def in + + let (lhs, tylhs), (rhs, tyrhs) = (List.split (List.map (check_eq_term f_eq_tuple false false env) l1), check_eq_term f_eq_tuple false false env t2) in + let var_list_rhs = ref [] in + Terms.get_vars var_list_rhs rhs; + + if not (List.for_all (fun v -> List.exists (Terms.occurs_var v) lhs) (!var_list_rhs)) then + Parsing_helper.input_error "All variables of the right-hand side of a \"reduc\" definition\nshould also occur in the left-hand side." ext'; + + (lhs, rhs, []), (tylhs, tyrhs) + | _,(_, ext1), _-> input_error ("In \"reduc\", all rewrite rules should begin with function application") ext1 + ) tlist + ) in + + match ty_red_list with + | [] -> internal_error "reduction with empty list" + | (tylhs,tyrhs)::r -> + List.iter (fun (tylhs',tyrhs') -> + if not (Terms.eq_lists tylhs tylhs') then + input_error ("the arguments of function " ^ f ^ " do not have the same type in all rewrite rules") ext; + + if not (tyrhs == tyrhs') then + input_error ("the result of function " ^ f ^ " does not have the same type in all rewrite rules") ext + ) r; + + let red_list' = + begin + let var_list = List.map (fun ty -> Terms.new_var_def ty) tylhs + and fail = Terms.get_fail_term tyrhs + and tuple_symb = Terms.get_tuple_fun tylhs in + + let tuple = FunApp(tuple_symb, var_list) in + + assert (!Terms.current_bound_vars == []); + + let side_cond = + List.map (fun (arg_list,_,_) -> + tuple,FunApp(tuple_symb, List.map (Terms.generalize_vars_not_in []) arg_list) + ) red_list in + + Terms.cleanup (); + + red_list @ ((var_list,fail,side_cond)::(Terms.complete_semantics_constructors tylhs tyrhs)) + end in + + let cat = Red red_list' in + let is_private = ref false in + + List.iter (function + | ("private",_) -> is_private := true + | (_,ext) -> + input_error "for functions defined by rewrite rules, the only allowed option is private" ext + ) options; + + let fsymb = { + f_name = f; + f_type = tylhs, tyrhs; + f_private = !is_private; + f_options = 0; + f_cat = cat; + f_initial_cat = cat + } in + + (* Adding the destructor for checking *) + + destructors_check_deterministic := fsymb::(!destructors_check_deterministic); + + (*Display.Text.display_red fsymb red_list';*) + + Hashtbl.add fun_decls f fsymb; + global_env := StringMap.add f (EFun fsymb) (!global_env) + end + | (_,(_, ext1), _) :: l -> + input_error ("In \"reduc\", all rewrite rules should begin with function application") ext1 + | [] -> internal_error "reduction with empty list" + + + +(* Check clauses *) + +let pred_env = Param.pred_env + +let rec interpret_info ty r = function + ("memberOptim", ext) -> + if List.length ty != 2 then + input_error "memberOptim makes sense only for predicates of arity 2" ext; + r.p_prop <- r.p_prop lor Param.pred_ELEM + | ("block",_) -> r.p_prop <- r.p_prop lor Param.pred_BLOCKING + (* add other qualifiers here *) + | (s,ext) -> input_error ("unknown predicate qualifier " ^ s) ext + +let check_pred (c,ext) tl info = + if c = "attacker" || c = "mess" || c = "event" || c = "inj-event" then + input_error ("predicate name " ^ c ^ " is reserved. You cannot declare it") ext; + if StringMap.mem c (!global_env) then + input_error ("identifier " ^ c ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + let tyl = List.map (get_type_polym true false) tl in + let r = { p_name = c; p_type = tyl; p_prop = 0; p_info = [] } in + List.iter (interpret_info tyl r) info; + if List.exists (fun t -> t == Param.any_type) tyl then + r.p_info <- [PolymPred(c, r.p_prop, tyl)]; + Hashtbl.add pred_env c r; + global_env := StringMap.add c (EPred r) (!global_env) + + +let add_rule hyp concl constra tag = + Param.red_rules := (hyp, concl, constra, tag) :: (!Param.red_rules) + + +let equal_fact t1 t2 = + Pred(Param.get_pred (Equal(Terms.get_term_type t1)), [t1;t2]) + +let check_cterm env (p,t) = + let (tl, tyl) = List.split (List.map (check_eq_term f_any false true env) t) in + (get_pred env p tyl, tl) + +let rec check_hyp is_simple (hyp_accu,constra_accu) env (fact, ext) = + match fact with + | PFail -> input_error "The constant fail should not appear in this fact" ext + | PIdent p -> + let (p',l') = check_cterm env (p,[]) in + (Pred(p',l')::hyp_accu, constra_accu) + | PTuple _ -> input_error "tuples not allowed here" ext + | PFunApp((f,fext) as p, l) -> + (* FunApp: two cases: + If is_simple, allow && and predicates + If not is_simple, allow &&, <>, =, and predicates + NOTE: in the latter case, I could allow all functions and predicates (except choice), + for functions other than &&, they should return type boolean, and + the term t would be encoded as equal:t, true. + In that case, I should also modify the case PIdent to allow boolean constants. *) + match f,l with + "<>", [t1;t2] -> + if is_simple then + input_error (f ^ " not allowed here") ext; + let (t1', ty1) = check_eq_term f_any false true env t1 in + let (t2', ty2) = check_eq_term f_any false true env t2 in + if ty1 != ty2 then + input_error "the two arguments of an inequality test should have the same type" ext; + (hyp_accu, [Neq(t1', t2')] :: constra_accu) + | "=", [t1;t2] -> + if is_simple then + input_error (f ^ " not allowed here") ext; + let (t1', ty1) = check_eq_term f_any false true env t1 in + let (t2', ty2) = check_eq_term f_any false true env t2 in + if ty1 != ty2 then + input_error "the two arguments of an equality test should have the same type" ext; + ((equal_fact t1' t2')::hyp_accu, constra_accu) + | "&&", [h1;h2] -> + check_hyp is_simple (check_hyp is_simple (hyp_accu,constra_accu) env h1) env h2 + | ("<>" | "=" | "&&"), _ -> internal_error ("Bad arity for special function " ^ f) + | _ -> + let (p',l') = check_cterm env (p,l) in + (Pred(p',l')::hyp_accu, constra_accu) + +let check_simple_fact env (fact, ext) = + match fact with + | PFail -> input_error "The constant fail should not appear in this fact" ext + | PIdent p -> + let (p',l') = check_cterm env (p,[]) in + Pred(p',l') + | PTuple _ -> input_error "tuples not allowed here" ext + | PFunApp((f,fext) as p,l) -> + (* FunApp: only predicates allowed *) + let (p',l') = check_cterm env (p,l) in + Pred(p',l') + +let check_clause = function + (env, PFact(c)) -> + begin + let env = create_may_fail_env env in + let concl = check_simple_fact env c in + add_rule [] concl [] LblClause + end + | (env, PClause(i,c)) -> + begin + try + let env = create_may_fail_env env in + let (hyp, constra) = check_hyp false ([],[]) env i in + let concl = check_simple_fact env c in + add_rule hyp concl + (TermsEq.simplify_constra_list (concl :: hyp) constra) LblClause + with TermsEq.FalseConstraint -> () + end + | (env, PEquiv(i,c,select)) -> + let env = create_may_fail_env env in + let (hyp, constra) = check_hyp true ([],[]) env i in + if constra != [] then + Parsing_helper.internal_error "Inequality constraints not allowed in equivalences, should be eliminated by check_hyp true\n"; + let concl = check_simple_fact env c in + add_rule hyp concl [] LblEquiv; + List.iter (fun h -> add_rule [concl] h [] LblEquiv) hyp; + Rules.add_equiv (hyp, concl, -1); (* TO DO should give a real rule number, but that's not easy... *) + if not select then Terms.add_unsel concl + + +(* List of the free names of the process *) + +let freenames = Param.freenames + +let add_free_name (s,ext) t options = + let is_private = ref false in + List.iter (function + | ("private",_) -> is_private := true + | (_,ext) -> + input_error "for free names, the only allowed option is private" ext) options; + let ty = get_type t in + if StringMap.mem s (!global_env) then + input_error ("identifier " ^ s ^ " already declared (as a free name, a function, a predicate, or a type)") ext; + let r = Terms.create_name s ([],ty) (!is_private) in + global_env := StringMap.add s (EName r) (!global_env); + freenames := r :: !freenames + + +(* Check non-interference terms *) + +let get_non_interf_name env (s,ext) = + try + match StringMap.find s env with + EName r -> + check_single ext s; + if not r.f_private then + input_error ("Non-interference is certainly false on public values, such as " ^ s) ext + else + r + | _ -> + input_error ("Non-interference can only be tested on private free names") ext + with Not_found -> + input_error ("Name " ^ s ^ " is not declared") ext + +let get_non_interf env (id, lopt) = + let n = get_non_interf_name (create_env env) id in + (n, + match lopt with + None -> None + | Some l -> + Some (List.map (fun t -> + let (t', ty) = check_eq_term f_eq_tuple_name false false (create_env env) t in + if ty != snd n.f_type then + input_error ("this term has type " ^ ty.tname ^ " but should have type " ^ (snd n.f_type).tname) (snd t); + t' + ) l)) + +(********************************************* + Preliminary functions +**********************************************) + +(* Table of processes defined by "let" *) + +let pdeftbl = (Hashtbl.create 7 : (string, binder list * process) Hashtbl.t) + +(* Term from identifier *) + +let get_type_from_ident env (s,ext) = + try + match StringMap.find s env with + EVar b -> b.btype + | EName r -> snd r.f_type + | EFun f -> + if fst f.f_type = [] then + snd f.f_type + else + input_error ("function " ^ s ^ " expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " arguments but is used without arguments") ext + | _ -> input_error ("identifier " ^ s ^ " should be a variable, a function, or a name") ext + with Not_found -> + input_error ("Variable, function, or name " ^ s ^ " not declared") ext + +let get_term_from_ident env (s, ext) = + try + match StringMap.find s env with + EVar b -> + begin + match b.link with + | NoLink -> Var(b) + | TLink t -> t + | _ -> internal_error "Bad link in the environment [pit_syntax_equivalence > get_term_from_ident]" + end + | EName r -> FunApp (r,[]) + | EFun f -> + if fst f.f_type = [] then + FunApp(f,[]) + else + input_error ("function " ^ s ^ " expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " arguments but is used without arguments") ext + | _ -> input_error ("identifier " ^ s ^ " should be a variable, a function, or a name") ext + with Not_found -> + input_error ("Variable, function, or name " ^ s ^ " not declared") ext + + +(********************************************* + Checking Term +**********************************************) + +let rec get_restr_arg env = function + [] -> [] + | (s,ext)::l -> + if List.exists (fun (s',_) -> s' = s) l then + get_restr_arg env l + else + try + match StringMap.find s env with + EVar b -> b::(get_restr_arg env l) + | _ -> + Parsing_helper.input_error (s ^ " should be a variable") ext + with Not_found -> + Parsing_helper.input_error ("variable " ^ s ^ " not defined") ext + +let get_restr_arg_opt env = function + None -> None + | Some l -> Some (get_restr_arg env l) + +let check_no_ref ext vlist proc_layer = + let proc_layer_Nil = proc_layer (fun _ -> Nil) in + if List.exists (fun v -> Reduction_helper.occurs_var_proc v proc_layer_Nil) vlist then + input_error "Cannot expand term because a variable in the expanded part would be referenced before being defined" ext + +(** [check_term : Types.envElement -> Pitptree.pterm_e -> ((Types.term -> Types.process) -> Types.process) * Types.typet]. +In [check_term env pterm], +-- [env] is the environment that stores the meaning of the elements currently in scope +-- [pterm] is the term that will be checked + +The function returns the translated process obtain from [proc_func] once [pterm] is translated, and the type of the term. *) +let rec check_term env (term, ext) = + match term with + | PPIdent(id) -> + let ty = get_type_from_ident env id in + (fun proc_context -> proc_context (get_term_from_ident env id)),ty + + | PPTuple(term_list) -> + let proc_layer_list, type_list = check_term_list env term_list in + let tuple_symb = Terms.get_tuple_fun type_list in + let proc_layer_tuple proc_context = + proc_layer_list (fun l -> proc_context (FunApp(tuple_symb,l))) + in + (proc_layer_tuple, Param.bitstring_type) + + | PPRestr((s,ext),args,tyid,t) -> + let ty = get_type tyid in + if (StringMap.mem s env) then + input_warning ("identifier " ^ s ^ " rebound") ext; + let r = Terms.create_name s (Param.tmp_type, ty) true in + let env' = StringMap.add s (EName r) env in + let (proc_layer, type_t) = check_term env' t in + let proc_layer_restr proc_context = + Restr(r, (get_restr_arg_opt env args, env), proc_layer proc_context, Terms.new_occurrence()) + in + (proc_layer_restr, type_t) + + | PPFunApp((s,ext),list_arg) -> + (* FunApp: all functions (including choice), predicates, and letfun allowed. *) + begin + let (proc_layer_list, type_list) = check_term_list env list_arg in + match get_apply_symb env (s,ext) type_list with + (EFun f, result_type) -> + if (f.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) then + (* For a type converter function, the result is directly given : no FunApp. + Furthermore, the number of argument should be 1 *) + let proc_layer proc_context = + proc_layer_list (fun l -> + match l with + | [t] -> proc_context t + | _ -> internal_error "Type converter functions should always be unary") + in + (proc_layer, result_type) + else + let proc_layer proc_context = + proc_layer_list (fun l -> proc_context (FunApp(f,l))) + in + (proc_layer, result_type) + + | (ELetFun(func_proc_layer, arg_type_list, result_type), _) -> + let proc_layer proc_context = + proc_layer_list (fun l -> + func_proc_layer l proc_context + ) + in + (proc_layer, result_type) + + | (EPred p, result_type) -> + (* allow predicates, encoded by LetFilter([], p(M1...Mn), true, false *) + let proc_layer context = + proc_layer_list (fun t_list -> + LetFilter([], Pred(p, t_list), + context Terms.true_term, + context Terms.false_term, + Terms.new_occurrence () + ) + ) + in + (proc_layer, result_type) + + | _ -> input_error (s ^ " should be a function or a predicate") ext + end + + | PPTest(cond,term_then,term_else_opt) -> + (* PPTest can be transformed into an application of the destructor gtest *) + + let (proc_layer_cond, type_cond) = check_term env cond in + let (proc_layer_then, type_then) = check_term env term_then in + let (proc_layer_else, type_else) = + match term_else_opt with + Some term_else -> check_term env term_else + | None -> + let fail = Terms.get_fail_term type_then in + ((fun proc_context -> proc_context fail), type_then) + in + + if type_cond != Param.bool_type then + input_error ("The type of the condition in the test is " ^ + type_cond.tname ^ " but a boolean is expected.") ext; + if type_then != type_else then + input_error + (Printf.sprintf "The then and else branches of the test should have the same type, but the then branch is of type %s and the else branch is of type %s." + type_then.tname type_else.tname) + ext; + + let proc_layer proc_context = + proc_layer_cond (fun c -> + proc_layer_then (fun tthen -> + proc_layer_else (fun telse -> + let gtest_symb = Terms.gtest_fun type_then in + proc_context (FunApp(gtest_symb,[c;tthen;telse])) + ))) + in + + (proc_layer, type_then) + + | PPLet(pat,term,term_then, term_else_opt) -> + (* This case will be transformed into a process Let which will never fail, + and then use the destructor gletresult to get the correct message.*) + + let (proc_layer_term, type_term) = check_term env term in + let (proc_layer_pattern, env',_) = check_pattern_into_one_var ext env (Some type_term) pat in + + let (proc_layer_then, type_then) = check_term env' term_then in + let (proc_layer_else, type_else) = + match term_else_opt with + Some term_else -> check_term env term_else + | None -> + let fail = Terms.get_fail_term type_then in + ((fun proc_context -> proc_context fail), type_then) + in + + if type_then != type_else + then input_error "the in and else branches should have the same type" ext; + + let proc_layer proc_context = + proc_layer_term (fun term_eval -> + proc_layer_pattern (fun pattern -> fun opt_test_pattern -> + let glet_symb = Terms.glet_fun type_term in + + let var = Terms.term_of_pattern_variable pattern in + + match opt_test_pattern with + |None -> + Let(pattern, FunApp(glet_symb,[term_eval]), + proc_layer_then (fun t_then -> + proc_layer_else (fun t_else -> + proc_context (FunApp(Terms.gtest_fun type_then, [FunApp(Terms.not_caught_fail_fun type_term, [var]); t_then; t_else])) + ) + ) + ,Nil, + Terms.new_occurrence() + ) + |Some(test) -> + Let(pattern, FunApp(glet_symb,[term_eval]), + proc_layer_then (fun t_then -> + proc_layer_else (fun t_else -> + proc_context (FunApp(Terms.gtest_fun type_then, + [ FunApp(Terms.and_fun(), + [ FunApp(Terms.not_caught_fail_fun type_term, [var]); + FunApp(Terms.success_fun Param.bool_type, [FunApp(Terms.is_true_fun(), [test])]) ]); + t_then; t_else ])) + ) + ), + Nil, + Terms.new_occurrence() + ) + + ) + ) in + + (proc_layer, type_then) + + | PPLetFilter(identlist,(fact,ext),term_then,term_else_opt) -> + let (env', vlist) = + List.fold_left (fun (env, vlist) ((s,e),t) -> + if (StringMap.mem s env) then + input_warning ("identifier " ^ s ^ " rebound") e; + + let ty = get_type t in + let v = Terms.new_var_noren s ty in + (StringMap.add s (EVar v) env, v:: vlist) + ) (env,[]) identlist in + + let vlist = List.rev vlist in + + let layer_fact = check_fact env' (fact,ext) in + (* Verify that the expanded part of layer_fact does not reference + the variables of vlist *) + check_no_ref ext vlist layer_fact; + + let (layer_then, type_then) = check_term env' term_then in + let (layer_else, type_else) = + match term_else_opt with + Some term_else -> check_term env term_else + | None -> + let fail = Terms.get_fail_term type_then in + ((fun proc_context -> proc_context fail), type_then) + in + + if type_then != type_else then + input_error "the in and else branches should have the same type" ext; + + let layer_proc context = + layer_fact (fun fact' -> + LetFilter(vlist,fact', + layer_then context, + layer_else context, + Terms.new_occurrence () + ) + ) in + + (layer_proc, type_then) + + +(** [check_term_list : Types.envElement -> Pitptree.pterm_e list -> ((Types.term list -> Types.process) -> Types.process) * Types.typet]. +*) +and check_term_list env term_list = (match term_list with + | [] -> + (* It corresponds to when no term needs to be checked hence the context is in fact a process *) + ((fun proc_context -> proc_context []), []) + | term::q -> + let (proc_layer_q,ty_list_q) = check_term_list env q + and (proc_layer_t,ty_term) = check_term env term in + + let proc_layer_list proc_context = + proc_layer_t (fun t -> proc_layer_q (fun l -> proc_context (t::l))) in + + (proc_layer_list, (ty_term::ty_list_q)):((Types.term list -> Types.process) -> Types.process)*(Types.typet list)) + + +(********************************************* + Checking Pattern +**********************************************) + + +(** [check_pattern : + Types.envElement -> + Types.typet option -> + Pitptree.tpattern -> + ((Types.pattern -> Types.term -> Types.process) -> Types.process) * Types.envElement]. +*) +and check_pattern environment type_pat_opt pat new_env = + match pat with + | PPatVar ((s,e), ty_opt) -> + let ty = + match ty_opt, type_pat_opt with + | None, None -> input_error ("variable " ^ s ^ " should be declared with a type") e + | Some (t,e), None -> get_type (t,e) + | None, Some ty -> ty + | Some (t,e), Some ty -> + let ty' = get_type (t,e) in + if ty != ty' then + input_error ("variable " ^ s ^ " is declared of type " ^ t ^ " but should be of type " ^ ty.tname) e; + ty + in + + if (StringMap.mem s new_env) then + input_warning ("identifier " ^ s ^ " rebound") e; + + let v = Terms.new_var_noren s ty in + + (* DEBUG *) + + (*Printf.printf "\nType of Pattern %s is %s\n" (v.sname) (v.btype.tname);*) + + let layer_proc context = context (PatVar v) in + + (layer_proc, StringMap.add s (EVar v) new_env, ty) + + | PPatTuple list_pat -> + begin + match type_pat_opt with + |None -> () + |Some(ty) when ty != Param.bitstring_type -> input_error ("pattern is of type " ^ Param.bitstring_type.tname ^ " but should be of type " ^ ty.tname) dummy_ext + |_ -> () + end; + + let (layer_proc_list,env', ty_list) = check_pattern_list dummy_ext environment (List.map (fun _ -> None) list_pat) list_pat new_env in + + let tuple_symb = Terms.get_tuple_fun ty_list in + + let layer_proc context = + layer_proc_list (fun l_pat -> + context (PatTuple(tuple_symb, l_pat)) + ) + in + (layer_proc, env', Param.bitstring_type) + + | PPatEqual term -> + (* By checking the term in the initial environment before + adding variables bound by the pattern, we make sure that + layer_proc_t does not reference variables bound in the pattern *) + let (layer_proc_t, type_t) = check_term environment term in + + begin + match type_pat_opt with + | None -> () + | Some(ty) -> + if ty != type_t then + input_error ("pattern is of type " ^ type_t.tname ^ " but should be of type " ^ ty.tname) (snd term); + end; + + let layer_proc context = + layer_proc_t (fun t -> context (PatEqual t)) in + + (layer_proc, new_env, type_t) + + | PPatFunApp((s,ext),l) -> + (* PatFunApp: only data constructors allowed *) + try + begin match StringMap.find s environment with + | EFun f -> + begin match type_pat_opt with + | None -> () + | Some ty -> + if ty != snd f.f_type then + input_error ("pattern is of type " ^ (snd f.f_type).tname ^ " but should be of type " ^ ty.tname) ext; + end; + + if List.length (fst f.f_type) != List.length l then + input_error ("Function " ^ f.f_name ^ " expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " argument(s) but is here given " ^ + (string_of_int (List.length l)) ^ " argument(s)") ext; + + let (layer_list, env', type_list) = check_pattern_list ext environment (List.map (fun t -> Some t) (fst f.f_type)) l new_env in + + if f.f_cat <> Tuple then + input_error ("only data functions are allowed in patterns, not " ^ s) ext; + + if (f.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) + then + let layer_proc context = + layer_list (fun l -> match l with + | [t] -> context t + | _ -> internal_error "type converter functions should always be unary" + ) in + + (layer_proc, env', snd f.f_type) + else + let layer_proc context = + layer_list (fun l -> context (PatTuple(f,l))) in + + (layer_proc, env', snd f.f_type) + | _ -> input_error ("only functions can be applied, not " ^ s) ext + end + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + + +and check_pattern_list ext environment type_pat_list_opt pat_list env = match pat_list,type_pat_list_opt with + | [],[] -> (fun context -> context []),env, [] + | pat::pat_l, ty_pat::ty_pat_l -> + let (layer_proc_pat, env', type_t) = check_pattern environment ty_pat pat env in + let (layer_proc_pat_l, env'', type_tl) = check_pattern_list ext environment ty_pat_l pat_l env' in + + let layer_proc context = + layer_proc_pat (fun pattern -> + layer_proc_pat_l (fun pattern_list -> + context (pattern::pattern_list) + ) + ) in + + (layer_proc, env'',type_t::type_tl) + |_,_ -> internal_error "[check_pattern_list] Size of pattern list and type list should be the same" + +(********************************************* + Checking and Transform Pattern +**********************************************) + + +(** [check_pattern : + Types.envElement -> + Types.typet option -> + Pitptree.tpattern -> + ((Types.pattern -> Types.term -> Types.process) -> Types.process) * Types.envElement]. +*) +and check_pattern_into_one_var ext environment type_pat_opt pat = + + let rec sub_check_pattern env cor_ty_opt pattern = match pattern with + | PPatVar ((s,e), ty_opt) -> + let ty = + match ty_opt, cor_ty_opt with + | None, None -> input_error ("variable " ^ s ^ " should be declared with a type") e + | Some (t,e), None -> get_type (t,e) + | None, Some ty -> ty + | Some (t,e), Some ty -> + let ty' = get_type (t,e) in + if ty != ty' then + input_error ("variable " ^ s ^ " is declared of type " ^ t ^ " but should be of type " ^ ty.tname) e; + ty + in + + if (StringMap.mem s env) then + input_warning ("identifier " ^ s ^ " rebound") e; + + let v = Terms.new_var_noren s ty in + + let layer_proc final_pat cor_term context = + v.link <- (TLink cor_term); + let p = context final_pat None in + p + in + + (layer_proc, StringMap.add s (EVar v) env, ty) + + | PPatTuple [] -> + let equal_symb = Terms.equal_fun Param.bitstring_type in + let tuple_symb = Terms.get_tuple_fun [] in + + let layer_proc final_pat cor_term context = + context final_pat (Some (FunApp(equal_symb,[FunApp(tuple_symb,[]);cor_term]))) in + + (layer_proc, env, Param.bitstring_type) + + | PPatTuple list_pat -> + begin + match cor_ty_opt with + | None -> () + | Some(ty) when ty != Param.bitstring_type -> input_error ("pattern is of type " ^ Param.bitstring_type.tname ^ " but should be of type " ^ ty.tname) ext; + |_ -> () + end; + + let (layer_proc_list,env', ty_list) = sub_check_pattern_list env (List.map (fun _ -> None) list_pat) list_pat in + + let layer_proc final_pat cor_term context = + let cor_term_list = List.map (fun f -> FunApp(f,[cor_term])) (Terms.get_all_projection_fun (Terms.get_tuple_fun ty_list)) in + + layer_proc_list final_pat cor_term_list + (fun f_pat -> fun opt_test -> + let fst_elt = List.hd cor_term_list + and success_symb = Terms.success_fun (List.hd ty_list) in + let test_proper_tuple = FunApp(success_symb,[fst_elt]) in + match opt_test with + | None -> context f_pat (Some test_proper_tuple) + | Some(test) -> context f_pat (Some (FunApp(Terms.and_fun(),[test;test_proper_tuple]))) + ) + in + + (layer_proc, env', Param.bitstring_type) + + | PPatEqual term -> + let (layer_proc_t, type_t) = check_term environment term in + + begin + match cor_ty_opt with + | None -> () + | Some(ty) when ty != type_t -> input_error ("pattern is of type " ^ type_t.tname ^ " but should be of type " ^ ty.tname) (snd term); + |_ -> () + end; + + let equal_symb = Terms.equal_fun type_t in + + let layer_proc final_pat cor_term context = + layer_proc_t (fun t -> context final_pat (Some (FunApp(equal_symb,[t;cor_term])))) in + + (layer_proc, env, type_t) + + | PPatFunApp((s,ext),l) -> + (* PatFunApp: only data constructors allowed *) + begin + try + match StringMap.find s env with + | EFun f when fst f.f_type = [] -> + if l != [] then + input_error ("Function " ^ f.f_name ^ + " expects no argument but is here given " ^ + (string_of_int (List.length l)) ^ " argument(s)") ext; + let equal_symb = Terms.equal_fun (snd f.f_type) in + + let layer_proc final_pat cor_term context = + context final_pat (Some (FunApp(equal_symb,[FunApp(f,[]);cor_term]))) in + + (layer_proc, env, snd f.f_type) + | EFun f-> + begin + match type_pat_opt with + | None -> () + | Some ty -> + if ty != snd f.f_type then + input_error ("pattern is of type " ^ (snd f.f_type).tname ^ " but should be of type " ^ ty.tname) ext; + end; + + if List.length (fst f.f_type) != List.length l then + input_error ("Function " ^ f.f_name ^ " expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " argument(s) but is here given " ^ + (string_of_int (List.length l)) ^ " argument(s)") ext; + let (layer_list, env', type_list) = sub_check_pattern_list env (List.map (fun t -> Some t) (fst f.f_type)) l in + + if f.f_cat <> Tuple then + input_error ("only data functions are allowed in patterns, not " ^ s) ext; + + if (f.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) + then + let layer_proc final_pat cor_term context = + layer_list final_pat ([cor_term]) context in + (layer_proc, env', snd f.f_type) + else + let layer_proc final_pat cor_term context = + let cor_term_list = List.map (fun f -> FunApp(f,[cor_term])) (Terms.get_all_projection_fun f) in + + layer_list final_pat cor_term_list + (fun f_pat -> fun opt_test -> + let fst_elt = List.hd cor_term_list + and success_symb = Terms.success_fun (List.hd type_list) in + let test_proper_tuple = FunApp(success_symb,[fst_elt]) in + match opt_test with + | None -> context f_pat (Some test_proper_tuple) + | Some(test) -> context f_pat (Some (FunApp(Terms.and_fun(),[test;test_proper_tuple]))) + ) + in + + (layer_proc, env', snd f.f_type) + | _ -> input_error ("only functions can be applied, not " ^ s) ext + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + end + + and sub_check_pattern_list env cor_ty_list_opt pattern_list = match pattern_list,cor_ty_list_opt with + | [],[] -> (fun final_pat -> fun _ -> fun context -> context final_pat None),env, [] + | pat::pat_l, ty_pat::ty_pat_l -> + let (layer_proc_pat, env', type_t) = sub_check_pattern env ty_pat pat in + let (layer_proc_pat_l, env'', type_tl) = sub_check_pattern_list env' ty_pat_l pat_l in + + let layer_proc final_pat cor_term_list context = + layer_proc_pat final_pat (List.hd cor_term_list) + (fun f_pat -> fun opt_test -> + layer_proc_pat_l f_pat (List.tl cor_term_list) + (fun f_pat' -> fun opt_test' -> + match opt_test, opt_test' with + |None,None -> context f_pat' None + |None,Some(_) -> context f_pat' opt_test' + |Some(_),None -> context f_pat' opt_test + |Some(test),Some(test') -> context f_pat' (Some (FunApp(Terms.and_fun(),[test; test']))) + ) + ) in + + (layer_proc, env'',type_t::type_tl) + | _,_ -> internal_error "[sub_check_pattern_list] The two list should have the same size" in + + let (layer_proc, env, type_pat) = sub_check_pattern environment type_pat_opt pat in + + let x = Terms.new_var Param.def_var_name type_pat in + + (layer_proc (PatVar x) (Var x), env, type_pat) + +(********************************************* + Checking Fact +**********************************************) + +and check_fact env (fact, ext) = match fact with + | PPIdent p -> + (fun context -> context (Pred(get_pred env p [],[]))) + + | PPTuple _ -> input_error "tuples not allowed here" ext + | PPRestr _ | PPTest _ | PPLet _ | PPLetFilter _ -> + input_error "new, if, let allowed in terms, but not at this position in conditions" ext + | PPFunApp((f,fext) as p,l) -> + (* FunApp: = and predicates allowed + NOTE: in fact, t = true allows to encode any boolean term, + should I rather allow any boolean term? *) + match f, l with + "=", [t1;t2] -> + let (layer_1, type_1) = check_term env t1 + and (layer_2, type_2) = check_term env t2 in + + if type_1 != type_2 then + input_error "the two arguments of an equality test should have the same type" ext; + + fun context -> + layer_1 (fun term_1 -> + layer_2 (fun term_2 -> + context (equal_fact term_1 term_2) + ) + ) + + | "=", _ -> internal_error ("Bad arity for special function " ^ f) + | _ -> + let (layer_list, type_l) = check_term_list env l in + let pred = get_pred env p type_l in + fun context -> + layer_list (fun t_list -> context (Pred(pred,t_list))) + +(********************************************* + Checking Event +**********************************************) + +let event_fun_table = Hashtbl.create 7 + +let check_event (name, ext) argtypes = + let tyarg = List.map get_type argtypes in + let tyarg = if !Param.key_compromise = 0 then tyarg else Param.sid_type :: tyarg in + if StringMap.mem name (!global_env) then + input_error ("identifier " ^ name ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + let r = { f_name = name; + f_type = tyarg, Param.event_type; + f_cat = Eq[]; + f_initial_cat = Eq[]; + f_private = true; + f_options = 0 } + in + Hashtbl.add event_fun_table name r; + global_env := StringMap.add name (EEvent r) (!global_env) + + +let get_event_fun env (s,ext) tl = + try + let r = StringMap.find s env in + match r with + EEvent p -> + if not (Terms.eq_lists (fst p.f_type) tl) then + input_error ("function " ^ s ^ " expects " ^ + (args_to_string (fst p.f_type)) ^ + " but is here given " ^ + (args_to_string tl)) ext; + p + | _ -> input_error (s ^ " should be an event") ext + with Not_found -> + input_error ("event " ^ s ^ " not defined") ext + + +(********************************************* + Checking Table +**********************************************) + +let check_table (name, ext) argtypes = + let tyarg = List.map get_type argtypes in + if StringMap.mem name (!global_env) then + input_error ("identifier " ^ name ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + let r = { f_name = name; + f_type = tyarg, Param.table_type; + f_cat = Tuple; + f_initial_cat = Tuple; + f_private = true; + f_options = 0 } + in + global_env := StringMap.add name (ETable r) (!global_env) + +let get_table_fun env (s,ext) tl = + try + let r = StringMap.find s env in + match r with + ETable p -> + if not (Terms.eq_lists (fst p.f_type) tl) then + input_error ("table " ^ s ^ " expects " ^ + (args_to_string (fst p.f_type)) ^ + " but is here given " ^ + (args_to_string tl)) ext; + p + | _ -> input_error (s ^ " should be a table") ext + with Not_found -> + input_error ("table " ^ s ^ " not defined") ext + + +(********************************************* + Checking Process +**********************************************) + +let rec has_destr = function + Var _ -> false + | FunApp(f,l) -> + (match f.f_cat with + Eq _ | Tuple | Choice | Name _ -> false + | _ -> true) || (List.exists has_destr l) + +let rec used_in_restr b = function + Nil -> false + | Test(_,p1,p2,_) | Get(_,_,p1,p2,_) | Let(_,_,p1,p2,_) + | LetFilter(_,_,p1,p2,_) | Par(p1,p2) -> + (used_in_restr b p1) || (used_in_restr b p2) + | Input(_,_,p,_) | Output(_,_,p,_) | Event(_,p,_) | Insert(_,p,_) + | Phase(_,p,_) | Repl(p,_) -> + used_in_restr b p + | Restr(f,(args,env),p,_) -> + (match args with + None -> false + | Some l -> List.memq b l) || (used_in_restr b p) + +let rec check_process env process = match process with + | PNil -> Nil + | PPar(p1,p2) -> Par(check_process env p1, check_process env p2) + | PRepl p -> Repl(check_process env p, Terms.new_occurrence ()) + | PTest(cond,p1,p2) -> + let layer_proc_cond, type_cond = check_term env cond in + + if type_cond != Param.bool_type then + input_error "The condition on the test should be of type boolean" (snd cond); + + layer_proc_cond (fun t -> + Test(t,check_process env p1, check_process env p2, Terms.new_occurrence ()) + ) + + | PLetDef((s,ext), args) -> + let proc_layer_list, type_list = check_term_list env args in + begin + try + let (param, p') = Hashtbl.find pdeftbl s in + let ptype = List.map (fun b -> b.btype) param in + if not (Terms.eq_lists ptype type_list) then + input_error ("process " ^ s ^ " expects " ^ + (args_to_string ptype) ^ + " but is here given " ^ + (args_to_string type_list)) ext; + + + assert (!Terms.current_bound_vars == []); + + + proc_layer_list (fun l -> + let p = ref p' in + List.iter2 (fun t v -> + if has_destr t || + (* Simplify.copy_process does not support linking a variable + that occurs in the argument of a Restr to a non-variable + term (because arguments of Restr are always variables, + and it would need to replace that variable with a + non-variable term). + Hence we introduce a Let to keep a variable in this case *) + (used_in_restr v (!p) && not (Terms.is_var t)) then + p := Let(PatVar v, t, (!p), Nil, Terms.new_occurrence()) + else + Terms.link v (TLink t)) l param; + + let p'' = Simplify.copy_process false (!p) in + Terms.cleanup (); + p'' + ) + with Not_found -> + input_error ("process " ^ s ^ " not defined") ext + end + + | PRestr((s,ext),args,t,p) -> + let ty = get_type t in + if (StringMap.mem s env) then + input_warning ("identifier " ^ s ^ " rebound") ext; + let r = Terms.create_name s (Param.tmp_type, ty) true in + Restr(r, (get_restr_arg_opt env args, env), check_process (StringMap.add s (EName r) env) p, Terms.new_occurrence()) + + | PInput(ch_term,pat,p) -> + let layer_channel, type_ch = check_term env ch_term in + if type_ch != Param.channel_type then + input_error ("this term has type " ^ type_ch.tname ^ " but should have type channel") (snd ch_term); + let layer_pattern, env', type_pat = check_pattern env None pat env in + layer_channel (fun ch -> + layer_pattern (fun pattern -> + Input(ch, pattern, check_process env' p, Terms.new_occurrence()) + ) + ) + + (* + layer_channel (fun ch -> + layer_pattern (fun pattern -> fun opt_test_pattern -> + match opt_test_pattern with + | None -> Input(ch, pattern, check_process env' p, new occurrence()) + | Some(test) -> + let x = new_var_def Param.boolean_type in + Input(ch, pattern, + Let(PatVar x, FunApp(Terms.is_true_fun(), [test]),check_process env' p, Nil, new occurence ()), + new_occurence ()) + ) + ) + *) + + | POutput(ch_term,term, p) -> + let layer_channel, type_ch = check_term env ch_term in + if type_ch != Param.channel_type then + input_error ("this term has type " ^ type_ch.tname ^ " but should have type channel") (snd ch_term); + let layer_term, ty_term = check_term env term in + layer_term (fun t -> + layer_channel (fun ch -> + Output(ch, t, check_process env p, Terms.new_occurrence ()) + ) + ) + + | PLet(pat, t, p, p') -> + let layer_term, type_t = check_term env t in + + let layer_pattern, env', _ = check_pattern env (Some type_t) pat env in + + layer_term (fun term -> + layer_pattern (fun pattern -> + Let(pattern, term, check_process env' p, check_process env p', Terms.new_occurrence ()) + ) + ) + + | PLetFilter(identlist,(fact,ext),p,q) -> + let (env', vlist) = List.fold_left (fun (env, vlist) ((s,e),t) -> + if (StringMap.mem s env) then + input_warning ("identifier " ^ s ^ " rebound") e; + let ty = get_type t in + let v = Terms.new_var_noren s ty in + (StringMap.add s (EVar v) env, v:: vlist)) (env,[]) identlist + in + + let vlist = List.rev vlist in + let layer_fact = check_fact env' (fact,ext) in + (* Verify that the expanded part of layer_fact does not reference + the variables of vlist *) + check_no_ref ext vlist layer_fact; + + layer_fact (fun fact' -> + LetFilter(vlist,fact', check_process env' p, check_process env q, Terms.new_occurrence ()) + ) + + | PEvent((i,ext),l,p) -> + let layer_list,type_list = check_term_list env l in + + if !Param.key_compromise == 0 then + let f = get_event_fun env (i,ext) type_list in + + layer_list (fun l' -> Event(FunApp(f, l'), check_process env p, Terms.new_occurrence())) + else + let f = get_event_fun env (i,ext) (Param.sid_type :: type_list) in + + layer_list (fun l' -> + Event(FunApp(f, (Terms.new_var_def Param.sid_type) :: l'), + check_process env p, + Terms.new_occurrence() + ) + ) + + | PInsert((i,ext),l,p) -> + let layer_list, type_list = check_term_list env l in + + let f = get_table_fun env (i,ext) type_list in + + layer_list (fun l' -> + Insert(FunApp(f, l'), check_process env p, Terms.new_occurrence())) + + | PGet((i,ext),pat_list,cond_opt,p,elsep) -> + begin try + begin match StringMap.find i env with + | ETable f -> + (* By checking the terms in the patterns in the initial environment env, + we make sure that layer_pat cannot reference variables bound in the + patterns *) + if List.length (fst f.f_type) != List.length pat_list then + input_error ("Table " ^ f.f_name ^ " expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " argument(s) but is here given " ^ + (string_of_int (List.length pat_list)) ^ " argument(s)") ext; + + let (layer_pat, env', type_pat) = check_pattern_list ext env (List.map (fun t -> Some t) (fst f.f_type)) pat_list env in + + begin + match cond_opt with + | Some t -> + let (layer_cond,type_cond) = check_term env' t in + if type_cond != Param.bool_type then + input_error ("this term has type " ^ type_cond.tname ^ " but should have type bool") (snd t); + + (* Verify that the expanded part of layer_cond does not reference + the variables of bound in the patterns *) + let vlist = ref [] in + let _ = layer_pat (fun pat_list -> + (* The goal of this function is to get all variables bound by the pattern + by storing them in vlist *) + vlist := List.fold_left Reduction_helper.get_pat_vars (!vlist) pat_list; + Nil) + in + check_no_ref (snd t) (!vlist) layer_cond; + + layer_pat (fun pat_list -> + layer_cond (fun cond -> + Get(PatTuple(f,pat_list), cond, check_process env' p, check_process env elsep, Terms.new_occurrence ()) + ) + ) + | None -> + layer_pat (fun pat_list -> + Get(PatTuple(f, pat_list), Terms.true_term, check_process env' p, check_process env elsep, Terms.new_occurrence ()) + ) + end + | _ -> input_error (i ^ " should be a table") ext + end + with Not_found -> + input_error ("table " ^ i ^ " not defined") ext + end + + | PPhase(n,p) -> Phase(n, check_process env p, Terms.new_occurrence()) + + +(********************************************* + Other Checking +**********************************************) + +let query_list = ref ([] : (envdecl * tquery list) list) +let need_vars_in_names = Reduction_helper.need_vars_in_names +let noninterf_list = ref ([] : (funsymb * term list option) list list) +let not_list = ref ([] : (envdecl * gterm_e) list) +let nounif_list = ref ([] : (envdecl * nounif_t) list) +let weaksecret_list = ref ([] : funsymb list) + +(* Compute need_vars_in_names: the list of pairs (restriction, variable name) + such that the variable "variable name" must occur as argument in the + pattern that models names created by "restriction", because the + structure "restriction[... variable name = ... ]" is used in the input + file. *) + +let rec nvn_t (term, ext0) = + match term with + PGIdent _ -> () + | PGFunApp(_,l) -> List.iter nvn_t l + | PGPhase(_,l, _) -> List.iter nvn_t l + | PGTuple l -> List.iter nvn_t l + | PGName ((s,ext),bl) -> + List.iter (fun ((s',ext'),t) -> + (* The replication indices do not need to be added in + need_vars_in_names, because they are always included as + arguments of names, whether or not they occur in + the input file. + They must not be added to need_vars_in_names, because + they are not correctly computed by trace reconstruction, + so adding them would cause bugs in trace reconstruction. *) + if (s' <> "") && (s'.[0] != '!') then + begin + try + let r = Hashtbl.find glob_table s in + (* print_string ("Need " ^ s' ^ " in " ^ r.f_name ^ "\n"); *) + need_vars_in_names := (r.f_name, s',ext') :: (!need_vars_in_names) + with Not_found -> + () + end; + nvn_t t + ) bl + | PGLet(_,t,t') -> nvn_t t; nvn_t t' + +let nvn_q = function + PRealQuery q -> nvn_t q + | PPutBegin(i, l) -> () + +let rec nvn_f (f,ext0) = + match f with + PFGIdent (s,ext) -> () + | PFGFunApp((s,ext),l) -> List.iter nvn_f l + | PFGTuple l -> List.iter nvn_f l + | PFGName ((s,ext),bl) -> + List.iter (fun ((s',ext'),t) -> + (* The replication indices do not need to be added in + need_vars_in_names, because they are always included as + arguments of names, whether or not they occur in + the input file. + They must not be added to need_vars_in_names, because + they are not correctly computed by trace reconstruction, + so adding them would cause bugs in trace reconstruction. *) + if (s' <> "") && (s'.[0] != '!') then + begin + try + let r = Hashtbl.find glob_table s in + (* print_string ("Need " ^ s' ^ " in " ^ r.f_name ^ "\n"); *) + need_vars_in_names := (r.f_name, s',ext') :: (!need_vars_in_names) + with Not_found -> + () + end; + nvn_f t + ) bl + | PFGAny (s,ext) -> () + | PFGLet(_,t,t') -> nvn_f t; nvn_f t' + +let rec nvn_nounif = function + BFLet(_,t,nounif) -> nvn_f t; nvn_nounif nounif + | BFNoUnif((id,fl,n),_) -> List.iter nvn_f fl + +let set_need_vars_in_names() = + List.iter (fun (_, q) -> List.iter nvn_q q) (!query_list); + List.iter (fun (_, no) -> nvn_t no) (!not_list); + List.iter (fun (_, nounif) -> nvn_nounif nounif) (!nounif_list) + +let rec has_nvn_t (term, ext0) = + match term with + PGIdent _ -> false + | PGFunApp(_,l) | PGPhase(_,l, _) | PGTuple l -> List.exists has_nvn_t l + | PGName ((s,ext),bl) -> bl != [] + | PGLet(_,t,t') -> (has_nvn_t t) || (has_nvn_t t') + +let rec has_nvn_f (f,ext0) = + match f with + PFGIdent _ | PFGAny _ -> false + | PFGFunApp(_,l) | PFGTuple l -> List.exists has_nvn_f l + | PFGName ((s,ext),bl) -> bl != [] + | PFGLet(_,t,t') -> (has_nvn_f t) || (has_nvn_f t') + +let rec has_nvn_nounif = function + BFLet(_,t,nounif) -> (has_nvn_f t) || (has_nvn_nounif nounif) + | BFNoUnif((id,fl,n),_) -> List.exists has_nvn_f fl + +let reset_need_vars_in_names() = + (* Since simplification does not support specifying new a[x = ...], + I remove the secrecy assumptions and nounif declaration that need that. *) + need_vars_in_names := []; + let secrecy_assumption_removed = ref false in + not_list := List.filter (fun (_, no) -> + if has_nvn_t no then + begin + secrecy_assumption_removed := true; + false + end + else + true) (!not_list); + if !secrecy_assumption_removed then + print_string "Warning! Removed one or several several not declarations that used a construct of the form new a[x = ...].\n"; + let nounif_removed = ref false in + nounif_list := List.filter (fun (_, nounif) -> + if has_nvn_nounif nounif then + begin + nounif_removed := true; + false + end + else + true) (!nounif_list); + if !nounif_removed then + print_string "Warning! Removed one or several several nounif declarations that used a construct of the form new a[x = ...].\n" + +(* Macro expansion *) + +let macrotable = ref StringMap.empty + +let rename_table = ref StringMap.empty + +let expansion_number = ref 0 + +let rename_ident i = + match i with + "=" | "<>" | "not" | "&&" | "||" | "event" | "inj-event" | "==>" | "choice" -> i + | _ -> if i.[0] = '!' then i else + try + StringMap.find i (!rename_table) + with Not_found -> + let r = "@" ^ (string_of_int (!expansion_number)) ^ "_" ^ i in + rename_table := StringMap.add i r (!rename_table); + r + +let rename_ie (i,ext) = (rename_ident i, ext) + +let rec rename_term (t,ext) = + let t' = match t with + | PFail -> PFail + | PIdent i -> PIdent (rename_ie i) + | PFunApp(f,l) -> PFunApp(rename_ie f, List.map rename_term l) + | PTuple l -> PTuple(List.map rename_term l) + in + (t',ext) + +let rec rename_format = function + PFIdent i -> PFIdent (rename_ie i) + | PFFunApp(f,l) -> PFFunApp(rename_ie f, List.map rename_format l) + | PFTuple l -> PFTuple(List.map rename_format l) + | PFName _ -> internal_error "Names not allowed in formats with -in pi" + | PFAny i -> PFAny (rename_ie i) + +let rename_format_fact (i,l) = (rename_ie i, List.map rename_format l) + +let rec rename_gformat (t,ext) = + let t' = match t with + PFGIdent i -> PFGIdent (rename_ie i) + | PFGFunApp(f,l) -> PFGFunApp(rename_ie f, List.map rename_gformat l) + | PFGTuple l -> PFGTuple(List.map rename_gformat l) + | PFGName(i,l) -> PFGName(rename_ie i, List.map (fun (i,t) -> (rename_ie i, rename_gformat t)) l) + | PFGAny i -> PFGAny (rename_ie i) + | PFGLet(i,t,t') -> PFGLet(rename_ie i, rename_gformat t, rename_gformat t') + in + (t',ext) + +let rec rename_nounif = function + BFLet(i,f,t) -> BFLet(rename_ie i, rename_gformat f, rename_nounif t) + | BFNoUnif((i,l,n'),n) -> BFNoUnif((rename_ie i, List.map rename_gformat l, n'), n) + +let rec rename_gterm (t,ext) = + let t' = match t with + PGIdent i -> PGIdent (rename_ie i) + | PGFunApp(f,l) -> PGFunApp(rename_ie f, List.map rename_gterm l) + | PGPhase(i,l,n) -> PGPhase(rename_ie i, List.map rename_gterm l, n) + | PGTuple l -> PGTuple(List.map rename_gterm l) + | PGName(i,l) -> PGName(rename_ie i, List.map (fun (i,t) -> (rename_ie i, rename_gterm t)) l) + | PGLet(i,t,t') -> PGLet(rename_ie i, rename_gterm t, rename_gterm t') + in + (t',ext) + +let rename_query = function + PPutBegin(b,l) -> PPutBegin(b, List.map rename_ie l) + | PRealQuery t -> PRealQuery(rename_gterm t) + +let rename_clause = function + PClause(t,t') -> PClause(rename_term t, rename_term t') + | PFact t -> PFact(rename_term t) + | PEquiv(t,t',b) -> PEquiv(rename_term t, rename_term t', b) + +let rec rename_pterm (t,ext) = + let t' = match t with + PPIdent i -> PPIdent (rename_ie i) + | PPFunApp(f,l) -> PPFunApp(rename_ie f, List.map rename_pterm l) + | PPTuple(l) -> PPTuple(List.map rename_pterm l) + | PPRestr(i,args,ty,t) -> + let args' = + match args with + None -> None + | Some l-> Some (List.map rename_ie l) + in + PPRestr(rename_ie i, args', rename_ie ty, rename_pterm t) + | PPTest(t1,t2,t3opt) -> PPTest(rename_pterm t1, rename_pterm t2, rename_pterm_opt t3opt) + | PPLet(pat, t1, t2, t3opt) -> PPLet(rename_pat pat, rename_pterm t1, rename_pterm t2, rename_pterm_opt t3opt) + | PPLetFilter(l, t1, t2, t3opt) -> PPLetFilter(List.map(fun (i,ty) -> (rename_ie i, rename_ie ty)) l, rename_pterm t1, rename_pterm t2, rename_pterm_opt t3opt) + in + (t',ext) + +and rename_pterm_opt = function + None -> None + | Some t3 -> Some (rename_pterm t3) + +and rename_pat = function + PPatVar(i,tyopt) -> PPatVar(rename_ie i, match tyopt with + None -> None + | Some ty -> Some (rename_ie ty)) + | PPatTuple l -> PPatTuple(List.map rename_pat l) + | PPatFunApp(f,l) -> PPatFunApp(rename_ie f, List.map rename_pat l) + | PPatEqual t -> PPatEqual (rename_pterm t) + +let rec rename_process = function + PNil -> PNil + | PPar(p1,p2) -> PPar(rename_process p1, rename_process p2) + | PRepl(p) -> PRepl(rename_process p) + | PRestr(i,args,ty,p) -> + let args' = + match args with + None -> None + | Some l -> Some (List.map rename_ie l) + in + PRestr(rename_ie i, args', rename_ie ty, rename_process p) + | PLetDef(i,l) -> PLetDef(rename_ie i, List.map rename_pterm l) + | PTest(t,p1,p2) -> PTest(rename_pterm t, rename_process p1, rename_process p2) + | PInput(t,pat,p) -> PInput(rename_pterm t, rename_pat pat, rename_process p) + | POutput(t1,t2,p) -> POutput(rename_pterm t1, rename_pterm t2, rename_process p) + | PLet(pat, t, p1, p2) -> PLet(rename_pat pat, rename_pterm t, rename_process p1, rename_process p2) + | PLetFilter(l, t, p1, p2) -> PLetFilter(List.map (fun (i,ty) -> (rename_ie i, rename_ie ty)) l, rename_pterm t, rename_process p1, rename_process p2) + | PEvent(i,l,p) -> PEvent(rename_ie i ,List.map rename_pterm l, rename_process p) + | PInsert(i,l,p) -> PInsert(rename_ie i ,List.map rename_pterm l, rename_process p) + | PGet(i,patl,topt,p,elsep) -> PGet(rename_ie i ,List.map rename_pat patl, (match topt with None -> None | Some t -> Some (rename_pterm t)), rename_process p, rename_process elsep) + | PPhase(n,p) -> PPhase(n, rename_process p) + +let rename_env env = List.map (fun (i,ty) -> (rename_ie i, rename_ie ty)) env + +let rename_may_fail_env env = List.map (fun (i,ty,can_fail) -> (rename_ie i, rename_ie ty, can_fail)) env + +let rec rename_side_condition side_c = match side_c with + |[] -> [] + |(env,t1,t2)::q -> (rename_env env, rename_term t1, rename_term t2)::(rename_side_condition q) + + +let rename_decl = function + TTypeDecl i -> TTypeDecl (rename_ie i) + | TFunDecl(i,l,ty,opt) -> TFunDecl(rename_ie i, List.map rename_ie l, rename_ie ty, opt) + | TEventDecl(i,l) -> TEventDecl(rename_ie i, List.map rename_ie l) + | TTableDecl(i,l) -> TTableDecl(rename_ie i, List.map rename_ie l) + | TConstDecl(i,ty,opt) -> TConstDecl(rename_ie i, rename_ie ty, opt) + | TReduc(l,opt) -> TReduc(List.map (fun (env,t1,t2) -> (rename_env env,rename_term t1, rename_term t2)) l, opt) + | TReducFail(f, ty_arg,ty_res,l,opt) -> TReducFail(rename_ie f, List.map rename_ie ty_arg, rename_ie ty_res, List.map (fun (env,t1,t2) -> (rename_may_fail_env env,rename_term t1, rename_term t2)) l, opt) + | TEquation(l, eqinfo) -> TEquation(List.map (fun (env, t1, t2) -> (rename_env env, rename_term t1, rename_term t2)) l, eqinfo) + | TPredDecl(i,l,opt) -> TPredDecl(rename_ie i, List.map rename_ie l, opt) + | TSet ((_,ext),_) -> + input_error "set is not allowed inside macro definitions" ext + | TPDef(i,env,p) -> TPDef(rename_ie i, rename_env env, rename_process p) + | TQuery(env, l) -> TQuery(rename_env env, List.map rename_query l) + | TNoninterf(env, l) -> TNoninterf(rename_env env, List.map (fun (i,tlopt) -> + (rename_ie i, match tlopt with + None -> None + | Some tl -> Some (List.map rename_term tl))) l) + | TWeaksecret i -> TWeaksecret (rename_ie i) + | TNoUnif(env, nounif) -> TNoUnif(rename_env env, rename_nounif nounif) + | TNot(env, t) -> TNot(rename_env env, rename_gterm t) + | TElimtrue(env, f) -> TElimtrue(rename_may_fail_env env, rename_term f) + | TFree(i,ty, opt) -> TFree(rename_ie i, rename_ie ty, opt) + | TClauses l -> TClauses (List.map (fun (env, cl) -> (rename_may_fail_env env, rename_clause cl)) l) + | TDefine((s1,ext1),argl,def) -> + input_error "macro definitions are not allowed inside macro definitions" ext1 + | TExpand((s1,ext1),argl) -> + internal_error "macro-expansion inside a macro should have been expanded at macro definition point" + | TLetFun(i,env,t) -> TLetFun(rename_ie i, rename_env env, rename_pterm t) + +let apply argl paraml already_def def = + rename_table := StringMap.empty; + incr expansion_number; + List.iter (fun s -> + rename_table := StringMap.add s s (!rename_table)) already_def; + List.iter2 (fun (a,_) (p,_) -> + rename_table := StringMap.add p a (!rename_table)) argl paraml; + let def' = List.map rename_decl def in + rename_table := StringMap.empty; + def' + + +(* Handle all declarations *) + +let rec check_one = function + TTypeDecl(i) -> check_type_decl i + | TFunDecl(f,argt,rest,i) -> check_fun_decl f argt rest i + | TConstDecl(f,rest,i) -> check_fun_decl f [] rest i + | TEquation(l,eqinfo) -> check_equation l eqinfo + | TReduc (r,i) -> check_red r i + | TReducFail (f,ty_arg,ty_res,r,i) -> check_red_may_fail f ty_arg ty_res r i + | TPredDecl (p, argt, info) -> check_pred p argt info + | TEventDecl(i, args) -> check_event i args + | TTableDecl(i, args) -> check_table i args + | TPDef ((s,ext), args, p) -> + let env = ref (!global_env) in + let arglist = List.map (fun ((s',ext'),ty) -> + let t = get_type ty in + begin + try + match StringMap.find s' (!env) with + EVar _ -> input_error ("variable " ^ s' ^ " already defined") ext' + | _ -> () + with Not_found -> + () + end; + let v = Terms.new_var_noren s' t in + env := StringMap.add s' (EVar v) (!env); + v + ) args + in + let p' = check_process (!env) p in + Hashtbl.add pdeftbl s (arglist, p') + | TQuery (env,q) -> + query_list := (env,q) :: (!query_list) + | TNoninterf (env, lnoninterf) -> + noninterf_list := (List.map (get_non_interf env) lnoninterf) :: (!noninterf_list); + | TWeaksecret i -> + weaksecret_list := (get_non_interf_name (!global_env) i) ::(!weaksecret_list) + | TNoUnif (env, nounif) -> + nounif_list := (env, nounif) :: (!nounif_list) + | TElimtrue(env, fact) -> + let env = create_may_fail_env env in + Param.elim_true := (check_simple_fact env fact) :: (!Param.elim_true) + | TNot (env, no) -> + not_list := (env, no) :: (!not_list) + | TFree (name,ty,i) -> + add_free_name name ty i + | TClauses c -> + List.iter check_clause c + | TLetFun ((s,ext), args, p) -> + if StringMap.mem s (!global_env) then + input_error ("identifier " ^ s ^ " already defined (as a free name, a function, a predicate, or a type)") ext; + + let initial_env = !global_env in + let env = ref (!global_env) in + + let type_arg_list = List.map (fun ((s',ext'),ty) -> + let t = get_type ty in + begin + try + match StringMap.find s' (!env) with + EVar _ -> input_error ("variable " ^ s' ^ " already defined") ext' + | _ -> () + with Not_found -> + () + end; + + let v = Terms.new_var_noren s' t in + env := StringMap.add s' (EVar v) (!env); + t + ) args in + + let _, type_result = check_term (!env) p in + + let func_proc_layer list_term_arg proc_context = + let env = ref initial_env in + + let rec link_the_variables args_list term_args_list = match args_list,term_args_list with + | [],[] -> () + | [],_ | _,[] -> internal_error "Should have the same size" + | ((s',ext'),ty)::q,term::q_term -> + let t = get_type ty in + let v = Terms.new_var_noren s' t in + v.link <- TLink term; + env := StringMap.add s' (EVar v) (!env); + link_the_variables q q_term in + + link_the_variables args list_term_arg; + + let (proc_layer, _) = check_term (!env) p in + + proc_layer proc_context in + + global_env := StringMap.add s (ELetFun(func_proc_layer, type_arg_list, type_result)) (!global_env) + + | TDefine((s1,ext1),argl,def) -> + if StringMap.mem s1 (!macrotable) then + input_error ("Macro " ^ s1 ^ " already defined.") ext1 + else + (* Expand macro calls inside macro definitions + Because this is done at macro definition point, this requires that + the macros used inside the definition be defined before, which + is a safe requirement. (It prevents recursive macros, in particular.) *) + let rec expand_inside_macro = function + TDefine((s,ext),_,_)::l -> + input_error "macro definitions are not allowed inside macro definitions" ext + | TExpand((s2,ext2), argl2)::l -> + begin + try + let (paraml2, def2, already_def2) = StringMap.find s2 (!macrotable) in + if List.length argl2 != List.length paraml2 then + input_error ("Macro " ^ s2 ^ " expects " ^ (string_of_int (List.length paraml2)) ^ + " arguments, but is here given " ^ (string_of_int (List.length argl2)) ^ " arguments.") ext2; + (apply argl2 paraml2 already_def2 def2) @ (expand_inside_macro l) + with Not_found -> + input_error ("Macro " ^ s2 ^ " not defined.") ext2 + end + | a::l -> a::(expand_inside_macro l) + | [] -> [] + in + let def = expand_inside_macro def in + let already_def = ref [] in + StringMap.iter (fun s _ -> already_def := s :: (!already_def)) (!global_env); + macrotable := StringMap.add s1 (argl, def, !already_def) (!macrotable) + | TExpand((s1,ext1),argl) -> + begin + try + let (paraml, def, already_def ) = StringMap.find s1 (!macrotable) in + if List.length argl != List.length paraml then + input_error ("Macro " ^ s1 ^ " expects " ^ (string_of_int (List.length paraml)) ^ + " arguments, but is here given " ^ (string_of_int (List.length argl)) ^ " arguments.") ext1; + List.iter check_one (apply argl paraml already_def def) + with Not_found -> + input_error ("Macro " ^ s1 ^ " not defined.") ext1 + end + | TSet _ -> internal_error "set declaration should have been handled before" + +(* Get the maximum phase number *) + +let rec set_max_used_phase = function + Nil -> () + | Par(p1,p2) -> set_max_used_phase p1; set_max_used_phase p2 + | Repl (p,_) -> set_max_used_phase p + | Restr(n,_,p,_) -> set_max_used_phase p + | Test(_,p1,p2,_) -> set_max_used_phase p1; set_max_used_phase p2 + | Input(_,_, p,_) -> set_max_used_phase p + | Output(_,_,p,_) -> set_max_used_phase p + | Let(_,_,p1, p2,_) -> set_max_used_phase p1; set_max_used_phase p2 + | LetFilter(_,_,p,q,_) -> set_max_used_phase p; set_max_used_phase q + | Event(_,p,_) -> set_max_used_phase p + | Insert(_,p,_) -> set_max_used_phase p + | Get(_,_,p,q,_) -> set_max_used_phase p; set_max_used_phase q + | Phase(n,p,_) -> + if n > !Param.max_used_phase then + Param.max_used_phase := n; + set_max_used_phase p + + +let parse_file s = + let (decl, proc, second_proc) = parse_with_lib s in + (* ignoreTypes must be set before doing the rest of the work + Setting all parameters beforehand does not hurt. + Furthermore, we record identifiers that we want to keep unchanged *) + List.iter (function + TTypeDecl(s,ext) -> Terms.record_id s ext + | TFunDecl((s,ext),_,_,_) -> Terms.record_id s ext + | TConstDecl((s,ext),_,_) -> Terms.record_id s ext + | TReduc((_,(PFunApp((s,ext),_),_),_)::_,_) -> Terms.record_id s ext + | TReducFail((s,ext),_,_,_,_) -> Terms.record_id s ext + | TPredDecl((s,ext),_,_) -> Terms.record_id s ext + | TFree((s,ext),_,_) -> Terms.record_id s ext + | TEventDecl((s,ext),_) -> Terms.record_id s ext + | TTableDecl((s,ext),_) -> Terms.record_id s ext + | TLetFun((s,ext),_,_) -> Terms.record_id s ext + | TSet((p,ext),v) -> + begin + match (p,v) with + "attacker", S ("passive",_) -> Param.active_attacker := false + | "attacker", S ("active",_) -> Param.active_attacker := true + | "keyCompromise", S ("strict",_) -> Param.key_compromise := 2 + | "keyCompromise", S ("approx",_) -> Param.key_compromise := 1 + | "keyCompromise", S ("none",_) -> Param.key_compromise := 0 + | "movenew", _ -> Param.boolean_param Param.move_new p ext v + | "verboseClauses", S ("explained",_) -> Param.verbose_explain_clauses := Param.ExplainedClauses + | "verboseClauses", S ("short",_) -> Param.verbose_explain_clauses := Param.Clauses + | "verboseClauses", S ("none",_) -> Param.verbose_explain_clauses := Param.NoClauses + | "explainDerivation", _ -> Param.boolean_param Param.explain_derivation p ext v + | "removeUselessClausesBeforeDisplay", _ -> Param.boolean_param Param.remove_subsumed_clauses_before_display p ext v + | "predicatesImplementable", S("check",_) -> Param.check_pred_calls := true + | "predicatesImplementable", S("nocheck",_) -> Param.check_pred_calls := false + | "eqInNames", _ -> Param.boolean_param Param.eq_in_names p ext v + | "reconstructTrace", _ -> Param.boolean_param Param.reconstruct_trace p ext v + | "traceBacktracking", _ -> Param.boolean_param Param.trace_backtracking p ext v + | "unifyDerivation", _ -> Param.boolean_param Param.unify_derivation p ext v + | "traceDisplay", S ("none",_) -> Param.trace_display := Param.NoDisplay + | "traceDisplay", S ("short",_) -> Param.trace_display := Param.ShortDisplay + | "traceDisplay", S ("long",_) -> Param.trace_display := Param.LongDisplay + | "ignoreTypes", S (("all" | "true" | "yes"), _) -> Param.set_ignore_types true + | "ignoreTypes", S (("none" | "attacker" | "false" | "no"), _) -> Param.set_ignore_types false + | "simplifyProcess", S (("true" | "yes"), _) -> Param.simplify_process := 1 + | "simplifyProcess", S (("false" | "no"), _) -> Param.simplify_process := 0 + | "simplifyProcess", S ("interactive", _) -> Param.simplify_process := 2 + | "rejectChoiceTrueFalse", _ -> Param.boolean_param Param.reject_choice_true_false p ext v + | "rejectNoSimplif", _ -> Param.boolean_param Param.reject_no_simplif p ext v + | _,_ -> Param.common_parameters p ext v + end + | _ -> ()) decl; + Param.default_set_ignore_types(); + initialize_env_and_fun_decl(); + + (* *) + + List.iter (function + TSet _ -> () + | x -> check_one x) decl; + + let p = Terms.auto_cleanup (fun () -> + check_process (!global_env) proc) + in + + match second_proc with + | None -> + if !Param.key_compromise = 2 then + Param.max_used_phase := 1 + else + set_max_used_phase p; + + p,None + | Some(proc2) -> + let p2 = Terms.auto_cleanup (fun () -> + check_process (!global_env) proc2) + in + + if (!Param.key_compromise != 0) then + Parsing_helper.user_error "Key compromise is incompatible with equivalence\n"; + + set_max_used_phase p; + set_max_used_phase p2; + + p,Some p2 + +let display () = + print_string "Functions "; + Hashtbl.iter (fun _ fsymb -> + print_string (fsymb.f_name ^ "(" ^ (Terms.tl_to_string ", " (fst fsymb.f_type)) + ^ "):" ^ (snd fsymb.f_type).tname ^ ". ") + ) fun_decls; + print_string "\n" + +(* queries *) + +let non_compromised_session = FunApp(Param.session1, []) + + +(* Note: when check_query, get_queries are applied before the + translation of the process into Horn clauses has been done, + the arity of names may not be correctly initialized. In this case, + update_type_names should be called after the translation of the + process to update it. *) + +let get_ident_any env (s, ext) = + try + match StringMap.find s env with + EVar b -> + begin + match b.link with + TLink t -> t + | NoLink -> Var b + | _ -> internal_error "unexpected link in get_ident_any" + end + | EName r -> + FunApp(r, []) + | EFun f -> + if fst f.f_type == [] then + FunApp(f,[]) + else + input_error ("function " ^ s ^ " has expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " arguments but is used without arguments") ext + | _ -> input_error ("identifier " ^ s ^ " should be a variable, a free name, or a function") ext + with Not_found -> + input_error ("identifier " ^ s ^ " not defined") ext + +let rec check_query_term names_must_be_encoded env (term, ext0) = + match term with + PGIdent i -> + let t = get_ident_any env i in + (t, Terms.get_term_type t) + | PGPhase _ -> input_error ("phase unexpected in query terms") ext0 + | PGFunApp((s,ext),l) -> + (* FunApp: only constructors allowed *) + if List.mem s ["="; "<>"; "==>"; "&&"; "||"; "event"; "inj-event"; "table"] then + input_error (s ^ " unexpected in query terms") ext; + let (l', tl') = List.split (List.map (check_query_term names_must_be_encoded env) l) in + let (f, result_type) = get_fun env (s,ext) tl' in + begin + match f.f_cat with + Eq _ | Tuple -> () + | Choice -> + (* Choice is useful only for "not" declarations when using biprocesses *) + if not ((!Param.has_choice) || (!Param.equivalence)) then + input_error "choice cannot be used in queries or not declarations, except for not declarations when proving equivalences" ext + | _ -> input_error ("function " ^ s ^ " is defined by \"reduc\". Such a function should not be used in a query") ext + end; + if (f.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) then + match l' with + [t] -> (t, result_type) + | _ -> internal_error "type converter functions should always be unary" + else + (FunApp(f, l'), result_type) + | PGTuple l -> + let (l', tl') = List.split (List.map (check_query_term names_must_be_encoded env) l) in + (FunApp(Terms.get_tuple_fun tl', l'), Param.bitstring_type) + | PGName ((s,ext),bl) -> + begin + try + let r = Hashtbl.find glob_table s in + check_single ext s; + if fst r.f_type == Param.tmp_type then + begin + if names_must_be_encoded then + Parsing_helper.input_error ("You are referring to name " ^ s ^ " in this query or secrecy assumption, but this name will never be generated") ext + else + begin + let v = Terms.new_var Param.def_var_name (snd r.f_type) in + v.link <- PGLink (fun () -> fst (check_query_term true env (term,ext0))); + (Var v, snd r.f_type) + end + end + else + begin + match r.f_cat with + Name { prev_inputs_meaning = sl } -> + List.iter (fun ((s',ext'),_) -> + if not (List.exists (fun m -> Reduction_helper.meaning_encode m = s') sl) then + input_error ("variable " ^ s' ^ " not defined at restriction " ^ s) ext') bl; + let p = List.map2 (fun m ty -> + match m with + MCompSid -> non_compromised_session + | _ -> binding_find names_must_be_encoded env (Reduction_helper.meaning_encode m) ty bl) sl (fst r.f_type) + in + (FunApp(r, p), snd r.f_type) + | _ -> internal_error "name expected here" + end + with Not_found -> + input_error (s ^ " should be a name") ext + end + | PGLet(id,t,t') -> check_query_term names_must_be_encoded (add_binding names_must_be_encoded env (id,t)) t' + +and binding_find names_must_be_encoded env s ty = function + [] -> Terms.new_var_def ty + | ((s',ext),t)::l -> + if s' = s then + begin + let (t', ty') = check_query_term names_must_be_encoded env t in + if ty' != ty then + input_error ("this variable is of type " ^ ty.tname ^ " but is given a value of type " ^ ty'.tname) ext; + if (s <> "") && (s.[0] = '!') then + begin + match t' with + Var _ -> () + | _ -> input_error "session identifiers should be variables" ext + end; + t' + end + else + binding_find names_must_be_encoded env s ty l + +and add_binding names_must_be_encoded env ((i,ext),t) = + begin + try + match StringMap.find i env with + EVar _ -> input_error ("variable " ^ i ^ " already defined") ext + | _ -> () + with Not_found -> () + end; + let (t', ty') = check_query_term names_must_be_encoded env t in + let v = Terms.new_var i ty' in + v.link <- TLink t'; + StringMap.add i (EVar v) env + +let check_mess names_must_be_encoded env e tl n = + match tl with + [t1;t2] -> + if n > !Param.max_used_phase then + begin + input_warning "phase greater than the maximum phase used in the process.\nIs that really what you want?" e; + Param.max_used_phase := n; + end; + let (t1', ty1) = check_query_term names_must_be_encoded env t1 in + let (t2', ty2) = check_query_term names_must_be_encoded env t2 in + if ty1 != Param.channel_type then + input_error ("First argument of mess is of type " ^ ty1.tname ^ " and should be of type channel") e; + let mess_n = Param.get_pred (Mess((if n = -1 then (!Param.max_used_phase) else n), + ty2)) + in + QFact(mess_n, [t1';t2']) + | _ -> + input_error "arity of predicate mess should be 2" e + +let check_attacker names_must_be_encoded env e tl n = + match tl with + [t1] -> + if n > !Param.max_used_phase then + begin + input_warning "phase greater than the maximum phase used in the process.\nIs that really what you want?" e; + Param.max_used_phase := n; + end; + let (t1', ty1) = check_query_term names_must_be_encoded env t1 in + let att_n = Param.get_pred (Attacker((if n = -1 then (!Param.max_used_phase) else n), + ty1)) + in + QFact(att_n, [t1']) + | _ -> + input_error "arity of predicate attacker should be 1" e + +let rec check_table_term names_must_be_encoded env (term, ext0) = + match term with + | PGFunApp((s,ext),l) -> + (* FunApp: only tables allowed *) + if List.mem s ["="; "<>"; "==>"; "&&"; "||"; "event"; "inj-event"; "table"] then + input_error (s ^ " unexpected in query terms") ext; + let (l', tl') = List.split (List.map (check_query_term names_must_be_encoded env) l) in + let f = get_table_fun env (s,ext) tl' in + FunApp(f, l') + | _ -> input_error "Table term expected" ext0 + +let check_table names_must_be_encoded env e tl n = + match tl with + [t1] -> + if n > !Param.max_used_phase then + begin + input_warning "phase greater than the maximum phase used in the process.\nIs that really what you want?" e; + Param.max_used_phase := n; + end; + let t1' = check_table_term names_must_be_encoded env t1 in + let table_n = Param.get_pred (Table(if n = -1 then (!Param.max_used_phase) else n)) in + QFact(table_n, [t1']) + | _ -> + input_error "arity of predicate table should be 1" e + +let rec check_event names_must_be_encoded env (f,e) = + match f with + (* FunApp: predicates, =, <>, event, inj-event, attacker, mess, table allowed *) + PGFunApp(("<>", _), [t1; t2]) -> + let (t1', ty1) = check_query_term names_must_be_encoded env t1 in + let (t2', ty2) = check_query_term names_must_be_encoded env t2 in + if ty1 != ty2 then + input_error "the two arguments of an inequality test should have the same type" e; + QNeq(t1', t2') + | PGFunApp(("=", _), [t1; t2]) -> + let (t1', ty1) = check_query_term names_must_be_encoded env t1 in + let (t2', ty2) = check_query_term names_must_be_encoded env t2 in + if ty1 != ty2 then + input_error "the two arguments of an equality test should have the same type" e; + QEq(t1', t2') + | PGFunApp(("event",e'),tl0) -> + let (f,tl) = + match tl0 with + [PGFunApp(f, tl),_] -> (f,tl) + | [PGIdent f,_] -> (f,[]) + | _ -> input_error "predicate event should have one argument, which is a function application" e' + in + let (tl', tyl') = List.split (List.map (check_query_term names_must_be_encoded env) tl) in + if !Param.key_compromise == 0 then + QSEvent(false, FunApp((get_event_fun env f tyl'), tl')) + else + QSEvent(false, FunApp((get_event_fun env f (Param.sid_type :: tyl')), + (Terms.new_var_def Param.sid_type)::tl')) + | PGFunApp(("inj-event",e'),tl0) -> + let (f,tl) = + match tl0 with + [PGFunApp(f, tl),_] -> (f,tl) + | [PGIdent f,_] -> (f,[]) + | _ -> input_error "predicate inj-event should have one argument, which is a function application" e' + in + let (tl', tyl') = List.split (List.map (check_query_term names_must_be_encoded env) tl) in + if !Param.key_compromise == 0 then + QSEvent(true, FunApp((get_event_fun env f tyl'), tl')) + else + QSEvent(true, FunApp((get_event_fun env f (Param.sid_type :: tyl')), + (Terms.new_var_def Param.sid_type)::tl')) + | PGFunApp(("attacker",_), tl) -> + check_attacker names_must_be_encoded env e tl (-1) + | PGFunApp(("mess",_), tl) -> + check_mess names_must_be_encoded env e tl (-1) + | PGFunApp(("table",_), tl) -> + check_table names_must_be_encoded env e tl (-1) + | PGFunApp((s, ext) as p, tl) -> + if List.mem s ["||"; "&&"; "not"; "==>"] then + input_error (s ^ " unexpected in events") ext; + let (tl', tyl) = List.split (List.map (check_query_term names_must_be_encoded env) tl) in + QFact(get_pred env p tyl, tl') + | PGPhase((s, ext), tl, n) -> + begin + match s with + "mess" -> check_mess names_must_be_encoded env e tl n + | "attacker" -> check_attacker names_must_be_encoded env e tl n + | "table" -> check_table names_must_be_encoded env e tl n + | _ -> input_error "phases can be used only with attacker, mess, or table" ext + end + | PGIdent p -> + QFact(get_pred env p [], []) + | PGLet(id,t,t') -> check_event names_must_be_encoded (add_binding false env (id,t)) t' + | _ -> input_error "an event should be a predicate application" e + +let rec check_hyp env = function + (* FunApp: ==>, ||, && allowed, or what is allowed in events *) + PGFunApp(("==>", _), [ev; hypll]), _ -> + let ev' = check_event false env ev in + ( + match ev' with + QNeq _ | QEq _ -> input_error "Inequalities or equalities cannot occur before ==> in queries" (snd ev) + | _ -> () + ); + let hypll' = check_hyp env hypll in + [[NestedQuery(Before(ev', hypll'))]] + | PGFunApp(("||", _), [he1;he2]), _ -> + (check_hyp env he1) @ (check_hyp env he2) + | PGFunApp(("&&", _), [he1;he2]), _ -> + let he1' = check_hyp env he1 in + let he2' = check_hyp env he2 in + List.concat (List.map (fun e1 -> List.map (fun e2 -> e1 @ e2) he2') he1') + | PGLet(id,t,t'), _ -> check_hyp (add_binding false env (id,t)) t' + | ev -> [[QEvent(check_event false env ev)]] + +let rec check_real_query_top env = function + PGFunApp(("==>", _), [ev; hypll]), _ -> + (* FunApp: ==> allowed, or what is allowed in events (case below) *) + let ev' = check_event false env ev in + let ev'' = + match ev' with + QNeq _ | QEq _ -> user_error "Inequalities or equalities cannot occur before ==> in queries\n" + | QFact _ -> ev' + | QSEvent _ when !Param.key_compromise == 0 -> ev' + | QSEvent(inj, FunApp(f, sid::l)) -> + QSEvent(inj, FunApp(f, non_compromised_session::l)) + | QSEvent(_,_) -> + internal_error "Bad format for events in queries" + in + let hypll' = check_hyp env hypll in + Before(ev'', hypll') + | PGLet(id,t,t'), _ -> check_real_query_top (add_binding false env (id,t)) t' + | ev -> + let ev' = check_event false env ev in + let ev'' = + match ev' with + QNeq _ | QEq _ -> user_error "Inequalities or equalities cannot occur alone queries\n" + | QFact _ -> ev' + | QSEvent _ when !Param.key_compromise == 0 -> ev' + | QSEvent(inj, FunApp(f, sid::l)) -> + QSEvent(inj, FunApp(f, non_compromised_session::l)) + | QSEvent(_,_) -> + internal_error "Bad format for events in queries" + in + Before(ev'', []) + +let rec check_query_list env = function + [] -> [] + | (PRealQuery q)::lq -> + (RealQuery(check_real_query_top env q))::(check_query_list env lq) + | (PPutBegin(i, l))::lq -> + let l' = List.map (fun (s,e) -> + try + match StringMap.find s env with + EEvent r -> r + | _ -> input_error (s ^ " should be an event") e + with Not_found -> + input_error ("unknown event " ^s) e) l + in + (PutBegin(i,l'))::(check_query_list env lq) + +let rec has_inj = function + Before(_,ll) -> + List.exists (List.exists (function + NestedQuery q -> has_inj q + | QEvent (QSEvent (i,_)) -> i + | QEvent (_) -> false)) ll + +let rec check_inj_coherent_r q = + if has_inj q then + match q with + Before(e,ll) -> + let e' = + match e with + QFact _ | QNeq _ | QEq _ -> user_error "In a query e ==> h, if h contains an injective event, then e must be an event or better inj-event\n" + | QSEvent(_,t) -> QSEvent(true, t) (* set the event injective *) + in + Before(e', List.map (List.map (function + QEvent e -> QEvent e + | NestedQuery q' -> NestedQuery (check_inj_coherent_r q'))) ll) + else q + +let check_inj_coherent = function + (PutBegin(_,_) as q) -> q + | RealQuery q -> RealQuery (check_inj_coherent_r q) + + +let transl_query (env,q) = + let q' = check_query_list (add_env true (!global_env) env) q in + let q'' = List.map check_inj_coherent q' in + Pievent.init_event_status_table event_fun_table; + List.iter Pievent.set_event_status q''; + q'' + +(* Give the fact to query from the detailed query + This is used only to create a resembling specification for SPASS + *) + +let query_to_facts q = + let facts = ref [] in + List.iter (function + PutBegin(_) -> () + | RealQuery(Before(e,_)) -> match e with + QSEvent(_,(FunApp(f,l) as param)) -> + facts := + (if (Pievent.get_event_status f).end_status = Inj then + Pred(Param.end_pred_inj, [Var(Terms.new_var "endsid" Param.sid_type);param]) + else + Pred(Param.end_pred, [param])) :: (!facts) + | QSEvent(_, _) -> + user_error ("Events should be function applications\n") + | QFact(p,l) -> + facts := (Pred(p,l)) :: (!facts) + | QNeq _ | QEq _ -> internal_error "no Neq/Eq queries" + ) q; + !facts + +(* Noninterf queries *) + +let get_noninterf_queries () = + !noninterf_list + +(* Weaksecret queries *) + +let get_weaksecret_queries () = + !weaksecret_list + +(* Not declarations *) + +let get_not() = + List.map (fun (env, no) -> + check_event true (add_env true (!global_env) env) no) (!not_list) + +(* For Nounif. Very similar to queries, except that *v is allowed + and events are not allowed *) + +let fget_ident_any env (s, ext) = + try + match StringMap.find s env with + EVar b -> + begin + match b.link with + FLink t -> (t, b.btype) + | NoLink -> (FVar b, b.btype) + | _ -> internal_error "unexpected link in fget_ident_any" + end + | EName r -> + (FFunApp(r, []), snd r.f_type) + | EFun f -> + if fst f.f_type == [] then + (FFunApp(f,[]), snd f.f_type) + else + input_error ("function " ^ s ^ " expects " ^ + (string_of_int (List.length (fst f.f_type))) ^ + " arguments but is used without arguments") ext + | _ -> + input_error ("identifier " ^ s ^ " should be a variable, a function, or a name") ext + with Not_found -> + input_error ("identifier " ^ s ^ " not defined") ext + + + +let rec check_gformat env (term, ext0) = + match term with + PFGIdent i -> fget_ident_any env i + | PFGFunApp((s,ext),l) -> + (* FunApp: only constructors allowed *) + let (l', tl') = List.split (List.map (check_gformat env) l) in + let (f, result_type) = get_fun env (s,ext) tl' in + begin + match f.f_cat with + Eq _ | Tuple -> () + | Choice -> + if not ((!Param.has_choice) || (!Param.equivalence)) then + input_error "choice can be used in nounif declarations only when proving equivalences" ext + | _ -> input_error ("function " ^ s ^ " is defined by \"reduc\". Such a function should not be used in a \"nounif\" declaration") ext + end; + if (f.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) then + match l' with + [t] -> (t, result_type) + | _ -> internal_error "type converter functions should always be unary" + else + (FFunApp(f, l'), result_type) + | PFGTuple l -> + let (l', tl') = List.split (List.map (check_gformat env) l) in + (FFunApp(Terms.get_tuple_fun tl', l'), Param.bitstring_type) + | PFGAny (s,ext) -> + begin + try + match StringMap.find s env with + EVar b -> + begin + match b.link with + NoLink -> (FAny b, b.btype) + | FLink _ -> input_error "variables preceded by * must not be defined by a binding" ext + | _ -> internal_error "unexpected link in check_gformat" + end + | _ -> input_error (s ^ " should be a variable") ext + with Not_found -> + input_error ("variable " ^ s ^ " is not defined") ext + end + | PFGName ((s,ext),bl) -> + begin + try + let r = Hashtbl.find glob_table s in + check_single ext s; + if fst r.f_type == Param.tmp_type then + Parsing_helper.input_error ("You are referring to name " ^ s ^ " in this nounif declaration, but this name will never be generated") ext + else + begin + match r.f_cat with + Name { prev_inputs_meaning = sl } -> + List.iter (fun ((s',ext'),_) -> + if not (List.exists (fun m -> Reduction_helper.meaning_encode m = s') sl) then + input_error ("variable " ^ s' ^ " not defined at restriction " ^ s) ext') bl; + let p = List.map2 (fun m ty -> + fbinding_find env (Reduction_helper.meaning_encode m) ty bl) sl (fst r.f_type) + in + (FFunApp(r, p), snd r.f_type) + | _ -> internal_error "name expected here" + end + with Not_found -> + input_error (s ^ " should be a name") ext + end + | PFGLet(id,t,t') -> check_gformat (add_fbinding env (id,t)) t' + +and fbinding_find env s ty = function + [] -> FAny (Terms.new_var Param.def_var_name ty) + | ((s',ext),t)::l -> + if s' = s then + begin + let (t', ty') = check_gformat env t in + if ty' != ty then + input_error ("this variable is of type " ^ ty.tname ^ " but is given a value of type " ^ ty'.tname) ext; + if (s <> "") && (s.[0] = '!') then + begin + match t' with + FVar _ | FAny _ -> () + | _ -> input_error "session identifiers should be variables" ext + end; + t' + end + else + fbinding_find env s ty l + +and add_fbinding env ((i,ext),t) = + begin + try + match StringMap.find i env with + EVar _ -> input_error ("variable " ^ i ^ " already defined") ext + | _ -> () + with Not_found -> () + end; + let (t', ty') = check_gformat env t in + let v = Terms.new_var i ty' in + v.link <- FLink t'; + StringMap.add i (EVar v) env + + +let rec check_table_gformat env (term, ext0) = + match term with + | PFGFunApp((s,ext),l) -> + (* FunApp: only tables allowed *) + let (l', tl') = List.split (List.map (check_gformat env) l) in + let f = get_table_fun env (s,ext) tl' in + FFunApp(f, l') + | _ -> input_error "Table term expected" ext0 + +let check_gfact_format env ((s, ext), tl, n) = + match s with + "attacker" -> + begin + match tl with + [t1] -> + if n > !Param.max_used_phase then + input_warning "nounif declaration for a phase greater than used" ext; + let (t1', ty1) = check_gformat env t1 in + let att_n = Param.get_pred (Attacker((if n = -1 then (!Param.max_used_phase) else n), ty1)) + in + (att_n, [t1']) + | _ -> + input_error "arity of predicate attacker should be 1" ext + end + | "mess" -> + begin + match tl with + [t1;t2] -> + if n > !Param.max_used_phase then + input_warning "nounif declaration for a phase greater than used" ext; + let (t1', ty1) = check_gformat env t1 in + let (t2', ty2) = check_gformat env t2 in + if ty1 != Param.channel_type then + input_error ("First argument of mess is of type " ^ ty1.tname ^ " and should be of type channel") ext; + let mess_n = Param.get_pred (Mess((if n = -1 then (!Param.max_used_phase) else n), ty2)) + in + (mess_n, [t1';t2']) + | _ -> + input_error "arity of predicate mess should be 2" ext + end + | "table" -> + begin + match tl with + [t1] -> + if n > !Param.max_used_phase then + input_warning "nounif declaration for a phase greater than used" ext; + let t1' = check_table_gformat env t1 in + let table_n = Param.get_pred (Table((if n = -1 then (!Param.max_used_phase) else n))) + in + (table_n, [t1']) + | _ -> + input_error "arity of predicate table should be 1" ext + end + | s -> + if n != -1 then + input_error "declared predicates do not depend on phases, so no phase should be specified in such facts in queries" ext; + let (tl', tyl) = List.split (List.map (check_gformat env) tl) in + (get_pred env (s,ext) tyl, tl') + +let rec handle_nounif env = function + BFLet(id,t,nounif) -> handle_nounif (add_fbinding env (id,t)) nounif + | BFNoUnif(fact,n) -> (check_gfact_format env fact, -n) + +let get_nounif() = + List.map (fun (env, nounif) -> handle_nounif (add_env true (!global_env) env) nounif) (!nounif_list) + diff --git a/preinstallTTool/linux/proverif/src/pitsyntax.mli b/preinstallTTool/linux/proverif/src/pitsyntax.mli new file mode 100644 index 0000000000000000000000000000000000000000..31f942da359300f9414a5b6953263a0d41af1516 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitsyntax.mli @@ -0,0 +1,44 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Pitypes + +val query_list : (Pitptree.envdecl * Pitptree.tquery list) list ref + +val parse_file : string -> process * process option +val display : unit -> unit +val transl_query : Pitptree.envdecl * Pitptree.tquery list -> query list +val query_to_facts : query list -> fact list +val get_noninterf_queries : unit -> (funsymb * term list option) list list +val get_weaksecret_queries : unit -> funsymb list +val get_not : unit -> event list +val get_nounif : unit -> (fact_format * int) list + +val destructors_check_deterministic : funsymb list ref +val set_need_vars_in_names : unit -> unit +val reset_need_vars_in_names : unit -> unit diff --git a/preinstallTTool/linux/proverif/src/pitypes.cmi b/preinstallTTool/linux/proverif/src/pitypes.cmi new file mode 100644 index 0000000000000000000000000000000000000000..c284fb24067bcc68316c157fd2b343d4304af43a Binary files /dev/null and b/preinstallTTool/linux/proverif/src/pitypes.cmi differ diff --git a/preinstallTTool/linux/proverif/src/pitypes.mli b/preinstallTTool/linux/proverif/src/pitypes.mli new file mode 100644 index 0000000000000000000000000000000000000000..90f70749d51688427f3764f06cf43e78956332e3 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/pitypes.mli @@ -0,0 +1,220 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Types module declares types of the abstract syntax + tree and of sets of messages. + There are recursive dependencies between these types, + that is why they are included in the same module +*) + +open Types + +(* The type of processes has been moved to the module types.mli + because it is needed in the environment values for letfun, and the + environments are needed for terms in queries that cannot be + expanded before process translation *) + +(* Correspondence queries *) + +type event = + QSEvent of bool (* true when injective *) * term + | QFact of predicate * term list + | QNeq of term * term + | QEq of term * term + +type realquery = Before of event * hypelem list list + +and hypelem = + QEvent of event + | NestedQuery of realquery + +type query = + PutBegin of bool (* true when injective *) * funsymb list + | RealQuery of realquery + +type eventstatus = + { mutable end_status : onestatus; + mutable begin_status : onestatus } + +(* Equivalence queries *) + +type eq_query = + | DestructorQuery + | ChoiceQuery + | NonInterfQuery of (Types.funsymb * Types.term list option) list + | WeakSecret of Types.funsymb + +(* Types of reduction steps, for trace reconstruction *) + +type reduc_type = + | RNil of int + | RPar of int + | RRepl of int * int + | RRestr of int * funsymb * term + | RLet1 of int * pattern * term + | RLet2 of int * pattern * term + | RInput of int * term * pattern * term + | ROutput1 of int * term * term + | ROutput2 of int * term * term + | ROutput3 of int * term * term + | RTest1 of int * term + | RTest2 of int * term + | RTest3 of int * term + | RBegin1 of int * term + | RBegin2 of int * term + | REnd of int * term + | RPhase of int + | RLetFilter1 of int * binder list * fact + | RLetFilter2 of int * binder list * fact + | RLetFilter3 of int * binder list * fact + | RIO of int * term * pattern * int * term * term + | RIO2 of int * term * pattern * int * term * term + | RInsert1 of int * term + | RInsert2 of int * term + | RGet of int * pattern * term * term + | RGet2 of int + | RInit + +(* 'a may be term (for reduction.ml) or term * term (for reduction_bipro.ml) *) + +type name_param_info = + arg_meaning * term * when_include + +type 'a info = + InputInfo of 'a list * 'a list * 'a * name_param_info list * hypspec list * ('a * ('a list * 'a list) option) list + (* Channel name after decomposition of tuples, + Public set of values at last test, + Channel name, + name_params, occs, + list of possible messages, possibly with their public status: the message after decomposition of tuples and the public set of values at last test. + + Assume InputInfo(tc_list, oldpub, tc, name_params, occs, mess_list). + If tc_list != [], the first element of l is not in oldpub + we check whether the first element of + tc_list in is the part of public before oldpub. + - If no, tc_list' = tc_list + - If yes, we remove from the tail of l the first elements that + are in public, yielding tc_list'. + We replace the cache with InputInfo(tc_list',public,...) + If tc_list' is not empty, the channel is not public, + try to perform (Res I/O). + If tc_list' is empty, the channel is public, + try to perform (Res In). + *) + | OutputInfo of 'a list * 'a list + (* the channel name after decomposition of tuples + the public set of values at last test. + + Invariant: if we have OutputInfo(l,oldpub), + the first element of l is not oldpub. + + When testing this output, we check whether the first element of + l in is the part of public before oldpub. + - If no, we replace the cache with OutputInfo(l,public). + - If yes, we remove from the tail of l the first elements that + are in public, yielding l'. If l' is not empty, we replace + the cache with OutputInfo(l',public). If l' is empty, + we can execute the output: the channel is public. + *) + | GetInfo of 'a list * 'a list + (* the old contents of tables + the list of possible entries *) + | Nothing + +type 'a sub_proc = + process * (name_param_info list) * (hypspec list) * (fact list) * ('a info) + (* process (always closed -- only bound variables can occur; no variable with link *) + (* list of name_params (terms received as input + session ids), always closed -- no variables *) + (* list of occurrences of inputs and replications already seen in the reduction *) + (* list of facts corresponding to already seen inputs -- no variables *) + (* cached info for inputs *) + +(* Types of locations (attacker or process) for steps in trace reconstruction *) + +type 'a loc_info = + LocAttacker + | LocProcess of int * 'a sub_proc + +type weak_test = + FailTest of term + | EqTest of term * term + +type 'a noninterf_test = + ProcessTest of hypspec list * term list * (int * 'a sub_proc) option ref(*location where test found*) + | InputProcessTest of hypspec list * term list * term * (int * 'a sub_proc) option ref(*location where test found*) + | ApplyTest of funsymb * 'a list + | NIFailTest of 'a + | CommTest of 'a(*input channel*) * 'a(*output channel*) * + ('a loc_info(*location where input found*) * 'a loc_info(*location where output found*)) option ref + | InputTest of 'a(*input channel*) * ('a loc_info) option ref(*location where input found*) + | OutputTest of 'a(*output channel*) * ('a loc_info) option ref(*location where output found*) + | NIEqTest of 'a * 'a + + +type 'a goal_t = + Fact of fact + | WeakSecrGoal of (term * binder) list * weak_test * term * term + (* + list of terms that the attacker has to know, with arbitrary variables + to store them, + the term that the attacker computes to test its guess, + the weak secret that the attacker wants to guess, + the symbol that represents the guess + *) + | NonInterfGoal of 'a noninterf_test + | InjGoal of fact * term * int + (* The end event to execute, the second session in which it should + be executed, and the number of times it has already been met *) + +type 'a reduc_state = + { + goal : 'a goal_t; (* goal to reach *) + subprocess : 'a sub_proc list; (* process list *) + public : 'a list; (* attacker knowledge *) + tables : 'a list; (* contents of tables *) + + prepared_attacker_rule : (predicate * 'a list * 'a list) list; (* attacker rules *) + (* predicate, hypothesis, conclusion *) + io_rule : (int * fact list * hypspec list * term list * fact) list; (* process rules *) + (* rule number, hypotheses, occurrence labels, name params, conclusion *) + + previous_state : ('a reduc_state) option; (* previous semantic state *) + + hyp_not_matched : fact list; + current_phase : int; + comment : reduc_type (* type of the reduction *) + } + + +(* Indications of term occurrences that should be added to name_params *) + +type term_occ = + OTest of int + | OLet of int + | OInChannel of int + | OEvent of int + | OLetFilter of int diff --git a/preinstallTTool/linux/proverif/src/proveriftotex.cmi b/preinstallTTool/linux/proverif/src/proveriftotex.cmi new file mode 100644 index 0000000000000000000000000000000000000000..bb5ee4a2515840a2567ce38fd86273bfa8af00a7 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/proveriftotex.cmi differ diff --git a/preinstallTTool/linux/proverif/src/proveriftotex.cmx b/preinstallTTool/linux/proverif/src/proveriftotex.cmx new file mode 100644 index 0000000000000000000000000000000000000000..e5098ef233ccd2e4a12747339893667e8691dd61 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/proveriftotex.cmx differ diff --git a/preinstallTTool/linux/proverif/src/proveriftotex.ml b/preinstallTTool/linux/proverif/src/proveriftotex.ml new file mode 100644 index 0000000000000000000000000000000000000000..d47d3d6029ae591523b448618c2bbc60d2623ca7 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/proveriftotex.ml @@ -0,0 +1,94 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* TO DO There is a known problem in proveriftotex: when an identifier +is rebound, it may not be printed in the right font. It is printed +everywhere in the same font, corresponding to one of its definitions. *) + +open Parsing_helper + +(* Parse the arguments *) + +type in_pos = + Pi + | PiType + | Default + +let in_kind = ref Default + +let up_in = function + "pi" -> Pi + | "pitype" -> PiType + | _ -> Parsing_helper.user_error "-in should be followed by pi or pitype\n" + +let ends_with s sub = + let l_s = String.length s in + let l_sub = String.length sub in + (l_s >= l_sub) && (String.sub s (l_s - l_sub) l_sub = sub) + +let converttotex f = + let in_front_end = + match !in_kind with + Default -> (* Set the front-end depending on the extension of the file *) + let f_up = String.uppercase f in + if ends_with f_up ".PV" then PiType else Pi + (* Pi is the default when no extension is recognized for compatibility reasons *) + | x -> x + in + match in_front_end with + Pi -> Lexertotex.converttotex f + | PiType -> Pitlexertotex.converttotex f + | Default -> Parsing_helper.internal_error "The Default case should have been removed previously" + +let gc = ref false + +let _ = + Arg.parse + [ + "-tt", Arg.Clear Fileprint.nice_tex, "\t\tbe close to text format"; + + "-in", Arg.String(fun s -> in_kind := up_in s), + "<format> \t\tchoose the input format (horn, horntype, spass, pi, pitype)"; + + "-o", Arg.String(fun s -> + Fileprint.close(); + Fileprint.outfile := s; + begin + try + Fileprint.outchannel := open_out s + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + end; + Fileprint.printed_preamble := false), + "choose the output file name (for TeX output)"; + + "-gc", Arg.Set gc, + "display gc statistics" + ] + converttotex "Proverif to TeX convertor"; + Fileprint.close(); + if !gc then Gc.print_stat stdout diff --git a/preinstallTTool/linux/proverif/src/ptree.cmi b/preinstallTTool/linux/proverif/src/ptree.cmi new file mode 100644 index 0000000000000000000000000000000000000000..7399b2b3131420946796209c36f1fdccbc43bea6 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/ptree.cmi differ diff --git a/preinstallTTool/linux/proverif/src/ptree.mli b/preinstallTTool/linux/proverif/src/ptree.mli new file mode 100644 index 0000000000000000000000000000000000000000..843f4c72f5cd53cffe640592e3efde19cb626983 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/ptree.mli @@ -0,0 +1,95 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Terms *) + +type ident = string * Parsing_helper.extent + +type term = + PIdent of ident + | PFunApp of ident * term list + | PTuple of term list + | PName of ident * term list + +type format = + PFIdent of ident + | PFFunApp of ident * format list + | PFTuple of format list + | PFName of ident * format list + | PFAny of ident + +(* Clauses *) + +type fact = + PSimpleFact of ident * term list + | PSNeq of term * term + +type fact_e = fact * Parsing_helper.extent + +type format_fact = ident * format list + +type clause = + Clause of fact_e list * fact_e + | Equiv of fact_e list * fact_e * bool + +type pval = + S of ident + | I of int + +(* Declarations - untyped front-end *) + +type decl = + FunDecl of ident * int + | DataFunDecl of ident * int + | Equation of (term * term) list + | Query of fact_e + | NoUnif of format_fact * int + | Not of fact_e + | Elimtrue of fact_e + | PredDecl of ident * int * ident list + | Param of ident * pval + | Reduc of clause list + +(* Declarations - typed front-end *) + +type envdecl = (ident(*variable*) * ident(*type*)) list + +type tdecl = + TTypeDecl of ident (* type declaration *) + | TNameDecl of ident * ident(*type*) + | TFunDecl of ident * ident list(*argument types*) * ident(*result type*) * ident list(*options*) + | TConstDecl of ident * ident(*type*) * ident list(*options*) + | TEquation of (envdecl * term * term) list * ident list(*options*) + | TQuery of envdecl * fact_e + | TNoUnif of envdecl * format_fact * int + | TNot of envdecl * fact_e + | TElimtrue of envdecl * fact_e + | TPredDecl of ident * ident list(*argument types*) * ident list(*options*) + | TSet of ident * pval + | TReduc of (envdecl * clause) list + + diff --git a/preinstallTTool/linux/proverif/src/queue.cmi b/preinstallTTool/linux/proverif/src/queue.cmi new file mode 100644 index 0000000000000000000000000000000000000000..12206fe873595661bf1a9e52b10f8fb8cf697557 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/queue.cmi differ diff --git a/preinstallTTool/linux/proverif/src/queue.cmx b/preinstallTTool/linux/proverif/src/queue.cmx new file mode 100644 index 0000000000000000000000000000000000000000..d42a50be97bd382fb990aa4e6041ba1bebc4a543 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/queue.cmx differ diff --git a/preinstallTTool/linux/proverif/src/queue.ml b/preinstallTTool/linux/proverif/src/queue.ml new file mode 100644 index 0000000000000000000000000000000000000000..ca4f92dfa5ae029eb57608819450264edf1bbb8e --- /dev/null +++ b/preinstallTTool/linux/proverif/src/queue.ml @@ -0,0 +1,94 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type 'a queue = { mutable next : 'a queue option; + elem : 'a } + +type 'a q = { mutable qstart : 'a queue option; + mutable qend : 'a queue option } + +let new_queue() = { qstart = None; qend = None } + +(* qstart and qend are None at the same time, + and this means that the queue is empty *) + +let add queue r = + match queue.qend with + None -> let qelem = { next = None; elem = r } in + queue.qstart <- Some qelem; queue.qend <- Some qelem + | Some q -> q.next <- Some { next = None; elem = r }; + queue.qend <- q.next + +let get queue = + match queue.qstart with + None -> None + | Some q -> if q.next == None then queue.qend <- None; + queue.qstart <- q.next; + Some q.elem + +let length queue = + let rec lengthq q = + match q with + None -> 0 + | Some q' -> 1 + lengthq (q'.next) + in + lengthq queue.qstart + +let exists queue f = + let rec existsrec q = + match q with + None -> false + | Some q' -> (f q'.elem) || (existsrec q'.next) + in + existsrec queue.qstart + +let filter queue f = + let rec filterrec q = + match q with + None -> None + | Some q' -> + let rnext = filterrec q'.next in + if f q'.elem then + let r = Some { next = rnext; elem = q'.elem } in + if rnext == None then queue.qend <- r; + r + else + rnext + in + queue.qstart <- filterrec queue.qstart; + if queue.qstart == None then queue.qend <- None + +let iter queue f = + let rec iterrec q = + match q with + None -> () + | Some q' -> + f q'.elem; + iterrec q'.next + in + iterrec queue.qstart + diff --git a/preinstallTTool/linux/proverif/src/queue.mli b/preinstallTTool/linux/proverif/src/queue.mli new file mode 100644 index 0000000000000000000000000000000000000000..2dca97a41497d55ad5a4ada017914fdc960a687d --- /dev/null +++ b/preinstallTTool/linux/proverif/src/queue.mli @@ -0,0 +1,42 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +type 'a q + +val new_queue : unit -> 'a q + +val add : 'a q -> 'a -> unit + +val get : 'a q -> 'a option + +val length : 'a q -> int + +val exists : 'a q -> ('a -> bool) -> bool + +val filter : 'a q -> ('a -> bool) -> unit + +val iter : 'a q -> ('a -> unit) -> unit diff --git a/preinstallTTool/linux/proverif/src/reduction.cmi b/preinstallTTool/linux/proverif/src/reduction.cmi new file mode 100644 index 0000000000000000000000000000000000000000..b7d8b93d5d41d6dabfc169ad24aca4108e4cfa94 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/reduction.cmi differ diff --git a/preinstallTTool/linux/proverif/src/reduction.cmx b/preinstallTTool/linux/proverif/src/reduction.cmx new file mode 100644 index 0000000000000000000000000000000000000000..614a70f2eb4cdfa430ff33d509589340cb002d74 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/reduction.cmx differ diff --git a/preinstallTTool/linux/proverif/src/reduction.ml b/preinstallTTool/linux/proverif/src/reduction.ml new file mode 100644 index 0000000000000000000000000000000000000000..e5ee50b2275ad213ec0bf357df0c46fd0139b1d1 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/reduction.ml @@ -0,0 +1,2526 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Trace reconstruction + This version of the trace reconstruction does not exploit the + order of nodes in the derivation tree. + *) +(* TO DO Test phases + Should I use evaluated terms in the "comment" field? + Should I localize the processes (or the attacker) that sends the message or + executes an event when the goal is mess:... or event:...? In fact, the current + display already gives the information in most cases. + *) + +open Types +open Pitypes +open Terms +open Reduction_helper + +let made_forward_step = ref false +let failed_traces = ref 0 + +let debug_find_io_rule = ref false +let debug_backtracking = ref false +let debug_print s = () + (* print_string s; Display.Text.newline() *) + +(* Set when we should take the else branch of Get but we cannot + because an element has already been inserted so that the in branch + is taken. In this case, we try delaying the inserts. *) +let has_backtrack_get = ref false + +exception No_result +(* We use the exception Unify for local failure *) + +let equal_io_rule (n1, h1, hs1, np1, f1) (n2, h2, hs2, np2, f2) = + (n1 == n2) && + (List.length h1 == List.length h2) && + (List.for_all2 Termslinks.equal_facts_with_links h1 h2) && + (List.length hs1 == List.length hs2) && + (List.for_all2 (=) hs1 hs2) && + (List.length np1 == List.length np2) && + (List.for_all2 Termslinks.equal_terms_with_links np1 np2) && + (Termslinks.equal_facts_with_links f1 f2) + +(* Display clauses *) + +let display_rule (n, sons, hsl, nl, concl) = + print_string ("Rule " ^ (string_of_int n) ^ ": "); + display_tag hsl nl; + print_string " "; + Display.Text.display_rule (List.map (fun t -> copy_fact2 t) sons, copy_fact2 concl, Empty concl, []); + Display.Text.newline() + +(* Display the trace *) + +let noninterftest_to_string = function + ProcessTest _ | InputProcessTest _ -> " process performs a test that may give the attacker some information on the secret" + | ApplyTest _ -> "This gives the attacker some information on the secret." + | NIFailTest _ -> Parsing_helper.internal_error "Unexpected FailTest for noninterf" + | CommTest _ -> "The success or failure of the communication may give the attacker some information on the secret." + | InputTest _ -> "The success or failure of the input may give the attacker some information on the secret." + | OutputTest _ -> "The success or failure of the output may give the attacker some information on the secret." + | NIEqTest _ -> "This gives the attacker some information on the secret." + +let display_trace final_state = + match !Param.trace_display with + Param.NoDisplay -> () + | Param.ShortDisplay -> + if !Param.html_output then + Display.Html.display_labeled_trace final_state + else + begin + if !Param.display_init_state then + begin + print_string "A more detailed output of the traces is available with\n"; + if !Param.typed_frontend then + print_string " set traceDisplay = long.\n" + else + print_string " param traceDisplay = long.\n"; + Display.Text.newline() + end; + Display.Text.display_labeled_trace final_state + end + | Param.LongDisplay -> + if !Param.html_output then + ignore (Display.Html.display_reduc_state Display.Html.display_term2 true final_state) + else + ignore (Display.Text.display_reduc_state Display.Text.display_term2 true final_state) + +(* Find a clause *) + +let find_io_rule next_f hypspeclist hyplist name_params1 var_list io_rules = + let name_params = extract_name_params_noneed name_params1 in + let l = List.length hypspeclist in + let lnp = List.length name_params in + let lh = List.length hyplist in + (* Useful for debugging *) + if !debug_find_io_rule then + begin + auto_cleanup (fun () -> + print_string "Looking for "; + display_tag hypspeclist name_params; + print_string " "; + Display.Text.display_list Display.Text.WithLinks.fact " & " hyplist; + Display.Text.newline()) + end; + let found_terms = ref [] in + let rec find_io_rule_aux = function + [] -> raise Unify + | ((n, sons, hypspeclist2, name_params2, _)::io_rules) -> + let l2 = List.length hypspeclist2 in + let lnp2 = List.length name_params2 in + let lh2 = List.length sons in + if (l2 < l) || (lnp2 < lnp) || (lh2 < lh) + || (not (hypspeclist = skip (l2-l) hypspeclist2)) then + find_io_rule_aux io_rules + else + begin + let sons3 = skip (lh2-lh) sons in + try + let name_params' = skip (lnp2-lnp) name_params2 in + if not (Param.get_ignore_types()) && + (List.exists2 (fun t1 t2 -> Terms.get_term_type t1 != Terms.get_term_type t2) name_params name_params') then + raise Unify; + auto_cleanup (fun () -> + match_modulo_list (fun () -> + match_equiv_list (fun () -> + let new_found = List.map copy_closed_remove_syntactic var_list in + if List.exists (fun old_found -> + List.for_all2 equal_terms_modulo old_found new_found) (!found_terms) then + raise Unify; + found_terms := new_found :: (!found_terms); + if !debug_find_io_rule then + begin + auto_cleanup (fun () -> + print_string "Found "; + Display.Text.display_list Display.Text.WithLinks.term ", " new_found; + Display.Text.newline()) + end; + next_f new_found) sons3 hyplist + ) name_params name_params' + ) + with Unify -> find_io_rule_aux io_rules + end + in + find_io_rule_aux io_rules + +(* Evaluate a term possibly containing destructors. + It always succeeds, perhaps returning Fail. *) + +let rec term_evaluation = function + Var v -> + begin + match v.link with + TLink t -> term_evaluation t + | _ -> Parsing_helper.internal_error "Error: term should be closed in attack reconstruction"; + end + | FunApp(f,l) -> + (* for speed, use the initial definition of destructors, not the one enriched with the equational theory *) + match f.f_initial_cat with + Eq _ | Tuple -> + let l' = List.map term_evaluation l in + if List.exists is_fail l' then + Terms.get_fail_term (snd f.f_type) + else + FunApp(f, l') + | Name _ | Failure -> FunApp(f,[]) + | Red redl -> + let l' = List.map term_evaluation l in + let rec try_red_list = function + [] -> + Parsing_helper.internal_error "Term evaluation should always succeeds (perhaps returning Fail)" + | (red1::redl) -> + let (left, right, side_c) = auto_cleanup (fun () -> Terms.copy_red red1) in + try + auto_cleanup (fun () -> + match_modulo_list (fun () -> + if List.for_all disequation_evaluation side_c then + begin + (* TO DO (for speed) should I remove_syntactic, or keep it, + but take it into account elsewhere (when doing + function symbol comparisons, accept functions that + differ by their syntactic status) *) + close_term right; + TermsEq.remove_syntactic_term right + end + else + raise Unify + ) left l') + with Unify -> try_red_list redl + in + try_red_list redl + | _ -> Parsing_helper.internal_error "unexpected function symbol in term_evaluation" + +(* Evaluates t1 and tests if it is equal to t2. *) + +let equal_terms_modulo_eval t1 t2 = + let t1' = term_evaluation t1 in + if is_fail t1' then false else equal_terms_modulo t1' t2 + + +(* Evaluates a term. Raises Unify when the result is fail. *) + +let term_evaluation_fail t = + let r = term_evaluation t in + if is_fail r then + raise Unify + else + r + +let term_evaluation_name_params occ t name_params = + let may_have_several_types = reduction_check_several_patterns occ in + let t' = term_evaluation_fail t in + if may_have_several_types then + (t', (MUnknown,t',Always) :: name_params) + else + (t', name_params) + +let rec term_evaluation_letfilter = function + Var { link = TLink t } -> term_evaluation_letfilter t + | Var v -> Var v + | FunApp(f,l) -> + match f.f_cat with + Eq _ | Tuple -> FunApp(f, term_evaluation_list_letfilter l) + | Name _ -> FunApp(f,[]) + | Failure -> raise Unify + | Red redl -> term_evaluation_fail (FunApp(f,l)) + | _ -> Parsing_helper.internal_error "unexpected function symbol in term_evaluation_letfilter" + +and term_evaluation_list_letfilter l = + List.map term_evaluation_letfilter l + +let term_evaluation_letfilter occ l name_params = + let may_have_several_types = reduction_check_several_patterns occ in + let l' = term_evaluation_list_letfilter l in + if may_have_several_types then + l', ((List.map (fun t -> (MUnknown,t,Always)) l') @ name_params) + else + l', name_params + +(* Match a pattern + Raises Unify when the matching fails *) + +let rec match_pattern p t = + match p with + PatVar b -> Terms.link b (TLink t) + | PatTuple(f,l) -> + let vl = Terms.var_gen (fst f.f_type) in + let tl = + match_modulo (fun () -> + List.map copy_closed_remove_syntactic vl + ) (FunApp(f, vl)) t + in + List.iter2 match_pattern l tl + | PatEqual t' -> + let t'' = term_evaluation_fail t' in + match_modulo (fun () -> ()) t'' t + +(* Decompose tuples *) + +let rec decompose_term = function + FunApp(f,l) when f.f_cat == Tuple -> decompose_list l + | t -> [t] + +and decompose_list = function + [] -> [] + | (a::l) -> (decompose_term a) @ (decompose_list l) + +(* Test if a term is public *) + +let rec is_in_public public = function + FunApp({ f_cat = Tuple }, l) -> List.for_all (is_in_public public) l + | t -> List.exists (equal_terms_modulo t) public + +let rec remove_first_in_public public = function + [] -> [] + | ((a::l) as l') -> + if List.exists (equal_terms_modulo a) public then + remove_first_in_public public l + else + l' + +let update_term_list oldpub public tc_list = + match tc_list with + [] -> [] + | (t0::l0) -> + let rec is_in_until = function + [] -> false + | ((a::l) as public) -> + if public == oldpub then false else + if equal_terms_modulo a t0 then true else + is_in_until l + in + if is_in_until public then + remove_first_in_public public l0 + else + tc_list + + +let rec add_public_and_close state t = + let queue = ref [t] in + let rec remove_from_att_rules public t = function + [] -> [] + | (p, hyp_terms,concl_terms)::attacker_rules -> + let attacker_rules' = remove_from_att_rules public t attacker_rules in + if getphase p < state.current_phase then attacker_rules' else + let hyp_terms' = + match hyp_terms with + [] -> [] + | (t0::l0) -> + if equal_terms_modulo t0 t then + remove_first_in_public public l0 + else + hyp_terms + in + if (hyp_terms' = []) && (getphase p = state.current_phase) then + begin + queue := concl_terms @ (!queue); + attacker_rules' + end + else + (* Keep the rule, removing hypotheses that are already in public *) + (p, hyp_terms', concl_terms) :: attacker_rules' + in + let rec do_close state = + match !queue with + [] -> state + | (t::l) -> + queue := l; + if List.exists (equal_terms_modulo t) state.public then + do_close state + else + let public' = t :: state.public in + do_close { state with + public = public'; + prepared_attacker_rule = remove_from_att_rules public' t state.prepared_attacker_rule } + in + do_close state + +let rec add_public state = function + FunApp({ f_cat = Tuple }, l) -> add_public_list state l + | t -> add_public_and_close state t + +and add_public_list state = function + [] -> state + | (a::l) -> add_public_list (add_public state a) l + +(* Do reductions that do not involve interactions + f takes as input + - a boolean indicating whether the attacker knowledge has changed + - the new state + + When the goal is reached, do_red_nointeract returns the final state. + Otherwise, raises an exception No_result. +*) + +let rec do_red_nointeract f prev_state n = + let (proc, name_params, occs, facts, cache_info) = + List.nth prev_state.subprocess n in + let success = + match prev_state.goal with + NonInterfGoal(ProcessTest((TestUnifTag occ_goal)::occs_goal, name_params_goal, loc)) -> + (* Note: when a clause concludes bad_pred and is a ProcessRule, then its first tag + is TestUnifTag *) + begin + match proc with + Test(_,_,_,occ) | Let(_,_,_,_,occ) | Input(_,_,_,occ) | Output(_,_,_,occ) + | LetFilter(_,_,_,_,occ) | Event(_,_,occ) | Insert(_,_,occ) | Get(_,_,_,_,occ) -> + let l = List.length name_params in + let lg = List.length name_params_goal in + if (occ == occ_goal) && + (occs = occs_goal) && + (l <= lg) && + (List.for_all2 equal_terms_modulo (extract_name_params_noneed name_params) (skip (lg-l) name_params_goal)) then + begin + loc := Some (n, List.nth prev_state.subprocess n); + true + end + else false + | _ -> false + end + | _ -> false + in + if success then prev_state else + match proc with + Nil -> debug_print "Doing Nil"; + made_forward_step := true; + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RNil(n); + previous_state = Some prev_state } + | Par(p,q) -> + debug_print "Doing Par"; + made_forward_step := true; + do_red_nointeract (fun new_att_know cur_state2 -> + do_red_nointeract (fun new_att_know2 cur_state3 -> + f (new_att_know || new_att_know2) cur_state3) + cur_state2 n + ) { prev_state with + subprocess = add_at n (p, name_params, occs, facts, Nothing) + (replace_at n (q, name_params, occs, facts, Nothing) + prev_state.subprocess); + comment = RPar(n); + previous_state = Some prev_state } (n+1) + | Restr(na,(args,env),p,occ) -> + debug_print "Doing Restr"; + made_forward_step := true; + let need_list = get_need_vars na.f_name in + let include_info = prepare_include_info env args need_list in + let nt = FunApp(na, extract_name_params na.f_name include_info name_params) in + let n' = FunApp(add_name_for_pat nt,[]) in + let p' = process_subst p na n' in + begin + do_red_nointeract f { prev_state with + subprocess = replace_at n (p', name_params, occs, facts, Nothing) prev_state.subprocess; + comment = RRestr(n, na, n'); + previous_state = Some prev_state } n + end + | Let(pat,t,p,q,occ) -> + debug_print "Doing Let"; + made_forward_step := true; + let new_occs = (LetTag occ) :: occs in + begin + try + auto_cleanup (fun () -> + let (t', name_params') = term_evaluation_name_params (OLet(occ)) t name_params in + match_pattern pat t'; + let p' = copy_process p in + let name_params'' = update_name_params IfQueryNeedsIt name_params' pat in + do_red_nointeract f { prev_state with + subprocess = replace_at n (p', name_params'', new_occs, facts, Nothing) prev_state.subprocess; + comment = RLet1(n, pat, t); + previous_state = Some prev_state } n + ) + with Unify -> + do_red_nointeract f { prev_state with + subprocess = replace_at n (q, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = RLet2(n, pat, t); + previous_state = Some prev_state } n + end + | Test(t,p,q,occ) -> + debug_print "Doing Test"; + made_forward_step := true; + begin + try + auto_cleanup (fun () -> + let new_occs = (TestTag occ) :: occs in + let (t', name_params') = term_evaluation_name_params (OTest(occ)) t name_params in + if equal_terms_modulo t' Terms.true_term then + do_red_nointeract f + { prev_state with + subprocess = replace_at n (p, name_params', new_occs, facts, Nothing) prev_state.subprocess; + comment = RTest1(n, t); + previous_state = Some prev_state } n + else + do_red_nointeract f + { prev_state with + subprocess = replace_at n (q, name_params', new_occs, facts, Nothing) prev_state.subprocess; + comment = RTest2(n, t); + previous_state = Some prev_state } n + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RTest3(n, t); + previous_state = Some prev_state } + end + | Output(tc,t,p,occ) -> + let success = + if cache_info != Nothing then + false (* Was already tested and failed before; will still fail if tested again *) + else + match prev_state.goal with + NonInterfGoal(OutputTest(tout,loc)) -> + if equal_terms_modulo_eval tc tout then + begin + (* Success when output on channel tout *) + loc := Some (LocProcess(n, List.nth prev_state.subprocess n)); + true + end + else false + | NonInterfGoal(CommTest(tin,tout,loc)) -> + if equal_terms_modulo_eval tc tout then + begin + if is_in_public prev_state.public tin then + begin + loc := Some (LocAttacker, LocProcess(n, List.nth prev_state.subprocess n)); + true + end + else (* find a process that does some input on tin *) + try + let (n',p') = + findi (function + (Input(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tin + | _ -> false + ) prev_state.subprocess + in + loc := Some (LocProcess(n',p'), LocProcess(n, List.nth prev_state.subprocess n)); + true + with Not_found -> + false + end + else false + | _ -> false + in + if success then prev_state else + begin + debug_print "Doing Output"; + (* For passive attackers, do red I/O only, + but still evaluate the arguments of the output *) + if not (!Param.active_attacker) then + match cache_info with + InputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have input/get info for an output!" + | OutputInfo _ -> f false prev_state (* Arguments already evaluated *) + | Nothing -> + try + auto_cleanup (fun () -> + let tc' = term_evaluation_fail tc in + let tclist = decompose_term tc' in + let t' = term_evaluation_fail t in + f false { prev_state with + subprocess = replace_at n (Output(tc',t',p,occ), name_params, occs, facts, + (OutputInfo(tclist, prev_state.public))) + prev_state.subprocess } + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = ROutput3(n, tc, t); + previous_state = Some prev_state } + else + (* For active attackers, one can output on public channels *) + begin + let new_occs = (OutputTag occ) :: occs in + match cache_info with + InputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have input/get info for an output!" + | OutputInfo(tclist, oldpub) -> + let tclist' = update_term_list oldpub prev_state.public tclist in + if tclist' = [] then + begin + made_forward_step := true; + let prev_state' = add_public prev_state t in + do_red_nointeract (if prev_state.public == prev_state'.public then f else + (fun mod_public cur_state -> f true cur_state)) + { prev_state' with + subprocess = replace_at n (p, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = ROutput1(n, tc, t); + previous_state = Some prev_state } n + end + else + f false { prev_state with + subprocess = replace_at n (proc, name_params, occs, facts, + (OutputInfo(tclist', prev_state.public))) + prev_state.subprocess } + | Nothing -> + try + auto_cleanup (fun () -> + let tc' = term_evaluation_fail tc in + let tclist = decompose_term tc' in + let tclist' = remove_first_in_public prev_state.public tclist in + let t' = term_evaluation_fail t in + if tclist' = [] then + begin + made_forward_step := true; + let prev_state' = add_public prev_state t' in + do_red_nointeract (if prev_state.public == prev_state'.public then f else + (fun mod_public cur_state -> f true cur_state)) + { prev_state' with + subprocess = replace_at n (p, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = ROutput1(n, tc, t); + previous_state = Some prev_state } n + end + else + f false { prev_state with + subprocess = replace_at n (Output(tc',t',p,occ), name_params, occs, facts, + (OutputInfo(tclist', prev_state.public))) + prev_state.subprocess } + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = ROutput3(n, tc, t); + previous_state = Some prev_state } + end + end + | Event(FunApp(fs,l) as t,p,occ) -> + debug_print "Doing Event"; + made_forward_step := true; + let fstatus = Pievent.get_event_status fs in + let do_begin prev_state = + match fstatus.begin_status with + No -> + begin + (* Check that the argument of the event can be evaluated but otherwise ignore it *) + try + let _ = term_evaluation_fail t in + let new_occs = (BeginEvent (occ)) :: occs in + do_red_nointeract f { prev_state with + subprocess = replace_at n (p, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = RBegin1(n, t); + previous_state = Some prev_state } n + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RBegin2(n, t); + previous_state = Some prev_state } + end + | NonInj | Inj -> + try + auto_cleanup (fun () -> + let (t', name_params') = term_evaluation_name_params (OEvent(occ)) t name_params in + let new_occs = BeginFact :: (BeginEvent (occ)) :: occs in + let new_facts = (Out(t', [])) :: facts in + find_io_rule (fun _ -> + do_red_nointeract f { prev_state with + subprocess = replace_at n (p, name_params', new_occs, new_facts, Nothing) prev_state.subprocess; + comment = RBegin1(n, t); + previous_state = Some prev_state } n + ) new_occs new_facts name_params' [] prev_state.io_rule + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RBegin2(n, t); + previous_state = Some prev_state } + in + let do_test t' = + if equal_terms_modulo_eval t t' then + (* SUCCESS! *) + { prev_state with + subprocess = replace_at n (p, name_params, occs, facts, Nothing) prev_state.subprocess; + comment = REnd(n,t); + previous_state = Some prev_state } + else + do_begin prev_state + in + begin + match (fstatus.end_status, prev_state.goal) with + (NonInj, Fact(Pred(pr,[t']))) when pr == Param.end_pred -> do_test t' + | (Inj, Fact(Pred(pr,[_;t']))) when pr == Param.end_pred_inj -> do_test t' + | (Inj, InjGoal(Pred(pr,[_;t']) as f,sid',nexecuted)) when pr == Param.end_pred_inj -> + if equal_terms_modulo_eval t t' then + (* Event met once more *) + if nexecuted+1 = 2 then + (* Event met twice -> SUCCESS + This condition is not really sufficient: before saying that the + query is false, I will also check that the matching begin events + have not been executed twice *) + { prev_state with + goal = InjGoal(f,sid',nexecuted+1); + subprocess = replace_at n (p, name_params, occs, facts, Nothing) prev_state.subprocess; + comment = REnd(n,t); + previous_state = Some prev_state } + else + (* Event met once, continue *) + do_begin { prev_state with goal = InjGoal(f,sid',nexecuted+1) } + else + do_begin prev_state + + | _ -> do_begin prev_state + end + | LetFilter(bl, Pred(pr,l), p, q, occ) -> + debug_print "Doing LetFilter"; + made_forward_step := true; + let letfilter_succeeds = ref false in + begin + try + let new_occs = (LetFilterTag occ) :: occs in + let vars_bl = List.map (fun b -> Var b) bl in + auto_cleanup (fun () -> + let (l', name_params') = term_evaluation_letfilter (OLetFilter(occ)) l + ((List.map2 (fun v v' -> (MVar(v, None), v', Always)) bl vars_bl) @ name_params) + in + let fact' = Pred(pr,l') in + try + find_io_rule (fun terms_bl -> + let new_facts' = (TermsEq.copy_remove_syntactic_fact fact') :: facts in + List.iter2 (fun b term_b -> + Terms.link b (TLink term_b)) bl terms_bl; + let name_params'' = List.map + (function (m,t,always) -> (m,copy_closed_remove_syntactic t,always)) name_params' + in + let p' = auto_cleanup (fun () -> copy_process p) in + letfilter_succeeds := true; + (* Allow choosing a different result for letfilter when search fails *) + try + do_red_nointeract f { prev_state with + subprocess = replace_at n (p', name_params'', LetFilterFact :: new_occs, new_facts', Nothing) prev_state.subprocess; + comment = RLetFilter1(n, bl, Pred(pr,l)); + previous_state = Some prev_state } n + with No_result -> raise Unify + ) new_occs (fact' :: facts) name_params' vars_bl prev_state.io_rule + with Unify -> + if !letfilter_succeeds then raise No_result else + (* it should be ok to query the fact with names instead of patterns? *) + let letfilterclauses = auto_cleanup (fun () -> Rules.query_goal_std fact') in + if letfilterclauses != [] (* fact' may be derivable from the clauses => + LetFilter may succeed but not allowed by the derivation tree => + consider that LetFilter blocks *) then + raise Unify + else + do_red_nointeract f { prev_state with + subprocess = replace_at n (q, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = RLetFilter3(n, bl, Pred(pr,l)); + previous_state = Some prev_state } n + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RLetFilter2(n, bl, Pred(pr,l)); + previous_state = Some prev_state } + end + | Repl(p,occ) -> + debug_print "Doing Repl"; + made_forward_step := true; + let sid = Terms.new_var "sid" Param.sid_type in + let new_occs = (ReplTag (occ,count_name_params name_params))::occs in + let copy_number = ref 0 in + let new_state = ref { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RRepl(n,0); + previous_state = Some prev_state } + in + begin + try + auto_cleanup (fun () -> + find_io_rule (function + [sid_pat] -> + (* TO DO this assumes no key compromise + (which is coherent with the current usage of this module) + With key compromise, we may need two session ids. *) + let p' = auto_cleanup (fun () -> copy_process p) in + incr copy_number; + new_state := { !new_state with + subprocess = + if !Param.non_interference then + (* With non-interference, we need to add the session id in facts *) + add_at n (p', (MSid 0,sid_pat,Always)::name_params, new_occs, (Pred(Param.get_pred (Attacker(!new_state.current_phase, Param.sid_type)), [sid_pat]))::facts, Nothing) !new_state.subprocess + else + add_at n (p', (MSid 0,sid_pat,Always)::name_params, new_occs, facts, Nothing) !new_state.subprocess; + }; + raise Unify + | _ -> Parsing_helper.internal_error "Repl case, reduction.ml" + ) new_occs facts ((MSid 0,Var sid,Always)::name_params) [Var sid] prev_state.io_rule + ) + with Unify -> + let rec do_red_copies b ncopies state = + if ncopies < 0 then + f b state + else + do_red_nointeract (fun b' s -> do_red_copies (b||b') (ncopies-1) s) state (n+ncopies) + in + do_red_copies false ((!copy_number)-1) + { !new_state with + comment = RRepl(n,!copy_number) + } + end + | Input(tc,_,_,_) -> + begin + match prev_state.goal with + NonInterfGoal(InputTest(tin,loc)) -> + if equal_terms_modulo_eval tc tin then + begin + (* Success when input on channel tin *) + loc := Some (LocProcess(n, List.nth prev_state.subprocess n)); + prev_state + end + else f false prev_state + | NonInterfGoal(CommTest(tin,tout,loc)) -> + if equal_terms_modulo_eval tc tin then + begin + if is_in_public prev_state.public tout then + begin + loc := Some (LocProcess(n, List.nth prev_state.subprocess n), LocAttacker); + prev_state + end + else (* find a process that does some output on tout *) + try + let (n',p') = + findi (function + (Output(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tout + | _ -> false + ) prev_state.subprocess + in + loc := Some (LocProcess(n, List.nth prev_state.subprocess n), LocProcess(n',p')); + prev_state + with Not_found -> + f false prev_state + end + else f false prev_state + | _ -> f false prev_state + end + | Insert(t,p,occ) -> + debug_print "Doing Insert"; + let new_occs = (InsertTag occ) :: occs in + let new_element_inserted = ref false in + begin + try + auto_cleanup (fun () -> + let t' = term_evaluation_fail t in + let already_in = List.exists (equal_terms_modulo t') prev_state.tables in + new_element_inserted := not already_in; + made_forward_step := true; + let new_state = + { prev_state with + subprocess = replace_at n (p, name_params, new_occs, facts, Nothing) prev_state.subprocess; + tables = if already_in then prev_state.tables else t' :: prev_state.tables; + comment = RInsert1(n, t); + previous_state = Some prev_state } + in + let success = + match new_state.goal, new_state.current_phase with + Fact(Pred({p_info = [Table(i)]},[tbl_elem])), i' -> + (* Current phase is i'. If the term tbl_elem is in the table + in phase i', it will still be in the table in any + later phase. *) + (i' <= i && equal_terms_modulo tbl_elem t') + | _ -> false + in + if success then + new_state + else + do_red_nointeract f new_state n + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RInsert2(n, t); + previous_state = Some prev_state } + | No_result -> + (* The attack reconstruction failed after doing the insert. + Try not doing it, in case that allows executing the else branch of a Get. *) + if (!has_backtrack_get) && (!new_element_inserted) then + f false prev_state + else + raise No_result + end + | _ -> f false prev_state + + +(* Test success when the knowledge of the attacker has changed *) + +let test_success cur_state' = + try + match cur_state'.goal, cur_state'.current_phase with + Fact(Pred({p_info = [Attacker(i,_)]},[t])), i' -> + (* Current phase is i'; if t is known by the attacker + in phase i', it will still be known in phase i *) + (i' <= i) && (is_in_public cur_state'.public t) + | Fact(Pred({p_info = [Mess(i,_)]},[tc;t])), i' -> + (* Current phase is i'; if tc and t are known by the attacker + in phase i, they will still be known in phase i, + so the attacker will be able to send t on tc in phase i *) + (i' <= i && + is_in_public cur_state'.public t && + is_in_public cur_state'.public tc) + | WeakSecrGoal(l,_,_,_), _ -> + List.for_all (fun (t,_) -> + is_in_public cur_state'.public t) l + | NonInterfGoal(NIEqTest(t1,t2)), _ -> + (is_in_public cur_state'.public t1) && + (is_in_public cur_state'.public t2) + | NonInterfGoal(ApplyTest(_, l)), _ -> + List.for_all (is_in_public cur_state'.public) l + | NonInterfGoal(InputTest(t,loc) | OutputTest(t,loc)), _ -> + let r = is_in_public cur_state'.public t in + if r then loc := Some LocAttacker; + r + | NonInterfGoal(CommTest(tin,tout,loc)), _ -> + let rin = + if is_in_public cur_state'.public tin then + Some LocAttacker + else (* find a process that does some input on tin *) + try + let (n,p) = + findi (function + (Input(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tin + | _ -> false + ) cur_state'.subprocess + in + Some (LocProcess(n,p)) + with Not_found -> + None + in + let rout = + if is_in_public cur_state'.public tout then + Some LocAttacker + else (* find a process that does some output on tout *) + try + let (n,p) = + findi (function + (Output(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tout + | _ -> false + ) cur_state'.subprocess + in + Some (LocProcess(n,p)) + with Not_found -> + None + in + begin + match rin,rout with + Some lin, Some lout -> loc := Some(lin,lout); true + | _ -> false + end + | _ -> false + with Unify -> + false + +(* let test_success = Profile.f1 "test_success" test_success *) + +let end_if_success next_f cur_state = + if test_success cur_state then cur_state else next_f cur_state + +(* Normalize the state after a reduction *) + +let rec find_possible_outputs f cur_state n seen_list = function + [] -> f cur_state + | (Output(tc,t,p,out_occ) as proc, name_params, occs, facts, cache_info)::rest_subprocess when (!Param.active_attacker) -> + let tclist' = + match cache_info with + InputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have input/get info for an output!" + | OutputInfo(tclist, oldpub) -> + update_term_list oldpub cur_state.public tclist + | Nothing -> + let tclist = decompose_term tc in + remove_first_in_public cur_state.public tclist + in + let seen_list' = (proc, name_params, occs, facts, OutputInfo(tclist', cur_state.public)) :: seen_list in + if tclist' = [] then + do_red_nointeract (fun change_pub cur_state2 -> + if change_pub then + end_if_success (find_possible_outputs_rec f) cur_state2 + else + find_possible_outputs f cur_state2 0 [] cur_state2.subprocess + ) { cur_state with subprocess = List.rev_append seen_list' rest_subprocess } n + else + find_possible_outputs f cur_state (n+1) seen_list' rest_subprocess + | sub_proc::rest_subprocess -> find_possible_outputs f cur_state (n+1) (sub_proc::seen_list) rest_subprocess + +and find_possible_outputs_rec f cur_state3 = + find_possible_outputs f cur_state3 0 [] cur_state3.subprocess + +(* When the process number n has been changed *) + +let normal_state f change_pub cur_state n = + do_red_nointeract (fun change_pub2 cur_state2 -> + if change_pub || change_pub2 then + end_if_success (find_possible_outputs_rec f) cur_state2 + else f cur_state2 + ) cur_state n + +(* When two processes have been changed, numbers n1 and n2 *) + +let normal_state2 f change_pub cur_state n1 n2 = + let n1',n2' = if n1 < n2 then n1,n2 else n2,n1 in + do_red_nointeract (fun change_pub2 cur_state2 -> + do_red_nointeract (fun change_pub3 cur_state3 -> + if change_pub || change_pub2 || change_pub3 then + end_if_success (find_possible_outputs_rec f) cur_state3 + else f cur_state3 + ) cur_state2 n1' + ) cur_state n2' + +(* When all processes have been changed *) + +let normal_state_all f change_pub cur_state = + let rec do_red_all change_pub2 cur_state2 n = + if n < 0 then + if change_pub2 then + end_if_success (find_possible_outputs_rec f) cur_state2 + else + f cur_state2 + else + do_red_nointeract (fun change_pub3 cur_state3 -> + do_red_all (change_pub2 || change_pub3) cur_state3 (n-1) + ) cur_state2 n + in + do_red_all change_pub cur_state (List.length cur_state.subprocess - 1) + +(* Initial attacker knowledge *) + +let rec public_build l = + match l with + | [] -> [] + | h::t -> + if not h.f_private then + (FunApp(h,[]))::(public_build t) + else + public_build t + +(* Initialize the rule lists *) + +let rec init_rule state tree = + match tree.desc with + FHAny | FEmpty -> + begin + match tree.thefact with + Out(_,_) -> state + | Pred(p, [t]) when p.p_prop land Param.pred_ATTACKER != 0 -> + (* Note that the predicate "comp" is not pred_ATTACKER and + could be handled similarly, but anyway it does not + appear here since key compromise is incompatible with + attack reconstruction. *) + begin + let t' = rev_name_subst t in + match t' with + FunApp({ f_cat = Name _; f_private = false },[]) -> + { state with public = t' :: state.public } + | _ -> + (* Public contains terms, not patterns + -> translate the pattern into a term. + If the translation fails because a name is not in the table, we have to stop. *) + if is_in_public state.public t' then + state + else + { state with + public = t' :: state.public; + hyp_not_matched = (Pred(p,[t']))::state.hyp_not_matched } + end + | _ -> + { state with + hyp_not_matched = (rev_name_subst_fact tree.thefact)::state.hyp_not_matched } + end + | FRemovedWithProof _ -> state + | FRule (n, tags, constra, sons) -> + let rec init_sons_rule state1 = function + | [] -> + begin + match tags with + ProcessRule (hsl,nl) -> + let new_io_rule = (n, List.map (fun t -> rev_name_subst_fact t.thefact) sons, + hsl, rev_name_subst_list nl, rev_name_subst_fact tree.thefact) + in + { state1 with io_rule = new_io_rule::state1.io_rule } + (* + if not (List.exists (equal_io_rule new_io_rule) state1.io_rule) then + { state1 with io_rule = new_io_rule::state1.io_rule } + else + state1 + *) + | Apply (f, {p_info = [AttackerGuess(_)]}) -> + (* Clauses attacker_guess_pred will be handled when looking for the goal *) + state1 + | Apply (f,_) when f.f_cat != Tuple -> + begin + let (p,c) = + match tree.thefact with + Pred(p,[t]) -> (p,rev_name_subst t) + | _ -> Parsing_helper.internal_error "unexpected Apply clause" + in + let h = List.map (function + { thefact = Pred(_,[t]) } -> rev_name_subst t + | _ -> Parsing_helper.internal_error "unexpected Apply clause") sons + in + {state1 with prepared_attacker_rule = (p, decompose_list h, decompose_term c)::state1.prepared_attacker_rule} + end + | Rn _ -> + begin + match tree.thefact with + Pred(p, [t]) -> + { state1 with prepared_attacker_rule = (p, [], [rev_name_subst t])::state1.prepared_attacker_rule } + | _ -> + Parsing_helper.internal_error "Rule Rn should conclude p(name)" + end + | _ -> state1 + end + | h::t -> + let state1' = init_rule state1 h in + init_sons_rule state1' t + in + init_sons_rule state sons + | FEquation son -> init_rule state son + +(* Handle reductions i/o and in *) + +(* Perform an input on a public channel (Res In) *) + +let success_input cur_state n new_occs name_params' mess_term = + match cur_state.goal with + NonInterfGoal(InputProcessTest((TestUnifTag occ_goal)::occs_goal, name_params_goal, mess_term_goal, loc)) -> + (* Note: when a clause concludes bad_pred and is a ProcessRule, then its first tag + is TestUnifTag *) + begin + match new_occs with + InputTag occ :: _ -> + let l = List.length name_params' in + let lg = List.length name_params_goal in + if (occ == occ_goal) && + (new_occs = occs_goal) && + (l <= lg) && + (equal_terms_modulo mess_term mess_term_goal) && + (List.for_all2 equal_terms_modulo (extract_name_params_noneed name_params') (skip (lg-l) name_params_goal)) then + begin + loc := Some (n, List.nth cur_state.subprocess n); + true + end + else false + | _ -> false + end + | _ -> false + + +let do_res_in cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_status next_f = + (* The real list of processes is (List.rev_append seen_list (InputProcess :: rest_subprocess)) *) + let (mess_list, oldpub) = + match public_status with + Some (m,o) -> (m,o) + | None -> (decompose_term mess_term, []) + in + (* Remove the elements of mess_list' that are already in cur_state.public *) + let mess_list' = update_term_list oldpub cur_state.public mess_list in + (* When mess_list' is not empty, its first element is not in cur_state.public + Remember that point to avoid testing again that part of public *) + current_cache_list := (mess_term, Some (mess_list', cur_state.public)) :: (!current_cache_list); + debug_print "Input on public channel (message found)"; + if mess_list' != [] then raise Unify; (* The message is not public *) + debug_print "Ok, the message is public"; + try + made_forward_step := true; + let success = success_input cur_state n new_occs name_params' mess_term in + if success then cur_state else + auto_cleanup (fun () -> + match_pattern pat mess_term; + let name_params'' = update_name_params Always name_params' pat in + let p' = auto_cleanup (fun () -> copy_process p) in + let fact' = Pred(Param.get_pred(Mess(cur_state.current_phase, Terms.get_term_type mess_term)), [tc'; mess_term]) in + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p', name_params'', new_occs, fact' :: facts, Nothing) :: rest_subprocess); + comment = RInput(n, tc, pat, mess_term); + previous_state = Some cur_state } n + ) + with No_result -> + (* Inputting the message mess_term on this input will always fail, + even in the following of the trace *) + current_cache_list := List.tl (!current_cache_list); + raise Unify + +(* Perform a (Red I/O) reduction between an input and an asynchronous output *) + +let do_async_res_io cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_channel next_f = + (* The real list of processes is (List.rev_append seen_list (InputProcess :: rest_subprocess)) + It differs from cur_state.subprocess only by the cache of input processes, so when + looking for an output process, we can use cur_state.subprocess instead. *) + current_cache_list := (mess_term, None) :: (!current_cache_list); + (* Find the corresponding asynchronous output *) + let rec find_asynchronous_output noutput = function + [] -> raise Unify (* not found *) + | ((Output(tc2, t2, Nil,out_occ), name_params2,occs2, facts2, cache_info2)::_) when + (equal_terms_modulo tc2 tc') && (equal_terms_modulo t2 mess_term) -> + noutput + | _::rest_subprocess2 -> find_asynchronous_output (noutput+1) rest_subprocess2 + in + let noutput = find_asynchronous_output 0 cur_state.subprocess in + begin + try + made_forward_step := true; + let success = success_input cur_state n new_occs name_params' mess_term in + if success then cur_state else + try + auto_cleanup (fun () -> + match_pattern pat mess_term; + let name_params'' = update_name_params Always name_params' pat in + let p' = auto_cleanup (fun () -> copy_process p) in + let fact' = Pred(Param.get_pred(Mess(cur_state.current_phase, Terms.get_term_type mess_term)), [tc'; mess_term]) in + let cur_state' = + { (if public_channel then + add_public cur_state mess_term else cur_state) + with + subprocess = remove_at noutput + (List.rev_append seen_list ((p', name_params'', new_occs, fact' :: facts, Nothing) :: rest_subprocess)); + comment = RIO(n, tc, pat, noutput, tc, mess_term); + previous_state = Some cur_state } + in + let ninput = if n > noutput then n-1 else n in + match cur_state.goal with + Fact(Pred({p_info = [Mess(n,_)]},[tcg;tg])) when (n == cur_state.current_phase) && + (equal_terms_modulo tg mess_term) && (equal_terms_modulo tcg tc') -> + (* SUCCESS! *) + cur_state' + | _ -> normal_state next_f (cur_state'.public != cur_state.public) cur_state' ninput + ) + with Unify -> + (* The pattern does not match *) + let noutput' = if n>noutput then noutput else noutput-1 in + let cur_state' = + { (if public_channel then + add_public cur_state mess_term else cur_state) + with + subprocess = remove_at noutput' (List.rev_append seen_list rest_subprocess); + comment = RIO(n, tc, pat, noutput, tc, mess_term); + previous_state = Some cur_state } + in + match cur_state.goal with + Fact(Pred({p_info = [Mess(n,_)]},[tcg;tg])) when (n == cur_state.current_phase) && + (equal_terms_modulo tg mess_term) && (equal_terms_modulo tcg tc') -> + (* SUCCESS! *) + cur_state' + | _ -> next_f cur_state' + with No_result -> + current_cache_list := List.tl (!current_cache_list); + raise Unify + end + + +(* Perform a (Res I/O) reduction with a synchronous output *) + +let do_sync_res_io cur_state seen_list rest_subprocess n name_params' new_occs facts tc pat p tc' public_channel next_f = + (* The real list of processes is (List.rev_append seen_list (InputProcess :: rest_subprocess)) + It differs from cur_state.subprocess only by the cache of input processes, so when + looking for an output process, we can use cur_state.subprocess instead. *) + let rec find_synchronous_output noutput = function + [] -> raise Unify (* Not found *) + | ((Output(tc2,t2,p2,out_occ),name_params2,occs2, facts2, cache_info2)::rest_subprocess2) when (p2 != Nil) || public_channel -> + begin + try + if equal_terms_modulo tc2 tc' then + begin + made_forward_step := true; + let success = success_input cur_state n new_occs name_params' t2 in + if success then cur_state else + (* The i/o reduction is possible, compute the reduced state *) + let fact = Pred(Param.get_pred(Mess(cur_state.current_phase, Terms.get_term_type t2)), [tc'; t2]) in + try + auto_cleanup (fun () -> + match_pattern pat t2; + let name_params'' = update_name_params Always name_params' pat in + let p' = auto_cleanup (fun () -> copy_process p) in + let cur_state' = + { (if public_channel then + add_public cur_state t2 else cur_state) + with + subprocess = replace_at noutput (p2, name_params2, (OutputTag out_occ)::occs2, facts2, Nothing) + (List.rev_append seen_list ((p', name_params'', new_occs, fact :: facts, Nothing) :: rest_subprocess)); + comment = RIO(n, tc', pat, noutput, tc2, t2); + previous_state = Some cur_state } + in + match cur_state.goal with + Fact(Pred({p_info = [Mess(n,_)]},[tcg;tg])) when (n == cur_state.current_phase) && + (equal_terms_modulo tg t2) && (equal_terms_modulo tcg tc') -> + (* SUCCESS! *) + cur_state' + | _ -> normal_state2 next_f (cur_state'.public != cur_state.public) cur_state' noutput n + ) + with Unify -> (* The pattern does not match *) + let noutput' = if n > noutput then noutput else noutput-1 in + let cur_state' = + { (if public_channel then + add_public cur_state t2 else cur_state) + with + subprocess = replace_at noutput' (p2, name_params2, occs2, facts2, Nothing) + (List.rev_append seen_list rest_subprocess); + comment = RIO2(n, tc', pat, noutput, tc2, t2); + previous_state = Some cur_state } + in + match cur_state.goal with + Fact(Pred({ p_info = [Mess(n,_)] },[tcg;tg])) when (n == cur_state.current_phase) && + (equal_terms_modulo tg t2) && (equal_terms_modulo tcg tc') -> + (* SUCCESS! *) + cur_state' + | _ -> normal_state next_f (cur_state'.public != cur_state.public) cur_state' noutput' + end + else raise Unify + with Unify | No_result -> + find_synchronous_output (noutput+1) rest_subprocess2 + end + | _::rest_subprocess2 -> find_synchronous_output (noutput+1) rest_subprocess2 + in + find_synchronous_output 0 cur_state.subprocess + +(* Perform a get (Res Get) *) + +let rec find_term stop_l t l = + if l == stop_l then false else + match l with + [] -> false + | (a::r) -> + if equal_terms_modulo t a then true else find_term stop_l t r + +let do_res_get cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts pat t p mess_term old_tables next_f = + (* The real list of processes is (List.rev_append seen_list (GetProcess :: rest_subprocess)) *) + current_cache_list := mess_term :: (!current_cache_list); + debug_print "Get"; + if not (find_term old_tables mess_term cur_state.tables) then raise Unify; (* The entry is not found *) + debug_print "Ok, the entry is present"; + try + made_forward_step := true; + auto_cleanup (fun () -> + match_pattern pat mess_term; + let name_params'' = update_name_params Always name_params' pat in + let t' = term_evaluation_fail t in + if equal_terms_modulo t' Terms.true_term then + (* we check that t evaluates to true *) + let p' = auto_cleanup (fun () -> copy_process p) in + let fact' = Pred(Param.get_pred(Table(cur_state.current_phase)), [mess_term]) in + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p', name_params'', new_occs, fact' :: facts, Nothing) :: rest_subprocess); + comment = RGet(n, pat, t, mess_term); + previous_state = Some cur_state } n + else + raise Unify + ) + with No_result -> + (* Using the entry mess_term on this input will always fail, + even in the following of the trace *) + current_cache_list := List.tl (!current_cache_list); + raise Unify + +(* Dispatch between (Res In), asynchronous (Res I/O), and synchronous (Res I/O), and (Res Get) + May also execute (Insert) in case an insert has been delayed because it prevented executing the + else branch of Get. *) + +exception Backtrack_get +(* This exception is used only when I should take the + else of Get and I cannot because an element that + makes Get succeed already occurs. *) + +let rec find_in_out next_f cur_state n seen_list = function + [] -> raise No_result + | ((Input(tc,pat,p,occ) as proc ,name_params,occs, facts, cache_info)::rest_subprocess) -> + debug_print ("Trying Input on process " ^ (string_of_int n)); + begin + match cache_info with + OutputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have output/get info for an input!" + | InputInfo(tc_list, oldpub, tc', name_params', new_occs, l) -> + let tc_list' = update_term_list oldpub cur_state.public tc_list in + if (!Param.active_attacker) && (tc_list' = []) then + begin + (* The channel is public and the attacker is active, try (Res In) *) + debug_print "Input on public channel (cached)"; + let current_cache_list = ref [] in + let rec do_l = function + [] -> + let seen_list' = (proc ,name_params,occs, facts, + InputInfo(tc_list', cur_state.public, tc', name_params', new_occs, !current_cache_list)) :: seen_list in + find_in_out next_f cur_state (n+1) seen_list' rest_subprocess + | (mess_term, public_status)::l -> + try + do_res_in cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_status next_f + with Unify -> + do_l l + in + do_l l + end + else + begin + (* The channel is private or the attacker is passive, try (Res I/O) *) + debug_print "Input on private channel (cached); trying asynchronous output"; + let current_cache_list = ref [] in + let public_channel = (not (!Param.active_attacker)) && (tc_list' = []) in + let rec do_l = function + [] -> + let seen_list' = (proc ,name_params,occs, facts, + InputInfo(tc_list', cur_state.public, tc', name_params', new_occs, !current_cache_list)) :: seen_list in + begin + debug_print "Input on private channel (cached); trying synchronous output"; + try + do_sync_res_io cur_state seen_list rest_subprocess n name_params' new_occs facts tc pat p tc' public_channel next_f + with Unify | No_result -> + find_in_out next_f cur_state (n+1) seen_list' rest_subprocess + end + | (mess_term,_)::l -> + try + do_async_res_io cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_channel next_f + with Unify -> + do_l l + in + do_l l + end + | Nothing -> + let seen_list' = ref ((proc, name_params, occs, facts, cache_info) :: seen_list) in + try + auto_cleanup (fun () -> + let (tc', name_params') = term_evaluation_name_params (OInChannel(occ)) tc name_params in + let m = Reduction_helper.new_var_pat1 pat in + let new_occs = (InputTag occ) :: occs in + let fact = Pred(Param.get_pred(Mess(cur_state.current_phase, m.btype)), [tc'; Var m]) in + let tc_list = decompose_term tc' in + let tc_list' = remove_first_in_public cur_state.public tc_list in + if (!Param.active_attacker) && (tc_list' = []) then + begin + (* Input on a public channel, and the attacker is active: apply (Res In) *) + debug_print "Input on public channel"; + let current_cache_list = ref [] in + try + find_io_rule (function + [mess_term] -> + do_res_in cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term None next_f + | _ -> Parsing_helper.internal_error "input case; reduction.ml" + ) new_occs (fact :: facts) name_params' [Var m] cur_state.io_rule + with Unify -> + seen_list' := (proc, name_params, occs, facts, + InputInfo([], [], tc', name_params', new_occs, !current_cache_list)) :: seen_list; + raise Unify + end + else + begin + (* Input on a private channel or the attacker is passive: apply (Res I/O) + First try an asynchronous output, with a corresponding clause in the tree *) + debug_print "Input on private channel; trying asynchronous output"; + let current_cache_list = ref [] in + let public_channel = (not (!Param.active_attacker)) && (tc_list' = []) in + try + find_io_rule (function + [mess_term] -> + do_async_res_io cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_channel next_f + | _ -> Parsing_helper.internal_error "input case; reduction.ml" + ) new_occs (fact :: facts) name_params' [Var m] cur_state.io_rule + with Unify -> + seen_list' := (proc, name_params,occs, facts, + InputInfo(tc_list', cur_state.public, tc', name_params', new_occs, !current_cache_list)) :: seen_list; + (* Try a synchronous output *) + debug_print "Input on private channel; trying synchronous output"; + do_sync_res_io cur_state seen_list rest_subprocess n name_params' new_occs facts tc pat p tc' public_channel next_f + end + ) + with Unify | No_result -> + find_in_out next_f cur_state (n+1) (!seen_list') rest_subprocess + end + | ((Get(pat,t,p,p_else, occ) as proc ,name_params,occs, facts, cache_info)::rest_subprocess) -> + (* TO DO optimize the case with else branch *) + debug_print ("Trying Get on process " ^ (string_of_int n)); + begin + match cache_info with + OutputInfo _ | InputInfo _ -> Parsing_helper.internal_error "Should not have input/output info for a get!" + | GetInfo(old_tables, l) -> + let new_occs = (GetTag occ) :: occs in + let current_cache_list = ref [] in + let rec do_l = function + [] -> + let seen_list' = (proc ,name_params,occs, facts, + GetInfo(cur_state.tables, !current_cache_list)) :: seen_list in + find_in_out next_f cur_state (n+1) seen_list' rest_subprocess + | mess_term::l -> + try + do_res_get cur_state seen_list rest_subprocess n current_cache_list name_params new_occs facts pat t p mess_term old_tables next_f + with Unify -> + do_l l + in + do_l l + | Nothing -> + let seen_list' = ref ((proc, name_params, occs, facts, cache_info) :: seen_list) in + try + auto_cleanup (fun () -> + let m = Reduction_helper.new_var_pat1 pat in + let new_occs = (GetTag occ) :: occs in + let fact = Pred(Param.get_pred(Table(cur_state.current_phase)), [Var m]) in + let current_cache_list = ref [] in + try + find_io_rule (function + [mess_term] -> + do_res_get cur_state seen_list rest_subprocess n current_cache_list name_params new_occs facts pat t p mess_term [] next_f + | _ -> Parsing_helper.internal_error "get case; reduction.ml" + ) new_occs (fact :: facts) name_params [Var m] cur_state.io_rule + with Unify -> + if p_else != Nil then + (* See if we should take the else branch if present *) + begin + try + let new_occs = (GetTagElse occ) :: occs in + find_io_rule (function + [] -> + (* We should take the else branch, since a clause uses that branch *) + debug_print "Get: else branch should be taken"; + if List.exists (fun mess_term -> + try + auto_cleanup (fun () -> + (* we check that the pattern pat matches and t evaluates to true *) + match_pattern pat mess_term; + let t' = term_evaluation_fail t in + equal_terms_modulo t' Terms.true_term) + with Unify -> false) cur_state.tables + then + begin + debug_print "Get: an element of the table matches, cannot take the else branch, backtracking"; + (* The Get process is blocked forever: the else branch should be taken, + but the table contains an element that prevents it. Since elements + are only added to tables, this situation will not change. + So I backtrack. *) + has_backtrack_get := true; + raise Backtrack_get + end + else + begin + debug_print "Get: taking the else branch"; + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p_else, name_params, new_occs, facts, Nothing) :: rest_subprocess); + comment = RGet2(n); + previous_state = Some cur_state } n + end + | _ -> Parsing_helper.internal_error "get else case; reduction_bipro.ml" + ) new_occs facts name_params [] cur_state.io_rule + with Unify -> + seen_list' := (proc, name_params, occs, facts, + GetInfo(cur_state.tables, !current_cache_list)) :: seen_list; + raise Unify + end + else + begin + seen_list' := (proc, name_params, occs, facts, + GetInfo(cur_state.tables, !current_cache_list)) :: seen_list; + raise Unify + end + ) + with Unify | No_result -> + find_in_out next_f cur_state (n+1) (!seen_list') rest_subprocess + | Backtrack_get -> raise No_result + end + | ((Insert(t,p,occ), name_params, occs, facts, cache_info) as sub_proc)::rest_subprocess -> + debug_print "Doing Insert"; + begin + let new_occs = (InsertTag occ) :: occs in + let new_element_inserted = ref false in + try + auto_cleanup (fun () -> + let t' = term_evaluation_fail t in + let already_in = List.exists (equal_terms_modulo t') cur_state.tables in + new_element_inserted := not already_in; + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p, name_params, new_occs, facts, Nothing) :: rest_subprocess); + tables = if already_in then cur_state.tables else t'::cur_state.tables; + comment = RInsert1(n, t); + previous_state = Some cur_state } n + ) + with Unify -> + Parsing_helper.internal_error "Insert: Unify/FailOneSideOnly should have been detected on the first try of that insert" + | No_result -> + (* The attack reconstruction failed after doing the insert. + Try not doing it, in case that allows executing the else branch of a Get. *) + if (!has_backtrack_get) && (!new_element_inserted) then + find_in_out next_f cur_state (n+1) (sub_proc :: seen_list) rest_subprocess + else + raise No_result + end + | sub_proc::rest_subprocess -> + find_in_out next_f cur_state (n+1) (sub_proc :: seen_list) rest_subprocess + +(* Handle phases *) + +let rec extract_phase n = function + [] -> [] + | (Phase(n',p,occ),name_params,occs, facts, cache_info)::r -> + let r' = extract_phase n r in + if n = n' then (p,name_params,occs, facts, Nothing)::r' else + if n<n' then (Phase(n',p,occ),name_params,occs, facts, Nothing)::r' else r' + | _::r -> extract_phase n r + +let rec find_phase next_f cur_state n = function + [] -> + if !made_forward_step then + begin + incr failed_traces; + made_forward_step := false + end; + (* Useful for debugging *) + if !debug_backtracking then + begin + ignore (Display.Text.display_reduc_state Display.Text.display_term2 true cur_state); + print_string "Blocked. Backtracking...\n" + end + else + debug_print "Backtracking"; + raise No_result + | (Phase(n,p,_),name_params,occs, facts, cache_info)::rest_subprocess -> + debug_print "Doing Phase"; + if n <= cur_state.current_phase then + Parsing_helper.user_error "Phases should be in increasing order.\n"; + made_forward_step := true; + begin + try + (* Do transition to phase n *) + let cur_state' = + { cur_state with + subprocess = extract_phase n cur_state.subprocess; + previous_state = Some cur_state; + current_phase = n; + comment = RPhase(n) } + in + (* Reclose public, since new function symbols may become applicable *) + let cur_state'' = add_public_list { cur_state' with public = [] } cur_state'.public in + normal_state_all next_f false cur_state'' + with No_result -> + find_phase next_f cur_state (n+1) rest_subprocess + end + | _::rest_subprocess -> find_phase next_f cur_state (n+1) rest_subprocess + +(* Put all reductions together *) + +let rec reduction_backtrack state = + try + find_in_out reduction_backtrack state 0 [] state.subprocess + with No_result -> + find_phase reduction_backtrack state 0 state.subprocess + + +(* This exception is local to reduction_nobacktrack *) +exception Reduced of term reduc_state + +let rec reduction_nobacktrack state = + try + try + find_in_out (fun state -> raise (Reduced state)) state 0 [] state.subprocess + with No_result -> + find_phase (fun state -> raise (Reduced state)) state 0 state.subprocess + with Reduced one_red_state -> + display_trace one_red_state; + Param.display_init_state := false; + reduction_nobacktrack { one_red_state with previous_state = None } + +let reduction state = + if !Param.trace_backtracking then + reduction_backtrack state + else + reduction_nobacktrack state + +(* Build the goal for weak secrets *) + +let rec analyze_weak_secr_tree_rec accu weaksecrets tree = + match tree.desc with + FRule(_, lbl, _, hyp) -> + begin + match lbl with + Apply(f,{ p_info = [AttackerGuess _]}) -> + FunApp(f, + List.map (analyze_weak_secr_tree_rec accu weaksecrets) hyp) + | WeakSecr -> + begin + match tree.thefact with + Pred({ p_info = [AttackerGuess _]}, [t1;t2]) -> + weaksecrets := Some (rev_name_subst t1,rev_name_subst t2); + rev_name_subst t2 + | _ -> Parsing_helper.internal_error "Unexpected WeakSecr clause in the derivation for weaksecret" + end + | PhaseChange -> + begin + match tree.thefact with + Pred({ p_info = [AttackerGuess _] }, [t1;t2]) -> + let v = Terms.new_var "v" (Terms.get_term_type t1) in + let t1' = rev_name_subst t1 in + accu := (t1', v) :: (!accu); + Var v + | _ -> Parsing_helper.internal_error "Unexpected WeakSecr clause in the derivation for weaksecret" + end + | _ -> Parsing_helper.internal_error "Unexpected clause in derivation for weaksecret" + end + | FEquation t -> analyze_weak_secr_tree_rec accu weaksecrets t + | FRemovedWithProof t -> analyze_weak_secr_tree_rec accu weaksecrets t + | FHAny | FEmpty -> Parsing_helper.internal_error "Unexpected derivation for weaksecret" + + +let analyze_weak_secret_tree accu weaksecrets tree = + match tree.desc with + FRule(_, lbl, _, hyp) -> + begin + let l = List.map (analyze_weak_secr_tree_rec accu weaksecrets) hyp in + match lbl, l with + Rfail({ p_info = [AttackerGuess _] }), [t] -> + FailTest(t) + | TestEq({ p_info = [AttackerGuess _] } ), [t1;t2] -> + EqTest(t1,t2) + | _ -> Parsing_helper.internal_error "Unexpected clause concluding the derivation for weaksecret" + end + | _ -> Parsing_helper.internal_error "Unexpected derivation for weaksecret" + + +(* Build the goal for non-interference *) + +let analyze_non_interf_tree tree = + match tree.desc with + FRule(_, lbl, _, hyp) -> + begin + match lbl, hyp with + ProcessRule(hyp_tags, name_params), hyp -> + begin + match hyp_tags with + TestUnifTag occ :: InputTag occ' :: _ when occ == occ' -> + (* Pattern-matching test in an input *) + let mess_term = + match hyp with + _ (* testunif fact *) :: { thefact = Pred(_, [t]) } (* att fact *) :: _ -> rev_name_subst t + | _ (* testunif fact *) :: { thefact = Pred(_, [_;t]) } (* mess fact *) :: _ -> rev_name_subst t + | _ -> Parsing_helper.internal_error "Unexpected derivation for noninterf: input with fact other than att/mess" + in + InputProcessTest(hyp_tags, rev_name_subst_list name_params, mess_term, ref None) + | _ -> + ProcessTest(hyp_tags, rev_name_subst_list name_params, ref None) + end + | TestApply(f, p), _(*testunif fact*)::hyp -> + ApplyTest(f, List.map (function + { thefact = Pred(_, [t]) } -> rev_name_subst t + | _ -> Parsing_helper.internal_error "Unexpected derivation for noninterf") hyp) + | TestComm(pi,po), [{thefact = Pred(_,[tin])}; {thefact = Pred(_,[tout])}; _(* testunif fact *)] -> + CommTest(rev_name_subst tin, rev_name_subst tout, ref None) + | InputSecr(p), [{thefact = Pred(_,[t])}] -> + InputTest(rev_name_subst t, ref None) + | OutputSecr(p), [{thefact = Pred(_,[t])}] -> + OutputTest(rev_name_subst t, ref None) + | TestEq(p), [{thefact = Pred(_,[t1])};{thefact = Pred(_,[t2])};_(* testunif fact *)] -> + NIEqTest(rev_name_subst t1, rev_name_subst t2) + | _ -> Parsing_helper.internal_error "Unexpected clause concluding the derivation for noninterf" + end + | _ -> Parsing_helper.internal_error "Unexpected derivation for noninterf" + +(* For injectivity *) + + +(* Copy the history + +let rec copy_tree { desc = d; thefact = f} = + { desc = copy_tree_desc d; thefact = copy_fact2 f } + +and copy_tree_desc = function + FHAny -> FHAny + | FEmpty -> FEmpty + | FRemovedWithProof t -> FRemovedWithProof t + | FRule(n, descr, constra, l) -> FRule(n, copy_descr descr, List.map copy_constra2 constra, List.map copy_tree l) + | FEquation(t) -> FEquation(copy_tree t) + +and copy_descr = function + ProcessRule(hypspec,name_params) -> + ProcessRule(hypspec, List.map copy_term2 name_params) + | x -> x +*) + +let new_sid() = + let cat = Name { prev_inputs = None; prev_inputs_meaning = [] } in + { f_name = Terms.fresh_id "sid"; + f_type = [], Param.sid_type; + f_cat = cat; + f_initial_cat = cat; + f_private = false; + f_options = 0 + } + +let add_sid (v,f) l = + if not (List.exists (fun (v',f') -> f == f') (!l)) then l := (v,f) :: (!l) + +let rec get_sid = function + Var ({ link = TLink (FunApp(sid,[])) } as v) -> + (v, sid) + | Var { link = TLink t } -> get_sid t + | t -> + Display.Text.display_term t; + begin + match t with + Var v -> + begin + print_string " Var "; + match v.link with + NoLink -> print_string " NoLink " + | TLink _ -> print_string " TLink " + | VLink _ -> print_string " VLink " + | TLink2 _ -> print_string " TLink2 " + | _ -> print_string " other link " + end + | FunApp _ -> print_string " FunApp " + end; + Parsing_helper.internal_error "Constant session ids should be function applications with no arguments stored as links of variables" + +let rec has_sid_term sid = function + Var { link = TLink t } -> has_sid_term sid t + | Var _ -> false + | FunApp(f,l) -> + (f == sid) || (List.exists (has_sid_term sid) l) + +let find_sid_fact end_sid no_dup_begin_sids = function + Pred(_,l) -> () + | Out(t,l) -> + if not (List.exists (fun (_,t') -> has_sid_term end_sid t') l) then + List.iter (fun (v,t') -> + if v.sname = "@sid" then add_sid (get_sid t') no_dup_begin_sids) l + +let rec find_sid_tree end_sid all_sids no_dup_begin_sids t = + find_sid_fact end_sid no_dup_begin_sids t.thefact; + match t.desc with + FHAny | FEmpty -> () + | FRemovedWithProof _ -> () + | FEquation t -> find_sid_tree end_sid all_sids no_dup_begin_sids t + | FRule(_,tags,constra,tl) -> + List.iter (find_sid_tree end_sid all_sids no_dup_begin_sids) tl; + match tags with + ProcessRule (hsl,nl) -> + (* find session ids in nl by looking for corresponding elements of hsl: + if hsl contains ReplTag(_,count_params), then the count_params-th element of nlrev is a session id. *) + let nlrev = List.rev nl in + List.iter (function + ReplTag(_,count_params) -> add_sid (get_sid (List.nth nlrev count_params)) all_sids + | _ -> ()) hsl + | _ -> () + + + +let build_inj_state state tree = + let (v_end_sid,end_sid) = + match tree.thefact with + Pred(pr,[sid;t']) when pr == Param.end_pred_inj -> get_sid sid + | _ -> Parsing_helper.internal_error "In inj_mode, the fact should be an injective end event" + in + (* Collects session ids. + all_sids will contain all session ids + no_dup_begin_sids will contain the session ids of begin facts that must not be duplicated, + that is, those whose environment does not contain the session id of the end event. + *) + let all_sids = ref [(v_end_sid,end_sid)] in + let no_dup_begin_sids = ref [] in + find_sid_tree end_sid all_sids no_dup_begin_sids tree; +(* + print_string "Session ids: "; Display.Text.display_list (fun (v,f) -> Display.Text.display_function_name f) ", " (!all_sids); print_newline(); + print_string "No dup begin session ids: "; Display.Text.display_list (fun (v,f) -> Display.Text.display_function_name f) ", " (!no_dup_begin_sids); print_newline(); +*) + (* We rename the session ids that are in all_sids but not in no_dup_begin_sids *) + let no_dup_begin_sids = List.map snd (!no_dup_begin_sids) in + let sids_to_rename = List.filter (fun (v,f) -> not (List.memq f no_dup_begin_sids)) (!all_sids) in + List.iter (fun (v,_) -> v.link <- TLink (FunApp(new_sid(),[]))) sids_to_rename; + (* Add the rules generated from the renamed derivation tree *) + let state' = init_rule state tree in + { state' with + goal = InjGoal (rev_name_subst_fact tree.thefact, FunApp(end_sid,[]), 0) } + +(* For injectivity: check that a trace really falsifies a query q + Currently, this test is sound but very basic: it just checks + that some injective "begin" event is executed once (while the "end" event + has been executed twice by the success condition of the trace). + The events are counted by the root function symbol, without checking + their arguments. + TO DO there may be room for improvement here. + *) + +let rec count_events event_table state = + begin + match state.comment with + RBegin1(_,t) | RBegin2(_,t) | REnd(_,t) -> + begin + match t with + FunApp(f, _) -> + begin + try + let count = List.assq f (!event_table) in + incr count + with Not_found -> + event_table := (f, ref 1) :: (!event_table) + end + | _ -> Parsing_helper.internal_error "Events should start with a function symbol" + end + | _ -> () + end; + match state.previous_state with + None -> () + | Some prev_state -> count_events event_table prev_state + +let get_count event_table f = + try + !(List.assq f (!event_table)) + with Not_found -> + 0 + +let check_query_falsified q final_state = + let event_table = ref [] in + count_events event_table final_state; + match q with + Before(QSEvent(inj,FunApp(fend,_)),hyp) when inj == true -> + (* Check that the "end" event is executed at least twice; + this should always be true by the success condition of the trace *) + if get_count event_table fend < 2 then + Parsing_helper.internal_error "End event executed at most once in injective trace!"; + (* Check that in each "or" branch of the hypothesis, at least one + injective event is executed at most once. + Then the query is false *) + List.for_all (List.exists (function + QEvent(QSEvent(inj, FunApp(fbegin,_))) when inj == true -> + get_count event_table fbegin < 2 + | _ -> false)) hyp + | _ -> + Parsing_helper.internal_error "Unexpected injective query" + +(* Main trace reconstruction function *) + +let build_trace state = + if !debug_find_io_rule then + begin + auto_cleanup (fun () -> + Display.Text.print_line "Available rules:"; + List.iter display_rule state.io_rule) + end; + let final_state = normal_state reduction true state 0 in + display_trace final_state; + if !Param.html_output then + Display.Html.display_goal Display.Html.display_term2 noninterftest_to_string final_state.goal final_state.hyp_not_matched + else + Display.Text.display_goal Display.Text.display_term2 noninterftest_to_string final_state.goal final_state.hyp_not_matched; + (final_state, final_state.hyp_not_matched = []) + + +let do_reduction inj_mode tree = +(* Profile.start(); *) + made_forward_step := true; + failed_traces := 0; + let public_init = public_build !Param.freenames in + public_free := public_init; + Param.display_init_state := true; + init_name_mapping (!Param.freenames); + let links = ref [] in + if inj_mode == None then + close_tree tree + else + close_tree_collect_links links tree; + (* The variable links is used to restore the links destroyed by + rev_name_subst, only when inj_mode = Some _, so we avoid computing + it when inj_mode = None *) + let goal = + if !Param.weaksecret != None then + let accu = ref [] in + let weaksecrets = ref None in + let compute_term = analyze_weak_secret_tree accu weaksecrets tree in + match !weaksecrets with + None -> Parsing_helper.internal_error "weak secret clause should appear" + | Some (w1,w2) -> + WeakSecrGoal(!accu, compute_term, w1, w2) + else if !Param.non_interference then + NonInterfGoal(analyze_non_interf_tree tree) + else + Fact(rev_name_subst_fact tree.thefact) + in + let init_state = + { goal = goal; + subprocess = [(!(main_process), [],[],[],Nothing)]; + public = public_init; + tables = []; + io_rule = []; + prepared_attacker_rule = []; + previous_state = None; + hyp_not_matched = []; + current_phase = 0; + comment = RInit } + in + let first_trace_found = ref false in + let res = + begin + try + if !Param.html_output then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.LangHtml.openfile ((!Param.html_dir) ^ "/trace" ^ qs ^ ".html") ("ProVerif: trace for query " ^ qs); + Display.Html.print_string "<H1>Trace</H1>\n" + end; + let state = init_rule init_state tree in + (* Close initially the set public *) + let state = add_public_list { state with public = [] } state.public in + (* print_string ((string_of_int (List.length state.io_rule)) ^ " io rules"); + print_newline(); *) + begin + match inj_mode with + None -> + let r = snd (build_trace state) in + if !Param.html_output then + begin + Display.LangHtml.close(); + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"trace" ^ qs ^ ".html\">Trace</A><br>\n") + end; + r + | Some q -> + ignore (build_trace state); + if !Param.html_output then + begin + Display.LangHtml.close(); + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"trace" ^ qs ^ ".html\">Trace</A><br>\n") + end; + first_trace_found := true; + Display.Text.print_line "I am now trying to reconstruct a trace that falsifies injectivity."; + if !Param.html_output then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.LangHtml.openfile ((!Param.html_dir) ^ "/traceinj" ^ qs ^ ".html") ("ProVerif: trace for query " ^ qs ^ " (injectivity)"); + Display.Html.print_string "<H1>Trace that contradicts injectivity</H1>" + end; + (* Restore the links destroyed by rev_name_subst *) + List.iter (fun (v,l) -> v.link <- l) (!links); + let state_inj = build_inj_state state tree in + let (final_state, r) = build_trace state_inj in + (* When the trace is found, and it really falsifies the query q, return true. *) + if !Param.html_output then + begin + Display.LangHtml.close(); + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"traceinj" ^ qs ^ ".html\">Trace that contradicts injectivity</A><br>\n") + end; + if r then check_query_falsified q final_state else false + end + with No_result -> + if not (!Param.trace_backtracking) then + Display.Def.print_line "Blocked!"; + if !first_trace_found then + begin + (* In the injectivity case, I have found a trace that corresponds to the + derivation, but not a trace that really contradicts injectivity. *) + if !Param.html_output then + begin + Display.LangHtml.close(); + if not (!Param.trace_backtracking) then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"traceinj" ^ qs ^ ".html\">Unfinished trace for contrading injectivity</A><br>\n") + end; + Display.Html.print_line "Could not find a trace that contradicts injectivity." + end; + Display.Text.print_line "Could not find a trace that contradicts injectivity."; + end + else + begin + if !Param.html_output then + begin + Display.LangHtml.close(); + if not (!Param.trace_backtracking) then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"trace" ^ qs ^ ".html\">Unfinished trace</A><br>\n") + end; + Display.Html.print_line "Could not find a trace corresponding to this derivation." + end; + Display.Text.print_line "Could not find a trace corresponding to this derivation."; + end; + false + end + in +(* print_endline ("Failed " ^ (string_of_int (!failed_traces)) ^ " traces."); *) + Terms.cleanup (); +(* Profile.stop(); *) + res + +(* Heuristic to find traces more often, especially with complex protocols: + we unify rules of the derivation tree when possible + Note that success is not guaranteed; however, when the heuristic fails, + the derivation does not correspond to a trace. + +This heuristic can break inequality constraints. +We recheck them after modifying the derivation tree. +I also recheck that the derivation still contradicts the security property after unification ! +For non-interference or weak secrets, that's ok: we still have a +derivation of "bad". +For correspondences, that may be wrong, because unification may +make arguments of some events equal, for instance. *) + +(* First, get_clause_from_derivation rebuilds a Horn clause from a derivation *) + +let get_clause_from_derivation tree = + let concl = tree.thefact in + let hyp = ref [] in + let constra = ref [] in + + let rec rebuild_hyp tree = + match tree.desc with + FEmpty -> + if not (List.exists (Termslinks.equal_facts_with_links tree.thefact) (!hyp)) then + hyp := tree.thefact :: (!hyp) + | FHAny | FRemovedWithProof _ -> () + | FEquation son -> rebuild_hyp son + | FRule(_, _, rconstra, sons) -> + List.iter rebuild_hyp sons; + constra := rconstra @ (!constra) + in + rebuild_hyp tree; + + let (hyp', concl', constra') = + Terms.auto_cleanup (fun () -> + (List.map Terms.copy_fact2 (!hyp), + Terms.copy_fact2 concl, + List.map Terms.copy_constra2 (!constra))) + in + let constra'' = + try + Terms.auto_cleanup(fun () -> + TermsEq.simplify_constra_list (concl'::hyp') constra') + with TermsEq.FalseConstraint -> + Parsing_helper.internal_error "False constraints should have been excluded by revise_tree" + in + let hist = Rule(-1, LblNone, hyp', concl', constra'') in + (hyp', concl', hist, constra'') + +(* Second, revise_tree is the function that checks that inequality constraints still hold and that the obtained derivation still contradicts the query *) + +exception Loop + +let rec find_fact f t = + if + (match t.desc with + FHAny | FEmpty | FRemovedWithProof _ -> false + | _ -> true) && (equal_facts_modulo f t.thefact) then t else + match t.desc with + FEquation son -> find_fact f son + | FRule(_,_,_,sons) -> find_fact_list f sons + | _ -> raise Not_found + +and find_fact_list f = function + [] -> raise Not_found + | a::l -> + try + find_fact f a + with Not_found -> + find_fact_list f l + + +let revise_tree recheck tree = + let rec revise_tree_rec no_loop t = + if List.memq t no_loop then + raise Loop + else + { desc = + begin + match t.desc with + FHAny | FEmpty -> + begin + match t.thefact with + Pred(p, [t']) when (match follow_link t' with Var v -> true | _ -> false) -> t.desc + | Out _ -> t.desc (* Out facts cannot be proved anyway *) + | _ -> + (* When unification has lead to instantiating a fact that need not be proved before, try to find a proof for it. *) + try + (revise_tree_rec (t::no_loop) (find_fact t.thefact tree)).desc + with Not_found | Loop -> FEmpty + end + | FRule(n, tags, constra, sons) -> + if constra != [] then + begin + try + let constra' = Terms.auto_cleanup (fun () -> + List.map Terms.copy_constra2 constra) in + Terms.auto_cleanup(fun () -> + ignore (TermsEq.simplify_constra_list [] constra')) + with TermsEq.FalseConstraint -> + Display.Def.print_line "Unification made an inequality become false."; + Display.Def.print_line "Trying with the initial derivation tree instead."; + if !Param.html_output then + Display.LangHtml.close(); + raise TermsEq.FalseConstraint + end; + FRule(n, tags, constra, List.map (revise_tree_rec no_loop) sons) + | FRemovedWithProof t -> FRemovedWithProof t + | FEquation son -> FEquation(revise_tree_rec no_loop son) + end; + thefact = t.thefact } + in + let tree' = revise_tree_rec [] tree in + match recheck with + None -> tree' + | Some recheck_fun -> + let cl' = get_clause_from_derivation tree' in + if !Param.html_output then + begin + Display.Html.print_string "The clause after unifyDerivation is "; + Display.Html.display_rule cl' + end + else + begin + Display.Text.print_string "The clause after unifyDerivation is "; + Display.Text.display_rule cl' + end; + if Terms.auto_cleanup (fun () -> recheck_fun cl') then + begin + (* cl' no longer contradicts the query *) + Display.Def.print_line "This clause does not correspond to an attack against the query; using the derivation before unifyDerivation."; + if !Param.html_output then + Display.LangHtml.close(); + raise TermsEq.FalseConstraint + end + else + begin + Display.Def.print_line "This clause still contradicts the query."; + if !Param.html_output then + Display.LangHtml.close(); + tree' + end + +(* simplify_tree unifies facts with same session identifier *) + +(* "first" is true when this is the first call to simplify_tree. + In this case, if we find no unification to do, we do not need to call + revise_tree, since the derivation has not been modified at all + + "recheck" is either None, or Some recheck_fun, where recheck_fun is + a function that takes a clause as argument and returns false when + the clause contradicts the current query, true when it does not + contradict it. When recheck_fun returns true, we should use the old + derivation rather than the one obtained after unifyDerivation, + because the new one does not corresponds to an attack against the + query. + *) + +module HashFactId = + struct + + type factIdElem = + HypSpec of hypspec + | Term of term + + type t = + { hash : int; + factId : factIdElem list } + + let equalFactIdElem a b = + match (a,b) with + HypSpec h, HypSpec h' -> h = h' + | Term t, Term t' -> Termslinks.equal_terms_with_links t t' + | _ -> false + + let equal a b = + (List.length a.factId == List.length b.factId) && + (List.for_all2 equalFactIdElem a.factId b.factId) + + type skel_term = + SVar of int + | SFun of string * skel_term list + + type skel_factIdElem = + SHypSpec of hypspec + | STerm of skel_term + + let rec skeleton_term = function + Var b -> + begin + match b.link with + TLink t -> skeleton_term t + | NoLink -> SVar(b.vname) + | _ -> Parsing_helper.internal_error "unexpected link in skeleton_term" + end + | FunApp(f,l) -> + match f.f_cat with + Name _ -> SFun(f.f_name,[]) + | _ -> SFun(f.f_name, List.map skeleton_term l) + + let skeleton_factIdElem = function + HypSpec x -> SHypSpec x + | Term t -> STerm(skeleton_term t) + + let hash a = a.hash + + (* build a HashFactId.t from a fact id *) + + let build fid = { hash = Hashtbl.hash(List.map skeleton_factIdElem fid); + factId = fid } + + end + +module FactHashtbl = Hashtbl.Make(HashFactId) + +let rec simplify_tree first recheck next_f tree = + let unif_to_do_left = ref [] in + let unif_to_do_right = ref [] in + let fact_hashtbl = FactHashtbl.create 7 in + let done_unif = ref false in + + let unif t1 t2 v = + try + Terms.occur_check v t2; + if !Param.html_output then + begin + Display.Html.print_string "Unified "; + Display.Html.WithLinks.term t1; + Display.Html.print_string " with "; + Display.Html.WithLinks.term t2; + Display.Html.newline() + end + else + begin + Display.Text.print_string "Unified "; + Display.Text.WithLinks.term t1; + Display.Text.print_string " with "; + Display.Text.WithLinks.term t2; + Display.Text.newline() + end; + Terms.link v (TLink t2); + done_unif := true + with Unify -> + (* When the occur check fails, it might succeed + after rewriting the terms, so try that *) + unif_to_do_left := t1 :: (!unif_to_do_left); + unif_to_do_right := t2 :: (!unif_to_do_right) + + in + + let rec add_unif_term t1 t2 = + match t1, t2 with + FunApp(f1, l1), FunApp(f2,l2) when TermsEq.f_has_no_eq f1 && TermsEq.f_has_no_eq f2 -> + if f1 == f2 then List.iter2 add_unif_term l1 l2 + (* When f1 != f2, unification fails; I display no message. *) + | Var v, Var v' when v == v' -> () + | Var v, _ -> + begin + match v.link with + NoLink -> + begin + match t2 with + Var {link = TLink t2'} -> add_unif_term t1 t2' + | Var v' when v.unfailing -> + unif t1 t2 v + | Var v' when v'.unfailing -> + unif t2 t1 v' + | FunApp (f_symb,_) when f_symb.f_cat = Failure && v.unfailing = false -> () + (* Unification fails; I display no message *) + | _ -> unif t1 t2 v + end + | TLink t1' -> add_unif_term t1' t2 + | _ -> Parsing_helper.internal_error "Unexpected link in add_unif_term 1" + end + | FunApp(f_symb,_), Var v -> + begin + match v.link with + NoLink -> + if v.unfailing = false && f_symb.f_cat = Failure + then () (* Unification fails; I display no message *) + else unif t2 t1 v + | TLink t2' -> add_unif_term t1 t2' + | _ -> Parsing_helper.internal_error "Unexpected link in add_unif_term 2" + end + | _ -> + (* It is important to check equality *modulo the equational + theory* here. Otherwise, unify_modulo may make the two terms equal + modulo the theory but still syntactically different, which would + result in an endless iteration of unifyDerivation. *) + if not (equal_open_terms_modulo t1 t2) then + begin + unif_to_do_left := t1 :: (!unif_to_do_left); + unif_to_do_right := t2 :: (!unif_to_do_right) + end + in + + let add_unif_fact f1 f2 = + if (f1 != f2) then + match f1, f2 with + Pred(p1,l1), Pred(p2,l2) when p1 == p2 -> + List.iter2 add_unif_term l1 l2 + | Out(t1,_),Out(t2,_) -> + add_unif_term t1 t2 + | _ -> + Display.Def.print_line "Trying to unify incompatible facts in unifyDerivation; skipping this impossible unification."; + + in + + let rec check_coherent factId (concl, hyp_spec, name_params, sons) = + match hyp_spec with + [] -> () + | h1::l1 -> + let factId' = (HashFactId.HypSpec h1) :: factId in + match h1 with + ReplTag (occ,count_params) -> + (* the session identifier is part of the fact id *) + check_coherent ((HashFactId.Term (List.nth name_params count_params)) :: factId') + (concl, l1, name_params, sons) + | OutputTag occ | InsertTag occ | InputPTag occ | OutputPTag occ | BeginEvent occ -> + if l1 == [] then + (* I'm reaching the conclusion *) + let fact_id = HashFactId.build factId' in + try + let concl' = FactHashtbl.find fact_hashtbl fact_id in + add_unif_fact concl concl' + with Not_found -> + FactHashtbl.add fact_hashtbl fact_id concl + else + check_coherent factId' (concl, l1, name_params, sons) + | LetTag occ | TestTag occ | LetFilterTag occ | TestUnifTag2 occ | GetTagElse occ -> + check_coherent factId' (concl, l1, name_params, sons) + | InputTag _ | GetTag _ | BeginFact | LetFilterFact -> + let f = (List.hd sons).thefact in + let fact_id = HashFactId.build factId' in + begin + try + let f' = FactHashtbl.find fact_hashtbl fact_id in + add_unif_fact f f' + with Not_found -> + FactHashtbl.add fact_hashtbl fact_id f + end; + check_coherent factId' (concl, l1, name_params, List.tl sons) + | TestUnifTag _ -> + check_coherent factId' (concl, l1, name_params, List.tl sons) + in + + let rec simplify_tree1 t = + match t.desc with + FRule(_, ProcessRule(hyp_spec, name_params), constra, sons) -> + check_coherent [] (t.thefact, List.rev hyp_spec, List.rev name_params, List.rev sons); + List.iter simplify_tree1 sons + | FRule(_,_,_,sons) -> + List.iter simplify_tree1 sons + | FEquation son -> simplify_tree1 son + | FHAny -> + begin + match t.thefact with + Pred({p_info = [AttackerGuess _]}, [t1;t2]) -> + if t1 != t2 then add_unif_term t1 t2 + | _ -> () + end + | _ -> () + in + + simplify_tree1 tree; +(* + let n = List.length (!coh_tuples) in + let nf = float_of_int n in + let bf = float_of_int (!Param.unify_derivation_bound) in + let n_to_do = ref + (if !Param.unify_derivation_bound == 0 then -1 else + if nf *. (nf -. 1.) /. 2. > bf then + let n_to_do = int_of_float (nf -. sqrt(nf *. nf -. 2. *. bf) +. 1.) in + print_string ((string_of_int n) ^ " tuples to unify, so " ^ (string_of_float (nf *. (nf -. 1.) /. 2.)) ^ " calls to check_coherent!\n"); + print_string ("Considering only the first " ^ (string_of_int n_to_do) ^ " tuples for speed."); + print_newline(); + n_to_do + else -1) + in + if (!n_to_do == -1) && (n > 1000) then + begin + print_string ((string_of_int n) ^ " tuples to unify, so " ^ (string_of_float (nf *. (nf -. 1.) /. 2.)) ^ " calls to check_coherent!"); + print_newline() + end; + let rec check_coherent_list = function + [] -> () + | (tup1::rest) -> + decr n_to_do; + if (!n_to_do) = 0 then () else + begin + List.iter (check_coherent tup1) rest; + check_coherent_list rest + end + in + check_coherent_list (!coh_tuples); +*) + if (!unif_to_do_left) == [] then + if !done_unif then + begin + Display.Def.print_line "Iterating unifyDerivation."; + simplify_tree false recheck next_f tree + end + else if first then + begin + (* print_string "Nothing to unify.\n"; *) + if !Param.html_output then + Display.LangHtml.close(); + next_f tree + end + else + begin + Display.Def.print_line "Fixpoint reached: nothing more to unify."; + next_f (revise_tree recheck tree) + end + else + begin + if !Param.html_output then + begin + Display.Html.print_string "Trying unification "; + Display.Html.WithLinks.term_list (!unif_to_do_left); + Display.Html.print_string " with "; + Display.Html.WithLinks.term_list (!unif_to_do_right) + end + else + begin + Display.Text.print_string "Trying unification "; + Display.Text.WithLinks.term_list (!unif_to_do_left); + Display.Text.print_string " with "; + Display.Text.WithLinks.term_list (!unif_to_do_right) + end; + try + auto_cleanup (fun () -> + TermsEq.unify_modulo_list (fun () -> + Display.Def.print_line " succeeded."; + Display.Def.print_line "Iterating unifyDerivation."; + simplify_tree false recheck next_f tree + ) (!unif_to_do_left) (!unif_to_do_right) + ) + with Unify -> + Display.Def.print_line " failed."; + next_f (revise_tree recheck tree) + end + +let do_reduction recheck inj_mode tree = + let r = + if !Param.unify_derivation then + begin + (* print_string "Starting unifyDerivation.\n"; *) + if !Param.html_output then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"unifyDeriv" ^ qs ^ ".html\" TARGET=\"unifderiv\">Unify derivation</A><br>\n"); + Display.LangHtml.openfile ((!Param.html_dir) ^ "/unifyDeriv" ^ qs ^ ".html") ("ProVerif: unifying derivation for query " ^ qs); + Display.Html.print_string "<H1>Unifying the derivation</H1>\n" + end; + try + auto_cleanup (fun () -> simplify_tree true recheck (do_reduction inj_mode) tree) + with TermsEq.FalseConstraint -> + do_reduction inj_mode tree + end + else + do_reduction inj_mode tree + in + Terms.cleanup(); + r + + diff --git a/preinstallTTool/linux/proverif/src/reduction.mli b/preinstallTTool/linux/proverif/src/reduction.mli new file mode 100644 index 0000000000000000000000000000000000000000..7fdc434f59fc3a6340b01b2abdc39805831ce5fb --- /dev/null +++ b/preinstallTTool/linux/proverif/src/reduction.mli @@ -0,0 +1,28 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val do_reduction : (Types.reduction -> bool) option -> Pitypes.realquery option -> Types.fact_tree -> bool diff --git a/preinstallTTool/linux/proverif/src/reduction_bipro.cmi b/preinstallTTool/linux/proverif/src/reduction_bipro.cmi new file mode 100644 index 0000000000000000000000000000000000000000..8305e15ebee59d9aa188b416839ac621536b99b7 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/reduction_bipro.cmi differ diff --git a/preinstallTTool/linux/proverif/src/reduction_bipro.cmx b/preinstallTTool/linux/proverif/src/reduction_bipro.cmx new file mode 100644 index 0000000000000000000000000000000000000000..7550fd8673886bf869442bed87d43f7d0da58ceb Binary files /dev/null and b/preinstallTTool/linux/proverif/src/reduction_bipro.cmx differ diff --git a/preinstallTTool/linux/proverif/src/reduction_bipro.ml b/preinstallTTool/linux/proverif/src/reduction_bipro.ml new file mode 100644 index 0000000000000000000000000000000000000000..f5d678b73ebc3253d410aa36a23404b2bfb9eb39 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/reduction_bipro.ml @@ -0,0 +1,2064 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Trace reconstruction + This version of the trace reconstruction does not exploit the + order of nodes in the derivation tree. + *) +(* TO DO Test phases + Should I use evaluated terms in the "comment" field? + *) + +open Types +open Pitypes +open Terms +open Reduction_helper + +let made_forward_step = ref false +let failed_traces = ref 0 + +let debug_find_io_rule = ref false +let debug_backtracking = ref false +let debug_print s = () + (* print_string s; + Display.Text.newline() *) + +(* Set when we should take the else branch of Get but we cannot + because an element has already been inserted so that the in branch + is taken. In this case, we try delaying the inserts. *) +let has_backtrack_get = ref false + +exception No_result +(* We use the exception Unify for local failure *) + +exception FailOneSideOnly + +let make_choice t1 t2 = + let ty1 = Terms.get_term_type t1 + and ty2 = Terms.get_term_type t2 in + if (Param.get_ignore_types()) || (ty1 == ty2) then + FunApp(Param.choice_fun (Terms.get_term_type t1), [t1;t2]) + else + Parsing_helper.internal_error "[Reduction_bipro.make_choice] This should be the same type" + +let make_bi_choice (t1, t2) = make_choice t1 t2 + +let get_choice = function + FunApp({ f_cat = Choice }, [t1;t2]) -> (t1,t2) + | _ -> Parsing_helper.internal_error "Choice term expected" + +let equal_bi_terms_modulo (t1,t2) (t1',t2') = + (equal_terms_modulo t1 t1') && (equal_terms_modulo t2 t2') + +let is_true_test (t1,t2) = + let r1 = equal_terms_modulo t1 Terms.true_term in + let r2 = equal_terms_modulo t2 Terms.true_term in + if r1 && r2 then true else + if (not r1) && (not r2) then false else + raise FailOneSideOnly + +(* [bi_action action] executes action for both sides. + [action] raises Unify when it fails. + Raises FailOneSideOnly when one side of the action fails. + Raises Unify when the action fails on both sides. *) + +let bi_action action = + try + let t1 = action 1 in + try + let t2 = action 2 in + (t1,t2) + with Unify -> + (* Left side succeeded, right side failed *) + raise FailOneSideOnly + with Unify -> + (* Left side failed *) + let _ = action 2 in + (* Left side failed, right side succeeded *) + raise FailOneSideOnly + +let rev_name_subst_bi = function + [t] -> let r = rev_name_subst t in (r,r) + | [t1;t2] -> (rev_name_subst t1, rev_name_subst t2) + | _ -> Parsing_helper.internal_error "Unexpected number of arguments for this predicate" + +let build_mess_fact phase (tc1,tc2) (t1,t2) = + if phase < !Reduction_helper.min_choice_phase then + Pred(Param.get_pred(Mess(phase, Terms.get_term_type t1)), [tc1;t1]) + else + Pred(Param.get_pred(MessBin(phase, Terms.get_term_type t1)), [tc1;t1;tc2;t2]) + +let build_table_fact phase (t1,t2) = + if phase < !Reduction_helper.min_choice_phase then + Pred(Param.get_pred(Table(phase)), [t1]) + else + Pred(Param.get_pred(TableBin(phase)), [t1;t2]) + +(* Display clauses *) + +let display_rule (n, sons, hsl, nl, concl) = + print_string ("Rule " ^ (string_of_int n) ^ ": "); + display_tag hsl nl; + print_string " "; + Display.Text.display_rule (List.map (fun t -> copy_fact2 t) sons, copy_fact2 concl, Empty concl, []); + Display.Text.newline() + +(* Display the trace *) + +let noninterftest_to_string = function + ProcessTest _ -> " process performs a test that may succeed on one side and not on the other" + | NIFailTest _ -> "This holds on one side and not on the other." + | ApplyTest _ -> Parsing_helper.internal_error "There should be no ApplyTest in reduction_bipro.ml" + | CommTest _ -> "The communication succeeds on one side and not on the other." + | InputTest _ | OutputTest _ | InputProcessTest _ -> Parsing_helper.internal_error "There should be no InputTest/OutputTest/InputProcessTest in reduction_bipro.ml" + | NIEqTest _ -> "The result in the left-hand side is different from the result in the right-hand side." + +let display_trace final_state = + match !Param.trace_display with + Param.NoDisplay -> () + | Param.ShortDisplay -> + if !Param.html_output then + Display.Html.display_labeled_trace final_state + else + begin + if !Param.display_init_state then + begin + print_string "A more detailed output of the traces is available with\n"; + if !Param.typed_frontend then + print_string " set traceDisplay = long.\n" + else + print_string " param traceDisplay = long.\n"; + Display.Text.newline() + end; + Display.Text.display_labeled_trace final_state + end + | Param.LongDisplay -> + if !Param.html_output then + ignore (Display.Html.display_reduc_state Display.Html.display_bi_term true final_state) + else + ignore (Display.Text.display_reduc_state Display.Text.display_bi_term true final_state) + + +(* Find a clause *) + +let find_io_rule next_f hypspeclist hyplist name_params var_list io_rules = + let name_params1 = extract_name_params_noneed name_params in + let l = List.length hypspeclist in + let lnp = List.length name_params1 in + let lh = List.length hyplist in + (* Useful for debugging *) + if !debug_find_io_rule then + begin + auto_cleanup (fun () -> + print_string "Looking for "; + display_tag hypspeclist name_params1; + print_string " "; + Display.Text.display_list Display.Text.WithLinks.fact " & " hyplist; + Display.Text.newline()) + end; + let found_terms = ref [] in + let rec find_io_rule_aux = function + [] -> raise Unify + | ((n, sons, hypspeclist2, name_params',_)::io_rules) -> + let l2 = List.length hypspeclist2 in + let lnp2 = List.length name_params' in + let lh2 = List.length sons in + if (l2 < l) || (lnp2 < lnp) || (lh2 < lh) || (not (hypspeclist = skip (l2-l) hypspeclist2)) + then find_io_rule_aux io_rules + else + begin + let sons3 = skip (lh2-lh) sons in + try + let name_params2 = skip (lnp2-lnp) name_params' in + if not (Param.get_ignore_types()) && + (List.exists2 (fun t1 t2 -> Terms.get_term_type t1 != Terms.get_term_type t2) name_params1 name_params2) then + raise Unify; + auto_cleanup (fun () -> + match_modulo_list (fun () -> + match_equiv_list (fun () -> + let new_found = List.map copy_closed_remove_syntactic var_list in + if List.exists (fun old_found -> + List.for_all2 equal_terms_modulo old_found new_found) (!found_terms) then + raise Unify; + found_terms := new_found :: (!found_terms); + if !debug_find_io_rule then + begin + auto_cleanup (fun () -> + print_string "Found "; + Display.Text.display_list Display.Text.WithLinks.term ", " new_found; + Display.Text.newline()) + end; + next_f new_found) sons3 hyplist + ) name_params1 name_params2 + ) + with Unify -> find_io_rule_aux io_rules + end + in + find_io_rule_aux io_rules + +(* Evaluate a term possibly containing destructors. + It always succeeds, perhaps returning Fail. *) + +let rec term_evaluation side = function + Var v -> + begin + match v.link with + TLink t -> + (* I think this is useful only to split a Choice inside t *) + term_evaluation side t + | _ -> Parsing_helper.internal_error "Error: term should be closed in attack reconstruction"; + end + | FunApp(f,l) -> + (* for speed, use the initial definition of destructors, not the one enriched with the equational theory *) + match f.f_initial_cat with + Eq _ | Tuple -> + let l' = List.map (term_evaluation side) l in + if List.exists is_fail l' then + Terms.get_fail_term (snd f.f_type) + else + FunApp(f, l') + | Name _ | Failure -> FunApp(f,[]) + | Choice -> + begin + match l with + [t1;t2] -> + if side = 1 then + term_evaluation side t1 + else + term_evaluation side t2 + | _ -> Parsing_helper.internal_error "Choice should have two arguments" + end + | Red redl -> + let l' = List.map (term_evaluation side) l in + let rec try_red_list = function + [] -> + Parsing_helper.internal_error "Term evaluation should always succeeds (perhaps returning Fail)" + | (red1::redl) -> + let (left, right, side_c) = auto_cleanup (fun () -> Terms.copy_red red1) in + try + auto_cleanup (fun () -> + match_modulo_list (fun () -> + if List.for_all disequation_evaluation side_c then + begin + (* TO DO (for speed) should I remove_syntactic, or keep it, + but take it into account elsewhere (when doing + function symbol comparisons, accept functions that + differ by their syntactic status) *) + close_term right; + TermsEq.remove_syntactic_term right + end + else + raise Unify + ) left l') + with Unify -> try_red_list redl + in + try_red_list redl + | _ -> + Printf.printf "\nName of the function:"; + Display.Text.display_function_name f; + Parsing_helper.internal_error "unexpected function symbol in term_evaluation (reduction_bipro.ml)" + +(* Evaluates t1 and tests if it is equal to t2. *) + +let equal_terms_modulo_eval t1 t2 = + let t1_l = term_evaluation 1 t1 in + let t1_r = term_evaluation 2 t1 in + if (is_fail t1_l) || (is_fail t1_r) then false else + equal_bi_terms_modulo (t1_l, t1_r) t2 + + +(* Evaluates a term. Raises Unify when the result is fail. *) + +let term_evaluation_fail t side = + let r = term_evaluation side t in + if is_fail r then + raise Unify + else + r + +let term_evaluation_fail2 t1 t2 side = + (term_evaluation_fail t1 side, term_evaluation_fail t2 side) + +let term_evaluation_name_params occ t name_params = + let may_have_several_patterns = reduction_check_several_patterns occ in + let t' = bi_action (term_evaluation_fail t) in + if may_have_several_patterns then + t', ((MUnknown,make_bi_choice t',Always) :: name_params) + else + t', name_params + +let term_evaluation_to_true t side = + let r = term_evaluation side t in + if (is_fail r) || (not (equal_terms_modulo r Terms.true_term)) then + raise Unify + else + r + +let term_evaluation_name_params_true occ t name_params = + let may_have_several_patterns = reduction_check_several_patterns occ in + let t' = bi_action (term_evaluation_to_true t) in + if may_have_several_patterns then + ((MUnknown,make_bi_choice t',Always) :: name_params) + else + name_params + +(* Match a pattern + Raises Unify when the matching fails *) + +let rec match_pattern p side t = + match p with + PatVar b -> + begin + if side = 1 then + Terms.link b (TLink (make_choice t t)) + else + match b.link with + TLink (FunApp({ f_cat = Choice }, [t1;t2])) -> + Terms.link b (TLink (make_choice t1 t)) + | _ -> + (* When the evaluation or pattern matching failed on the left side, + some variables may be unbounded when we try the pattern matching + on the right side *) + Terms.link b (TLink (make_choice t t)) + end + | PatTuple(f,l) -> + let vl = Terms.var_gen (fst f.f_type) in + let tl = + match_modulo (fun () -> + List.map copy_closed_remove_syntactic vl) (FunApp(f, vl)) t + in + List.iter2 (fun p t -> match_pattern p side t) l tl + | PatEqual t' -> + let t'' = term_evaluation_fail t' side in + match_modulo (fun () -> ()) t'' t + +let bi_match_pattern p (t1,t2) side = + if side = 1 then + match_pattern p side t1 + else + match_pattern p side t2 + +let bi_match_pattern_and_test p (t1,t2) t side = + bi_match_pattern p (t1,t2) side; + let t' = term_evaluation_fail t side in + if not (equal_terms_modulo t' Terms.true_term) then + raise Unify + +let term_evaluation_name_params_and_match pat occ t name_params = + let may_have_several_patterns = reduction_check_several_patterns occ in + let t'' = bi_action (fun side -> + let t' = term_evaluation_fail t side in + match_pattern pat side t'; + t') + in + if may_have_several_patterns then + ((MUnknown,make_bi_choice t'',Always) :: name_params) + else + name_params + +(* Decompose tuples *) + +let rec decompose_term = function + (FunApp(f,l), FunApp(f',l')) when f.f_cat == Tuple && f == f' -> decompose_list (List.combine l l') + | t -> [t] + +and decompose_list = function + [] -> [] + | (a::l) -> (decompose_term a) @ (decompose_list l) + +(* Test if a term is public *) + +let rec is_in_public public = function + (FunApp({ f_cat = Tuple } as f, l), FunApp(f',l')) when f == f' -> + List.for_all (is_in_public public) (List.combine l l') + | t -> List.exists (equal_bi_terms_modulo t) public + +let rec remove_first_in_public public = function + [] -> [] + | ((a::l) as l') -> + if List.exists (equal_bi_terms_modulo a) public then + remove_first_in_public public l + else + l' + +let update_term_list oldpub public tc_list = + match tc_list with + [] -> [] + | (t0::l0) -> + let rec is_in_until = function + [] -> false + | ((a::l) as public) -> + if public == oldpub then false else + if equal_bi_terms_modulo a t0 then true else + is_in_until l + in + if is_in_until public then + remove_first_in_public public l0 + else + tc_list + + +let rec add_public_and_close state t = + let queue = ref [t] in + let rec remove_from_att_rules public t = function + [] -> [] + | (p, hyp_terms,concl_terms)::attacker_rules -> + let attacker_rules' = remove_from_att_rules public t attacker_rules in + if getphase p < state.current_phase then attacker_rules' else + let hyp_terms' = match hyp_terms with + [] -> [] + | (t0::l0) -> + if equal_bi_terms_modulo t0 t then + remove_first_in_public public l0 + else + hyp_terms + in + if (hyp_terms' = []) && (getphase p = state.current_phase) then + begin + queue := concl_terms @ (!queue); + attacker_rules' + end + else + (* Keep the rule, removing hypotheses that are already in public *) + (p, hyp_terms', concl_terms) :: attacker_rules' + in + let rec do_close state = + match !queue with + [] -> state + | (t::l) -> + queue := l; + if List.exists (equal_bi_terms_modulo t) state.public then + do_close state + else + let public' = t :: state.public in + do_close { state with + public = public'; + prepared_attacker_rule = remove_from_att_rules public' t state.prepared_attacker_rule } + in + do_close state + +let rec add_public state = function + (FunApp({ f_cat = Tuple } as f, l), FunApp(f',l')) when f == f' -> add_public_list state (List.combine l l') + | t -> add_public_and_close state t + +and add_public_list state = function + [] -> state + | (a::l) -> add_public_list (add_public state a) l + +(* Do reductions that do not involve interactions + f takes as input + - a boolean indicating whether the attacker knowledge has changed + - the new state + + When the goal is reached, do_red_nointeract returns the final state. + Otherwise, raises an exception No_result. +*) + +let rec do_red_nointeract f prev_state n = + let (proc, name_params, occs, facts, cache_info) = + List.nth prev_state.subprocess n in + match proc with + Nil -> debug_print "Doing Nil"; + made_forward_step := true; + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RNil(n); + previous_state = Some prev_state } + | Par(p,q) -> + debug_print "Doing Par"; + made_forward_step := true; + do_red_nointeract (fun new_att_know cur_state2 -> + do_red_nointeract (fun new_att_know2 cur_state3 -> + f (new_att_know || new_att_know2) cur_state3) + cur_state2 n + ) { prev_state with + subprocess = add_at n (p, name_params, occs, facts, Nothing) + (replace_at n (q, name_params, occs, facts, Nothing) + prev_state.subprocess); + comment = RPar(n); + previous_state = Some prev_state } (n+1) + | Restr(na,(args,env),p,occ) -> + debug_print "Doing Restr"; + made_forward_step := true; + let need_list = get_need_vars na.f_name in + let include_info = prepare_include_info env args need_list in + let l = extract_name_params na.f_name include_info name_params in + let n' = FunApp(add_name_for_pat (FunApp(na, l)),[]) in + let p' = process_subst p na n' in + begin + do_red_nointeract f { prev_state with + subprocess = replace_at n (p', name_params, occs, facts, Nothing) prev_state.subprocess; + comment = RRestr(n, na, n'); + previous_state = Some prev_state } n + end + | Let(pat,t,p,q,occ) -> + debug_print "Doing Let"; + made_forward_step := true; + let new_occs = (LetTag occ) :: occs in + begin + try + auto_cleanup (fun () -> + let name_params' = term_evaluation_name_params_and_match pat (OLet(occ)) t name_params in + let p' = copy_process p in + let name_params'' = update_name_params IfQueryNeedsIt name_params' pat in + do_red_nointeract f { prev_state with + subprocess = replace_at n (p', name_params'', new_occs, facts, Nothing) prev_state.subprocess; + comment = RLet1(n, pat, t); + previous_state = Some prev_state } n + ) + with Unify -> + do_red_nointeract f { prev_state with + subprocess = replace_at n (q, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = RLet2(n, pat, t); + previous_state = Some prev_state } n + | FailOneSideOnly -> + (* SUCCESS *) + { prev_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth prev_state.subprocess n)))) } + end + | Test(t,p,q,occ) -> + debug_print "Doing Test"; + made_forward_step := true; + if q == Nil then + (* Optimize the case q == Nil: in this case, the adversary + cannot distinguish whether a destructor fails in t or + t is false. *) + begin + try + auto_cleanup (fun () -> + let new_occs = (TestTag occ) :: occs in + let name_params' = term_evaluation_name_params_true (OTest(occ)) t name_params in + do_red_nointeract f + { prev_state with + subprocess = replace_at n (p, name_params', new_occs, facts, Nothing) prev_state.subprocess; + comment = RTest1(n, t); + previous_state = Some prev_state } n + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RTest2(n, t); + previous_state = Some prev_state } + | FailOneSideOnly -> + (* SUCCESS *) + { prev_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth prev_state.subprocess n)))) } + end + else + begin + try + auto_cleanup (fun () -> + let new_occs = (TestTag occ) :: occs in + let (t', name_params') = term_evaluation_name_params (OTest(occ)) t name_params in + if is_true_test t' then + do_red_nointeract f + { prev_state with + subprocess = replace_at n (p, name_params', new_occs, facts, Nothing) prev_state.subprocess; + comment = RTest1(n, t); + previous_state = Some prev_state } n + else + do_red_nointeract f + { prev_state with + subprocess = replace_at n (q, name_params', new_occs, facts, Nothing) prev_state.subprocess; + comment = RTest2(n, t); + previous_state = Some prev_state } n + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RTest3(n, t); + previous_state = Some prev_state } + | FailOneSideOnly -> + (* SUCCESS *) + { prev_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth prev_state.subprocess n)))) } + end + | Output(tc,t,p,occ) -> + let success = + if cache_info != Nothing then + false (* Was already tested and failed before; will still fail if tested again *) + else + match prev_state.goal with + NonInterfGoal(CommTest(tin,tout,loc)) -> + if equal_terms_modulo_eval tc tout then + begin + if is_in_public prev_state.public tin then + begin + loc := Some (LocAttacker, LocProcess(n, List.nth prev_state.subprocess n)); + true + end + else (* find a process that does some input on tin *) + try + let (n',p') = + findi (function + (Input(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tin + | _ -> false + ) prev_state.subprocess + in + loc := Some (LocProcess(n',p'), LocProcess(n, List.nth prev_state.subprocess n)); + true + with Not_found -> + false + end + else false + | _ -> false + in + if success then prev_state else + begin + debug_print "Doing Output"; + (* For passive attackers, do red I/O only, + but still evaluate the arguments of the output *) + if not (!Param.active_attacker) then + match cache_info with + InputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have input/get info for an output!" + | OutputInfo _ -> f false prev_state (* Arguments already evaluated *) + | Nothing -> + try + auto_cleanup (fun () -> + let ((tc1,t1),(tc2,t2)) = bi_action (term_evaluation_fail2 tc t) in + let tc' = (tc1, tc2) in + let t' = (t1, t2) in + let tclist = decompose_term tc' in + f false { prev_state with + subprocess = replace_at n (Output(make_bi_choice tc', make_bi_choice t',p,occ), + name_params, occs, facts, + (OutputInfo(tclist, prev_state.public))) + prev_state.subprocess } + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = ROutput3(n, tc, t); + previous_state = Some prev_state } + | FailOneSideOnly -> + (* SUCCESS *) + { prev_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth prev_state.subprocess n)))) } + + else + (* For active attackers, one can output on public channels *) + begin + let new_occs = (OutputTag occ) :: occs in + match cache_info with + InputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have input/get info for an output!" + | OutputInfo(tclist, oldpub) -> + let tclist' = update_term_list oldpub prev_state.public tclist in + if tclist' = [] then + begin + made_forward_step := true; + let prev_state' = add_public prev_state (get_choice t) in + do_red_nointeract (if prev_state.public == prev_state'.public then f else + (fun mod_public cur_state -> f true cur_state)) + { prev_state' with + subprocess = replace_at n (p, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = ROutput1(n, tc, t); + previous_state = Some prev_state } n + end + else + f false { prev_state with + subprocess = replace_at n (proc, name_params, occs, facts, + (OutputInfo(tclist', prev_state.public))) + prev_state.subprocess } + | Nothing -> + try + auto_cleanup (fun () -> + let ((tc1,t1),(tc2,t2)) = bi_action (term_evaluation_fail2 tc t) in + let tc' = (tc1, tc2) in + let t' = (t1, t2) in + let tclist = decompose_term tc' in + let tclist' = remove_first_in_public prev_state.public tclist in + if tclist' = [] then + begin + made_forward_step := true; + let prev_state' = add_public prev_state t' in + do_red_nointeract (if prev_state.public == prev_state'.public then f else + (fun mod_public cur_state -> f true cur_state)) + { prev_state' with + subprocess = replace_at n (p, name_params, new_occs, facts, Nothing) prev_state.subprocess; + comment = ROutput1(n, tc, t); + previous_state = Some prev_state } n + end + else + (* When one side is a channel and the other side is not, + we keep the Output process; the failure of the equivalence + will be detected (or has already been detected) by CommTest *) + f false { prev_state with + subprocess = replace_at n (Output(make_bi_choice tc', make_bi_choice t',p,occ), name_params, occs, facts, + (OutputInfo(tclist', prev_state.public))) + prev_state.subprocess } + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = ROutput3(n, tc, t); + previous_state = Some prev_state } + | FailOneSideOnly -> + (* SUCCESS *) + { prev_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth prev_state.subprocess n)))) } + end + end + | Event(FunApp(fs,l) as t,p,occ) -> + debug_print "Doing Event"; + made_forward_step := true; + begin + (* Check that the argument of the event can be evaluated but otherwise ignore it *) + try + auto_cleanup (fun () -> + let _ = bi_action (term_evaluation_fail t) in + do_red_nointeract f { prev_state with + subprocess = replace_at n (p, name_params, occs, facts, Nothing) prev_state.subprocess; + comment = RBegin1(n, t); + previous_state = Some prev_state } n + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RBegin2(n, t); + previous_state = Some prev_state } + | FailOneSideOnly -> + (* SUCCESS *) + { prev_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth prev_state.subprocess n)))) } + end + | LetFilter(bl, Pred(pr,l), p, q, occ) -> + Parsing_helper.user_error "Predicates are currently incompatible with non-interference.\n" + | Repl(p,occ) -> + debug_print "Doing Repl"; + made_forward_step := true; + let sid = Terms.new_var "sid" Param.sid_type in + let new_occs = (ReplTag (occ,count_name_params name_params))::occs in + let copy_number = ref 0 in + let new_state = ref { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RRepl(n,0); + previous_state = Some prev_state } + in + begin + try + auto_cleanup (fun () -> + find_io_rule (function + [sid_pat] -> + let p' = auto_cleanup (fun () -> copy_process p) in + incr copy_number; + new_state := { !new_state with + subprocess = add_at n (p', (MSid 0,sid_pat,Always)::name_params, new_occs, facts, Nothing) !new_state.subprocess + }; + raise Unify + | _ -> Parsing_helper.internal_error "Repl case, reduction.ml" + ) new_occs facts ((MSid 0,Var sid,Always)::name_params) [Var sid] prev_state.io_rule + ) + with Unify -> + debug_print ("Repl: " ^ (string_of_int (!copy_number)) ^ " copies"); + let rec do_red_copies b ncopies state = + if ncopies < 0 then + f b state + else + do_red_nointeract (fun b' s -> do_red_copies (b||b') (ncopies-1) s) state (n+ncopies) + in + do_red_copies false ((!copy_number)-1) + { !new_state with + comment = RRepl(n,!copy_number) + } + end + | Input(tc,_,_,_) -> + begin + match prev_state.goal with + NonInterfGoal(CommTest(tin,tout,loc)) -> + if equal_terms_modulo_eval tc tin then + begin + if is_in_public prev_state.public tout then + begin + loc := Some (LocProcess(n, List.nth prev_state.subprocess n), LocAttacker); + prev_state + end + else (* find a process that does some output on tout *) + try + let (n',p') = + findi (function + (Output(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tout + | _ -> false + ) prev_state.subprocess + in + loc := Some (LocProcess(n, List.nth prev_state.subprocess n), LocProcess(n',p')); + prev_state + with Not_found -> + f false prev_state + end + else f false prev_state + | _ -> f false prev_state + + end + | Insert(t,p,occ) -> + debug_print "Doing Insert"; + begin + let new_occs = (InsertTag occ) :: occs in + let new_element_inserted = ref false in + try + auto_cleanup (fun () -> + let t' = bi_action (term_evaluation_fail t) in + let already_in = List.exists (equal_bi_terms_modulo t') prev_state.tables in + new_element_inserted := not already_in; + made_forward_step := true; + do_red_nointeract f + { prev_state with + subprocess = replace_at n (p, name_params, new_occs, facts, Nothing) prev_state.subprocess; + tables = if already_in then prev_state.tables else t'::prev_state.tables; + comment = RInsert1(n, t); + previous_state = Some prev_state } n + ) + with Unify -> + f false { prev_state with + subprocess = remove_at n prev_state.subprocess; + comment = RInsert2(n, t); + previous_state = Some prev_state } + | FailOneSideOnly -> + (* SUCCESS *) + { prev_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth prev_state.subprocess n)))) } + | No_result -> + (* The attack reconstruction failed after doing the insert. + Try not doing it, in case that allows executing the else branch of a Get. *) + if (!has_backtrack_get) && (!new_element_inserted) then + f false prev_state + else + raise No_result + end + | _ -> f false prev_state + + +(* Test success when the knowledge of the attacker has changed *) + +let test_success cur_state' = + try + match cur_state'.goal with + NonInterfGoal(NIEqTest(t1,t2)) -> + (is_in_public cur_state'.public t1) && + (is_in_public cur_state'.public t2) + | NonInterfGoal(NIFailTest t) -> + is_in_public cur_state'.public t + | NonInterfGoal(CommTest(tin,tout,loc)) -> + let rin = + if is_in_public cur_state'.public tin then + Some LocAttacker + else (* find a process that does some input on tin *) + try + let (n,p) = + findi (function + (Input(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tin + | _ -> false + ) cur_state'.subprocess + in + Some (LocProcess(n,p)) + with Not_found -> + None + in + let rout = + if is_in_public cur_state'.public tout then + Some LocAttacker + else (* find a process that does some output on tout *) + try + let (n,p) = + findi (function + (Output(tc,_,_,_),_,_,_,_) -> equal_terms_modulo_eval tc tout + | _ -> false + ) cur_state'.subprocess + in + Some (LocProcess(n,p)) + with Not_found -> + None + in + begin + match rin,rout with + Some lin, Some lout -> loc := Some(lin,lout); true + | _ -> false + end + | _ -> false + with Unify -> + false + +(* let test_success = Profile.f1 "test_success" test_success *) + +let end_if_success next_f cur_state = + if test_success cur_state then cur_state else next_f cur_state + +(* Normalize the state after a reduction *) + +let rec find_possible_outputs f cur_state n seen_list = function + [] -> f cur_state + | (Output(tc,t,p,out_occ) as proc, name_params, occs, facts, cache_info)::rest_subprocess when (!Param.active_attacker) -> + let tclist' = + match cache_info with + InputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have input/get info for an output!" + | OutputInfo(tclist, oldpub) -> + update_term_list oldpub cur_state.public tclist + | Nothing -> + let tclist = decompose_term (get_choice tc) in + remove_first_in_public cur_state.public tclist + in + let seen_list' = (proc, name_params, occs, facts, OutputInfo(tclist', cur_state.public)) :: seen_list in + if tclist' = [] then + do_red_nointeract (fun change_pub cur_state2 -> + if change_pub then + end_if_success (find_possible_outputs_rec f) cur_state2 + else + find_possible_outputs f cur_state2 0 [] cur_state2.subprocess + ) { cur_state with subprocess = List.rev_append seen_list' rest_subprocess } n + else + find_possible_outputs f cur_state (n+1) seen_list' rest_subprocess + | sub_proc::rest_subprocess -> find_possible_outputs f cur_state (n+1) (sub_proc::seen_list) rest_subprocess + +and find_possible_outputs_rec f cur_state3 = + find_possible_outputs f cur_state3 0 [] cur_state3.subprocess + +(* When the process number n has been changed *) + +let normal_state f change_pub cur_state n = + do_red_nointeract (fun change_pub2 cur_state2 -> + if change_pub || change_pub2 then + end_if_success (find_possible_outputs_rec f) cur_state2 + else f cur_state2 + ) cur_state n + +(* When two processes have been changed, numbers n1 and n2 *) + +let normal_state2 f change_pub cur_state n1 n2 = + let n1',n2' = if n1 < n2 then n1,n2 else n2,n1 in + do_red_nointeract (fun change_pub2 cur_state2 -> + do_red_nointeract (fun change_pub3 cur_state3 -> + if change_pub || change_pub2 || change_pub3 then + end_if_success (find_possible_outputs_rec f) cur_state3 + else f cur_state3 + ) cur_state2 n1' + ) cur_state n2' + +(* When all processes have been changed *) + +let normal_state_all f change_pub cur_state = + let rec do_red_all change_pub2 cur_state2 n = + if n < 0 then + if change_pub2 then + end_if_success (find_possible_outputs_rec f) cur_state2 + else + f cur_state2 + else + do_red_nointeract (fun change_pub3 cur_state3 -> + do_red_all (change_pub2 || change_pub3) cur_state3 (n-1) + ) cur_state2 n + in + do_red_all change_pub cur_state (List.length cur_state.subprocess - 1) + +(* Initial attacker knowledge *) + +let rec public_build l = + match l with + | [] -> [] + | h::t -> + if not h.f_private then + (FunApp(h,[]))::(public_build t) + else + public_build t + +(* Initialize the rule lists *) + +let rec init_rule state tree = + match tree.desc with + FHAny | FEmpty -> + begin + match tree.thefact with + Out(_,_) -> state + | Pred(p, [t]) when p.p_prop land Param.pred_ATTACKER != 0 -> + begin + let t' = rev_name_subst t in + match t' with + FunApp({ f_cat = Name _; f_private = false },[]) -> + { state with public = (t',t') :: state.public } + | _ -> + (* Public contains terms, not patterns + -> translate the pattern into a term. + If the translation fails because a name is not in the table, we have to stop. *) + if is_in_public state.public (t',t') then + state + else + { state with + public = (t',t') :: state.public; + hyp_not_matched = (Pred(p,[t']))::state.hyp_not_matched } + end + | Pred(p, [t1;t2]) when p.p_prop land Param.pred_ATTACKER != 0 -> + begin + let t1' = rev_name_subst t1 in + let t2' = rev_name_subst t2 in + match t1', t2' with + (FunApp({ f_cat = Name _; f_private = false },[]), + FunApp({ f_cat = Name _; f_private = false },[])) when + equal_terms_modulo t1' t2' -> + { state with public = (t1', t2') :: state.public } + | _ -> + (* Public contains terms, not patterns + -> translate the pattern into a term. + If the translation fails because a name is not in the table, we have to stop. *) + if is_in_public state.public (t1',t2') then + state + else + { state with + public = (t1',t2') :: state.public; + hyp_not_matched = (Pred(p,[t1';t2']))::state.hyp_not_matched } + end + | _ -> + { state with + hyp_not_matched = (rev_name_subst_fact tree.thefact)::state.hyp_not_matched } + end + | FRemovedWithProof _ -> state + | FRule (n, tags, constra, sons) -> + let rec init_sons_rule state1 = function + | [] -> + begin + match tags with + ProcessRule (hsl,nl) -> + {state1 with io_rule = (n, List.map (fun t -> rev_name_subst_fact t.thefact) sons, + hsl, rev_name_subst_list nl, + rev_name_subst_fact tree.thefact)::state1.io_rule} + | Apply (f,_) when f.f_cat != Tuple -> + begin + let (p,c) = + match tree.thefact with + Pred(p,l) -> (p,rev_name_subst_bi l) + | _ -> Parsing_helper.internal_error "unexpected Apply clause" + in + let h = List.map (function + { thefact = Pred(_,l) } -> rev_name_subst_bi l + | _ -> Parsing_helper.internal_error "unexpected Apply clause") sons + in + {state1 with prepared_attacker_rule = (p, decompose_list h, decompose_term c)::state1.prepared_attacker_rule} + end + | Rn _ -> + begin + match tree.thefact with + Pred(p, l) -> + { state1 with prepared_attacker_rule = (p, [], [rev_name_subst_bi l])::state1.prepared_attacker_rule } + | _ -> Parsing_helper.internal_error "Rule Rn should conclude p(name)" + end + | _ -> state1 + end + | h::t -> + let state1' = init_rule state1 h in + init_sons_rule state1' t + in + init_sons_rule state sons + | FEquation son -> init_rule state son + +(* Handle reductions i/o and in *) + +(* Perform an input on a public channel (Res In) *) + +let do_res_in cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_status next_f = + (* The real list of processes is (List.rev_append seen_list (InputProcess :: rest_subprocess)) *) + let (mess_list, oldpub) = + match public_status with + Some (m,o) -> (m,o) + | None -> (decompose_term mess_term, []) + in + (* Remove the elements of mess_list' that are already in cur_state.public *) + let mess_list' = update_term_list oldpub cur_state.public mess_list in + (* When mess_list' is not empty, its first element is not in cur_state.public + Remember that point to avoid testing again that part of public *) + current_cache_list := (mess_term, Some (mess_list', cur_state.public)) :: (!current_cache_list); + if mess_list' != [] then raise Unify; (* The message is not public *) + try + made_forward_step := true; + auto_cleanup (fun () -> + let _ = bi_action (bi_match_pattern pat mess_term) in + let name_params'' = update_name_params Always name_params' pat in + let p' = auto_cleanup (fun () -> copy_process p) in + let fact' = build_mess_fact cur_state.current_phase tc' mess_term in + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p', name_params'', new_occs, fact' :: facts, Nothing) :: rest_subprocess); + comment = RInput(n, tc, pat, make_bi_choice mess_term); + previous_state = Some cur_state } n + ) + with No_result -> + (* Inputting the message mess_term on this input will always fail, + even in the following of the trace *) + current_cache_list := List.tl (!current_cache_list); + raise Unify + | FailOneSideOnly -> + (* SUCCESS the pattern matching fails on one side only *) + { cur_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth cur_state.subprocess n)))) } + +(* Perform a (Red I/O) reduction between an input and an asynchronous output *) + +let do_async_res_io cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_channel next_f = + (* The real list of processes is (List.rev_append seen_list (InputProcess :: rest_subprocess)) + It differs from cur_state.subprocess only by the cache of input processes, so when + looking for an output process, we can use cur_state.subprocess instead. *) + current_cache_list := (mess_term, None) :: (!current_cache_list); + (* Find the corresponding asynchronous output *) + let rec find_asynchronous_output noutput = function + [] -> raise Unify (* not found *) + | ((Output(tc2, t2, Nil,out_occ), name_params2,occs2, facts2, cache_info2)::_) when + (equal_bi_terms_modulo (get_choice tc2) tc') && (equal_bi_terms_modulo (get_choice t2) mess_term) -> + noutput + | _::rest_subprocess2 -> find_asynchronous_output (noutput+1) rest_subprocess2 + in + let noutput = find_asynchronous_output 0 cur_state.subprocess in + begin + try + made_forward_step := true; + try + auto_cleanup (fun () -> + let _ = bi_action (bi_match_pattern pat mess_term) in + let name_params'' = update_name_params Always name_params' pat in + let p' = auto_cleanup (fun () -> copy_process p) in + let fact' = build_mess_fact cur_state.current_phase tc' mess_term in + let cur_state' = + { (if public_channel then + add_public cur_state mess_term else cur_state) + with + subprocess = remove_at noutput + (List.rev_append seen_list ((p', name_params'', new_occs, fact' :: facts, Nothing) :: rest_subprocess)); + comment = RIO(n, tc, pat, noutput, tc, make_bi_choice mess_term); + previous_state = Some cur_state } + in + let ninput = if n > noutput then n-1 else n in + normal_state next_f (cur_state'.public != cur_state.public) cur_state' ninput + ) + with Unify -> + (* The pattern does not match *) + let noutput' = if n>noutput then noutput else noutput-1 in + let cur_state' = + { (if public_channel then + add_public cur_state mess_term else cur_state) + with + subprocess = remove_at noutput' (List.rev_append seen_list rest_subprocess); + comment = RIO(n, tc, pat, noutput, tc, make_bi_choice mess_term); + previous_state = Some cur_state } + in + next_f cur_state' + | FailOneSideOnly -> + (* SUCCESS the pattern matching fails on one side only *) + { cur_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth cur_state.subprocess n)))) } + with No_result -> + current_cache_list := List.tl (!current_cache_list); + raise Unify + end + + +(* Perform a (Res I/O) reduction with a synchronous output *) + +let do_sync_res_io cur_state seen_list rest_subprocess n name_params' new_occs facts tc pat p tc' public_channel next_f = + (* The real list of processes is (List.rev_append seen_list (InputProcess :: rest_subprocess)) + It differs from cur_state.subprocess only by the cache of input processes, so when + looking for an output process, we can use cur_state.subprocess instead. *) + let rec find_synchronous_output noutput = function + [] -> raise No_result (* Not found *) + | ((Output(tc2,t2,p2,out_occ),name_params2,occs2, facts2, cache_info2)::rest_subprocess2) when (p2 != Nil) || public_channel -> + begin + try + let tc2' = get_choice tc2 in + let t2' = get_choice t2 in + if equal_bi_terms_modulo tc2' tc' then + begin + made_forward_step := true; + (* The i/o reduction is possible, compute the reduced state *) + let fact = build_mess_fact cur_state.current_phase tc' t2' in + try + auto_cleanup (fun () -> + let _ = bi_action (bi_match_pattern pat t2') in + let name_params'' = update_name_params Always name_params' pat in + let p' = auto_cleanup (fun () -> copy_process p) in + let cur_state' = + { (if public_channel then + add_public cur_state t2' else cur_state) + with + subprocess = replace_at noutput (p2, name_params2, (OutputTag out_occ)::occs2, facts2, Nothing) + (List.rev_append seen_list ((p', name_params'', new_occs, fact :: facts, Nothing) :: rest_subprocess)); + comment = RIO(n, make_bi_choice tc', pat, noutput, tc2, t2); + previous_state = Some cur_state } + in + normal_state2 next_f (cur_state'.public != cur_state.public) cur_state' noutput n + ) + with Unify -> (* The pattern does not match *) + let noutput' = if n > noutput then noutput else noutput-1 in + let cur_state' = + { (if public_channel then + add_public cur_state t2' else cur_state) + with + subprocess = replace_at noutput' (p2, name_params2, occs2, facts2, Nothing) + (List.rev_append seen_list rest_subprocess); + comment = RIO2(n, make_bi_choice tc', pat, noutput, tc2, t2); + previous_state = Some cur_state } + in + normal_state next_f (cur_state'.public != cur_state.public) cur_state' noutput' + | FailOneSideOnly -> + (* SUCCESS the pattern matching fails on one side only *) + { cur_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth cur_state.subprocess n)))) } + end + else raise Unify + with Unify | No_result -> + find_synchronous_output (noutput+1) rest_subprocess2 + end + | _::rest_subprocess2 -> find_synchronous_output (noutput+1) rest_subprocess2 + in + find_synchronous_output 0 cur_state.subprocess + +(* Perform a get (Res Get) *) + +let rec find_term stop_l t l = + if l == stop_l then false else + match l with + [] -> false + | (a::r) -> + if equal_bi_terms_modulo t a then true else find_term stop_l t r + +let do_res_get cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts pat t p mess_term old_tables next_f = + (* The real list of processes is (List.rev_append seen_list (InputProcess :: rest_subprocess)) *) + current_cache_list := mess_term :: (!current_cache_list); + debug_print "Get"; + if not (find_term old_tables mess_term cur_state.tables) then raise Unify; (* The entry is not found *) + debug_print "Ok, the entry is present"; + try + made_forward_step := true; + auto_cleanup (fun () -> + (* we check that the pattern pat matches and t evaluates to true *) + let _ = bi_action (bi_match_pattern_and_test pat mess_term t) in + let name_params'' = update_name_params Always name_params' pat in + let p' = auto_cleanup (fun () -> copy_process p) in + let fact' = build_table_fact cur_state.current_phase mess_term in + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p', name_params'', new_occs, fact' :: facts, Nothing) :: rest_subprocess); + comment = RGet(n, pat, t, make_bi_choice mess_term); + previous_state = Some cur_state } n + ) + with No_result -> + (* Using the entry mess_term on this input will always fail, + even in the following of the trace *) + current_cache_list := List.tl (!current_cache_list); + raise Unify + | FailOneSideOnly -> + (* SUCCESS the pattern matching fails on one side only *) + { cur_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth cur_state.subprocess n)))) } + +(* Dispatch between (Res In), asynchronous (Res I/O), and synchronous (Res I/O), and (Res Get). + May also execute (Insert) in case an insert has been delayed because it prevented executing the + else branch of Get. *) + +exception Backtrack_get +(* This exception is used only when I should take the + else of Get and I cannot because an element that + makes Get succeed already occurs. *) + +let rec find_in_out next_f cur_state n seen_list = function + [] -> raise No_result + | ((Input(tc,pat,p,occ) as proc ,name_params,occs, facts, cache_info)::rest_subprocess) -> + debug_print ("Trying Input on process " ^ (string_of_int n)); + begin + match cache_info with + OutputInfo _ | GetInfo _ -> Parsing_helper.internal_error "Should not have output/get info for an input!" + | InputInfo(tc_list, oldpub, tc', name_params', new_occs, l) -> + let tc_list' = update_term_list oldpub cur_state.public tc_list in + if (!Param.active_attacker) && (tc_list' = []) then + begin + (* The channel is public and the attacker is active, try (Res In) *) + let current_cache_list = ref [] in + let rec do_l = function + [] -> + let seen_list' = (proc ,name_params,occs, facts, + InputInfo(tc_list', cur_state.public, tc', name_params', new_occs, !current_cache_list)) :: seen_list in + find_in_out next_f cur_state (n+1) seen_list' rest_subprocess + | (mess_term, public_status)::l -> + try + do_res_in cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_status next_f + with Unify -> + do_l l + in + do_l l + end + else + begin + (* The channel is private or the attacker is passive, try (Res I/O) *) + let current_cache_list = ref [] in + let public_channel = (not (!Param.active_attacker)) && (tc_list' = []) in + let rec do_l = function + [] -> + let seen_list' = (proc ,name_params,occs, facts, + InputInfo(tc_list', cur_state.public, tc', name_params', new_occs, !current_cache_list)) :: seen_list in + begin + try + do_sync_res_io cur_state seen_list rest_subprocess n name_params' new_occs facts tc pat p tc' public_channel next_f + with Unify | No_result -> + find_in_out next_f cur_state (n+1) seen_list' rest_subprocess + end + | (mess_term,_)::l -> + try + do_async_res_io cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' mess_term public_channel next_f + with Unify -> + do_l l + in + do_l l + end + | Nothing -> + let seen_list' = ref ((proc, name_params, occs, facts, cache_info) :: seen_list) in + try + auto_cleanup (fun () -> + let (tc', name_params') = term_evaluation_name_params (OInChannel(occ)) tc name_params in + let m = + if cur_state.current_phase < !Reduction_helper.min_choice_phase then + let v = Reduction_helper.new_var_pat pat in + (v,v) + else + (Reduction_helper.new_var_pat pat, Reduction_helper.new_var_pat pat) + in + let new_occs = (InputTag occ) :: occs in + let fact = build_mess_fact cur_state.current_phase tc' m in + let tc_list = decompose_term tc' in + let tc_list' = remove_first_in_public cur_state.public tc_list in + if (!Param.active_attacker) && (tc_list' = []) then + begin + (* Input on a public channel, and the attacker is active: apply (Res In) *) + let current_cache_list = ref [] in + try + find_io_rule (function + [mess_term1;mess_term2] -> + do_res_in cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' (mess_term1,mess_term2) None next_f + | _ -> Parsing_helper.internal_error "input case; reduction_bipro.ml" + ) new_occs (fact :: facts) name_params' [fst m; snd m] cur_state.io_rule + with Unify -> + seen_list' := (proc, name_params, occs, facts, + InputInfo([], [], tc', name_params', new_occs, !current_cache_list)) :: seen_list; + raise No_result + end + else + begin + (* Input on a private channel or the attacker is passive: apply (Res I/O) + First try an asynchronous output, with a corresponding clause in the tree *) + let current_cache_list = ref [] in + let public_channel = (not (!Param.active_attacker)) && (tc_list' = []) in + try + find_io_rule (function + [mess_term1;mess_term2] -> + do_async_res_io cur_state seen_list rest_subprocess n current_cache_list name_params' new_occs facts tc pat p tc' (mess_term1,mess_term2) public_channel next_f + | _ -> Parsing_helper.internal_error "input case; reduction_bipro.ml" + ) new_occs (fact :: facts) name_params' [fst m; snd m] cur_state.io_rule + with Unify -> + seen_list' := (proc, name_params,occs, facts, + InputInfo(tc_list', cur_state.public, tc', name_params', new_occs, !current_cache_list)) :: seen_list; + (* Try a synchronous output *) + do_sync_res_io cur_state seen_list rest_subprocess n name_params' new_occs facts tc pat p tc' public_channel next_f + end + ) + with Unify | No_result -> + find_in_out next_f cur_state (n+1) (!seen_list') rest_subprocess + | FailOneSideOnly -> + (* SUCCESS the evaluation of the channel name fails on one side only *) + { cur_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth cur_state.subprocess n)))) } + end + | ((Get(pat,t,p,p_else,occ) as proc ,name_params,occs, facts, cache_info)::rest_subprocess) -> + debug_print ("Trying Get on process " ^ (string_of_int n)); + begin + match cache_info with + OutputInfo _ | InputInfo _ -> Parsing_helper.internal_error "Should not have input/output info for a get!" + | GetInfo(old_tables, l) -> + let new_occs = (GetTag occ) :: occs in + let current_cache_list = ref [] in + let rec do_l = function + [] -> + let seen_list' = (proc ,name_params,occs, facts, + GetInfo(cur_state.tables, !current_cache_list)) :: seen_list in + find_in_out next_f cur_state (n+1) seen_list' rest_subprocess + | mess_term::l -> + try + do_res_get cur_state seen_list rest_subprocess n current_cache_list name_params new_occs facts pat t p mess_term old_tables next_f + with Unify -> + do_l l + in + do_l l + | Nothing -> + let seen_list' = ref ((proc, name_params, occs, facts, cache_info) :: seen_list) in + try + auto_cleanup (fun () -> + let m = + if cur_state.current_phase < !Reduction_helper.min_choice_phase then + let v = Reduction_helper.new_var_pat pat in + (v,v) + else + (Reduction_helper.new_var_pat pat, Reduction_helper.new_var_pat pat) + in + let new_occs = (GetTag occ) :: occs in + let fact = build_table_fact cur_state.current_phase m in + begin + let current_cache_list = ref [] in + try + find_io_rule (function + [mess_term1;mess_term2] -> + do_res_get cur_state seen_list rest_subprocess n current_cache_list name_params new_occs facts pat t p (mess_term1,mess_term2) [] next_f + | _ -> Parsing_helper.internal_error "get case; reduction_bipro.ml" + ) new_occs (fact :: facts) name_params [fst m; snd m] cur_state.io_rule + with Unify -> + if p_else != Nil then + (* See if we should take the else branch if present *) + begin + try + let new_occs = (GetTagElse occ) :: occs in + find_io_rule (function + [] -> + (* We should take the else branch, since a clause uses that branch *) + debug_print "Get: else branch should be taken"; + if List.exists (fun mess_term -> + try + auto_cleanup (fun () -> + (* we check that the pattern pat matches and t evaluates to true *) + let _ = bi_action (bi_match_pattern_and_test pat mess_term t) in + true) + with Unify -> false + (* When FailOneSideOnly is raised, it will be catched above and + the trace reconstruction succeeds. *)) cur_state.tables + then + begin + debug_print "Get: an element of the table matches, cannot take the else branch, backtracking"; + (* The Get process is blocked forever: the else branch should be taken, + but the table contains an element that prevents it. Since elements + are only added to tables, this situation will not change. + So I backtrack. *) + has_backtrack_get := true; + raise Backtrack_get + end + else + begin + debug_print "Get: taking the else branch"; + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p_else, name_params, new_occs, facts, Nothing) :: rest_subprocess); + comment = RGet2(n); + previous_state = Some cur_state } n + end + | _ -> Parsing_helper.internal_error "get else case; reduction_bipro.ml" + ) new_occs facts name_params [] cur_state.io_rule + with Unify -> + seen_list' := (proc, name_params, occs, facts, + GetInfo(cur_state.tables, !current_cache_list)) :: seen_list; + raise No_result + end + else + begin + seen_list' := (proc, name_params, occs, facts, + GetInfo(cur_state.tables, !current_cache_list)) :: seen_list; + raise No_result + end + end + ) + with Unify | No_result -> + find_in_out next_f cur_state (n+1) (!seen_list') rest_subprocess + | FailOneSideOnly -> + (* SUCCESS an element of the table matches on one side and not on the other *) + { cur_state with + goal = NonInterfGoal(ProcessTest([],[],ref (Some(n, List.nth cur_state.subprocess n)))) } + | Backtrack_get -> raise No_result + end + | ((Insert(t,p,occ), name_params, occs, facts, cache_info) as sub_proc)::rest_subprocess -> + debug_print "Doing Insert"; + begin + let new_occs = (InsertTag occ) :: occs in + let new_element_inserted = ref false in + try + auto_cleanup (fun () -> + let t' = bi_action (term_evaluation_fail t) in + let already_in = List.exists (equal_bi_terms_modulo t') cur_state.tables in + new_element_inserted := not already_in; + normal_state next_f false + { cur_state with + subprocess = List.rev_append seen_list ((p, name_params, new_occs, facts, Nothing) :: rest_subprocess); + tables = if already_in then cur_state.tables else t'::cur_state.tables; + comment = RInsert1(n, t); + previous_state = Some cur_state } n + ) + with Unify | FailOneSideOnly -> + Parsing_helper.internal_error "Insert: Unify/FailOneSideOnly should have been detected on the first try of that insert" + | No_result -> + (* The attack reconstruction failed after doing the insert. + Try not doing it, in case that allows executing the else branch of a Get. *) + if (!has_backtrack_get) && (!new_element_inserted) then + find_in_out next_f cur_state (n+1) (sub_proc :: seen_list) rest_subprocess + else + raise No_result + end + | sub_proc::rest_subprocess -> + find_in_out next_f cur_state (n+1) (sub_proc :: seen_list) rest_subprocess + +(* Handle phases *) + +let rec extract_phase n = function + [] -> [] + | (Phase(n',p,occ),name_params,occs, facts, cache_info)::r -> + let r' = extract_phase n r in + if n = n' then (p,name_params,occs, facts, Nothing)::r' else + if n<n' then (Phase(n',p,occ),name_params,occs, facts, Nothing)::r' else r' + | _::r -> extract_phase n r + +let rec find_phase next_f cur_state n = function + [] -> + if !made_forward_step then + begin + incr failed_traces; + made_forward_step := false + end; + (* Useful for debugging *) + if !debug_backtracking then + begin + ignore (Display.Text.display_reduc_state Display.Text.display_bi_term true cur_state); + print_string "Blocked. Backtracking...\n" + end + else + debug_print "Backtracking"; + raise No_result + | (Phase(n,p,_),name_params,occs, facts, cache_info)::rest_subprocess -> + debug_print "Doing Phase"; + if n <= cur_state.current_phase then + Parsing_helper.user_error "Phases should be in increasing order"; + made_forward_step := true; + begin + try + (* Do transition to phase n *) + let cur_state' = + { cur_state with + subprocess = extract_phase n cur_state.subprocess; + previous_state = Some cur_state; + current_phase = n; + comment = RPhase(n) } + in + (* Reclose public, since new function symbols may become applicable *) + let cur_state'' = add_public_list { cur_state' with public = [] } cur_state'.public in + normal_state_all next_f false cur_state'' + with No_result -> + find_phase next_f cur_state (n+1) rest_subprocess + end + | _::rest_subprocess -> find_phase next_f cur_state (n+1) rest_subprocess + +(* Put all reductions together *) + +let rec reduction_backtrack state = + try + find_in_out reduction_backtrack state 0 [] state.subprocess + with No_result -> + find_phase reduction_backtrack state 0 state.subprocess + + +(* This exception is local to reduction_nobacktrack *) +exception Reduced of (term * term) reduc_state + +let rec reduction_nobacktrack state = + try + try + find_in_out (fun state -> raise (Reduced state)) state 0 [] state.subprocess + with No_result -> + find_phase (fun state -> raise (Reduced state)) state 0 state.subprocess + with Reduced one_red_state -> + display_trace one_red_state; + Param.display_init_state := false; + reduction_nobacktrack { one_red_state with previous_state = None } + +let reduction state = + if !Param.trace_backtracking then + reduction_backtrack state + else + reduction_nobacktrack state + +(* Build the goal *) + +let analyze_tree tree = + match tree.desc with + FRule(_, lbl, _, hyp) -> + begin + match lbl, hyp with + ProcessRule(hyp_tags, name_params), hyp -> + ProcessTest([], [], ref None) + | Rfail(p), hyp -> + NIFailTest(match hyp with + [{ thefact = Pred(_, l) }] -> rev_name_subst_bi l + | _ -> Parsing_helper.internal_error "Unexpected derivation for choice") + | TestComm(pi,po), [{thefact = Pred(_,lin)}; {thefact = Pred(_,lout)}] -> + CommTest(rev_name_subst_bi lin, rev_name_subst_bi lout, ref None) + | TestEq(p), [{thefact = Pred(_,l1)};{thefact = Pred(_,l2)}] -> + NIEqTest(rev_name_subst_bi l1, rev_name_subst_bi l2) + | _ -> Parsing_helper.internal_error "Unexpected clause concluding the derivation for choice" + end + | _ -> Parsing_helper.internal_error "Unexpected derivation for choice" + + +(* Main trace reconstruction function *) + +let do_reduction tree = +(* Profile.start(); *) + debug_print "Initializing"; + has_backtrack_get := false; + made_forward_step := true; + failed_traces := 0; + let public_init = public_build !Param.freenames in + public_free := public_init; + Param.display_init_state := true; + init_name_mapping (!Param.freenames); + close_tree tree; + let init_state = + { goal = NonInterfGoal (analyze_tree tree); + subprocess = [(!(main_process), [],[],[],Nothing)]; + public = List.map (fun t -> (t,t)) public_init; + tables = []; + io_rule = []; + prepared_attacker_rule = []; + previous_state = None; + hyp_not_matched = []; + current_phase = 0; + comment = RInit } + in + let res = + begin + try + let state = init_rule init_state tree in + (* Close initially the set public *) + let state = add_public_list { state with public = [] } state.public in + if !debug_find_io_rule then + begin + auto_cleanup (fun () -> + print_string "Available rules:"; + Display.Text.newline(); + List.iter display_rule state.io_rule) + end; + debug_print "Initialization done"; + if !Param.html_output then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.LangHtml.openfile ((!Param.html_dir) ^ "/trace" ^ qs ^ ".html") ("ProVerif: trace for query " ^ qs); + Display.Html.print_string "<H1>Trace</H1>\n" + end; + let final_state = normal_state reduction true state 0 in + display_trace final_state; + if !Param.html_output then + begin + Display.Html.display_goal Display.Html.display_bi_term noninterftest_to_string final_state.goal final_state.hyp_not_matched; + Display.LangHtml.close(); + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"trace" ^ qs ^ ".html\">Trace</A><br>\n") + end + else + Display.Text.display_goal Display.Text.display_bi_term noninterftest_to_string final_state.goal final_state.hyp_not_matched; + final_state.hyp_not_matched = [] + with No_result -> + if not (!Param.trace_backtracking) then + Display.Def.print_line "Blocked!"; + if !Param.html_output then + begin + Display.LangHtml.close(); + if not (!Param.trace_backtracking) then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"trace" ^ qs ^ ".html\">Unfinished trace</A><br>\n") + end; + Display.Html.print_line "Could not find a trace corresponding to this derivation." + end; + Display.Text.print_line "Could not find a trace corresponding to this derivation."; + false + end + in +(* print_endline ("Failed " ^ (string_of_int (!failed_traces)) ^ " traces."); *) + Terms.cleanup (); +(* Profile.stop(); *) + res + +(* Heuristic to find traces more often, especially with complex protocols: + we unify rules of the derivation tree when possible + Note that success is not guaranteed; however, when the heuristic fails, + the derivation does not correspond to a trace. + +This heuristic can break inequality constraints. +We recheck them after modifying the derivation tree. *) + +(* First, revise_tree is the function that checks that inequality constraints still hold *) + +exception Loop + + +let rec find_fact f t = + if + (match t.desc with + FHAny | FEmpty | FRemovedWithProof _ -> false + | _ -> true) && (equal_facts_modulo f t.thefact) then t else + match t.desc with + FEquation son -> find_fact f son + | FRule(_,_,_,sons) -> find_fact_list f sons + | _ -> raise Not_found + +and find_fact_list f = function + [] -> raise Not_found + | a::l -> + try + find_fact f a + with Not_found -> + find_fact_list f l + + +let revise_tree tree = + let rec revise_tree_rec no_loop t = + if List.memq t no_loop then + raise Loop + else + { desc = + begin + match t.desc with + FHAny | FEmpty -> + begin + match t.thefact with + Pred(p, [t']) when + (match follow_link t' with Var v -> true | _ -> false) -> t.desc + | Pred(p, [t';t'']) when + (match follow_link t' with Var v -> true | _ -> false) && + (match follow_link t'' with Var v -> true | _ -> false) -> t.desc + | Out _ -> t.desc (* Out facts cannot be proved anyway *) + | _ -> + (* When unification has lead to instantiating a fact that need not be proved before, try to find a proof for it. *) + try + let t' = revise_tree_rec (t::no_loop) (find_fact t.thefact tree) in + t'.desc + with Not_found | Loop -> + FEmpty + end + | FRule(n, tags, constra, sons) -> + if constra != [] then + begin + try + let constra' = Terms.auto_cleanup (fun () -> + List.map Terms.copy_constra2 constra) in + Terms.auto_cleanup(fun () -> + ignore (TermsEq.simplify_constra_list [] constra')) + with TermsEq.FalseConstraint -> + Display.Def.print_line "Unification made an inequality become false."; + Display.Def.print_line "Trying with the initial derivation tree instead."; + if !Param.html_output then + Display.LangHtml.close(); + raise TermsEq.FalseConstraint + end; + FRule(n, tags, constra, List.map (revise_tree_rec no_loop) sons) + | FRemovedWithProof t -> FRemovedWithProof t + | FEquation son -> FEquation(revise_tree_rec no_loop son) + end; + thefact = t.thefact } + in + let tree' = revise_tree_rec [] tree in + if !Param.html_output then + Display.LangHtml.close(); + tree' + + +(* simplify_tree unifies facts with same session identifier *) + +(* "first" is true when this is the first call to simplify_tree. + In this case, if we find no unification to do, we do not need to call + revise_tree, since the derivation has not been modified at all *) + +module HashFactId = + struct + + type factIdElem = + HypSpec of hypspec + | Term of term + + type t = + { hash : int; + factId : factIdElem list } + + let equalFactIdElem a b = + match (a,b) with + HypSpec h, HypSpec h' -> h = h' + | Term t, Term t' -> Termslinks.equal_terms_with_links t t' + | _ -> false + + let equal a b = + (List.length a.factId == List.length b.factId) && + (List.for_all2 equalFactIdElem a.factId b.factId) + + type skel_term = + SVar of int + | SFun of string * skel_term list + + type skel_factIdElem = + SHypSpec of hypspec + | STerm of skel_term + + let rec skeleton_term = function + Var b -> + begin + match b.link with + TLink t -> skeleton_term t + | NoLink -> SVar(b.vname) + | _ -> Parsing_helper.internal_error "unexpected link in skeleton_term" + end + | FunApp(f,l) -> + match f.f_cat with + Name _ -> SFun(f.f_name,[]) + | _ -> SFun(f.f_name, List.map skeleton_term l) + + let skeleton_factIdElem = function + HypSpec x -> SHypSpec x + | Term t -> STerm(skeleton_term t) + + let hash a = a.hash + + (* build a HashFactId.t from a fact id *) + + let build fid = { hash = Hashtbl.hash(List.map skeleton_factIdElem fid); + factId = fid } + + end + +module FactHashtbl = Hashtbl.Make(HashFactId) + +let rec simplify_tree first next_f tree = + let unif_to_do_left = ref [] in + let unif_to_do_right = ref [] in + let fact_hashtbl = FactHashtbl.create 7 in + let done_unif = ref false in + + let unif t1 t2 v = + try + Terms.occur_check v t2; + if !Param.html_output then + begin + Display.Html.print_string "Unified "; + Display.Html.WithLinks.term t1; + Display.Html.print_string " with "; + Display.Html.WithLinks.term t2; + Display.Html.newline() + end + else + begin + Display.Text.print_string "Unified "; + Display.Text.WithLinks.term t1; + Display.Text.print_string " with "; + Display.Text.WithLinks.term t2; + Display.Text.newline() + end; + Terms.link v (TLink t2); + done_unif := true + with Unify -> + (* When the occur check fails, it might succeed + after rewriting the terms, so try that *) + unif_to_do_left := t1 :: (!unif_to_do_left); + unif_to_do_right := t2 :: (!unif_to_do_right) + + in + + let rec add_unif_term t1 t2 = + match t1, t2 with + FunApp(f1, l1), FunApp(f2,l2) when TermsEq.f_has_no_eq f1 && TermsEq.f_has_no_eq f2 -> + if f1 == f2 then List.iter2 add_unif_term l1 l2 + (* When f1 != f2, unification fails; I display no message. *) + | Var v, Var v' when v == v' -> () + | Var v, _ -> + begin + match v.link with + NoLink -> + begin + match t2 with + Var {link = TLink t2'} -> add_unif_term t1 t2' + | Var v' when v.unfailing -> + unif t1 t2 v + | Var v' when v'.unfailing -> + unif t2 t1 v' + | FunApp (f_symb,_) when f_symb.f_cat = Failure && v.unfailing = false -> () + (* Unification fails; I display no message *) + | _ -> unif t1 t2 v + end + | TLink t1' -> add_unif_term t1' t2 + | _ -> Parsing_helper.internal_error "Unexpected link in add_unif_term 1" + end + | FunApp(f_symb,_), Var v -> + begin + match v.link with + NoLink -> + if v.unfailing = false && f_symb.f_cat = Failure + then () (* Unification fails; I display no message *) + else unif t2 t1 v + | TLink t2' -> add_unif_term t1 t2' + | _ -> Parsing_helper.internal_error "Unexpected link in add_unif_term 2" + end + | _ -> + (* It is important to check equality *modulo the equational + theory* here. Otherwise, unify_modulo may make the two terms equal + modulo the theory but still syntactically different, which would + result in an endless iteration of unifyDerivation. *) + if not (equal_open_terms_modulo t1 t2) then + begin + unif_to_do_left := t1 :: (!unif_to_do_left); + unif_to_do_right := t2 :: (!unif_to_do_right) + end + in + + let add_unif_fact f1 f2 = + if (f1 != f2) then + match f1, f2 with + Pred(p1,l1), Pred(p2,l2) when p1 == p2 -> + List.iter2 add_unif_term l1 l2 + | Out(t1,_),Out(t2,_) -> + add_unif_term t1 t2 + | _ -> + Display.Def.print_line "Trying to unify incompatible facts in unifyDerivation; skipping this impossible unification." + + in + + let rec check_coherent factId (concl, hyp_spec, name_params, sons) = + match hyp_spec with + [] -> () + | h1::l1 -> + let factId' = (HashFactId.HypSpec h1) :: factId in + match h1 with + ReplTag (occ,count_params) -> + (* the session identifiers are part of the fact id *) + check_coherent ((HashFactId.Term (List.nth name_params count_params)) :: factId') + (concl, l1, name_params, sons) + | OutputTag occ | InsertTag occ | InputPTag occ | OutputPTag occ -> + if l1 == [] then + (* I'm reaching the conclusion *) + let fact_id = HashFactId.build factId' in + try + let concl' = FactHashtbl.find fact_hashtbl fact_id in + add_unif_fact concl concl' + with Not_found -> + FactHashtbl.add fact_hashtbl fact_id concl + else + check_coherent factId' (concl, l1, name_params, sons) + | LetTag occ | TestTag occ | TestUnifTag2 occ | GetTagElse occ -> + check_coherent factId' (concl, l1, name_params, sons) + | InputTag _ | GetTag _ -> + let f = (List.hd sons).thefact in + let fact_id = HashFactId.build factId' in + begin + try + let f' = FactHashtbl.find fact_hashtbl fact_id in + add_unif_fact f f' + with Not_found -> + FactHashtbl.add fact_hashtbl fact_id f + end; + check_coherent factId' (concl, l1, name_params, List.tl sons) + | TestUnifTag _ | BeginEvent _ | LetFilterTag _ | BeginFact | LetFilterFact -> Parsing_helper.internal_error "TestUnifTag, BeginEvent, LetFilterTag, BeginFact, LetFilterFact should not be generated for biprocesses" + in + + let rec simplify_tree1 t = + match t.desc with + FRule(_, ProcessRule(hyp_spec, name_params), constra, sons) -> + check_coherent [] (t.thefact, List.rev hyp_spec, List.rev name_params, List.rev sons); + List.iter simplify_tree1 sons + | FRule(_,_,_,sons) -> + List.iter simplify_tree1 sons + | FEquation son -> simplify_tree1 son + | FHAny -> + begin + match t.thefact with + Pred({p_info = [AttackerBin _]}, [t1;t2]) -> + if t1 != t2 then add_unif_term t1 t2 + | _ -> () + end + | _ -> () + in + + simplify_tree1 tree; + if (!unif_to_do_left) == [] then + if !done_unif then + begin + Display.Def.print_line "Iterating unifyDerivation."; + simplify_tree false next_f tree + end + else if first then + begin + debug_print "Nothing to unify."; + if !Param.html_output then + Display.LangHtml.close(); + next_f tree + end + else + begin + Display.Def.print_line "Fixpoint reached: nothing more to unify."; + next_f (revise_tree tree) + end + else + begin + if !Param.html_output then + begin + Display.Html.print_string "Trying unification "; + Display.Html.WithLinks.term_list (!unif_to_do_left); + Display.Html.print_string " with "; + Display.Html.WithLinks.term_list (!unif_to_do_right) + end + else + begin + Display.Text.print_string "Trying unification "; + Display.Text.WithLinks.term_list (!unif_to_do_left); + Display.Text.print_string " with "; + Display.Text.WithLinks.term_list (!unif_to_do_right) + end; + try + auto_cleanup (fun () -> + TermsEq.unify_modulo_list (fun () -> + Display.Def.print_line " succeeded."; + Display.Def.print_line "Iterating unifyDerivation."; + simplify_tree false next_f tree + ) (!unif_to_do_left) (!unif_to_do_right) + ) + with Unify -> + Display.Def.print_line " failed."; + next_f (revise_tree tree) + end + +let do_reduction tree = + debug_print "Starting reduction"; + let r = + if !Param.unify_derivation then + begin + debug_print "Starting unifyDerivation."; + if !Param.html_output then + begin + let qs = string_of_int (!Param.derivation_number) in + Display.Html.print_string ("<A HREF=\"unifyDeriv" ^ qs ^ ".html\" TARGET=\"unifderiv\">Unify derivation</A><br>\n"); + Display.LangHtml.openfile ((!Param.html_dir) ^ "/unifyDeriv" ^ qs ^ ".html") ("ProVerif: unifying derivation for query " ^ qs); + Display.Html.print_string "<H1>Unifying the derivation</H1>\n" + end; + try + auto_cleanup (fun () -> simplify_tree true do_reduction tree) + with TermsEq.FalseConstraint -> + do_reduction tree + end + else + do_reduction tree + in + Terms.cleanup(); + r + + diff --git a/preinstallTTool/linux/proverif/src/reduction_bipro.mli b/preinstallTTool/linux/proverif/src/reduction_bipro.mli new file mode 100644 index 0000000000000000000000000000000000000000..8fc2b3ebf38492e5c0303350def8290e1701bec4 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/reduction_bipro.mli @@ -0,0 +1,28 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val do_reduction : Types.fact_tree -> bool diff --git a/preinstallTTool/linux/proverif/src/reduction_helper.cmi b/preinstallTTool/linux/proverif/src/reduction_helper.cmi new file mode 100644 index 0000000000000000000000000000000000000000..b63fb6a88ad495d0e8c0940262e9034a90005806 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/reduction_helper.cmi differ diff --git a/preinstallTTool/linux/proverif/src/reduction_helper.cmx b/preinstallTTool/linux/proverif/src/reduction_helper.cmx new file mode 100644 index 0000000000000000000000000000000000000000..7b65dfda51162be24a452e3616c27df218a51ada Binary files /dev/null and b/preinstallTTool/linux/proverif/src/reduction_helper.cmx differ diff --git a/preinstallTTool/linux/proverif/src/reduction_helper.ml b/preinstallTTool/linux/proverif/src/reduction_helper.ml new file mode 100644 index 0000000000000000000000000000000000000000..58e992c2ff40c0ac275d67762cd069e680feecbb --- /dev/null +++ b/preinstallTTool/linux/proverif/src/reduction_helper.ml @@ -0,0 +1,866 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Pitypes +open Terms + +let main_process = ref Nil +let min_choice_phase = ref 0 +let terms_to_add_in_name_params = ref ([] : term_occ list) + +(* Functions that handle processes *) + +(* Generate a variable from a pattern, reusing variable names as much + as possible *) + +let new_var_pat1 = function + PatVar b -> copy_var b + | PatEqual (Var b) -> copy_var b + | PatTuple (f,l) -> new_var Param.def_var_name (snd f.f_type) + | PatEqual t -> new_var Param.def_var_name (get_term_type t) + +let new_var_pat pat = Var (new_var_pat1 pat) + +(* Get the variables that are defined in a pattern *) + +let rec get_pat_vars accu = function + PatVar b -> if List.memq b accu then accu else b :: accu + | PatTuple(_,l) -> List.fold_left get_pat_vars accu l + | PatEqual _ -> accu + +(* Test whether a variable occurs in a pattern/process *) + +let rec occurs_var_pat v = function + PatVar _ -> false + | PatTuple(f,l) -> List.exists (occurs_var_pat v) l + | PatEqual t -> Terms.occurs_var v t + +let rec occurs_var_proc v = function + Nil -> false + | Par(p1,p2) -> (occurs_var_proc v p1) || (occurs_var_proc v p2) + | Repl(p,_) -> occurs_var_proc v p + | Restr(_,_,p,_) -> occurs_var_proc v p + | Test(t,p1,p2,_) -> + (Terms.occurs_var v t) || + (occurs_var_proc v p1) || (occurs_var_proc v p2) + | Input(t,pat,p,_) -> + (Terms.occurs_var v t) || (occurs_var_pat v pat) || + (occurs_var_proc v p) + | Output(t1,t2,p,_) -> + (Terms.occurs_var v t1) || (Terms.occurs_var v t2) || + (occurs_var_proc v p) + | Let(pat, t, p1, p2, _) -> + (Terms.occurs_var v t) || (occurs_var_pat v pat) || + (occurs_var_proc v p1) || (occurs_var_proc v p2) + | LetFilter(_,f,p1,p2,_) -> + (Terms.occurs_var_fact v f) || + (occurs_var_proc v p1) || (occurs_var_proc v p2) + | Event(t,p,_) -> + (Terms.occurs_var v t) || (occurs_var_proc v p) + | Insert(t,p,_) -> + (Terms.occurs_var v t) || (occurs_var_proc v p) + | Get(pat,t,p,q,_) -> + (occurs_var_pat v pat) || (Terms.occurs_var v t) || + (occurs_var_proc v p) || (occurs_var_proc v q) + | Phase(_,p,_) -> occurs_var_proc v p + +(* Functions for finding the arguments to include in names *) + +(* Determine which variables should be included as arguments of names, + so that queries can be answered *) + +let need_vars_in_names = ref ([] : (string * string * Parsing_helper.extent) list) + +(* If we have a query in which NI occurs several + times and NI corresponds to a restriction in the process, then + NI designates any name created at that restriction, possibly + different names at different occurrences in the query. To say + that several occurrences of NI correspond to the same name, we + define a binding "let v = NI[...]" and use several times the variable + v. + +*) + +let get_need_vars s = + let rec get_need_list_rec = function + [] -> [] + | (s1,s2,e)::l -> + let rest = get_need_list_rec l in + if (s = s1) && (not (List.exists (fun (s2',_) -> s2 = s2') rest)) then + (s2,e) :: rest + else + rest + in + get_need_list_rec (!need_vars_in_names) + +(* Gives the string [x] to use in the construct "new a[x = ...]" + to designate an argument of a name with that meaning *) + +let meaning_encode = function + MUnknown -> "" + | MSid n -> "!" ^ (string_of_int n) + | MCompSid -> "!comp" + | MAttSid -> "!att" + | MVar(_,None) -> "" + | MVar(_,Some s) -> s + +(* Variant of [meaning_encode] more suitable for generating the + name of a fresh variable *) + +let meaning_name = function + MUnknown -> Param.def_var_name + | MSid n -> "!" ^ (string_of_int n) + | MCompSid -> "!comp" + | MAttSid -> "!att" + | MVar(b,_) -> b.sname + +(* Add a counter to each element of a list *) + +let add_count l = + List.map (fun x -> (x, ref 0)) l + +(* Build the include information used by include_arg and final_check, + by adding counters when needed *) + +type include_info_t = + envElement Stringmap.StringMap.t * + (binder * int ref) list option * + (Ptree.ident * int ref) list + +let prepare_include_info env args need_list = + let args' = match args with + None -> None + | Some l -> Some (add_count l) + in + (env, args', add_count need_list) + +(* Find an element, and increase its counter if found *) + +let rec find_count s = function + [] -> false +| (((a,ext),n)::l) -> + if s = a then + begin + incr n; + true + end + else + find_count s l + +(* Find an element (comparison with physical equality), and increase its counter if found *) + +let rec findq_count s = function + [] -> false +| ((a,n)::l) -> + if s == a then + begin + incr n; + true + end + else + findq_count s l + +(* Does the string [s] correspond to the variable [b]? *) + +let is_var env s b = + try + match Stringmap.StringMap.find s env with + EVar b' -> b' == b + | _ -> false + with Not_found -> false + +(* Determine if an argument should be included in the internal representation + of a name or not *) + +let include_arg (env, args, need_list) m always = +match m with + MVar(b,_) -> + let found_in_need_list = (is_var env b.sname b) && (find_count b.sname need_list) in + let new_meaning = + if found_in_need_list then MVar(b, Some b.sname) else MVar(b, None) + in + begin + match args with + None -> + if (always = Always) || found_in_need_list then Some(new_meaning) else None + | Some args_content -> + let found_in_args = findq_count b args_content in + if found_in_args || found_in_need_list then Some(new_meaning) else None + end +| m -> Some m + +(* Check that all needed variables have been found *) + +let final_check (env, args, need_list) sf = + List.iter (fun ((s,ext), n) -> + if !n = 0 then + Parsing_helper.input_error ("variable " ^ s ^ " not defined at restriction " ^ sf) ext) need_list; + match args with + None -> () + | Some args_content -> + List.iter (fun (b, n) -> + if !n = 0 then + Parsing_helper.internal_error ("variable " ^ (Display.Text.varname b) ^ " not found at restriction " ^ sf)) args_content + +let rec count_name_params = function + [] -> 0 + | (_,_,Always)::l -> 1+count_name_params l + | (_,_,IfQueryNeedsIt)::l -> count_name_params l + +let rec extract_name_params_noneed = function + [] -> [] + | (_,t,Always)::l -> + t::(extract_name_params_noneed l) + | (_,t,IfQueryNeedsIt)::l -> + extract_name_params_noneed l + +let rec extract_name_params sf include_info = function + [] -> + final_check include_info sf; + [] + | (m,t,always)::l -> + match include_arg include_info m always with + Some _ -> t::(extract_name_params sf include_info l) + | None -> extract_name_params sf include_info l + +let rec extract_name_params_meaning sf include_info = function + [] -> + final_check include_info sf; + [] + | (m,_,always)::l -> + match include_arg include_info m always with + Some m' -> + m'::(extract_name_params_meaning sf include_info l) + | None -> + extract_name_params_meaning sf include_info l + +let rec extract_name_params_types sf include_info l lt = + match (l,lt) with + [],[] -> + final_check include_info sf; + [] + | (m,_,always)::l, ty::lt -> + begin + match include_arg include_info m always with + Some _ -> + ty::(extract_name_params_types sf include_info l lt) + | None -> + extract_name_params_types sf include_info l lt + end + | _ -> Parsing_helper.internal_error "lists should have same length in extract_name_params_types" + +(*====================================================================*) +(* Functions to help trace reconstruction algorithms *) + +(* Find an element of the list x such that f x is true and + return (index of x in the list, x). The first element of the list + has index 0. Raise [Not_found] when not found *) + +let findi f l = + let rec findrec n = function + [] -> raise Not_found + | (a::r) -> + if f a then (n, a) else findrec (n+1) r + in + findrec 0 l + +(* Remove the first n elements of the list l *) + +let rec skip n l = + if n = 0 then l else + match l with + [] -> Parsing_helper.internal_error "skip" + | (_::l) -> skip (n-1) l + +(* replace the n-th element of the list with a' *) + +let rec replace_at n a' = function + [] -> Parsing_helper.internal_error "replace_at" +| (a::l) -> if n = 0 then a'::l else a::(replace_at (n-1) a' l) + +(* remove the n-th element of the list *) + +let rec remove_at n = function + [] -> Parsing_helper.internal_error "remove_at" +| (a::l) -> if n = 0 then l else a::(remove_at (n-1) l) + +(* add a' as n-th element of the list l *) + +let rec add_at n a' l = + if n = 0 then a' :: l else + match l with + [] -> Parsing_helper.internal_error "add_at" + | (a::l) -> a::(add_at (n-1) a' l) + +(* Test equality. t1 and t2 must be closed, but they + may contain variables linked with TLink + Optimized code when we have no equations *) + +let equal_terms_modulo t1 t2 = + if TermsEq.hasEquations() then + try + auto_cleanup (fun () -> + TermsEq.unify_modulo (fun () -> ()) t1 t2); + true + with Unify -> + false + else + Termslinks.equal_closed_terms t1 t2 + +(* Matching modulo the equational theory + t2 must be closed, but may contain variables linked with TLink + Optimize the code when we have no equations *) + +let match_modulo next_f t1 t2 = + if TermsEq.hasEquations() then + TermsEq.unify_modulo next_f t1 t2 + else + begin + Termslinks.match_terms t1 t2; + next_f () + end + +let match_modulo_list next_f l1 l2 = + if TermsEq.hasEquations() then + TermsEq.unify_modulo_list next_f l1 l2 + else + begin + List.iter2 Termslinks.match_terms l1 l2; + next_f () + end + +(* Creates a new name *) + +let new_name p s t = + Terms.create_name (Terms.fresh_id s) ([], t) p + +let rec get_name_charac t = + match t with + FunApp({f_cat = Name { prev_inputs_meaning = sl}} as f,l) -> + let rec find_first_sid sl l = + match (sl,l) with + [],[] -> [f] + | (((MSid _ | MCompSid | MAttSid) as sid_meaning)::_,sid::_) -> + begin + match sid with + FunApp(fsid,[]) -> [f;fsid] + | Var {link = TLink t} -> find_first_sid [sid_meaning] [t] + | _ -> Parsing_helper.internal_error "a session identifier should be a function symbol without argument" + end + | (_::sl', _::l') -> + find_first_sid sl' l' + | _ -> Parsing_helper.internal_error "different length in find_first_sid" + in + find_first_sid sl l + | Var { link = TLink t } -> get_name_charac t + | _ -> Parsing_helper.internal_error "unexpected term in get_name_charac" + +module Rev_name_tab = Hashtbl.Make (struct + type t = Types.term + let equal = equal_terms_modulo + let hash p = Hashtbl.hash (get_name_charac p) +end) + +let name_mapping = Rev_name_tab.create 7 + +let init_name_mapping freenames = + Rev_name_tab.clear name_mapping; + List.iter (fun n -> + Rev_name_tab.add name_mapping (FunApp(n,[])) n) freenames + +let add_name_for_pat t = + try + Rev_name_tab.find name_mapping t + with Not_found -> + let n = new_name true ( + match t with + FunApp(f,_) -> f.f_name + | _ -> "a") (Terms.get_term_type t) + in + (* + print_string "New abbreviation: "; + print_string n.f_name; + print_string " = "; + Display.Text.display_term t; + print_newline(); + *) + Rev_name_tab.add name_mapping t n; + n + + +let add_new_name t = + let n = new_name false "a" t in + Rev_name_tab.add name_mapping (FunApp(n,[])) n; + n + +(* Display for debugging *) + +let display_hyp_spec = function + ReplTag (o,_) -> print_string "!"; print_string (string_of_int o) +| InputTag o -> print_string "i"; print_string (string_of_int o) +| BeginEvent o -> print_string "b"; print_string (string_of_int o) +| BeginFact -> print_string "bf" +| LetFilterTag o -> print_string "s"; print_string (string_of_int o) +| LetFilterFact -> print_string "sf" +| OutputTag o -> print_string "o"; print_string (string_of_int o) +| TestTag o -> print_string "t"; print_string (string_of_int o) +| LetTag o -> print_string "l"; print_string (string_of_int o) +| TestUnifTag o -> print_string "u"; print_string (string_of_int o) +| TestUnifTag2 o -> print_string "ud"; print_string (string_of_int o) +| InputPTag o -> print_string "ip"; print_string (string_of_int o) +| OutputPTag o -> print_string "op"; print_string (string_of_int o) +| InsertTag o -> print_string "it"; print_string (string_of_int o) +| GetTag o -> print_string "gt"; print_string (string_of_int o) +| GetTagElse o -> print_string "gte"; print_string (string_of_int o) + +let display_tag hsl nl = + print_string "Process("; + Display.Text.display_list display_hyp_spec "," hsl; + print_string "; "; + Display.Text.WithLinks.term_list nl; + print_string ")" + +(* Equivalence between facts *) + +let public_free = ref [] + +let corresp_att_mess p1 p2 = + match p1.p_info, p2.p_info with + [Attacker(i,ta)], [Mess(j,tm)] -> i == j && (ta == tm) + | _ -> false + +let corresp_att_mess_bin p1 p2 = + match p1.p_info, p2.p_info with + [AttackerBin(i,ta)], [MessBin(j,tm)] -> i == j && (ta == tm) + | _ -> false + +let match_equiv next_f f1 f2 = + match (f1,f2) with + Out(t1,l1), Out(t2,l2) -> match_modulo next_f t2 t1 + | Pred(p1,l1), Pred(p2,l2) when p1 == p2 -> match_modulo_list next_f l2 l1 + | Pred(p1,[t1]), Pred(p2, [t2';t2]) + when (corresp_att_mess p1 p2) + && (List.mem t2' (!public_free)) -> match_modulo next_f t2 t1 + | Pred(p1,[t1;t2]), Pred(p2, [t3';t3;t4';t4]) + when (corresp_att_mess_bin p1 p2) + && (List.mem t3' (!public_free)) + && (List.mem t4' (!public_free)) -> match_modulo_list next_f [t3;t4] [t1;t2] + | _ -> raise Unify + +let rec match_equiv_list next_f l1 l2 = + match (l1,l2) with + [],[] -> next_f() + | (a1::l1,a2::l2) -> + match_equiv (fun () -> match_equiv_list next_f l1 l2) a1 a2 + | _ -> Parsing_helper.internal_error "match_equiv_list" + +(* Substitute a name for another name *) + +let term_subst t n1 n2 = + Terms.replace_name n1 n2 t + +let fact_subst f n1 n2 = + match f with + Pred(p,l) -> Pred(p, List.map (fun t -> term_subst t n1 n2) l) + | Out(t,l) -> Out(term_subst t n1 n2, List.map(fun (b,t) -> (b, term_subst t n1 n2)) l) + +let rec pat_subst p n1 n2 = + match p with + PatVar b -> PatVar b + | PatTuple (f,l) -> PatTuple(f,List.map (fun p -> pat_subst p n1 n2) l) + | PatEqual t -> PatEqual (term_subst t n1 n2) + +let rec process_subst p n1 n2 = + match p with + Nil -> Nil + | Par(p1,p2) -> Par(process_subst p1 n1 n2, process_subst p2 n1 n2) + | Restr(n,args,p,occ) -> Restr(n, args, process_subst p n1 n2,occ) + | Repl(p,occ) -> Repl(process_subst p n1 n2, occ) + | Let(pat,t,p,q,occ) -> Let(pat_subst pat n1 n2, term_subst t n1 n2, process_subst p n1 n2, process_subst q n1 n2,occ) + | Input(t, pat, p, occ) -> Input(term_subst t n1 n2, pat_subst pat n1 n2, process_subst p n1 n2, occ) + | Output(tc, t, p, occ) -> Output(term_subst tc n1 n2, term_subst t n1 n2, process_subst p n1 n2, occ) + | Test(t, p, q, occ) -> Test(term_subst t n1 n2, process_subst p n1 n2, process_subst q n1 n2, occ) + | Event(t, p, occ) -> Event(term_subst t n1 n2, process_subst p n1 n2, occ) + | Insert(t, p, occ) -> Insert(term_subst t n1 n2, process_subst p n1 n2, occ) + | Get(pat, t, p, q, occ) -> Get(pat_subst pat n1 n2, term_subst t n1 n2, process_subst p n1 n2, process_subst q n1 n2, occ) + | Phase(n,p,occ) -> Phase(n,process_subst p n1 n2,occ) + | LetFilter(bl, f, p, q, occ) -> LetFilter(bl, fact_subst f n1 n2, process_subst p n1 n2, process_subst q n1 n2, occ) + +(* let process_subst = Profile.f4 "process_subst" process_subst *) + +(* Copy a process *) + +let copy_binder b = + let b' = Terms.copy_var b in + match b.link with + NoLink -> + Terms.link b (VLink b'); + b' + | _ -> Parsing_helper.internal_error "unexpected link in copy_binder" + +let update_env env = + Stringmap.StringMap.map (function + (EVar b) as x -> + begin + match b.link with + VLink b' -> EVar b' + | _ -> x + end + | x -> x) env + +let update_args_opt lopt = + match lopt with + None -> None + | Some l -> Some (List.map (fun b -> + begin + match b.link with + VLink b' -> b' + | _ -> b + end) l) + +let rec copy_pat = function + PatVar b -> PatVar (copy_binder b) + | PatTuple(f,l) -> PatTuple(f, List.map copy_pat l) + | PatEqual(t) -> PatEqual (copy_term2 t) + +let rec copy_process = function + Nil -> Nil + | Par(p1,p2) -> Par(copy_process p1, copy_process p2) + | Restr(n,(args,env),p,occ) -> Restr(n, (update_args_opt args,update_env env), copy_process p,occ) + | Repl(p,occ) -> Repl(copy_process p, occ) + | Let(pat, t, p, q, occ) -> let pat' = copy_pat pat in Let(pat', copy_term2 t, copy_process p, copy_process q, occ) + | Input(t, pat, p, occ) -> let pat' = copy_pat pat in Input(copy_term2 t, pat', copy_process p, occ) + | Output(tc,t,p, occ) -> Output(copy_term2 tc, copy_term2 t, copy_process p, occ) + | Test(t,p,q,occ) -> Test(copy_term2 t, copy_process p, copy_process q,occ) + | Event(t, p, occ) -> Event(copy_term2 t, copy_process p, occ) + | Insert(t, p, occ) -> Insert(copy_term2 t, copy_process p, occ) + | Get(pat, t, p, q, occ) -> let pat' = copy_pat pat in Get(pat', copy_term2 t, copy_process p, copy_process q, occ) + | Phase(n,p,occ) -> Phase(n, copy_process p,occ) + | LetFilter(bl, f, p, q, occ) -> let bl' = List.map copy_binder bl in LetFilter(bl', copy_fact2 f, copy_process p, copy_process q, occ) + + +(* Close all terms after term_evaluation. Indeed, new variables may + be introduced by term evaluation, when some constructor/destructor + rules have more variables in their right-hand side than in + their left-hand side. This may happen when the equational + theory itself contains linear equations with different variables + in their left/right-hand sides. + Also close facts of the derivation tree. *) + +let rec close_term = function + Var v -> + begin + match v.link with + NoLink -> + let name = add_new_name v.btype in + let valname = FunApp(name, []) in + Terms.link v (TLink valname) + | TLink t -> close_term t + | _ -> Parsing_helper.internal_error "unexpected link in close_term" + end + | FunApp(f,l) -> List.iter close_term l + +let close_fact = function + Pred(p,l) -> List.iter close_term l + | Out(t,l) -> close_term t; List.iter (fun (_,t') -> close_term t') l + +let rec close_tree tree = + close_fact tree.thefact; + match tree.desc with + FHAny | FEmpty | FRemovedWithProof _ -> () + | FEquation son -> close_tree son + | FRule(_,tags,constra,sons) -> + List.iter close_tree sons; + List.iter (List.iter (function + | Neq(t1,t2) -> close_term t1; close_term t2)) constra; + match tags with + ProcessRule (hsl,nl) -> List.iter close_term nl + | _ -> () + +(* Close terms for testing equality modulo of open terms + In contrast to close_term above, it does not register the names + in rev_name_tab since these names will be immediately forgotten + after the equality test. *) + +let rec close_term_tmp = function + Var v -> + begin + match v.link with + NoLink -> + let name = new_name false "a" v.btype in + let valname = FunApp(name, []) in + Terms.link v (TLink valname) + | TLink t -> close_term_tmp t + | _ -> Parsing_helper.internal_error "unexpected link in close_term" + end + | FunApp(f,l) -> List.iter close_term_tmp l + +(* Equality of terms modulo the equational theory + Works for terms that may not be closed. *) +let equal_open_terms_modulo t1 t2 = + if TermsEq.hasEquations() then + try + auto_cleanup (fun () -> + close_term_tmp t1; + close_term_tmp t2; + TermsEq.unify_modulo (fun () -> ()) t1 t2); + true + with Unify -> + false + else + Termslinks.equal_terms_with_links t1 t2 + +(* Equality of facts modulo the equational theory + Works for facts that may not be closed. Note that the equality + of environments for Out facts is not verified *) +let equal_facts_modulo f1 f2 = + match f1, f2 with + Pred(p1,l1), Pred(p2,l2) -> + (p1 == p2) && (List.for_all2 equal_open_terms_modulo l1 l2) + | Out(t1,_),Out(t2,_) -> + equal_open_terms_modulo t1 t2 + | _ -> false + +(* Copy a closed term *) + +let rec copy_closed = function + FunApp(f,l) -> FunApp(f, List.map copy_closed l) + | Var v -> match v.link with + TLink l -> copy_closed l + | _ -> Parsing_helper.internal_error "unexpected link in copy_closed" + +let non_syntactic f = + match f.f_cat with + Syntactic f' -> f' + | _ -> f + +let rec copy_closed_remove_syntactic = function + | FunApp(f,l) -> FunApp(non_syntactic f, List.map copy_closed_remove_syntactic l) + | Var v -> + match v.link with + TLink l -> copy_closed_remove_syntactic l + | _ -> Parsing_helper.internal_error "unexpected link in copy_closed" + +(* Reverse-apply a name substitution + The pattern must be closed. *) + +let rec rev_name_subst = function + Var v -> + begin + match v.link with + TLink t -> + let t' = rev_name_subst t in + v.link <- TLink2 t'; (* Store the image of the translated term, to avoid redoing work *) + t' + | TLink2 t' -> t' + | _ -> Parsing_helper.internal_error "unexpected link in rev_name_subst" + end + | FunApp(f,l) -> + let f = non_syntactic f in + match f.f_cat with + Name _ -> + let t' = FunApp(f, rev_name_subst_list l) in + FunApp(add_name_for_pat t',[]) + | _ -> (*hash_cons*) (FunApp(f, rev_name_subst_list l)) + +and rev_name_subst_list l = List.map rev_name_subst l + +(* let rev_name_subst = Profile.f1 "rev_name_subst" rev_name_subst *) + +(* let rev_name_subst_list = Profile.f1 "rev_name_subst_list" rev_name_subst_list *) + +let rev_name_subst_fact = function + Pred(p,l) -> Pred(p, rev_name_subst_list l) + | Out(t,l) -> Out(rev_name_subst t, List.map (fun (v,t') -> (v,rev_name_subst t')) l) + +(* Check if a term is an allowed channel *) + +let rec follow_link = function + Var { link = TLink t } -> follow_link t + | Var { link = TLink2 t } -> t + | t -> t + +let rec close_term_collect_links links = function + Var v -> + begin + match v.link with + NoLink -> + let name = add_new_name v.btype in + let valname = FunApp(name, []) in + Terms.link v (TLink valname); + links := (v,v.link) :: (!links); + | TLink t -> + if not (List.exists (fun (v',_) -> v == v') (!links)) then + (* If v is in links, we have already done this, so no need to redo it *) + begin + links := (v,v.link) :: (!links); + close_term_collect_links links t + end + | _ -> Parsing_helper.internal_error "unexpected link in close_term" + end + | FunApp(f,l) -> List.iter (close_term_collect_links links) l + +let close_fact_collect_links links = function + Pred(p,l) -> List.iter (close_term_collect_links links) l + | Out(t,l) -> close_term_collect_links links t; List.iter (fun (_,t') -> close_term_collect_links links t') l + +let rec close_tree_collect_links links tree = + close_fact_collect_links links tree.thefact; + match tree.desc with + FHAny | FEmpty | FRemovedWithProof _ -> () + | FEquation son -> close_tree_collect_links links son + | FRule(_,tags,constra,sons) -> + List.iter (close_tree_collect_links links) sons; + List.iter (List.iter (function + | Neq(t1,t2) -> close_term_collect_links links t1; close_term_collect_links links t2)) constra; + match tags with + ProcessRule (hsl,nl) -> List.iter (close_term_collect_links links) nl + | _ -> () + +(* Compute the phase number of a predicate *) + +let getphase p = + match p.p_info with + [Attacker(n,_)] | [Mess(n,_)] | [InputP(n)] | [OutputP(n)] + | [AttackerBin(n,_)] | [MessBin(n,_)] | [InputPBin(n)] | [OutputPBin(n)] + | [Table n] | [TableBin n] -> + n + | _ -> Parsing_helper.internal_error "Bad predicate for getphase" + +(* Evaluates an inequality constraint of a destructor *) + +let disequation_evaluation (t1,t2) = + let assoc_gen_with_var = ref [] in (* Association list general var * var *) + (* all general variable in [constra] are replaced by classic variables *) + let t1' = replace_f_var assoc_gen_with_var t1 + and t2' = replace_f_var assoc_gen_with_var t2 in + Terms.auto_cleanup (fun () -> + try + TermsEq.unify_modulo (fun () -> false) t1' t2' + with Unify -> true) + +(* Test if the term is "fail" *) + +let is_fail = function + | FunApp(f,[]) when f.f_cat = Failure -> true + | _ -> false + +(* Update the value of name_params after pattern-matching *) + +let rec update_name_params put_var name_params = function + PatVar b -> (MVar(b, None), copy_closed_remove_syntactic (Var b), put_var)::name_params + | PatTuple(f,l) -> update_name_params_list put_var name_params l + | PatEqual _ -> name_params + +and update_name_params_list put_var name_params = function + [] -> name_params + | (a::l) -> update_name_params_list put_var (update_name_params put_var name_params a) l + +(* Check is a term may be represented by several patterns, + equal modulo the equational theory. In this case, if + Param.eq_in_names is true, we add the considered term + to the arguments of names defined afterwards. + +Note: it is important that terms are added in name_params in exactly +the same cases in the generation of clauses and in attack +reconstruction. In the generation of clauses, we use the function +transl_check_several_patterns to check if this addition should be +done. However, we cannot use the same function in attack +reconstruction. Indeed, terms are substituted during the evaluation of +the process, so the result of transl_check_several_patterns would not +be the same in pitransl and in reduction, leading to different values +of name_params, so errors. Hence, in transl_check_several_patterns we +store in terms_to_add_in_name_params which terms are added to +name_params (by storing their occurrence occ), and we reuse the stored +value in reduction_check_several_patterns, which we call in attack +reconstruction. + +*) + +let rec check_several_patterns_rec = function + Var _ -> false + | FunApp(f,l) -> + (List.exists check_several_patterns_rec l) || + (match f.f_cat with + Red rules -> + begin + match f.f_initial_cat with + Red init_rules -> List.length rules > List.length init_rules + | _ -> Parsing_helper.internal_error "Reduction_helper.check_several_patterns_rec: f_initial_cat Red expected" + end + | Eq rules -> List.length rules > 0 + | _ -> false) + +let transl_check_several_patterns occ t = + let add_name_param = (!Param.eq_in_names) && (check_several_patterns_rec t) in + if add_name_param && + (not (List.mem occ (!terms_to_add_in_name_params))) then + terms_to_add_in_name_params := occ :: (!terms_to_add_in_name_params); + add_name_param + +let rec reduction_check_several_patterns occ = + (!Param.eq_in_names) && + (List.mem occ (!terms_to_add_in_name_params)) + +(* After the translation of the query in pisyntax/pitsyntax, + bound names used in the query may not be fully translated, + because we need first to generate clauses to know the exact arguments of + the names. The following functions translate the remaining names *) + +let rec check_delayed_names_t = function + Var v -> + begin + match v.link with + PGLink f -> + let t' = f() in + v.link <- TLink t'; + t' + | TLink t -> t + | NoLink -> Var v + | _ -> Parsing_helper.internal_error "unexpected link in check_delayed_names_t" + end + | FunApp(f,l) -> FunApp(f, List.map check_delayed_names_t l) + + +let check_delayed_names_e = function + QSEvent(b,t) -> QSEvent(b, check_delayed_names_t t) + | QFact(p,tl) -> QFact(p, List.map check_delayed_names_t tl) + | QNeq(t1,t2) -> QNeq(check_delayed_names_t t1, check_delayed_names_t t2) + | QEq(t1,t2) -> QEq(check_delayed_names_t t1, check_delayed_names_t t2) + +let rec check_delayed_names_r = function + Before(ev,hypll) -> Before(check_delayed_names_e ev, List.map (List.map check_delayed_names_h) hypll) + +and check_delayed_names_h = function + QEvent(ev) -> QEvent(check_delayed_names_e ev) + | NestedQuery(q) -> NestedQuery(check_delayed_names_r q) + +let check_delayed_names = function + PutBegin(b,l) -> PutBegin(b,l) + | RealQuery q -> RealQuery(check_delayed_names_r q) + diff --git a/preinstallTTool/linux/proverif/src/reduction_helper.mli b/preinstallTTool/linux/proverif/src/reduction_helper.mli new file mode 100644 index 0000000000000000000000000000000000000000..6395a576300cfe73e52fbc4cbc7f49e3f42d58d7 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/reduction_helper.mli @@ -0,0 +1,113 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +val main_process : process ref +val min_choice_phase : int ref +val terms_to_add_in_name_params : Pitypes.term_occ list ref + +val new_var_pat1 : pattern -> binder +val new_var_pat : pattern -> term +val get_pat_vars : binder list -> pattern -> binder list +val occurs_var_pat : binder -> pattern -> bool +val occurs_var_proc : binder -> process -> bool + +val need_vars_in_names : (string * string * Parsing_helper.extent) list ref +val get_need_vars : string -> (string * Parsing_helper.extent) list +val meaning_encode : arg_meaning -> string +val meaning_name : arg_meaning -> string + +type include_info_t +val prepare_include_info : + envElement Stringmap.StringMap.t -> binder list option -> Ptree.ident list -> include_info_t +val count_name_params : Pitypes.name_param_info list -> int +val extract_name_params_noneed : Pitypes.name_param_info list -> term list +val extract_name_params : string -> include_info_t -> Pitypes.name_param_info list -> term list +val extract_name_params_meaning : string -> include_info_t -> Pitypes.name_param_info list -> arg_meaning list +val extract_name_params_types : string -> include_info_t -> Pitypes.name_param_info list -> typet list -> typet list + +val findi : ('a -> bool) -> 'a list -> int * 'a +val skip : int -> 'a list -> 'a list +val replace_at : int -> 'a -> 'a list -> 'a list +val remove_at : int -> 'a list -> 'a list +val add_at : int -> 'a -> 'a list -> 'a list + +val equal_terms_modulo : term -> term -> bool +val equal_open_terms_modulo : term -> term -> bool +val equal_facts_modulo : fact -> fact -> bool +val match_modulo : (unit -> 'a) -> term -> term -> 'a +val match_modulo_list : + (unit -> 'a) -> term list -> term list -> 'a + +val get_name_charac : term -> funsymb list +val init_name_mapping : funsymb list -> unit +val add_name_for_pat : term -> funsymb +val add_new_name : typet -> funsymb + +val display_tag : hypspec list -> term list -> unit + +val public_free : term list ref + +val match_equiv : (unit -> 'a) -> fact -> fact -> 'a +val match_equiv_list : + (unit -> 'a) -> fact list -> fact list -> 'a + +val fact_subst : + fact -> funsymb -> term -> fact +val process_subst : + process -> funsymb -> term -> process + +val copy_binder : binder -> binder +val copy_pat : pattern -> pattern +val copy_process : process -> process + +val close_term : term -> unit +val close_tree : fact_tree -> unit + +val copy_closed : term -> term +val copy_closed_remove_syntactic : term -> term + +val rev_name_subst : term -> term +val rev_name_subst_list : term list -> term list +val rev_name_subst_fact : fact -> fact + +val follow_link : term -> term +val close_tree_collect_links : (binder * linktype) list ref -> fact_tree -> unit + +val getphase : predicate -> int + +val disequation_evaluation : term * term -> bool +val is_fail : term -> bool + +val update_name_params : when_include -> Pitypes.name_param_info list -> + pattern -> Pitypes.name_param_info list + +val transl_check_several_patterns : Pitypes.term_occ -> term -> bool +val reduction_check_several_patterns : Pitypes.term_occ -> bool + +val check_delayed_names : Pitypes.query -> Pitypes.query diff --git a/preinstallTTool/linux/proverif/src/rules.cmi b/preinstallTTool/linux/proverif/src/rules.cmi new file mode 100644 index 0000000000000000000000000000000000000000..e8c57e4bfe127256ed6cda29a98b7c9f68b834fb Binary files /dev/null and b/preinstallTTool/linux/proverif/src/rules.cmi differ diff --git a/preinstallTTool/linux/proverif/src/rules.cmx b/preinstallTTool/linux/proverif/src/rules.cmx new file mode 100644 index 0000000000000000000000000000000000000000..d734c2dff85c3a4ef7b8696180338a9b087edd73 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/rules.cmx differ diff --git a/preinstallTTool/linux/proverif/src/rules.ml b/preinstallTTool/linux/proverif/src/rules.ml new file mode 100644 index 0000000000000000000000000000000000000000..a36d71c43a2eae46ea6db527cd9266b96a3c0f34 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/rules.ml @@ -0,0 +1,1415 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types +open Terms +open TermsEq +open Selfun + +let display_debug = ref false + +(* let resol_step = ref 0 *) + +let sound_mode = ref false +let is_inside_query = ref false + +let not_set = ref ([]: fact list) +let add_not f = + not_set := f :: (!not_set) + +let elimtrue_set = ref ([]: (int * fact) list) +let add_elimtrue f = + elimtrue_set := f :: (!elimtrue_set) + +(* Check that two facts are smaller for all instances *) + +let rec get_vars_rep vlist = function + Var v -> vlist := v :: (!vlist) + | FunApp(_,l) -> + List.iter (get_vars_rep vlist) l + +let get_vars_rep_fact vlist = function + Pred(p,l) -> List.iter (get_vars_rep vlist) l + | Out(t,l) -> get_vars_rep vlist t; + List.iter (fun (_,t') -> get_vars_rep vlist t') l + +let is_in_list vlist v = + let rec remove_first v = function + [] -> raise Not_found + | (v'::l) -> if v' == v then l else v' :: (remove_first v l) + in + try + vlist := remove_first v (!vlist); + true + with Not_found -> false + +let is_smaller f1 f2 = + (Terms.fact_size f1 < Terms.fact_size f2) && + (let v1 = ref [] in + let v2 = ref [] in + get_vars_rep_fact v1 f1; + get_vars_rep_fact v2 f2; + List.for_all (is_in_list v2) (!v1)) + +let equiv_set = ref ([]: (fact list * fact * int) list) +let add_equiv ((hyp, concl, n) as r) = + (* Check that \sigma h smaller than \sigma concl for all \sigma, for all h in hyp. + This implies termination of the replacement process *) + if not (List.for_all (fun h -> is_smaller h concl) hyp) then + Parsing_helper.user_error "For equivalences, the conclusion must be larger than the hypotheses\nand this must be true for all instances of these facts.\n"; + (* Check that only ONE replacement rule applies to a given fact. + This implies confluence of the replacement process *) + List.iter (fun (_, concl',_) -> + try + Terms.auto_cleanup (fun () -> Terms.unify_facts concl concl'); + Parsing_helper.user_error "Conflict between equivalences: two of them apply to the same fact.\n"; + with Unify -> () + ) (!equiv_set); + begin + match concl with + Pred(p,((FunApp(f,_) :: _) as l)) when + p.p_prop land Param.pred_TUPLE != 0 && + f.f_cat = Tuple -> + begin + try + let _ = reorganize_fun_app f l in + Parsing_helper.user_error "Conflict between an equivalence and the decomposition of data constructors:\nan equivalence applies to a fact which is also decomposable by data constructors.\n" + with Not_found -> () + end + | _ -> () + end; + (* Store the replacement rule *) + equiv_set := r :: (!equiv_set) + +(***************************************************************** + Limiting the depth of terms and number of hypotheses to + enforce termination. Disabled in sound mode. + + The limit function replace subterm with depth egal to + Param.max_deph by fresh variable. + Furthermore, the rule can have a limited number of hypothesis, + depending of Param.max_hyp. +******************************************************************) + +let rec limit_depth n t = + if n = 0 then + Terms.new_var_def (Terms.get_term_type t) + else + match t with + | Var v -> t + | FunApp(f,l) -> FunApp(f, List.map (limit_depth (n-1)) l) + +let limit_depth_fact n = function + Pred(chann,t) -> Pred(chann, List.map (limit_depth n) t) + | Out(t,l) -> Out(limit_depth n t, List.map (fun (v,t) -> (v, limit_depth n t)) l) + +let rec limit_depth_constra n c = List.map (function + Neq(t1,t2) -> Neq(limit_depth n t1, limit_depth n t2)) c + +let rec max_length n = function + [] -> [] + | (a::l) -> if n = 0 then [] else a::(max_length (n-1) l) + +let rec cancel_history n maxn h = + if maxn <= n then h else + cancel_history n (maxn-1) (Any(n,h)) + +let limit_depth_rule r = + if !sound_mode then r else + let r = + let max_hyp = !Param.max_hyp in + if max_hyp < 0 then r else + let (hyp, concl, hist,constra) = r in + (* remove some hypotheses/constraints if they are too numerous + Adjust the history hist accordingly *) + (max_length max_hyp hyp, concl, + cancel_history max_hyp (List.length hyp) hist, + List.map (max_length max_hyp) (max_length max_hyp constra)) + in + let max_depth = ! Param.max_depth in + if max_depth < 0 then r else + let (hyp, concl, hist,constra) = r in + (List.map (limit_depth_fact max_depth) hyp, + limit_depth_fact max_depth concl, hist, + List.map (limit_depth_constra max_depth) constra) + +(****************************************************************** + Decompose tuples and data constructors in hypotheses of rules. + It is important for the correctness of this optimization that + p:x is never selected when p is a predicate on which we + perform the decomposition of data constructors, except + when there are only such facts in the clause. + + Also eliminates duplicate hypotheses. +******************************************************************) + +let rec pos_in_list init f = function + [] -> -1 + | (a::l) -> if f a then init else pos_in_list (init+1) f l + +(* is_name_proj 0 s returns true when s starts with numbers, + followed by "-proj-". + The name of projections as generated by Terms.projection_fun + satisfies this condition, and no other function does. + (In particular, identifiers chosen by the user cannot + satisfy it, because they cannot contain "-".) *) + +let rec is_name_proj n s = + if String.length s < n+6 then false else + if ('0' <= s.[n]) && ('9' >= s.[n]) then is_name_proj (n+1) s else + (String.sub s n 6) = "-proj-" + +let is_exempt_from_dectuple (_,_,h,_) = + match h with + Rule (_,Apply(f,p),_,_,_) -> + (* rules that apply constructors ... *) + (f.f_cat = Tuple) || + (* or their projections *) + (is_name_proj 0 f.f_name) + | Rule (_,LblEquiv,_,_,_) -> true + | _ -> false + +let rec decompose_hyp_rec accu hypl = + List.fold_right (fun hyp1 (hypl,nl,histl) -> + let default() = + let count = pos_in_list (nl+1) (equal_facts hyp1) hypl in + if count >= 0 then + (hypl, nl-1, Removed(nl, count, histl)) + else + (hyp1::hypl, nl-1, histl) + in + match hyp1 with + Pred(chann,l0) -> + let rec try_equiv_set = function + [] -> + if chann.p_prop land Param.pred_TUPLE != 0 then + try + match l0 with + (FunApp(f,_) :: _) when f.f_cat = Tuple -> + let l = reorganize_fun_app f l0 in + let (Rule(_, _, hyp, _, _)) as hist_dec = History.get_rule_hist (RApplyFunc(f,chann)) in + decompose_hyp_rec (hypl, nl+(List.length l)-1, (Resolution(hist_dec, nl, histl))) + (List.map2 (fun (Pred(p', _)) x -> Pred(p', x)) hyp l) + | _ -> default() + with Not_found -> default() + else default() + | (hypeq, concleq, neq)::l -> + try + let hypeq' = + Terms.auto_cleanup (fun () -> + Terms.match_facts concleq hyp1; + List.map copy_fact3 hypeq) + in + let hist_dec = Rule(neq, LblEquiv, hypeq, concleq, []) in + decompose_hyp_rec (hypl, nl+(List.length hypeq')-1, (Resolution(hist_dec, nl, histl))) hypeq' + with NoMatch -> + try_equiv_set l + in + try_equiv_set (!equiv_set) + | _ -> default() + ) hypl accu + +let decompose_hyp_tuples ((hypl, concl, hist, constra) as rule) = + if is_exempt_from_dectuple rule then + rule + else + let (hypl', nl', histl') = + decompose_hyp_rec ([], (List.length hypl)-1, hist) hypl + in + (hypl', concl, histl',constra) + + +(********************************************************************** + Counts occurrences of a variable in a list of facts + [occur_count v l] + returns the number of occurrences of v in the list of facts l +***********************************************************************) + +let rec list_add f = function + [] -> 0 + | (a::l) -> (f a) + (list_add f l) + +(** [term_occur_count v t] return the number of occurrence of [v] in [t] *) +let rec term_occur_count v = function + Var v' -> if v == v' then 1 else 0 + | FunApp(f,l) -> list_add (term_occur_count v) l + +let fact_occur_count v = function + Pred(chann, l) -> list_add (term_occur_count v) l + | Out(t,l) -> + term_occur_count v t + list_add (fun (_,t2) -> term_occur_count v t2) l + +let occur_count v l = list_add (fact_occur_count v) l + +let constra_occur_count v = function + | Neq(t1,t2) -> term_occur_count v t1 + term_occur_count v t2 + +(** [occur_count_constra v f] returns the number of occurences of [v] in the formula [f]. *) +let occur_count_constra v l = + list_add (list_add (constra_occur_count v)) l + +(********************************************************************** + Eliminate hypotheses p(x1...xn) where p has been declared "elimVar" + or "elimVarStrict" and x1...xn do not occur elsewhere. + Such a declaration means that p(x...x) is true for some value of x. + This is correct in particular when p = attacker. When p is declared + elimVar and we are not in sound_mode, x1...xn are allowed to occur + in inequalities. + + In sound_mode, we always require that x1...xn do not occur in + inequalities. +***********************************************************************) + +let elim_any_x ((hypl', concl, histl', constra) as r) = + let (hypl'', _, histl'') = List.fold_right (fun hyp1 (hypl, nl, histl) -> + match hyp1 with + Pred(chann, l) -> + begin + try + let (n, ff) = List.find (fun (_, ff) -> + let hyp1vlist = ref [] in + Terms.get_vars_fact hyp1vlist hyp1; + try + Terms.auto_cleanup (fun () -> + Terms.unify_facts ff hyp1; + (* check that all modified variables of hyp1 do not + occur in the rest of R including inequalities *) + List.iter (fun v -> + let vt = Terms.follow_link (fun x -> Var x) (Var v) in + match vt with + Var v' when v' == v -> () + | _ -> + if (occur_count v (concl :: hypl') > fact_occur_count v hyp1) + || (occur_count_constra v constra > 0) then raise Unify + ) (!hyp1vlist); + (* all checks successful *) + true + ) + with Unify -> + false + ) (!elimtrue_set) + in + (hypl, nl-1, (Resolution(Rule(n, LblClause, [], ff, []), nl, histl))) + with Not_found -> + if + (chann.p_prop land Param.pred_ANY != 0 && + List.for_all (function + Var v -> (occur_count v (concl :: hypl') == fact_occur_count v hyp1) + && ((not (!sound_mode)) || (occur_count_constra v constra == 0)) + | _ -> false) l) + || + (chann.p_prop land Param.pred_ANY_STRICT != 0 && + List.for_all (function + Var v -> (occur_count v (concl :: hypl') == fact_occur_count v hyp1) + && (occur_count_constra v constra == 0) + | _ -> false) l) + then + (hypl, nl-1, (Any(nl, histl))) + else + (hyp1 :: hypl, nl-1, histl) + end + | _ -> (hyp1 :: hypl, nl-1, histl) + ) hypl' ([], (List.length hypl')-1, histl') + in + (hypl'', concl, histl'',constra) + + +(********************************************** +Subsumption test between rules: +H -> F (C) => H' -> F' (C') iff exists \sigma, + \sigma H \subseteq H', \sigma F = F', C' => sigma C + +This section consists of: + 1- Matching between hypotheses + 2- Reordering of the hypothesis + 3- Final function : [implies rule1 rule2] +***********************************************) + +(* 1. Matching between hypotheses. Try all possible orderings + of the hypotheses *) + +(**Test \sigma H \subseteq H' for multiset inclusion *) +let rec match_fact_with_hyp nextf fact1 hyp2 passed_hyp = + match hyp2 with + | [] -> raise NoMatch + | (fact2::fact_l) -> + try + Terms.auto_cleanup (fun () -> + Terms.match_facts fact1 fact2; + nextf (passed_hyp @ fact_l) + ) + with NoMatch -> + match_fact_with_hyp nextf fact1 fact_l (fact2 :: passed_hyp) + +let rec match_hyp nextf hyp1 hyp2 = + match hyp1 with + | [] -> nextf () + | (fact1 :: fact_l1) -> + match_fact_with_hyp + (match_hyp nextf fact_l1) fact1 hyp2 [] + +(* 2. Try to reorder hypotheses to speed up the subsumption test. + Put first constant hypotheses (no unbound variable. They + can contain variables already bound by matching the conclusion.) + Then put other hypotheses in decreasing size order. *) + +let rec has_unbound_var = function + Var v -> + begin + match v.link with + NoLink -> true + | TLink _ -> false + | _ -> internal_error "unexpected link in has_unbound_var" + end + | FunApp(_,l) -> List.exists has_unbound_var l + +let fact_has_unbound_var = function + Pred(_, tl) -> List.exists has_unbound_var tl + | Out(t,l) -> (has_unbound_var t) || (List.exists + (fun (v,t) -> has_unbound_var t) l) + +let rank f = + if fact_has_unbound_var f then + fact_size f + else + 1000000 (* Something probably bigger than all sizes of terms *) + +let rank_compare (_,r1) (_,r2) = r2 - r1 + +let reorder hyp = + if List.length hyp > 4 then + let hyp_rank = List.map (fun f -> (f, rank f)) hyp in + let hyp_sorted = List.sort rank_compare hyp_rank in + List.map (fun (f,_) -> f) hyp_sorted + else + hyp + +(* 3. The final function for subsumption test *) + +let implies ((hyp1, concl1, _, constr1) as r1) ((hyp2, concl2, _, constr2) as r2) = + if List.length hyp1 > List.length hyp2 then false else + (* let t0 = Unix.times() in *) + try + Terms.auto_cleanup (fun () -> + begin + match concl1 with + | Pred(p, []) when p == Param.bad_pred -> () + | _ -> Terms.match_facts concl1 concl2 + end; + match_hyp (TermsEq.implies_constra_list (concl2 :: hyp2) constr2 constr1) + (reorder hyp1) hyp2; + (* let t1 = Unix.times() in + if t1.Unix.tms_utime -. t0.Unix.tms_utime > 1.0 then + begin + print_string "testing implication "; + Display.Text.display_rule r1; + print_string "=> "; + Display.Text.display_rule r2; + print_string "implication true, took "; + print_float (t1.Unix.tms_utime -. t0.Unix.tms_utime); + print_string " seconds."; + Display.Text.newline() + end; *) + true + ) + with NoMatch -> + (* let t1 = Unix.times() in + if t1.Unix.tms_utime -. t0.Unix.tms_utime > 1.0 then + begin + print_string "testing implication "; + Display.Text.display_rule r1; + print_string "=> "; + Display.Text.display_rule r2; + print_string "implication false, took "; + print_float (t1.Unix.tms_utime -. t0.Unix.tms_utime); + print_string " seconds."; + Display.Text.newline() + end; *) + false +(* let implies = Profile.f2 "implies" implies *) + +(******************************************** +Check usage of may-fail variables and fail +*********************************************) + +let rec check_no_fail = function + Var v -> assert(not v.unfailing) + | FunApp(f,l) -> + assert(f.f_cat != Failure); + List.iter check_no_fail l + +let check_top_fail = function + Var v -> () + | FunApp(f,l) -> List.iter check_no_fail l + +let check_constra_fail = function + Neq(t1,t2) -> + check_no_fail t1; + check_no_fail t2 + +let check_fact_fail = function + Pred({p_info = [TestUnifP _]}, [t1;t2]) -> + begin + (* testunif: allow fail at the top, plus possibly inside a tuple *) + match (t1,t2) with + FunApp(f1,l1), FunApp(f2,l2) when f1 == f2 && f1.f_cat == Tuple -> + List.iter check_top_fail l1; + List.iter check_top_fail l2 + | _ -> + check_top_fail t1; + check_top_fail t2 + end + | Pred(p,l) -> + (* attacker predicates: allow fail at the top + other predicates: don't allow fail at all *) + begin + match p.p_info with + [Attacker _ | AttackerBin _ | AttackerGuess _ ] (* attacker *) -> + if p == Param.end_pred || p == Param.end_pred_inj then + List.iter check_no_fail l + else + List.iter check_top_fail l + | [PolymPred _] (* user-defined *) | [] (* user-defined + plus a few others *) + | [Equal _] (* equal; used in user-defined clauses *) + | [Mess _ | InputP _ | OutputP _ | MessBin _ | InputPBin _ + | OutputPBin _ | Table _ | TableBin _ | Compromise _ ] -> + List.iter check_no_fail l + | _ -> Parsing_helper.internal_error "Terms.check_rule: unexpected predicate info" + end + | Out(t,l) -> + check_no_fail t; + List.iter (fun (_,t) -> check_no_fail t) l + +let check_rule ((hyp, concl, hist, constra) as r) = + try + List.iter check_fact_fail hyp; + check_fact_fail concl; + List.iter (List.iter check_constra_fail) constra + with x -> + Display.Text.display_rule r; + raise x + +(* The rule base. We distinguish rules that have no selected hypothesis + [rule_base_ns] and rules that have a selected hypothesis [rule_base_sel]. + The number of the selected hypothesis is stored with the rule + in the second case. *) + +let rule_queue = Queue.new_queue() + +let rule_count = ref 0 + +let rule_base_ns = ref ([] : reduction list) +let rule_base_sel = ref ([] : (reduction * int) list) + +(* [add_rule] adds the rule in the rule base. + It also eliminates subsumed rules. *) + +let add_rule rule = + (* Check that the rule is not already in the rule base or in the queue *) + let test_impl = fun r -> implies r rule in + if (List.exists test_impl (!rule_base_ns)) || + (List.exists (function (r,_) -> implies r rule) (!rule_base_sel)) || + (Queue.exists rule_queue test_impl) then () else + begin + (* eliminates from the rule_base the rules implied by rule *) + let test_impl = fun r -> not(implies rule r) in + rule_base_ns := List.filter test_impl (!rule_base_ns); + rule_base_sel := List.filter + (function (r,_) -> not (implies rule r)) (!rule_base_sel); + Queue.filter rule_queue test_impl; + check_rule rule; + Queue.add rule_queue rule + end + + + +(* Several simplification functions for rules *) + +(* 1. Simplify the constraints *) + +let simplify_rule_constra next_stage (hyp, concl, hist, constraint_list) = + try + let constraint_list' = TermsEq.simplify_constra_list (concl::hyp) constraint_list in + next_stage (hyp, concl, hist, constraint_list') + with TermsEq.FalseConstraint -> () + + (** Debug mode +let simplify_rule_constra next_stage (hyp, concl, hist,constra) = + if constra <> [] then + begin + Printf.printf "Before simplification"; + Display.Text.display_rule (hyp, concl, hist,constra) + end; + simplify_rule_constra (fun rule -> + if constra <> [] then + begin + Printf.printf "After simplfication"; + Display.Text.display_rule rule + end; + next_stage rule) (hyp, concl, hist,constra) *) + +(* 2. eliminate rules that have in hypothesis a "not" fact + (secrecy assumption) *) + +let elim_not next_stage ((hyp', _, _,_) as r) = + if (List.exists (fun h -> List.exists (matchafact h) (!not_set)) hyp') then + () + else + next_stage r + +(* 3. eliminate tautologies (rules that conclude a fact already in their + hypothesis) *) + +let elim_taut next_stage ((hyp', concl, _,_) as r) = + if List.exists (equal_facts concl) hyp' then + () + else + next_stage r + +(* 4. eliminate hypotheses p(x1...xn) where p has been declared "elimVar" + or "elimVarStrict" and x1...xn do not occur elsewhere. + Such a declaration means that p(x...x) is true for some value of x. + This is correct in particular when p = attacker. When p is declared + elimVar and we are not in sound_mode, x1...xn are allowed to occur + in inequalities. + + In sound_mode, we always require that x1...xn do not occur in + inequalities. *) + +let elim_any_x2 next_stage r = + next_stage (elim_any_x r) + +(* 5. decompose tuples and data constructors in hypotheses + It is important for the correctness of this optimization that + p:x is never selected when p is a predicate on which we + perform the decomposition of data constructors, except + when there are only such facts in the clause. + + Also eliminates duplicate hypotheses. + *) + +let decompose_hyp_tuples2 next_stage r = + next_stage (decompose_hyp_tuples r) + +(* 6. decompose tuples and data constructors in conclusion + It is important for the correctness of this optimization that + p:x is never selected when p is a predicate on which we + perform the decomposition of data constructors. *) + +let list_iter_i f l = + let rec list_iter_i n = function + [] -> () + | (a::l) -> list_iter_i (n+1) l; f n a + in + list_iter_i 0 l + +let decompose_concl_tuples next_stage ((hyp', concl, hist', constra) as r) = + if is_exempt_from_dectuple r then + next_stage r + else + let put_clause first_fact hist = + assert (!current_bound_vars == []); + let r = (List.map copy_fact hyp', copy_fact first_fact, hist, List.map copy_constra constra) in + cleanup(); + next_stage r + in + let rec tuple_dec hist concl = + match concl with + Pred(chann, l0) -> + let rec try_equiv_set = function + [] -> + if chann.p_prop land Param.pred_TUPLE != 0 then + match l0 with + FunApp(f,_) :: _ when f.f_cat = Tuple -> + let l = reorganize_fun_app f l0 in + list_iter_i (fun n first -> + let (Rule(_,_,_,Pred(p',_), _)) as hist_dec = History.get_rule_hist (RApplyProj(f, n, chann)) in + let concl' = Pred(p', first) in + let hist'' = Resolution(hist, 0, hist_dec) in + try + tuple_dec hist'' concl' + with Not_found -> put_clause concl' hist'') l + | _ -> raise Not_found + else + raise Not_found + | (hypeq, concleq, neq)::l -> + try + let hypeq' = + Terms.auto_cleanup (fun () -> + Terms.match_facts concleq concl; + List.map copy_fact3 hypeq) + in + list_iter_i (fun n concl' -> + let hist_dec = Rule(neq + n + 1, LblEquiv, [concleq], List.nth hypeq n, []) in + let hist'' = Resolution(hist, 0, hist_dec) in + try + tuple_dec hist'' concl' + with Not_found -> put_clause concl' hist'' + ) hypeq' + with NoMatch -> + try_equiv_set l + in + try_equiv_set (!equiv_set) + | _ -> raise Not_found + in + begin + try + tuple_dec hist' concl + with Not_found -> + next_stage r + end + + +(* +let decompose_concl_tuples next_stage ((hyp', concl, hist', constra) as r) = + if is_exempt_from_dectuple r then + next_stage r + else + match concl with + Pred(chann, ((FunApp(f,_) :: _) as l0)) when + (f.f_cat = Tuple) && + (chann.p_prop land Param.pred_TUPLE != 0) -> + let rec tuple_make hist' f n = function + [] -> () + | (first::rest) -> + tuple_make hist' f (n+1) rest; + let hist_dec = History.get_rule_hist (RApplyProj(f, n, chann)) in + let hist'' = Resolution(hist', 0, hist_dec) in + match first with + FunApp(f,_) :: _ when f.f_cat = Tuple -> + begin + try + let l = reorganize_fun_app f first in + tuple_make hist'' f 0 l + with Not_found -> + if !current_bound_vars != [] then + Parsing_helper.internal_error "bound vars should be cleaned up (r1)"; + let first_fact = Pred(chann,first) in + let r = (List.map copy_fact hyp', copy_fact first_fact, hist'', List.map copy_constra constra) in + cleanup(); + next_stage r + end + | _ -> + if !current_bound_vars != [] then + Parsing_helper.internal_error "bound vars should be cleaned up (r1)"; + let first_fact = Pred(chann,first) in + let r = (List.map copy_fact hyp', copy_fact first_fact, hist'', List.map copy_constra constra) in + cleanup(); + next_stage r + in + begin + try + let l = reorganize_fun_app f l0 in + tuple_make hist' f 0 l + with Not_found -> + next_stage r + end + | _ -> next_stage r +*) + + +(* 7. Element simplification + att(x) /\ elem(M_1, x) /\ ... /\ elem(M_n, x) + becomes + att(M_1) /\ ... /\ att(M_n) + when x does not occur elsewhere in the clause. + When x occurs elsewhere, the simplification can be done when the + clause has no selected fact. It leads to a loss of precision in + this case. (So the latter case is disabled in sound mode.) + + "att" can be any predicate declared with data decomposition (pred_TUPLE). + The predicate "elem" must be declared pred_ELEM. + *) + +let rec collect_preds v = function + [] -> [] + | (f::l) -> + match f with + Pred(p, [Var v']) when p.p_prop land Param.pred_TUPLE != 0 + && v' == v -> + p :: (collect_preds v l) + | _ -> collect_preds v l + + +let rec transform_hyp preds v hist n = function + [] -> ([], hist) + | (f::l) -> + match f with + Pred(p, [t1; Var v']) when p.p_prop land Param.pred_ELEM != 0 + && v == v' -> + let (Rule(_, _, hyp, _, _)) as hist_dec = History.get_rule_hist (RElem(preds, p)) in + let hist' = Resolution(hist_dec, n, hist) in + let (l', hist'') = transform_hyp preds v hist' (n + List.length preds) l in + ((List.map (function + (Pred(p',_)) -> Pred(p', [t1]) + | Out _ -> Parsing_helper.internal_error "rules.ml: Pred expected") hyp) @ l', hist'') + | _ -> + let (l', hist') = transform_hyp preds v hist (n+1) l in + (f :: l', hist') + +let transform_rule v (hyp, concl, hist, constra) = + let preds = collect_preds v hyp in + let (hyp', hist') = transform_hyp preds v hist 0 hyp in + (hyp', concl, hist', constra) + +let check_occurs_fact p0 v = function + Pred(p, [Var v']) when p.p_prop land Param.pred_TUPLE != 0 + && v == v' -> false + | Pred(p, [t1; Var v']) when p.p_prop land Param.pred_ELEM != 0 && p == p0 + && v == v' -> occurs_var v t1 + | Pred(p, tl) -> List.exists (occurs_var v) tl + | Out(t, env) -> (occurs_var v t) || (List.exists (fun (_, t) -> occurs_var v t) env) + +let check_occurs_concl v = function + | Pred(p, tl) -> List.exists (occurs_var v) tl + | Out(t, env) -> internal_error "Out fact should not occur in conclusion" + +let check_occurs_constra v c = List.exists + (function Neq(t1,t2) -> occurs_var v t1 || occurs_var v t2) c + +let check_occurs_rule p0 v (hyp, concl, hist, constra) = + List.exists (check_occurs_fact p0 v) hyp || + (check_occurs_concl v concl) || + List.exists (check_occurs_constra v) constra + +(* 8.1 Apply the simplification only when x does not occur + in bad positions. No loss of precision in this case *) + +let rec elem_simplif next_stage repeat_next_stage ((hyp, concl, hist, constra) as r) = + let rec find_optim seen_vars = function + [] -> next_stage r + | (f::l) -> + match f with + Pred(p,[t1;Var v]) when p.p_prop land Param.pred_ELEM != 0 + && not (List.memq v seen_vars) -> + if check_occurs_rule p v r then + find_optim (v::seen_vars) l + else + repeat_next_stage (transform_rule v r) + | _ -> find_optim seen_vars l + in + find_optim [] hyp + +(* 8.2 When the conclusion is selected, apply the simplification + event at the cost of a loss of precision + Disabled in sound mode. *) + +let rec elem_simplif2 next_stage repeat_next_stage ((hyp, concl, hist, constra) as r) = + let rec find_optim = function + [] -> next_stage r + | (f::l) -> + match f with + Pred(p,[t1;Var v]) when (p.p_prop land Param.pred_ELEM != 0) + && (collect_preds v hyp <> []) -> + if Selfun.selection_fun r = -1 then + let r' = transform_rule v r in + print_string "Warning: simplifying "; + Display.Text.display_rule r; + print_string "into "; + Display.Text.display_rule r'; + print_string "with loss of precision.\n"; + repeat_next_stage r' + else + next_stage r + | _ -> find_optim l + in + if !sound_mode then + next_stage r + else + find_optim hyp + +(* 9. Eliminate redundant hypotheses + When R = H /\ H' -> C, and there exists \sigma such that + \sigma H \subseteq H' and \sigma does not modify variables + of H' and C, then R can be replaced with R' = H' -> C. + This is a generalization of elimination of duplicate hypotheses. + The function below does not really remove redundant hypotheses, + but transforms them into duplicate hypotheses, so that + they will be removed by the elimination of duplicate hypotheses. + (In particular, in the history, they are coded as duplicate hypotheses.) + + Redundant hypotheses appear in particular when there are + begin facts. They can slow down the subsumption test + considerably. + + Note: it is important that elim_redundant_hyp comes as last + simplification. In particular, it should come after elimination + of attacker(x) (so that we don't have many hypotheses attacker(x) + remaining, which can be mapped to any hypothesis attacker(..) in + the instantiated clause) and after simplification of inequalities + (so that we don't have inequalities with variables not + used elsewhere, which cause problems for the subsumption test). + *) + +let rec match_hyp1 f success match_done h1 = function + [] -> raise NoMatch + | (h2::hl2) -> + try + Terms.auto_cleanup (fun () -> + Terms.match_facts h1 h2; + let success' = success || + (* h2 has already been used in the matching; + if the matching succeeds, then at least + one hypothesis will be removed. *) + (List.exists (fun (_, h2') -> h2' == h2) match_done) + in + f success' ((h1,h2)::match_done) + ) + with NoMatch -> + match_hyp1 f success match_done h1 hl2 + +let rec match_hyp f hyp1 hyp2 success match_done = + match hyp1 with + [] -> f success match_done + | (h1 :: hl1) -> match_hyp1 (match_hyp f hl1 hyp2) success match_done h1 hyp2 + +let implies2 f (hyp1, concl1, _, constr1) (hyp2, concl2, _, constr2) = + Terms.auto_cleanup (fun () -> + Terms.match_facts concl1 concl2; + match_hyp (fun success match_done -> + if not success then + (* All hypotheses used in this matching; + it does not allow eliminating anything, + try to find a better matching. *) + raise NoMatch; + implies_constra_list (concl2 :: hyp2) constr2 constr1 (); + f match_done) + (reorder hyp1) hyp2 false [] + ) + +(*** Just a sanity check + +let implies3 ((hyp1, concl1, _, constr1) as r1) ((hyp2, concl2, _, constr2) as r2) = + try + Terms.auto_cleanup (fun () -> + Terms.match_facts concl1 concl2; + List.iter2 Terms.match_facts hyp1 hyp2; + implies_constra_list (concl2 :: hyp2) constr2 constr1 () + ) + with NoMatch -> Parsing_helper.internal_error "elim_redundant_hyp" + + End sanity check ***) + +let elim_redundant_hyp next_stage repeat_next_stage ((hyp, _, _, _) as r) = + if (!Param.redundant_hyp_elim) && + ((not (!Param.redundant_hyp_elim_begin_only)) || + (List.exists (function + Pred({p_info = [TestUnifP _]}, _) -> false + | Pred(p,_) -> p.p_prop land Param.pred_BLOCKING != 0 + | Out _ -> true) hyp)) + then + let r' = copy_rule r in + (*print_string "elim_redundant_hyp starts for"; + Display.Text.display_rule r; *) + try + let r'' = + implies2 (fun match_list -> + let (hyp,_,_,_) = r in + let (_,concl',hist',constra') = r' in + let hyp' = List.map (fun h -> List.assq h match_list) hyp in + (hyp', concl', hist', constra') + ) r r' + in + (*if not (implies3 r r'') then + Parsing_helper.internal_error "elim_redundant_hyp"; + print_string "elim_redundant_hyp: found "; + Display.Text.display_rule r''; *) + repeat_next_stage r'' + with NoMatch -> + (* print_string "elim_redundant_hyp: no redundant hyp found\n"; *) + next_stage r + else + next_stage r + +(* 10. Simplification using the equational theory *) + +let simp_eq_rule next_stage repeat_next_stage ((hyp, concl, hist, constra) as rule) = + if TermsEq.hasEquations() then + try + let redo_all_optim = ref false in + let simp_eq_fact = function + Pred(p,l) when p.p_prop land Param.pred_SIMPEQ != 0 -> + Pred(p, List.map (fun t -> + let t' = TermsEq.simp_eq t in + if not (Terms.equal_terms t t') then redo_all_optim := true; + t') l) + | f -> f + in + let rule' = (List.map simp_eq_fact hyp, simp_eq_fact concl, hist, constra) in + if !redo_all_optim then + repeat_next_stage rule' + else + next_stage rule' + with TermsEq.Reduces -> + () (* Remove the clause when Param.simpeq_remove is true and an argument + of attacker2 reduces. *) + else + next_stage rule + +(* Combines the previous simplication functions, then add the + simplified rule to the rule base *) + +let simplify_rule_constra_normal next_stage r = + assert (!Terms.current_bound_vars == []); + simplify_rule_constra next_stage r + +let rec normal_rule r = + assert (!Terms.current_bound_vars == []); + decompose_hyp_tuples2 (simp_eq_rule + (elim_not (Weaksecr.simplify (Noninterf.simplify + (decompose_concl_tuples (elim_taut (elim_any_x2 + (simplify_rule_constra_normal (elem_simplif (elem_simplif2 + (elim_redundant_hyp (fun r -> add_rule (limit_depth_rule r)) normal_rule) + normal_rule) normal_rule) )))) + normal_rule) normal_rule)) normal_rule) r + +(* Equations *) + +(* Close rules under equations *) + +let rec complete_rules_eq () = + match Queue.get rule_queue with + None -> !rule_base_ns + | Some rule -> + rule_base_ns := rule :: (!rule_base_ns); + close_rule_eq normal_rule (copy_rule rule); + if !Param.verbose_rules then + Display.Text.display_rule rule + else + begin + incr rule_count; + if (!rule_count) mod 200 = 0 then + begin + print_string ((string_of_int (!rule_count)) ^ + " rules inserted. The rule base contains " ^ + (string_of_int (List.length (!rule_base_ns))) ^ + " rules. " ^ + (string_of_int (Queue.length rule_queue)) ^ + " rules in the queue."); + Display.Text.newline() + end + end; + complete_rules_eq() + +(* Close fact under equations *) + +let combine_fact_eq fact = + let accu = ref [] in + close_fact_eq (fun fact' -> + let tmp_bound = !current_bound_vars in + current_bound_vars := []; + accu := (copy_fact2 fact') :: (!accu); + cleanup(); + current_bound_vars := tmp_bound) fact; + !accu + +(* End equations *) + +(* [compos] unifies [concl1] with the selected hypothesis of [hyp2] + and builds the resulting rule + There must be no selected fact in [rule1], and a selected fact in [rule2] + + R = F1 & ... & Fn -> F0 + R' = F'1 & ... & F'n' -> F'0 +can be composed into + s F1 & ... & s Fn & s F'2 & ... & s F'n -> s F'0 +where s is the most general unifier of F0 and F'1 +if + F'1 selected +and for all Fi, Fi not selected + +*) + +let rec replace_nth_list l1 n = function + [] -> internal_error "replace_nth_list error" + | (a::l) -> if n = 0 then l1 @ l else a::(replace_nth_list l1 (n-1) l) + +let compos next_stage (hyp1, concl1, hist1,constra1) ((hyp2, concl2, hist2,constra2), sel_index) = + let a = List.nth hyp2 sel_index in + (* compose with the selected fact *) + assert (!current_bound_vars == []); + try + unify_facts concl1 a; + let hyp' = List.map copy_fact2 (replace_nth_list hyp1 sel_index hyp2) in + (* Careful ! The order of hypotheses is important for the history *) + let concl' = copy_fact2 concl2 in + let hist' = Resolution(hist1, sel_index, hist2) in + let constra' = ((List.map copy_constra2 constra1) @ (List.map copy_constra2 constra2)) in + cleanup(); + (* incr resol_step; *) + next_stage (hyp', concl', hist', constra') + with Unify -> + cleanup() + +(* Redundancy test + [rulelist] and [firstrulelist] must be lists of rules with empty selection + [initrule] must be a rule with empty selection + The test returns true if and only if the rule [initrule] can be derived + with a derivation containing a rule in [firstrulelist] as top rule + and other rules in [rulelist]. +*) + +let dummy_fact = Pred(Param.dummy_pred, []) + +exception Redundant + +let redundant rulelist firstrulelist ((_,initconcl,_,_) as initrule) = + let rec redundant_rec firstrulelist ((hyp, concl, hist, constra) as rule) seen_list = + if matchafact initconcl concl then + let sel_index = selection_fun (hyp, dummy_fact, hist, constra) in + if sel_index != -1 then + if not (List.exists (fun r -> implies r rule) seen_list) then + let seen_list = rule :: seen_list in + List.iter (fun ((hyp1, _, _, _) as rule1) -> + if List.for_all is_unselectable hyp1 then + compos (simplify_rule_constra (fun r -> + let r' = elim_any_x (decompose_hyp_tuples r) in + if implies r' initrule then + raise Redundant + else + redundant_rec rulelist r' seen_list)) + rule1 (rule,sel_index) + ) firstrulelist + in + try + redundant_rec firstrulelist ([initconcl], initconcl, Empty(initconcl), []) []; + false + with Redundant -> + if !Param.verbose_redundant then + begin + print_string "Redundant rule eliminated:\n"; + Display.Text.display_rule initrule + end; + true + +let redundant_glob initrule = + match !Param.redundancy_test with + Param.NoRed -> false + | Param.SimpleRed -> + redundant (!rule_base_ns) (!rule_base_ns) initrule + | Param.BestRed -> + if redundant (!rule_base_ns) (!rule_base_ns) initrule then true else + let rec all_redundant accu = function + [] -> accu + | (a::l) -> + let rlist = initrule :: (accu @ l) in + if redundant rlist rlist a then + all_redundant accu l + else + all_redundant (a::accu) l + in + rule_base_ns := List.rev (all_redundant [] (!rule_base_ns)); + false + + +let redundant_res res_list = + let rec all_redundant accu = function + [] -> accu + | (a::l) -> + if redundant (!rule_base_ns) (accu @ l) a then + all_redundant accu l + else + all_redundant (a::accu) l + in + all_redundant [] res_list + +(* Saturates the rule base, by repeatedly applying the composition [compos] *) + +let rec complete_rules () = + match Queue.get rule_queue with + None -> !rule_base_ns + | Some rule -> + let sel_index = selection_fun rule in + if sel_index == -1 then + begin + if not (redundant_glob rule) then + begin + rule_base_ns := rule :: (!rule_base_ns); + List.iter (compos normal_rule rule) (!rule_base_sel) + end + end + else + begin + let rule_sel = (rule, sel_index) in + rule_base_sel := rule_sel :: (!rule_base_sel); + List.iter (fun rule2 -> compos normal_rule rule2 rule_sel) (!rule_base_ns) + end; + + (* display the rule *) + if !Param.verbose_rules then + Display.Text.display_rule rule + else + begin + incr rule_count; + if (!rule_count) mod 200 = 0 then + begin + print_string ((string_of_int (!rule_count)) ^ + " rules inserted. The rule base contains " ^ + (string_of_int ((List.length (!rule_base_ns)) + + (List.length (!rule_base_sel)))) ^ + " rules. " ^ + (string_of_int (Queue.length rule_queue)) ^ + " rules in the queue."); + Display.Text.newline() + end + end; + + complete_rules() + + +(* Search algo *) + +let query_goal_std g = + let success_accu = ref [] in + let rec goal_reachable_rec ((subgoals, orig_fact, hist_done, constra) as rule) + seen_list = + if not (List.exists (fun old_rule -> implies old_rule rule) (!success_accu)) + then + (* if already found a way to generate a more general pattern, + stop here; otherwise, continue search *) + let sel_index = selection_fun (subgoals, dummy_fact, hist_done, constra) in + if sel_index == -1 then + success_accu := rule :: (!success_accu) + else + begin + if not (List.exists (fun r -> implies r rule) seen_list) then + let seen_list = rule :: seen_list in + List.iter (fun rule1 -> + compos (simplify_rule_constra (fun r -> + goal_reachable_rec (elim_any_x (decompose_hyp_tuples r)) seen_list)) + rule1 (rule,sel_index) + ) (!rule_base_ns) + end + in + let do_query a = + goal_reachable_rec (elim_any_x (decompose_hyp_tuples ([a], a, Empty(a),[]))) [] + in + List.iter do_query (combine_fact_eq g); + redundant_res (!success_accu) +(* + let r = redundant_res (!success_accu) in + print_int (!resol_step); + print_string " resolution steps since the beginning\n"; + r +*) + +let query_goal g = + match query_goal_std g with + [] -> + print_string "RESULT goal unreachable: "; + Display.Text.display_fact g; + Display.Text.newline(); + if !Param.html_output then + begin + Display.Html.print_string "<span class=\"result\">RESULT <span class=\"trueresult\">goal unreachable</span>: "; + Display.Html.display_fact g; + Display.Html.print_string "</span>"; + Display.Html.newline(); + end + | l -> + List.iter (fun rule -> + print_string "goal reachable: "; + Display.Text.display_rule rule; + if !Param.html_output then + begin + Display.Html.print_string "goal reachable: "; + Display.Html.display_rule rule + end; + ignore (History.build_history rule); + cleanup() + ) l; + print_string "RESULT goal reachable: "; + Display.Text.display_fact g; + Display.Text.newline(); + if !Param.html_output then + begin + Display.Html.print_string "<span class=\"result\">RESULT <span class=\"unknownresult\">goal reachable</span>: "; + Display.Html.display_fact g; + Display.Html.print_string "</span>"; + Display.Html.newline(); + end + + +let query_goal_not g = + match query_goal_std g with + [] -> + print_string "ok, secrecy assumption verified: fact unreachable "; + Display.Text.display_fact g; + Display.Text.newline(); + if !Param.html_output then + begin + Display.Html.print_string "ok, secrecy assumption verified: fact unreachable "; + Display.Html.display_fact g; + Display.Html.newline() + end + | l -> + List.iter (fun rule -> + print_string "goal reachable: "; + Display.Text.display_rule rule; + if !Param.html_output then + begin + Display.Html.print_string "goal reachable: "; + Display.Html.display_rule rule + end; + ignore (History.build_history rule); + cleanup() + ) l; + if !Param.html_output then + Display.Html.print_line "Error: you have given a secrecy assumption that I could not verify."; + (* TO DO close HTML files properly before this error *) + Parsing_helper.user_error "Error: you have given a secrecy assumption that I could not verify.\n" + +let completion rulelist = + (* Enter the rules given in "rulelist" in the rule base *) + if !Param.html_output then + begin + let qs = + if !is_inside_query then + "inside" ^ (string_of_int (!Param.inside_query_number)) + else + Printf.sprintf "%s" (string_of_int (!Param.current_query_number)) + in + Display.LangHtml.openfile ((!Param.html_dir) ^ "/clauses" ^ qs ^ ".html") ("ProVerif: clauses for query " ^ qs); + Display.Html.print_string "<H1>Initial clauses</H1>\n"; + Display.Html.display_initial_clauses rulelist; + Display.LangHtml.close(); + Display.Html.print_string ("<A HREF=\"clauses" ^ qs ^ ".html\" TARGET=\"clauses\">Clauses</A><br>\n") + end + else if (!Param.verbose_explain_clauses != Param.NoClauses) || + (!Param.explain_derivation = false) then + begin + Display.Text.print_string "Initial clauses:"; + Display.Text.display_initial_clauses rulelist + end; + + (* Reinit the rule base *) + rule_base_ns := []; + rule_base_sel := []; + rule_count := 0; + + (* Complete the rule base *) + List.iter normal_rule rulelist; + Selfun.guess_no_unif rule_queue; + + if hasEquationsToRecord() then + begin + if !Param.html_output then + begin + Display.LangHtml.openfile ((!Param.html_dir) ^ "/eq-.html") "ProVerif: equations"; + Display.Html.print_string "<H1>Equations</H1>\n" + end; + record_eqs(); + print_string "Completing with equations...\n"; + let rulelisteq = complete_rules_eq() in + if !Param.html_output then + begin + Display.Html.print_string "<H2>Clauses completed with equations</H2>\n"; + Display.Html.display_item_list Display.Text.display_rule_nonewline rulelisteq + end + else if !Param.verbose_completed then + begin + Display.Text.print_string "Clauses completed with equations:"; + Display.Text.display_item_list Display.Text.display_rule_nonewline rulelisteq + end; + if !Param.html_output then + begin + Display.LangHtml.close(); + Display.Html.print_string "<A HREF=\"eq-.html\">Equations</A><br>\n" + end; + + rule_base_ns := []; + List.iter normal_rule rulelisteq + end; + + print_string "Completing...\n"; + let completed_rules = complete_rules() in + if !Param.html_output then + begin + let qs = + if !is_inside_query then + "inside" ^ (string_of_int (!Param.inside_query_number)) + else + string_of_int (!Param.current_query_number) + in + Display.LangHtml.openfile ((!Param.html_dir) ^ "/compclauses" ^ qs ^ ".html") ("ProVerif: completed clauses for query " ^ qs); + Display.Html.print_string "<H1>Completed clauses</H1>\n"; + Display.Html.display_item_list Display.Html.display_rule_nonewline completed_rules; + Display.LangHtml.close(); + Display.Html.print_string ("<A HREF=\"compclauses" ^ qs ^ ".html\">Completed clauses</A><br>\n") + end + else if !Param.verbose_completed then + begin + Display.Text.print_string "Completed clauses:"; + Display.Text.display_item_list Display.Text.display_rule_nonewline completed_rules + end; + + (* Query the goals *) + List.iter query_goal_not (!not_set) + + +let main_analysis rulelist goal_set = + completion rulelist; + List.iter query_goal goal_set + +let reset () = + Selfun.reset_no_unif_set(); + not_set := [] + +(* Test whether bad is derivable from rulelist; + this function does not alter rule_base_ns, so that it can be called + even if I am calling query_goal_std afterwards to test whether some fact + is derivable from other completed clauses. + It is guaranteed to say that bad is not derivable only if it is + actually not derivable. *) + +let bad_derivable rulelist = + let old_rule_base_ns = !rule_base_ns in + completion rulelist; + let saturated_rules = !rule_base_ns in + rule_base_ns := old_rule_base_ns; + rule_base_sel := []; + List.filter (function + (_, Pred(p, []), _, _) when p == Param.bad_pred -> + true + | _ -> false) saturated_rules + +(* Test whether bad is derivable from rulelist; + this function does not alter rule_base_ns, so that it can be called + even if I am calling query_goal_std afterwards to test whether some fact + is derivable from other completed clauses. + Furthermore, it is guaranteed to say that that bad is derivable only + if it is actually derivable *) + +let sound_bad_derivable rulelist = + let old_sound_mode = !sound_mode in + is_inside_query := true; + sound_mode := true; + let r = bad_derivable rulelist in + is_inside_query := false; + sound_mode := old_sound_mode; + r diff --git a/preinstallTTool/linux/proverif/src/rules.mli b/preinstallTTool/linux/proverif/src/rules.mli new file mode 100644 index 0000000000000000000000000000000000000000..c649cc17cd19e4b61457e58cdc6e61447e77d75a --- /dev/null +++ b/preinstallTTool/linux/proverif/src/rules.mli @@ -0,0 +1,45 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val add_not : Types.fact -> unit +val add_elimtrue : int * Types.fact -> unit +val add_equiv : Types.fact list * Types.fact * int -> unit + +val display_debug : bool ref + +val implies : Types.reduction -> Types.reduction -> bool +val reorder : Types.fact list -> Types.fact list + +val completion : Types.reduction list -> unit +val query_goal_std : Types.fact -> Types.reduction list + +val main_analysis : Types.reduction list -> Types.fact list -> unit +val bad_derivable : Types.reduction list -> Types.reduction list +val sound_bad_derivable : Types.reduction list -> Types.reduction list + + +val reset : unit -> unit diff --git a/preinstallTTool/linux/proverif/src/selfun.cmi b/preinstallTTool/linux/proverif/src/selfun.cmi new file mode 100644 index 0000000000000000000000000000000000000000..f066eebecaae47471855f17a658ff96632c43ecf Binary files /dev/null and b/preinstallTTool/linux/proverif/src/selfun.cmi differ diff --git a/preinstallTTool/linux/proverif/src/selfun.cmx b/preinstallTTool/linux/proverif/src/selfun.cmx new file mode 100644 index 0000000000000000000000000000000000000000..b4381a9aed9eedd6dd71110c596d8a504b1f119b Binary files /dev/null and b/preinstallTTool/linux/proverif/src/selfun.cmx differ diff --git a/preinstallTTool/linux/proverif/src/selfun.ml b/preinstallTTool/linux/proverif/src/selfun.ml new file mode 100644 index 0000000000000000000000000000000000000000..98d255cae4baa78bc5ab82a83c28370bc555528e --- /dev/null +++ b/preinstallTTool/linux/proverif/src/selfun.ml @@ -0,0 +1,341 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types +open Terms + +let never_select_weight = -10000 +let match_concl_weight = -7000 +let default_add_no_unif_weight = -5000 +let default_user_no_unif_weight = -6000 +let dummy_weight = -4000 + +let no_unif_set = ref ([] : (fact_format * int) list) +let add_no_unif f n = + let n = + if n >= 0 then default_user_no_unif_weight else + if n <= never_select_weight then never_select_weight+1 else + n + in +(* + if !Param.verbose_term then + begin + print_string "nounif "; + Display.Text.display_fact_format f; + print_string ("/" ^ (string_of_int n)); + Display.Text.newline() + end; +*) + no_unif_set := (f,n) :: (!no_unif_set) + +let reset_no_unif_set() = + no_unif_set := [] + +let inst_constraints = ref false + +let rec has_same_format_term t1 t2 = + match (t1,t2) with + | (FunApp(f1,l1), FFunApp(f2,l2)) -> + (f1 == f2) && (List.for_all2 has_same_format_term l1 l2) + | (Var _, FVar v2) | (_, FAny v2) -> + begin + match v2.link with + NoLink -> + begin + if v2.unfailing then + begin + Terms.link v2 (TLink t1); + true + end + else + (* v2 is a message variable; the matching works only if t1 is a message *) + match t1 with + Var v' when v'.unfailing -> false + | FunApp(f,[]) when f.f_cat = Failure -> false + | _ -> Terms.link v2 (TLink t1); true + end + | TLink t1' -> Terms.equal_terms t1 t1' + | _ -> Parsing_helper.internal_error "unexpected link in has_same_format_term" + end + | (_,_) -> false + +let has_same_format (c1, p1) (c2, p2) = + (c1 == c2) && (auto_cleanup (fun () -> List.for_all2 has_same_format_term p1 p2)) + +let rec find_same_format f = function + [] -> 0 + | ((a,n)::l) -> if has_same_format f a then n else find_same_format f l + +(* Remark: format_equal could be a bit less strict. When a variable + is marked at least once "FVar", it has the same meaning as if it + is always marked "FVar". *) + +let rec format_equal t1 t2 = + match (t1,t2) with + | (FFunApp(f1,l1), FFunApp(f2,l2)) -> + (f1 == f2) && (List.for_all2 format_equal l1 l2) + | (FVar v1, FVar v2) | (FAny v1, FAny v2) -> + begin + (v1.unfailing == v2.unfailing) && + (match v2.link with + NoLink -> Terms.link v2 (VLink v1); true + | VLink v1' -> v1 == v1' + | _ -> Parsing_helper.internal_error "unexpected link in format_equal") + end + | (_,_) -> false + +let format_equal_fact (c1, p1) ((c2, p2),_) = + (c1 == c2) && (auto_cleanup (fun () -> List.for_all2 format_equal p1 p2)) + +let rec compute_match_format t1 t2 = + match (t1,t2) with + | (Var v1), (Var v2) -> FAny v1 + | (Var v1), _ -> FVar v1 + | (FunApp (f1,l1')), (FunApp (f2,l2')) -> + if f1 != f2 then + internal_error "terms do not match 3"; + FFunApp(f1,List.map2 compute_match_format l1' l2') + | _,_ -> internal_error "terms do not match 4" + +let compute_match_format_fact f1 f2 = match (f1,f2) with + Pred(c1, p1), Pred(c2, p2) -> + if c1 != c2 then + internal_error "facts do not match"; + (c1, List.map2 compute_match_format p1 p2) +| _ -> internal_error "match format should be called only with Pred facts, since these facts should appear in conclusions" + +(* selection_fun rule returns -1 if no fact is selected in rule, and + the index of the selected hypothesis otherwise (0 corresponds to + the first hypothesis) +*) + +(* Standard, equivalent to the old version without selection function *) + +let term_warning ((hyp, concl, _, _) as rule) = + if (!Param.max_depth) < 0 then + begin + if (!Param.should_stop_term) || (!Param.verbose_term) then + begin + print_string "The following rule unifies with itself\n"; + Display.Text.display_rule rule; + print_string "The completion process will probably not terminate\n" + end; + if !Param.should_stop_term then + begin + print_string "You have several solutions to guarantee termination:\n"; + print_string " - limit the depth of terms with param maxDepth = <depth>.\n"; + print_string " - add one of the unifying facts of this rule to the set\n"; + print_string " of facts on which unification is forbidden, with nounif <fact>.\n"; + print_string " - add a rule that is more general than all rules generated by the\n"; + print_string " unifications of the above rule. (Maybe you have already done that, and I\n"; + print_string " did not detect it. If so, ignore this message by pressing [return].)\n"; + print_string "Press [return] to continue, [ctrl-c] to stop\n"; + Param.should_stop_term := false; + ignore(read_line()) + end + end + +let selection_fun_nounifset ((hyp, concl, _, _) as rule) = + let rec sel (nold, wold) n = function + [] -> + if (nold >= 0) && (matchafactstrict concl (List.nth hyp nold)) then + term_warning(rule); + nold + | (f::l) when is_unselectable f -> + (* Guarantee that p(x) is never selected when we decompose data + constructors on p, except that we can select the conclusion when + all hypotheses and the conclusion are of the form p(x) for + such p. This is important for the soundness of + the decomposition of data constructors. *) + sel (nold, wold) (n+1) l + | (Pred(p,lp) as h::l) -> + let wnew = find_same_format (p,lp) (!no_unif_set) in + if wnew < 0 then + if wnew > wold + then sel (n,wnew) (n+1) l + else sel (nold, wold) (n+1) l + else + begin + if matchafactstrict concl h then term_warning(rule); + n + end + | _ -> Parsing_helper.internal_error "Selfun(1): added to avoid warning for non-exhaustive pattern-matching" + in + if is_unselectable concl then + (* The conclusion is never selected if an hypothesis can be *) + sel (-1, never_select_weight) 0 hyp + else + (* The conclusion can be selected if we don't find better in + the hypothesis *) + sel (-1, -1) 0 hyp + +(* Very good for skeme, but slightly slower for some other protocols *) + +let selection_fun_nounifset_maxsize ((hyp, concl, _, _) as rule) = + let rec sel (nold, wold) n = function + [] -> + if (nold >= 0) && (matchafactstrict concl (List.nth hyp nold)) then + term_warning(rule); + nold + | (f::l) when is_unselectable f -> + (* Guarantee that p(x) is never selected when we decompose data + constructors on p, except that we can select the conclusion when + all hypotheses and the conclusion are of the form p(x) for + such p. This is important for the soundness of + the decomposition of data constructors. *) + sel (nold, wold) (n+1) l + | (Pred(p,lp) as h::l) -> + let wtmp = find_same_format (p,lp) (!no_unif_set) in + let wnew = + if wtmp < 0 + then wtmp + else fact_size h + in + if wnew > wold + then sel (n,wnew) (n+1) l + else sel (nold, wold) (n+1) l + | _ -> Parsing_helper.internal_error "Selfun(2): added to avoid warning for non-exhaustive pattern-matching" + in + if is_unselectable concl then + (* The conclusion is never selected if an hypothesis can be *) + sel (-1, never_select_weight) 0 hyp + else + (* The conclusion can be selected if we don't find better in + the hypothesis *) + sel (-1, -1) 0 hyp + +(* Very good for termination - even if it does not solve all cases, of course *) + +let selection_fun_weight ((hyp, concl, _, _) as rule) = + let rec sel (nold, wold) n = function + [] -> + if nold = -1 then (* conclusion selected *) + begin + List.iter (function h -> + if matchafactstrict concl h then + begin + let format = compute_match_format_fact h concl in + if not (List.exists (format_equal_fact format) (!no_unif_set)) then + begin + no_unif_set := (format, default_add_no_unif_weight) :: !no_unif_set; + if !Param.verbose_term then + begin + print_string "nounif "; + Display.Text.display_fact_format format; + print_string ("/" ^ (string_of_int default_add_no_unif_weight)); + Display.Text.newline() + end + end + end) hyp + end; + if (!Param.verbose_term) && (((wold < 0) && (nold >= 0)) (* || (wold < -1) *) ) then + begin + print_string "Termination warning: "; + Display.Text.display_rule rule; + print_string ("Selecting " ^ (string_of_int nold)); + Display.Text.newline() + end; + nold + | (f::l) when is_unselectable f -> + (* Guarantee that p(x) is never selected when we decompose data + constructors on p. This is important for the soundness of + the decomposition of data constructors. *) + sel (nold, wold) (n+1) l + | (Pred(p,lp) as h::l) -> + let wnew = + if matchafactstrict concl h then match_concl_weight else + let wtmp = find_same_format (p,lp) (!no_unif_set) in + if wtmp < 0 then wtmp else + if !Param.select_fun == Param.TermMaxsize then fact_size h else 0 + in + if wnew > wold + then sel (n,wnew) (n+1) l + else sel (nold, wold) (n+1) l + | _ -> Parsing_helper.internal_error "Selfun(3): added to avoid warning for non-exhaustive pattern-matching" + in + let wconcl = + if is_unselectable concl then + (* The conclusion is never selected if an hypothesis can be *) + never_select_weight + else + match concl with + Pred(p, []) when p == Param.dummy_pred -> dummy_weight + | _ -> + (* The conclusion can be selected if we don't find better in + the hypothesis *) + if List.exists (fun h -> matchafactstrict h concl) hyp then match_concl_weight else -1 + in + sel (-1, wconcl) 0 hyp + +(* Avoid creating cycles when instantiating in inst_constra: + renames all variables to unused ones. *) +let rec false_copy = function + Var v -> Terms.new_var_def v.btype + | FunApp(f,l) -> FunApp(f, List.map false_copy l) + +let inst_constra = function + Neq(Var v,t) -> + if v.link = NoLink then + Terms.link v (TLink (false_copy t)) + | _ -> () + +let selection_fun ((hyp,concl,hist,constra) as rule) = + let r = + match !Param.select_fun with + Param.NounifsetMaxsize -> selection_fun_nounifset_maxsize rule + | Param.Term | Param.TermMaxsize -> selection_fun_weight rule + | Param.Nounifset -> selection_fun_nounifset rule + in + let r = + (* For proofs of equivalences (!inst_constraints = true), + if the conclusion is selected (r = -1) and it is unselectable, + that is, it is of the form such as bad: or attacker:x,x', + then we try to find a better selection by selecting an hypothesis + attacker:x,x' in which x (or x') occurs in an inequality x <> M. *) + if (r = -1) && (!inst_constraints) && (is_unselectable concl) then + begin + List.iter (List.iter inst_constra) constra; + let rule2 = (List.map copy_fact2 hyp, copy_fact2 concl, hist, List.map copy_constra2 constra) in + Terms.cleanup(); + match !Param.select_fun with + Param.NounifsetMaxsize -> selection_fun_nounifset_maxsize rule2 + | Param.Term | Param.TermMaxsize -> selection_fun_weight rule2 + | Param.Nounifset -> selection_fun_nounifset rule2 + end + else r + in + let r = + if r = -1 then Noninterf.selfun rule else r + in + if r = -1 then Weaksecr.selfun rule else r + +let guess_no_unif rulequeue = + (* If no "nounif" instruction is given, first guess them by "selection_fun_weight" *) + if (!no_unif_set = []) || (!Param.select_fun == Param.Term) + || (!Param.select_fun == Param.TermMaxsize) then + Queue.iter rulequeue (fun r -> ignore (selection_fun_weight r)); diff --git a/preinstallTTool/linux/proverif/src/selfun.mli b/preinstallTTool/linux/proverif/src/selfun.mli new file mode 100644 index 0000000000000000000000000000000000000000..97328ae87efdf142239ba58c3862e7fb589f56e5 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/selfun.mli @@ -0,0 +1,37 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val never_select_weight : int +val match_concl_weight : int +val default_add_no_unif_weight : int +val default_user_no_unif_weight : int + +val reset_no_unif_set : unit -> unit +val inst_constraints : bool ref +val add_no_unif : Types.fact_format -> int -> unit +val guess_no_unif : Types.reduction Queue.q -> unit +val selection_fun : Types.reduction -> int diff --git a/preinstallTTool/linux/proverif/src/simplify.cmi b/preinstallTTool/linux/proverif/src/simplify.cmi new file mode 100644 index 0000000000000000000000000000000000000000..93a86e02372dc7bbd0f0bbaedc73f75d1306bf4a Binary files /dev/null and b/preinstallTTool/linux/proverif/src/simplify.cmi differ diff --git a/preinstallTTool/linux/proverif/src/simplify.cmx b/preinstallTTool/linux/proverif/src/simplify.cmx new file mode 100644 index 0000000000000000000000000000000000000000..4744b8a60ea6293639db5c78902550943c6513c3 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/simplify.cmx differ diff --git a/preinstallTTool/linux/proverif/src/simplify.ml b/preinstallTTool/linux/proverif/src/simplify.ml new file mode 100644 index 0000000000000000000000000000000000000000..729610eea4844cebbe8ab8d999a8ce204f06d56b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/simplify.ml @@ -0,0 +1,2309 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types +open Pitypes + +(* [reject_choice_true_false] is [true] when a process that still + contains a test "if choice[true,false] then ... else ..." + should be discarded. + Indeed, ProVerif is very unlikely to prove observational equivalence + for such processes. *) + +let reject_choice_true_false = ref false + +(* [simplif_done] is set to [true] when a real simplification + has been done during the simplification of a process. + A real simplification can be merging two branches of if + or decomposing a "let f(...) = f(...) in". + By default, simplified processes in which no real simplification + has been done are discarded. *) + +let simplif_done = ref false + +let new_occurrence = Terms.new_occurrence + +(********************************************* + Types of normalised process +**********************************************) + +type normalised_process_P = + { + seq_names : (funsymb * new_args) list; + seq_lets : (binder * term) list; + seq_cond : normalized_process_D + } + +and normalized_process_D = + IfNorm of term * normalized_process_D * normalized_process_D + | NormProc of normalised_process_Q + +and normalised_process_Q = (normalised_process_R list) * (normalised_process_Repl option) + +and normalised_process_Repl = + { + r_seq_names : (funsymb * new_args) list; + r_seq_lets : (binder * term) list; + r_proc : normalised_process_Q + } + +and normalised_process_R = + | InNorm of term * binder * normalised_process_P + | OutNorm of term * term * normalised_process_Q + | InsertNorm of term * normalised_process_Q + | GetNorm of binder * term * normalised_process_P * normalised_process_P + | PhaseNorm of int * normalised_process_R + +(************************************************ + Display of normalized processes +************************************************) + +let rec display_norm_P align proc = + if proc.seq_names != [] then + begin + print_string align; + List.iter (fun (f,args) -> + Display.Text.display_keyword "new"; + print_string " "; + Display.Text.display_function_name f; + print_string ".") proc.seq_names; + print_newline() + end; + if proc.seq_lets != [] then + begin + print_string align; + Display.Text.display_list (fun (b,t) -> + Display.Text.display_keyword "let"; + print_string " "; + Printf.printf "%s = " (Display.Text.varname b); + Display.Text.display_term t; + print_string " "; + Display.Text.display_keyword "in"; + ) " " proc.seq_lets; + print_newline() + end; + display_norm_D align proc.seq_cond + +and display_norm_D align = function + IfNorm(cond,p1,p2) -> + print_string align; + Display.Text.display_keyword "if"; + print_string " "; + Display.Text.display_term cond; + print_string " "; + Display.Text.display_keyword "then"; + print_string " (\n"; + display_norm_D (align ^ " ") p1; + print_string (align ^ ") "); + Display.Text.display_keyword "else"; + print_string " (\n"; + display_norm_D (align ^ " ") p2; + print_string (align ^ ")\n") + | NormProc p -> display_norm_Q align p + +and display_norm_Q align (procsR,procP) = + print_string align; + if procsR = [] && procP = None + then print_string "Nil\n" + else + begin + print_string "(\n"; + let rec display_par_list = function + [] -> () + | [p] -> + display_norm_R (align^" ") p; + print_string (align^")") + | p::l -> + display_norm_R (align^" ") p; + print_string (align^") | ("); + print_newline(); + display_par_list l + in + display_par_list procsR; + begin + match procP with + | None -> () + | Some p -> + if procsR != [] then print_string " | (\n"; + print_string (align ^ " !\n"); + display_norm_Repl (align^" ") p; + print_string (align^")"); + end; + print_newline() + end + +and display_norm_Repl align proc = + if proc.r_seq_names != [] then + begin + print_string align; + List.iter (fun (f,args) -> + Display.Text.display_keyword "new"; + print_string " "; + Display.Text.display_function_name f; + print_string ".") proc.r_seq_names; + print_newline() + end; + if proc.r_seq_lets != [] then + begin + print_string align; + Display.Text.display_list (fun (b,t) -> + Display.Text.display_keyword "let"; + print_string " "; + Printf.printf "%s = " (Display.Text.varname b); + Display.Text.display_term t; + print_string " "; + Display.Text.display_keyword "in"; + ) " " proc.r_seq_lets; + print_newline() + end; + display_norm_Q align proc.r_proc + +and display_norm_R align = function + | InNorm(t,b,p) -> + print_string align; + Display.Text.display_keyword "in"; + print_string "("; + Display.Text.display_term t; + Printf.printf ",%s)." (Display.Text.varname b); + print_newline(); + display_norm_P align p + | OutNorm(t1,t2,p) -> + print_string align; + Display.Text.display_keyword "out"; + print_string "("; + Display.Text.display_term t1; + Printf.printf ","; + Display.Text.display_term t2; + print_string ")."; + print_newline(); + display_norm_Q align p + | InsertNorm(t,p) -> + print_string align; + Display.Text.display_keyword "insert"; + print_string "("; + Display.Text.display_term t; + print_string ")."; + print_newline(); + display_norm_Q align p + | GetNorm(x,t,p,p') -> + print_string align; + Display.Text.display_keyword "get"; + print_string " "; + print_string (Display.Text.varname x); + print_string " "; + Display.Text.display_keyword "suchthat"; + print_string " "; + Display.Text.display_term t; + print_string " "; + Display.Text.display_keyword "then"; + display_norm_P (align^" ") p; + Display.Text.display_keyword "else"; + display_norm_P (align^" ") p'; + | PhaseNorm(n,p) -> + print_string align; + Display.Text.display_keyword "phase"; + print_string " "; + print_int n; + print_string "."; + print_newline(); + display_norm_R align p + + +(********************************************* + Copy of a process +**********************************************) + +(* copy_process does not support linking a variable + that occurs in the argument of a Restr to a non-variable + term (because arguments of Restr are always variables, + and it would need to replace that variable with a + non-variable term). *) + +let glob_table = Hashtbl.create 7 + +(* [rename_private_name n] creates and returns a fresh private + name with the same type as [n] *) + +let rename_private_name n = + Terms.create_name (Terms.fresh_id n.f_name) n.f_type true + +let copy_binder add_in_glob_table b = + let b' = + if add_in_glob_table then + (* If it is the final copy, create a distinct variable *) + if b.vname = -1 then + Terms.new_var b.sname b.btype + else + Terms.copy_var b + else + Terms.copy_var_noren b + in + match b.link with + NoLink -> + Terms.link b (TLink (Var b')); + b' + | _ -> Parsing_helper.internal_error ("unexpected link in copy_binder " ^ b.sname) + +let update_env env = + Stringmap.StringMap.map (function + (EVar b) as x -> + begin + match b.link with + TLink (Var b') -> EVar b' + | _ -> x + end + | x -> x) env + +let update_args_opt lopt = + match lopt with + None -> None + | Some l -> Some (List.map (fun b -> + begin + match b.link with + TLink (Var b') -> b' + | NoLink -> b + | _ -> Parsing_helper.internal_error "unexpected link in Simplify.update_args_opt" + end) l) + +let rec copy_pat add_in_glob_table = function + PatVar b -> PatVar (copy_binder add_in_glob_table b) + | PatTuple(f,l) -> PatTuple(f, List.map (copy_pat add_in_glob_table) l) + | PatEqual(t) -> PatEqual (Terms.copy_term3 t) + +let rec copy_process add_in_glob_table = function + Nil -> Nil + | Par(p1,p2) -> + let p1' = copy_process add_in_glob_table p1 in + let p2' = copy_process add_in_glob_table p2 in + Par(p1', p2') + | Restr(n,(args,env),p,occ) -> + if add_in_glob_table then + (* If it is the final copy, create a distinct name for each restriction and add it in the glob_table *) + let n' = rename_private_name n in + Hashtbl.add glob_table n.f_name n'; + Restr(n', (update_args_opt args,update_env env), Reduction_helper.process_subst (copy_process add_in_glob_table p) n (FunApp(n',[])), new_occurrence()) + else + Restr(n, (update_args_opt args,update_env env), copy_process add_in_glob_table p, new_occurrence()) + | Repl(p,occ) -> Repl(copy_process add_in_glob_table p, new_occurrence()) + | Let(pat, t, p, q, occ) -> + Terms.auto_cleanup (fun () -> + let pat' = copy_pat add_in_glob_table pat in + let occ' = new_occurrence() in + let p' = copy_process add_in_glob_table p in + let q' = copy_process add_in_glob_table q in + Let(pat', Terms.copy_term3 t, p', q', occ')) + | Input(t, pat, p, occ) -> + Terms.auto_cleanup (fun () -> + let pat' = copy_pat add_in_glob_table pat in + Input(Terms.copy_term3 t, pat', copy_process add_in_glob_table p, new_occurrence())) + | Output(tc,t,p, occ) -> + Output(Terms.copy_term3 tc, Terms.copy_term3 t, copy_process add_in_glob_table p, new_occurrence()) + | Test(t,p,q,occ) -> + let occ' = new_occurrence() in + let p' = copy_process add_in_glob_table p in + let q' = copy_process add_in_glob_table q in + Test(Terms.copy_term3 t, p', q', occ') + | Event(t, p, occ) -> Event(Terms.copy_term3 t, copy_process add_in_glob_table p, new_occurrence()) + | Insert(t, p, occ) -> Insert(Terms.copy_term3 t, copy_process add_in_glob_table p, new_occurrence()) + | Get(pat, t, p, q, occ) -> + Terms.auto_cleanup (fun () -> + let pat' = copy_pat add_in_glob_table pat in + let p' = copy_process add_in_glob_table p in + let q' = copy_process add_in_glob_table q in + Get(pat', Terms.copy_term3 t, p', q', new_occurrence())) + | Phase(n,p,occ) -> Phase(n, copy_process add_in_glob_table p, new_occurrence()) + | LetFilter(bl, f, p, q, occ) -> + Terms.auto_cleanup (fun () -> + let bl' = List.map (copy_binder add_in_glob_table) bl in + let occ' = new_occurrence() in + let p' = copy_process add_in_glob_table p in + let q' = copy_process add_in_glob_table q in + LetFilter(bl', Terms.copy_fact3 f, p', q', occ')) + +(* Prepare a process by choosing new identifiers for names, variables... *) + +let prepare_process p = + Hashtbl.clear glob_table; + Terms.auto_cleanup (fun () -> + Terms.reset_occurrence(); + copy_process true p + ) + +(************************************* + Follow links in a process +**************************************) + +let rec follow_pattern = function + | PatVar(x) -> PatVar(x) + | PatTuple(f,l) -> PatTuple(f,List.map follow_pattern l) + | PatEqual(t) -> PatEqual(Terms.copy_term3 t) + +let rec follow_process = function + | Nil -> Nil + | Par(p1,p2) -> Par(follow_process p1,follow_process p2) + | Repl(p,occ) -> Repl(follow_process p,occ) + | Restr(f,args,p,occ) -> Restr(f,args,follow_process p,occ) + | Test(t,p1,p2,occ) -> + let t' = Terms.copy_term3 t + and p1' = follow_process p1 + and p2' = follow_process p2 in + Test(t',p1',p2',occ) + | Input(t,pat,p,occ) -> + let t' = Terms.copy_term3 t + and pat' = follow_pattern pat + and p' = follow_process p in + Input(t',pat',p',occ) + | Output(ch,t,p,occ) -> + let ch' = Terms.copy_term3 ch + and t' = Terms.copy_term3 t + and p' = follow_process p in + Output(ch',t',p',occ) + | Let(pat,t,p1,p2,occ) -> + let t' = Terms.copy_term3 t + and pat' = follow_pattern pat + and p1' = follow_process p1 + and p2' = follow_process p2 in + Let(pat',t',p1',p2',occ) + | LetFilter(_,_,_,_,_) -> input_error "Merging and simplify do not support LetFilter in the process" dummy_ext + | Event(t,p,occ) -> + let t' = Terms.copy_term3 t in + let p' = follow_process p in + Event(t', p', occ) + | Insert(t, p, occ) -> + let t' = Terms.copy_term3 t in + let p' = follow_process p in + Insert(t', p', occ) + | Get(pat, t, p, q, occ) -> + let pat' = follow_pattern pat in + let t' = Terms.copy_term3 t in + let p' = follow_process p in + let q' = follow_process q in + Get(pat', t', p', q', occ) + | Phase(n, proc,occ) -> Phase(n, follow_process proc, occ) + +let rec follow_process_P proc = + { proc with + seq_lets = List.map (fun (b,t) -> (b, Terms.copy_term3 t)) proc.seq_lets; + seq_cond = follow_process_D proc.seq_cond + } + +and follow_process_D = function + IfNorm(t,p1,p2) -> IfNorm(Terms.copy_term3 t, follow_process_D p1, follow_process_D p2) + | NormProc(p) -> NormProc(follow_process_Q p) + +and follow_process_Q (procs_R,proc_P) = match proc_P with + | None -> (List.map follow_process_R procs_R,None) + | Some p -> (List.map follow_process_R procs_R,Some (follow_process_Repl p)) + +and follow_process_Repl proc = + { proc with + r_seq_lets = List.map (fun (b,t) -> (b, Terms.copy_term3 t)) proc.r_seq_lets; + r_proc = follow_process_Q proc.r_proc + } + +and follow_process_R = function + | InNorm(t,x,p) -> InNorm(Terms.copy_term3 t,x,follow_process_P p) + | OutNorm(ch,t,q) -> OutNorm(Terms.copy_term3 ch, Terms.copy_term3 t,follow_process_Q q) + | InsertNorm(t,q) -> InsertNorm(Terms.copy_term3 t,follow_process_Q q) + | GetNorm(x,t,p1,p2) -> GetNorm(x,Terms.copy_term3 t,follow_process_P p1,follow_process_P p2) + | PhaseNorm(n,r) -> PhaseNorm(n,follow_process_R r) + +(********************************************* + Helper functions +**********************************************) + +(* [remove_from a l] returns the list [l] with the + (first occurrence of) element [a] removed. + The element [a] must occur in the list [l]. *) + +let rec remove_from a = function + [] -> Parsing_helper.internal_error "element should be in the list in remove_from" + | a'::l -> + if a' == a then l else a'::(remove_from a l) + +(* [check_disjoint_append l1 l2] returns [l1 @ l2] + and checks that the lists [l1] and [l2] do not have + common elements *) + +let rec check_disjoint_append l1 l2 = + match l1 with + [] -> l2 + | a::l -> + if List.memq a l2 then + Parsing_helper.internal_error "collision in check_disjoint_append" + else + a::(check_disjoint_append l l2) + +(* [check_disjoint_pair_append l1 l2] returns [l1 @ l2] + and checks that the lists [l1] and [l2] do not contain + pairs with the same first element, corresponding to + lets that bind the same variable or new names creating the + same name. *) + +let rec check_disjoint_pair_append l1 l2 = + match l1 with + [] -> l2 + | a::l -> + let x = fst a in + if List.exists (fun (x',t) -> x' == x) l2 then + Parsing_helper.internal_error "collision in check_disjoint_pair_append" + else + a::(check_disjoint_pair_append l l2) + +(********************************************* + Normalize process +**********************************************) + +(* [fst_snd_term next_f t] transforms the term [t] with choice into a pair of terms [t1,t2] + and calls [next_f t1 t2]. + [fst_snd_term_list] is the same for lists of terms. *) + +let rec fst_snd_term next_f = function + | Var v -> next_f (Var v) (Var v) + | FunApp({f_cat = Choice},[t1;t2]) -> + fst_snd_term (fun t11 t12 -> + fst_snd_term (fun t21 t22 -> + next_f t11 t22 + ) t2 + ) t1 + | FunApp(f,args) -> + fst_snd_term_list (fun q1 q2 -> + next_f (FunApp(f,q1)) (FunApp(f,q2)) + ) args + +and fst_snd_term_list next_f = function + | [] -> next_f [] [] + | t::q -> + fst_snd_term (fun t1 t2 -> + fst_snd_term_list (fun q1 q2 -> + next_f (t1::q1) (t2::q2) + ) q + ) t + +let rec fst_snd_acc_unify next_f = function + | [] -> next_f [] [] + | (a,b)::q -> + fst_snd_term (fun a1 a2 -> + fst_snd_term (fun b1 b2 -> + fst_snd_acc_unify (fun q1 q2 -> + next_f ((a1,b1)::q1) ((a2,b2)::q2) + ) q + ) b + ) a + +(****** Is always ? ******) + +let check_constra accu_constra = + let constra_list = Terms.auto_cleanup (fun () -> + List.map (fun (t1,t2) -> [Neq(Terms.copy_term2 t1,Terms.copy_term2 t2)]) accu_constra) in + let _ = TermsEq.check_constraint_list constra_list in + () + + +let rec unify_all accu_constra next_f = function + | [] -> next_f accu_constra + | (t1,t2)::q -> + TermsEq.close_term_destr_eq accu_constra (fun accu_constra_1 t1' -> + try + (* Check that inequality constraints are satisfiable at each step, + to cut impossible branches as soon as possible. *) + check_constra accu_constra_1; + TermsEq.close_term_destr_eq accu_constra_1 (fun accu_constra_2 t2' -> + try + check_constra accu_constra_2; + (* Since close_term_destr_eq closes terms modulo equations, syntactic unification is enough *) + Terms.unify t1' t2'; + unify_all accu_constra_2 next_f q + with Terms.Unify -> () + ) t2 + with Terms.Unify -> () + ) t1 + + +exception Unification_found + +(* Check if there is at least one possible unification (no choice in term) *) +let is_unification_possible_no_choice acc_unify = + try + Terms.auto_cleanup (fun () -> + unify_all [] (fun _ -> raise Unification_found) acc_unify); + false + with Unification_found -> true + +(* Check if there is at least one possible unification on right or left side *) +let is_unification_possible acc_unify = + fst_snd_acc_unify (fun acc1 acc2 -> + is_unification_possible_no_choice acc1 + || is_unification_possible_no_choice acc2 + ) acc_unify + +let is_term_always_succeed_no_choice term acc_unify = + try + Terms.auto_cleanup (fun () -> + unify_all [] (fun accu_constra -> + TermsEq.close_term_destr_eq accu_constra (fun neq_t t -> + try + check_constra neq_t; + let new_t = Terms.copy_term2 t in + Terms.cleanup(); + if Terms.is_may_fail_term new_t then + raise Unification_found + with Terms.Unify -> () + ) term + ) acc_unify + ); + true + with Unification_found -> false + +let is_term_always_succeed term acc_unify = + fst_snd_acc_unify (fun acc1 acc2 -> + fst_snd_term (fun t1 t2 -> + (is_term_always_succeed_no_choice t1 acc1) && + (is_term_always_succeed_no_choice t2 acc2) + ) term + ) acc_unify + +let is_term_always_true_no_choice term acc_unify = + assert (Terms.equal_types (Terms.get_term_type term) Param.bool_type); + try + Terms.auto_cleanup (fun () -> + unify_all [] (fun accu_constra -> + TermsEq.close_term_destr_eq accu_constra (fun neq_t t -> + try + check_constra neq_t; + (* Note: equal_open_terms_modulo follows links, so no need to copy t before *) + if not (Reduction_helper.equal_open_terms_modulo t Terms.true_term) + then raise Unification_found + with Terms.Unify -> () + ) term; + ) acc_unify + ); + true + with Unification_found -> false + +let is_term_always_true term acc_unify = + fst_snd_acc_unify (fun acc1 acc2 -> + fst_snd_term (fun t1 t2 -> + (is_term_always_true_no_choice t1 acc1) && + (is_term_always_true_no_choice t2 acc2) + ) term + ) acc_unify + +let is_term_always_false_no_choice term acc_unify = + assert (Terms.equal_types (Terms.get_term_type term) Param.bool_type); + try + Terms.auto_cleanup (fun () -> + unify_all [] (fun accu_constra -> + TermsEq.close_term_destr_eq accu_constra (fun neq_t t -> + try + check_constra neq_t; + (* Note: equal_open_terms_modulo follows links, so no need to copy t before *) + if not (Reduction_helper.equal_open_terms_modulo t Terms.false_term) + then raise Unification_found + with Terms.Unify -> () + ) term; + ) acc_unify + ); + true + with Unification_found -> false + +let is_term_always_false term acc_unify = + fst_snd_acc_unify (fun acc1 acc2 -> + fst_snd_term (fun t1 t2 -> + (is_term_always_false_no_choice t1 acc1) && + (is_term_always_false_no_choice t2 acc2) + ) term + ) acc_unify + +(****** Remove pattern ******) + +let one_var_pattern_from_pattern pattern = + + let rec sub_one_var_pattern_from_pattern cor_term = function + | PatVar(v) -> Terms.link v (TLink cor_term); + None + | PatTuple(f,[]) -> + Some(FunApp(Terms.equal_fun (snd f.f_type),[FunApp(f,[]);cor_term])) + | PatTuple(f,pat_list) -> + let cor_term_list = List.map (fun f -> FunApp(f,[cor_term])) (Terms.get_all_projection_fun f) in + begin + match sub_one_var_pattern_from_pattern_list cor_term_list pat_list with + | None -> + let t1 = List.hd cor_term_list in + Some(FunApp(Terms.success_fun (Terms.get_term_type t1),[t1])) + | Some(test) -> + let t1 = List.hd cor_term_list in + Some(FunApp(Terms.and_fun(),[FunApp(Terms.success_fun (Terms.get_term_type t1),[t1]);test])) + end + | PatEqual(t) -> + Some(FunApp(Terms.equal_fun (Terms.get_term_type t),[t;cor_term])) + + and sub_one_var_pattern_from_pattern_list cor_term_list pattern_list = + match pattern_list,cor_term_list with + | [],[] -> None + | [],_ | _,[] -> internal_error "[one_var_pattern_from_pattern] The two list should have the same size" + | pat::pat_l, cor::cor_l -> + let test_1 = sub_one_var_pattern_from_pattern cor pat in + let test_2 = sub_one_var_pattern_from_pattern_list cor_l pat_l in + begin + match test_1,test_2 with + | None,None -> None + | Some(t),None -> Some(t) + | None,Some(t) -> Some(t) + | Some(t),Some(t') -> Some(FunApp(Terms.and_fun(),[t;t'])) + end + in + + let x = Terms.new_var Param.def_var_name (Terms.get_pat_type pattern) in + + let test_success = sub_one_var_pattern_from_pattern (Var(x)) pattern in + PatVar(x),test_success + + +(****** Simplify pattern and term evaluation: + make sure that patterns are always variables and + that term evaluations never fail ******) + +let rec verify_unification proc acc_unify = + if is_unification_possible acc_unify + then canonical_process proc acc_unify + else + begin + if proc <> Nil + then print_string "Warning: Some part of the protocol will never be executed\n"; + + Nil + end + +and canonical_process process acc_unify = match process with + | Nil -> Nil + | Par (proc1,proc2) -> Par (canonical_process proc1 acc_unify,canonical_process proc2 acc_unify) + | Repl (proc, occ) -> Repl (canonical_process proc acc_unify,occ) + | Restr (funsymb,args,proc,occ) -> Restr (funsymb,args,canonical_process proc acc_unify,occ) + | Test (term,proc1,proc2,occ) -> + if is_term_always_succeed term acc_unify + then Test(term,verify_unification proc1 ((term,Terms.true_term)::acc_unify), verify_unification proc2 ((term,Terms.false_term)::acc_unify), occ) + else + let type_term = Terms.get_term_type term in + let x = Terms.new_var Param.def_var_name type_term in + let catch = FunApp(Terms.glet_fun type_term,[term]) in + let test = FunApp(Terms.not_caught_fail_fun type_term,[Var x]) in + + Let (PatVar x, catch, + Test(test, + Test(Var x, + verify_unification proc1 ((test,Terms.true_term)::(Var x,Terms.true_term)::acc_unify), + verify_unification proc2 ((test,Terms.true_term)::(Var x,Terms.false_term)::acc_unify), + occ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ) + | Input(term,pat,proc,occ) -> + begin match pat with + | PatVar _ -> + if is_term_always_succeed term acc_unify + then Input(term,pat,canonical_process proc acc_unify,occ) + else + let type_term = Terms.get_term_type term in + let x = Terms.new_var Param.def_var_name type_term in + let catch = FunApp(Terms.glet_fun type_term,[term]) in + let test = FunApp(Terms.not_caught_fail_fun type_term,[Var x]) in + + Let (PatVar x, catch, + Test(test, + Input(Var x,pat,verify_unification proc ((Var x, catch)::(test,Terms.true_term)::acc_unify),occ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ) + | _ -> + (* Test current_bound_vars *) + assert (!Terms.current_bound_vars == []); + + let pat_x,test_success = one_var_pattern_from_pattern pat in + + let new_proc = match test_success with + | None -> proc + | Some(t) -> Test(t,proc, Nil, new_occurrence ()) in + + let proc_substituted = follow_process new_proc in + Terms.cleanup (); + + canonical_process (Input(term,pat_x,proc_substituted,occ)) acc_unify + end + | Output(ch_term,term,proc,occ) -> + if is_term_always_succeed ch_term acc_unify + then + if is_term_always_succeed term acc_unify + then Output(ch_term,term, canonical_process proc acc_unify,occ) + else + let type_term = Terms.get_term_type term in + let x = Terms.new_var Param.def_var_name type_term in + let catch = FunApp(Terms.glet_fun type_term,[term]) in + let test = FunApp(Terms.not_caught_fail_fun type_term,[Var x]) in + + Let (PatVar x, catch, + Test(test, + Output(ch_term,Var x,verify_unification proc ((Var x, catch)::(test,Terms.true_term)::acc_unify),occ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ) + else + if is_term_always_succeed term acc_unify + then + let type_ch_term = Terms.get_term_type ch_term in + let x_ch = Terms.new_var Param.def_var_name type_ch_term in + let catch_ch = FunApp(Terms.glet_fun type_ch_term,[ch_term]) in + let test_ch = FunApp(Terms.not_caught_fail_fun type_ch_term,[Var x_ch]) in + + Let (PatVar x_ch, catch_ch, + Test(test_ch, + Output(Var x_ch,term,verify_unification proc ((Var x_ch, catch_ch)::(test_ch,Terms.true_term)::acc_unify),occ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ) + else + let type_ch_term = Terms.get_term_type ch_term in + let type_term = Terms.get_term_type term in + + let x_ch = Terms.new_var Param.def_var_name type_ch_term in + let x = Terms.new_var Param.def_var_name type_term in + + let catch_ch = FunApp(Terms.glet_fun type_ch_term,[ch_term]) in + let catch = FunApp(Terms.glet_fun type_term,[term]) in + + let test_ch = FunApp(Terms.not_caught_fail_fun type_ch_term,[Var x_ch]) in + let test = FunApp(Terms.not_caught_fail_fun type_term,[Var x]) in + + Let (PatVar x_ch, catch_ch, + Test(test_ch, + Let (PatVar x, catch, + Test(test, + Output(Var x_ch,Var x,verify_unification proc ((Var x, catch)::(test,Terms.true_term)::(Var x_ch, catch_ch)::(test_ch,Terms.true_term)::acc_unify),occ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ) + | Let(pat,term,proc1,proc2,occ) -> + begin match pat with + | PatVar x -> + if is_term_always_succeed term [] + (* The "let"s can be moved above conditions by normalization, + so I cannot take into account previous conditions in acc_unify + to test whether the "let" always succeeds. *) + then + begin + if proc2 <> Nil + then ( + print_string "Warning: The else branch in "; + Display.Text.display_occ occ; + print_string " will never be executed\n" + ); + + Let(pat,term,verify_unification proc1 ((Var x, term)::acc_unify),Nil,occ) + + end + else + let type_term = Terms.get_term_type term in + let catch = FunApp(Terms.glet_fun type_term,[term]) in + let test = FunApp(Terms.not_caught_fail_fun type_term,[Var x]) in + + Let (PatVar x, catch, + Test(test, + verify_unification proc1 ((Var x, catch)::(test,Terms.true_term)::acc_unify), + verify_unification proc2 ((Var x, catch)::(test,Terms.false_term)::acc_unify), + occ + ), + Nil, + new_occurrence () + ) + | _ -> + (* Test current_bound_vars *) + assert (!Terms.current_bound_vars == []); + + try + let rec decompose_pat_term pat term (pat_accu, term_accu) = + match pat, term with + | PatTuple(f,l), FunApp(f',l') when f == f' -> + simplif_done := true; + List.fold_right2 decompose_pat_term l l' (pat_accu, term_accu) + | PatTuple(f,l), FunApp(f',l') when f'.f_cat = Tuple && f != f' -> + (* The let always fails *) + raise Not_found + | _ -> pat::pat_accu, term::term_accu + in + + let (pat_list, term_list) = decompose_pat_term pat term ([], []) in + + let pat_test_list = List.map one_var_pattern_from_pattern pat_list in + + let term_test_list = List.map2 (fun (pat_x, _) t -> + if is_term_always_succeed t [] + (* The "let"s can be moved above conditions by normalization, + so I cannot take into account previous conditions in acc_unify + to test whether the "let" always succeeds. *) + then + (t, None) + else + match pat_x with + PatVar x -> + let type_term = Terms.get_term_type t in + let catch = FunApp(Terms.glet_fun type_term,[t]) in + let test = FunApp(Terms.not_caught_fail_fun type_term,[Var x]) in + (catch, Some test) + | _ -> Parsing_helper.internal_error "[simplify.ml >> canonical_process] patterns returned by one_var_pattern_from_pattern should be variables" + ) pat_test_list term_list + in + + let rec make_test = function + [] -> None + | None :: l -> make_test l + | (Some t)::l -> + match make_test l with + None -> Some t + | Some t' -> Some (FunApp(Terms.and_fun(), [t; t'])) + in + + let new_proc = + match make_test ((List.map snd term_test_list) @ (List.map snd pat_test_list)) with + | None -> + if proc2 <> Nil + then ( + print_string "Warning: The else branch in "; + Display.Text.display_occ occ; + print_string " will never be executed.\n" + ); + proc1 + | Some(t) -> Test(t,proc1, proc2, new_occurrence ()) + in + + let proc_substituted = follow_process new_proc in + Terms.cleanup (); + + let rec put_lets pat_test_list term_list p = + match pat_test_list, term_list with + [],[] -> p + | (pat_x, _)::l, (term,_)::l' -> + Let(pat_x, term, put_lets l l' p, Nil, new_occurrence ()) + | _ -> Parsing_helper.internal_error "[simplify.ml >> canonical_process] the list of patterns and terms should have the same length" + in + + canonical_process (put_lets pat_test_list term_test_list proc_substituted) acc_unify + with Not_found -> + canonical_process proc2 acc_unify + end + | LetFilter(_,_,_,_,_) -> internal_error "[simplify.ml >> canonical_process] LetFilter should not be in the process" + | Event (_,_,_) -> internal_error "[simplify.ml >> canonical_process] Event should not be in the process" + | Insert (term,proc,occ) -> + if is_term_always_succeed term acc_unify + then Insert(term,canonical_process proc acc_unify,occ) + else + let type_term = Terms.get_term_type term in + let x = Terms.new_var Param.def_var_name type_term in + let catch = FunApp(Terms.glet_fun type_term,[term]) in + let test = FunApp(Terms.not_caught_fail_fun type_term,[Var x]) in + + Let (PatVar x, catch, + Test(test, + Insert(Var x,verify_unification proc ((Var x, catch)::(test,Terms.true_term)::acc_unify),occ), + Nil, + new_occurrence () + ), + Nil, + new_occurrence () + ) + | Get(pat,term,proc1,proc2,occ) -> + let term' = + if is_term_always_succeed term acc_unify then term else + FunApp(Terms.success_fun Param.bool_type, [FunApp(Terms.is_true_fun(), [term])]) + in + begin match pat with + | PatVar _ -> + Get(pat,term',verify_unification proc1 ((term, Terms.true_term)::acc_unify),canonical_process proc2 acc_unify,occ) + | _ -> + (* Test current_bound_vars *) + assert (!Terms.current_bound_vars == []); + + let pat_x,test_success = one_var_pattern_from_pattern pat in + + let new_term = match test_success with + | None -> term' + | Some(t) -> + (* t is true when the pattern-matching succeeds, + false or fail otherwise. *) + FunApp(Terms.and_fun(), [FunApp(Terms.success_fun Param.bool_type, [FunApp(Terms.is_true_fun(), [t])]); term']) + in + + let proc_substituted = follow_process proc1 in + let term_substituted = Terms.copy_term3 new_term in + Terms.cleanup (); + + Get(pat_x,term_substituted, + verify_unification proc_substituted ((term_substituted, Terms.true_term)::acc_unify), + canonical_process proc2 acc_unify,occ) + end + | Phase(n,proc,occ) -> Phase(n,canonical_process proc acc_unify,occ) + +(****** Normalisation ******) + +(* Check if some term [t] in the process satisfies [f t] *) + +let rec exists_term_P f p = + (List.exists (fun (b,t) -> f t) p.seq_lets) || + (exists_term_D f p.seq_cond) + +and exists_term_D f = function + IfNorm(t,p1,p2) -> + (f t) || (exists_term_D f p1) || (exists_term_D f p2) + | NormProc(q) -> exists_term_Q f q + +and exists_term_Q f (rlist, popt) = + (List.exists (exists_term_R f) rlist) || + (match popt with + None -> false + | Some p -> exists_term_Repl f p) + +and exists_term_Repl f p = + (List.exists (fun (b,t) -> f t) p.r_seq_lets) || + (exists_term_Q f p.r_proc) + +and exists_term_R f = function + InNorm(t,x,p) -> (f t) || (exists_term_P f p) + | OutNorm(t1,t2,q) -> (f t1) || (f t2) || (exists_term_Q f q) + | InsertNorm(t, q) -> (f t) || (exists_term_Q f q) + | GetNorm(x,t,p1,p2) -> (f t) || (exists_term_P f p1) || (exists_term_P f p2) + | PhaseNorm(n,r) -> exists_term_R f r + +(* Apply [f] to each subprocess of a decision tree *) + +let rec map_D f = function + IfNorm(t, p1,p2) -> IfNorm(t, map_D f p1, map_D f p2) + | NormProc(p) -> NormProc(f p) + +(* Check if some subprocess [p] of a decision tree + satisfies [f p] *) + +let rec exists_D f = function + IfNorm(t,p1,p2) -> (exists_D f p1) || (exists_D f p2) + | NormProc(p) -> f p + +(* Normalization of replication: several helper functions *) + +(* Renaming of terms *) + +let rec rename_term subst_var subst_names = function + Var x -> + begin + try + Var (List.assq x subst_var) + with Not_found -> + Var x + end + | FunApp(f, []) -> + begin + try + FunApp (List.assq f subst_names, []) + with Not_found -> + FunApp(f, []) + end + | FunApp(f, l) -> FunApp(f, List.map (rename_term subst_var subst_names) l) + +(* Renaming of a sequence of lets. The terms are renamed, and at the + same time new variables are created to store them. *) + +let rec rename_lets subst_vars subst_names = function + [] -> [] + | ((b,t)::l) -> + let b' = Terms.new_var b.sname b.btype in + let t' = rename_term subst_vars subst_names t in + (b',t')::(rename_lets ((b,b')::subst_vars) subst_names l) + +(* Renaming of normalized processes *) + +let rec rename_P subst_vars subst_names p = + { seq_names = p.seq_names; + seq_lets = List.map (fun (b,t) -> (b, rename_term subst_vars subst_names t)) p.seq_lets; + seq_cond = rename_D subst_vars subst_names p.seq_cond } + +and rename_D subst_vars subst_names = function + IfNorm(t,p1,p2) -> + IfNorm(rename_term subst_vars subst_names t, + rename_D subst_vars subst_names p1, + rename_D subst_vars subst_names p2) + | NormProc(p) -> + NormProc(rename_Q subst_vars subst_names p) + +and rename_Q subst_vars subst_names (l, popt) = + (List.map (rename_R subst_vars subst_names) l, + match popt with + None -> None + | Some p -> Some (rename_Repl subst_vars subst_names p)) + +and rename_Repl subst_vars subst_names p = + { r_seq_names = p.r_seq_names; + r_seq_lets = List.map (fun (b,t) -> (b, rename_term subst_vars subst_names t)) p.r_seq_lets; + r_proc = rename_Q subst_vars subst_names p.r_proc } + +and rename_R subst_vars subst_names = function + InNorm(t,x,p) -> + InNorm(rename_term subst_vars subst_names t, x, + rename_P subst_vars subst_names p) + | OutNorm(t1,t2,p) -> + OutNorm(rename_term subst_vars subst_names t1, + rename_term subst_vars subst_names t2, + rename_Q subst_vars subst_names p) + | InsertNorm(t,p) -> + InsertNorm(rename_term subst_vars subst_names t, + rename_Q subst_vars subst_names p) + | GetNorm(x,t,p1,p2) -> + GetNorm(x, rename_term subst_vars subst_names t, + rename_P subst_vars subst_names p1, + rename_P subst_vars subst_names p2) + | PhaseNorm(n,p) -> + PhaseNorm(n, rename_R subst_vars subst_names p) + +(* [put_lets p l] adds the sequence of lets in [l] on top + of process [p], removing the lets that are not used in [p]. *) + +let rec put_lets p = function + [] -> p + | (x,t)::l -> + let p' = put_lets p l in + (* Keep only the lets in which the bound variable is used. *) + if exists_term_Repl (Terms.occurs_var x) p' then + { p' with + r_seq_lets = (x,t)::(p'.r_seq_lets) + } + else + p' + +(* [put_names p names] adds the sequence of new names [names] + on top of process [p], removing the names that are not used + in [p]. *) + +let rec put_names p names = + { p with + (* Keep only the restrictions in which the name is used. *) + r_seq_names = List.filter (fun (a,_) -> exists_term_Repl (Terms.occurs_f a) p) names } + +(* [build_repl_cond_tree names lets cond_tree] transforms each process [p] + inside the condition tree [cond_tree] into [! names lets p] where + [names] is a sequence of fresh names that are created and + [lets] is a sequence of lets. + Furthermore, the names in [names] and variables in [lets] are + renamed, unused names and variables are removed, and two simplifications + are applied: + - Remove the double replication when possible: + ! let x = ... in ! Q + becomes + ! let x = ... in Q. + - ! new ... let ... in 0 becomes just 0 *) + +let rec build_repl_cond_tree names lets = function + NormProc(p) -> + begin + let seq_names = List.map (fun (a,args) -> (rename_private_name a,args)) names in + let subst_names = List.map2 (fun (a,_) (a',_) -> (a,a')) names seq_names in + let seq_lets = rename_lets [] subst_names lets in + let subst_vars = List.map2 (fun (b,_) (b',_) -> (b,b')) lets seq_lets in + let p' = rename_Q subst_vars subst_names p in + let repl_p = put_names (put_lets {r_seq_names = []; r_seq_lets = []; r_proc = p'} seq_lets) seq_names in + match repl_p with + { r_seq_names = []; r_seq_lets = lets'; r_proc = ([],Some repl_p') } -> + (* Remove the double replication when possible: + ! let x = ... in ! Q + becomes + ! let x = ... in Q *) + NormProc([], Some({ repl_p' with + r_seq_lets = check_disjoint_pair_append lets' repl_p'.r_seq_lets })) + | { r_proc = ([], None) } -> + (* ! new ... let ... in 0 becomes just 0 *) + NormProc([], None) + | _ -> + NormProc([], Some repl_p) + end + | IfNorm(t,p1,p2) -> + IfNorm(t, + build_repl_cond_tree names lets p1, + build_repl_cond_tree names lets p2) + +(* [exists_term_P_in_top_cond f p] returns true when some terms [t] + in the top lets and conditions of [p] is such that [f t = true]. *) + +let rec exists_term_P_in_top_cond f p = + (List.exists (fun (b,t) -> f t) p.seq_lets) || + (exists_term_D_in_top_cond f p.seq_cond) + +and exists_term_D_in_top_cond f = function + IfNorm(t,p1,p2) -> + (f t) || (exists_term_D_in_top_cond f p1) || (exists_term_D_in_top_cond f p2) + | NormProc(q) -> false + +(* [put_lets_top p l] adds the sequence of lets in [l] on top + of process [p], removing the lets that are not used in [p]. + The variables defined in [l] are supposed to be referenced only + inside the top lets and conditions of [p], so that we do not need + to look further inside [p]. *) + +let rec put_lets_top p = function + [] -> p + | (x,t)::l -> + let p' = put_lets_top p l in + (* Keep only the lets in which the bound variable is used. + Given the previous renaming, the variable can be used only in + top lets and condition, so we optimise by not looking further in the process *) + if exists_term_P_in_top_cond (Terms.occurs_var x) p' then + { p' with + seq_lets = (x,t)::(p'.seq_lets) + } + else + p' + +(* [put_names_top p names] adds the sequence of new names [names] + on top of process [p], removing the names that are not used + in [p]. + The names in [names] are supposed to be referenced only + inside the top lets and conditions of [p], so that we do not need + to look further inside [p]. *) + +let rec put_names_top p names = + { p with + (* Keep only the restrictions in which the name is used. + Given the previous renaming, the name can be used only in + top lets and condition, so we optimise by not looking further in the process *) + seq_names = List.filter (fun (a,_) -> exists_term_P_in_top_cond (Terms.occurs_f a) p) names } + +(* [partition_lets names vars l] returns [(l1,l2)] + where [l1] is the sublist of the list of lets [l] + that refer directly or indirectly to names in [names] or variables in + [vars], [l2] contains the other elements of [l]. *) + +let rec partition_lets names vars = function + [] -> ([],[]) + | (b, t)::l -> + if (List.exists (fun a -> Terms.occurs_f a t) names) + || (List.exists (fun x -> Terms.occurs_var x t) vars) then + let (l1,l2) = partition_lets names (b::vars) l in + ((b,t)::l1, l2) + else + let (l1,l2) = partition_lets names vars l in + (l1, (b,t)::l2) + +(* Normalization of parallel composition *) + +let rec add_par q = function + IfNorm(t, p1,p2) -> IfNorm(t, add_par q p1, add_par q p2) + | NormProc(p) -> NormProc(par_Q p q) + +and par_D proc1 = function + IfNorm(t,p1,p2) -> IfNorm(t, par_D proc1 p1, par_D proc1 p2) + | NormProc(q) -> add_par q proc1 + +and par_P proc1 proc2 = + { + seq_names = check_disjoint_pair_append proc1.seq_names proc2.seq_names; + seq_lets = check_disjoint_pair_append proc1.seq_lets proc2.seq_lets; + seq_cond = par_D proc1.seq_cond proc2.seq_cond + } + +and par_Q (procs_R1,proc_S1) (procs_R2,proc_S2) = + (procs_R1 @ procs_R2, par_S proc_S1 proc_S2) + +and par_S proc_S1 proc_S2 = + match proc_S1,proc_S2 with + | None, None -> None + | Some p1, None -> Some p1 + | None,Some p2 -> Some p2 + | Some p1,Some p2 -> + Some { r_seq_names = check_disjoint_pair_append p1.r_seq_names p2.r_seq_names; + r_seq_lets = check_disjoint_pair_append p1.r_seq_lets p2.r_seq_lets; + r_proc = par_Q p1.r_proc p2.r_proc } + +(* Add the phase prefix to a normalized process *) + +let put_phase phase p = + match phase with + None -> p + | Some n -> PhaseNorm(n,p) + +(* Main normalization function *) + +(** We assume here that all pattern in proc are variables. Moreover, all [D] in [let x = D] always succeed *) +let rec norm phase proc = match proc with + | Nil -> { seq_names = []; seq_lets = []; seq_cond = NormProc([],None) } + | Input (c,var,p,_) -> + let bind = match var with + | PatVar (b) -> b + | _ -> internal_error "[simplify.ml >> norm] The pattern should be a variable" + in + + let next_norm_p = norm None p in + { seq_names = []; seq_lets = []; seq_cond = NormProc([ put_phase phase (InNorm(c,bind,next_norm_p))],None) } + + | Output (c,t,p,_) -> + let next_norm_p = norm None p in + { next_norm_p with + seq_cond = map_D (fun q -> ([put_phase phase (OutNorm(c,t,q))], None)) next_norm_p.seq_cond + } + | Par(p1,p2) -> par_P (norm phase p1) (norm phase p2) + | Repl(p,_) -> + let next_norm_p = norm phase p in + + (* Move the condition tree above the replication *) + let (dup_lets, no_dup_lets) = partition_lets (List.map fst next_norm_p.seq_names) [] next_norm_p.seq_lets in + let p = { seq_names = []; seq_lets = no_dup_lets; + seq_cond = build_repl_cond_tree + next_norm_p.seq_names dup_lets next_norm_p.seq_cond } + in + put_names_top (put_lets_top p dup_lets) next_norm_p.seq_names + | Restr(a,(args,env),p,_) -> + let next_norm_p = norm phase p in + if exists_term_P (Terms.occurs_f a) next_norm_p then + { next_norm_p with seq_names = (a,(None (*The arguments are ignored because it would be difficult to track them and they might prevent some transformations*),env))::next_norm_p.seq_names } + else + (* Remove the restriction when the name is not used *) + next_norm_p + | Let(pat,term,proc1,proc2,_) -> + assert (proc2 = Nil); + let next_norm_p = norm phase proc1 in + + let x = match pat with + | PatVar x -> x + | _ -> internal_error "[simplify.ml >> norm] It should be a variable as pattern" + in + + if exists_term_P (Terms.occurs_var x) next_norm_p then + { next_norm_p with + seq_lets = (x,term)::(next_norm_p.seq_lets) + } + else + (* Remove the let when the bound variable is not used *) + next_norm_p + | Test (term,proc1,proc2,_) -> + let next_norm_p = norm phase proc1 + and next_norm_p' = norm phase proc2 in + + if next_norm_p.seq_cond = NormProc([],None) && next_norm_p'.seq_cond = NormProc([],None) then + { seq_names = []; seq_lets = []; seq_cond = NormProc([],None) } + else + { + seq_names = check_disjoint_pair_append next_norm_p.seq_names next_norm_p'.seq_names; + seq_lets = check_disjoint_pair_append next_norm_p.seq_lets next_norm_p'.seq_lets; + seq_cond = IfNorm(term, next_norm_p.seq_cond, next_norm_p'.seq_cond) + } + | Insert(term,proc,_) -> + let next_norm_p = norm None proc in + { next_norm_p with + seq_cond = map_D (fun q -> ([put_phase phase (InsertNorm(term,q))],None)) next_norm_p.seq_cond + } + | Get(pat,term,proc1,proc2,_) -> + let x = match pat with + | PatVar x -> x + | _ -> internal_error "[simplify.ml >> norm] It should be a variable as pattern (2)" + in + { seq_names = []; seq_lets = []; seq_cond = NormProc([put_phase phase (GetNorm(x,term,norm None proc1,norm None proc2))],None) } + + | Phase(n,proc,_) -> + begin match phase with + | None -> norm (Some n) proc + | Some n' when n > n' -> norm (Some n) proc + | Some n' -> { seq_names = []; seq_lets = []; seq_cond = NormProc([],None) } + end + | _ -> internal_error "Filter and Event should not happen" + +(********************************************* + Merging process +**********************************************) + +(* Helper functions for merging of replicated processes *) + +(* [get_names p] returns the list of all new names created at the top of + process [p], possibly under lets and replications. *) + +let rec get_names p = + check_disjoint_append (List.map fst p.r_seq_names) + (match p.r_proc with + (_,None) -> [] + | (_,Some p') -> get_names p') + +(* [get_variables p] returns the list of all variables bound by let + at the top of process [p], possibly under lets and replications. *) + +let rec get_variables p = + check_disjoint_append (List.map fst p.r_seq_lets) + (match p.r_proc with + (_,None) -> [] + | (_,Some p') -> get_variables p') + +(* [put_some p] returns the process of type [normalised_process_Repl option] + corresponding to the process [p] of type [normalised_process_Repl]. + In general, it is [Some p], but when [p] is [([], None)], + it is just [None]: we simplify [!0] into [0]. *) + +let put_some p = + match p.r_proc with + ([],None) -> None + | _ -> Some p + +(* [split_processes names variables p] splits the process [p] + of type [normalised_process_Repl] into [(sel_p, non_sel_p)] + when the part of the process that uses names in [names] or + variables in [variables] is in [sel_p] and the rest is in + [non_sel_p]. + + In case a process in [sel_p] uses a name or variables + not in [names] or [variables] and still bound inside [p], + the resulting process [sel_p] is not well-formed. This problem + is solved by [partition_processes_rec] below, by redoing + the computation with added names and variables. +*) + +let rec split_processes names variables p = + let (sel_names, non_sel_names) = List.partition (fun (a,_) -> List.memq a names) p.r_seq_names in + let (sel_lets, non_sel_lets) = List.partition (fun (b,_) -> List.memq b variables) p.r_seq_lets in + let (listR, repl_opt) = p.r_proc in + let (sel_R, non_sel_R) = List.partition (fun p' -> exists_term_R (fun t -> + List.exists (fun a -> Terms.occurs_f a t) names || + List.exists (fun x -> Terms.occurs_var x t) variables) p') listR in + let (sel_repl_opt, non_sel_repl_opt) = + match repl_opt with + None -> (None, None) + | Some p' -> + let sel_p', non_sel_p' = split_processes names variables p' in + (put_some sel_p', put_some non_sel_p') + in + { r_seq_names = sel_names; + r_seq_lets = sel_lets; + r_proc = (sel_R, sel_repl_opt) }, + { r_seq_names = non_sel_names; + r_seq_lets = non_sel_lets; + r_proc = (non_sel_R, non_sel_repl_opt) } + +(* [partition_processes_rec sel_names non_sel_names sel_variables non_sel_variables p] + splits [p] into [sel_p, non_sel_p] such that [non_sel_p] does not use names + and variable in [sel_names] and [sel_variables] and is the largest possible. + In other words, [sel_p] is the smallest well-formed subprocess of [p] + that contains all processes that use names in [sel_names] or variables in [sel_variables]. + [non_sel_names] must contain all names bound at the root of [p] and not in [sel_names]. + Similarly for variables. *) + +let rec partition_processes_rec sel_names non_sel_names sel_variables non_sel_variables p = + let (sel_p, non_sel_p) = split_processes sel_names sel_variables p in + let (new_sel_names, new_non_sel_names) = + List.partition (fun a -> exists_term_Repl (Terms.occurs_f a) sel_p) non_sel_names + in + let (new_sel_variables, new_non_sel_variables) = + List.partition (fun x -> exists_term_Repl (Terms.occurs_var x) sel_p) non_sel_variables + in + if (new_sel_names != []) || (new_sel_variables != []) then + partition_processes_rec (new_sel_names @ sel_names) new_non_sel_names + (new_sel_variables @ sel_variables) new_non_sel_variables p + else + (sel_p, non_sel_p) + +(* [partition_processes r p] splits [p] into [sel_p, non_sel_p] such that + [sel_p] contains the subprocess [r] of [p] and is the smallest possible + to be well-formed. *) + +let partition_processes r p = + let all_names = get_names p in + let (sel_names, non_sel_names) = List.partition (fun a -> exists_term_R (Terms.occurs_f a) r) all_names in + let all_variables = get_variables p in + let (sel_variables, non_sel_variables) = List.partition (fun x -> exists_term_R (Terms.occurs_var x) r) all_variables in + if (sel_variables == []) && (sel_names == []) then + { r_seq_names = []; + r_seq_lets = []; + r_proc = ([r], None) }, + { r_seq_names = p.r_seq_names; + r_seq_lets = p.r_seq_lets; + r_proc = let (l,popt) = p.r_proc in (remove_from r l, popt) } + else + partition_processes_rec sel_names non_sel_names sel_variables non_sel_variables p + +(* Type of the state used internally by the function + [merge_replP_inside] *) + +type repl_merge_state = + { merged_part_names : (funsymb * new_args) list; + merged_part_lets : (binder * term) list; + merged_part_proc : normalised_process_R list; + in_group_to_merge_left : normalised_process_Q; + in_group_to_merge_right : normalised_process_Q; + rest_left : normalised_process_Repl; + rest_right : normalised_process_Repl } + +(* We define an exception that will express that no merging is possible between two protocols *) + +exception No_Merging + +(* [choose next_f [] l] calls [next_f a (l without a)] for each element + [a] of the list [l]. + It raises [No_Merging] when the call [next_f a (l without a)] raises + [No_Merging] for all elements [a] of [l]. *) + +let rec choose next_f seen = function + [] -> raise No_Merging + | a::l -> + let is_mergeable = ref false in + begin + try + next_f a (List.rev_append seen l); + is_mergeable := true + with No_Merging -> () + end; + begin + try + choose next_f (a::seen) l; + is_mergeable := true + with No_Merging -> () + end; + if not (!is_mergeable) then raise No_Merging + +(* [choose_g next_f p1 l], where [l] is the first component of [p1.r_proc], + calls [next_f p1_sel p1_non_sel] for each smallest well-formed + subgroup [p1_sel] of processes of [p1], where [p1_non_sel] is the rest + of [p1]. + (A single element of [l] may be well-formed, when it uses a name + or variable bound at the top of [p1] and also used by other elements + of [l]. In this case, the group of processes must also contain + these other processes, and the needed names and variables above + them.) *) + +let rec choose_g next_f p1 = function + [] -> raise No_Merging + | a::l -> + let (p1_sel, p1_non_sel) = partition_processes a p1 in + let is_mergeable = ref false in + begin + try + next_f p1_sel p1_non_sel; + is_mergeable := true + with No_Merging -> () + end; + begin + (* It is useless to retry with a process in p1_sel, + since it will lead to the same partition p1_sel / p1_non_sel, + so we remove these processes from l *) + let (rl,_) = p1_sel.r_proc in + let l' = List.filter (fun r -> not (List.memq r rl)) l in + try + choose_g next_f p1 l'; + is_mergeable := true + with No_Merging -> () + end; + if not (!is_mergeable) then raise No_Merging + +(* [make_not a] returns the negation of the term [a] *) + +let make_not a = + let not_fun = Terms.not_fun() in + match a with + FunApp(f, [a']) when f == not_fun -> a' + | _ -> FunApp(not_fun, [a]) + +(* [apply_test cond t1 t2] returns a term equal to [if cond then t1 else t2], + making some simplifications when possible. *) + +let apply_test cond t1 t2 = + if Terms.equal_terms t1 t2 then t1 else + let ty = Terms.get_term_type t1 in + assert (Terms.equal_types ty (Terms.get_term_type t2)); + let test = Terms.gtest_fun ty in + match t1 with + FunApp(test', [cond'; t1'; t2']) when test' == test && Terms.equal_terms t2' t2 -> + FunApp(test, [FunApp(Terms.and_fun(), [cond; cond']); t1'; t2]) + | FunApp(test', [cond'; t1'; t2']) when test' == test && Terms.equal_terms t1' t2 -> + FunApp(test, [FunApp(Terms.and_fun(), [cond; make_not cond']); t2'; t2]) + | _ -> + match t2 with + FunApp(test', [cond'; t1'; t2']) when test' == test && Terms.equal_terms t1 t1' -> + FunApp(test, [FunApp(Terms.or_fun(), [cond; cond']); t1; t2']) + | FunApp(test', [cond'; t1'; t2']) when test' == test && Terms.equal_terms t1 t2' -> + FunApp(test, [FunApp(Terms.or_fun(), [cond; make_not cond']); t1; t1']) + | _ -> + let choice_true_false = FunApp(Param.choice_fun Param.bool_type, [Terms.true_term; Terms.false_term]) in + if Terms.equal_terms cond choice_true_false then + FunApp(Param.choice_fun ty, [t1; t2]) + else + FunApp(test,[cond;t1;t2]) + +(* Main merging functions *) + +let rec merge_R cond proc1 proc2 next_f = match proc1,proc2 with + | OutNorm(ch1,t1,q1),OutNorm(ch2,t2,q2) + when Terms.equal_types (Terms.get_term_type ch1) (Terms.get_term_type ch2) + && Terms.equal_types (Terms.get_term_type t1) (Terms.get_term_type t2) -> + let ch = apply_test cond ch1 ch2 + and t = apply_test cond t1 t2 in + + merge_Q cond q1 q2 (fun proc -> + next_f (OutNorm(ch,t,proc)) + ) + | InNorm(ch1,x1,p1),InNorm(ch2,x2,p2) + when Terms.equal_types (Terms.get_term_type ch1) (Terms.get_term_type ch2) + && Terms.equal_types x1.Types.btype x2.Types.btype -> + + let type_x = x1.Types.btype in + let y = Terms.new_var Param.def_var_name type_x in + + Terms.link x1 (TLink (Var y)); + Terms.link x2 (TLink (Var y)); + + let new_p1 = follow_process_P p1 + and new_p2 = follow_process_P p2 in + + Terms.cleanup (); + + let ch = apply_test cond ch1 ch2 in + + merge_P cond new_p1 new_p2 (fun proc -> + next_f (InNorm(ch,y,proc)) + ) + | InsertNorm(t1,q1), InsertNorm(t2,q2) + when Terms.equal_types (Terms.get_term_type t1) (Terms.get_term_type t2) -> + let t = apply_test cond t1 t2 in + + merge_Q cond q1 q2 (fun proc -> + next_f (InsertNorm(t,proc)) + ) + | GetNorm(x1,t1,pthen1,pelse1),GetNorm(x2,t2,pthen2,pelse2) + when Terms.equal_types (Terms.get_term_type t1) (Terms.get_term_type t2) + && Terms.equal_types x1.Types.btype x2.Types.btype -> + + let type_x = x1.Types.btype in + + let y = Terms.new_var Param.def_var_name type_x in + + Terms.link x1 (TLink (Var y)); + Terms.link x2 (TLink (Var y)); + + let new_t1 = Terms.copy_term3 t1 + and new_t2 = Terms.copy_term3 t2 in + + let new_pthen1 = follow_process_P pthen1 + and new_pthen2 = follow_process_P pthen2 in + + Terms.cleanup (); + + let t = apply_test cond new_t1 new_t2 in + + merge_P cond new_pthen1 new_pthen2 (fun proc_then -> + merge_P cond pelse1 pelse2 (fun proc_else -> + next_f (GetNorm(y,t,proc_then,proc_else)) + ) + ) + | PhaseNorm(n1,p1),PhaseNorm(n2,p2) when n1 = n2 -> + merge_R cond p1 p2 (fun proc -> + next_f (PhaseNorm(n1,proc)) + ) + | _,_ -> + raise No_Merging + +(* [merge_all_list_R cond procs_R1 seen_R2 procs_R2 next_f] + merges the first element of [procs_R1] with an element of [procs_R2] + and the other elements of [procs_R1] with elements of [seen_R2 + procs_R2], + then calls [next_f] with the merged list. + + In particular, + [merge_all_list_R cond procs_R1 [] procs_R2 next_f] + merges the elements of [procs_R1] with elements of [procs_R2], + then calls [next_f] with the merged list. *) + +and merge_all_list_R cond procs_R1 seen_R2 procs_R2 next_f = + match procs_R1,procs_R2 with + | [],[] -> assert(seen_R2 == []); next_f [] + | [],_ -> internal_error "[simplify.ml >> merge_all_list_R] Both lists should be of equal length" + | _ ,[] -> + (* We tried to merge the first element of [procs_R1] with all elements of the other side, + which are now all in [seen_R2], since [proc_R2] is empty. The merging fails. *) + raise No_Merging + | p1::l1,p2::l2 -> + let is_mergeable = ref false in + begin + try + (* try merging p1 and p2, then merging the rest, that is, + l1 with seen_R2 + l2 *) + merge_R cond p1 p2 (fun proc -> + merge_all_list_R cond l1 [] (List.rev_append seen_R2 l2) (fun proc_l -> + next_f (proc::proc_l) + ) + ); + is_mergeable := true + with No_Merging -> () + end; + begin + try + (* try merging p1 with an element of l2, then merging + the rest *) + merge_all_list_R cond procs_R1 (p2::seen_R2) l2 next_f; + is_mergeable := true + with No_Merging -> () + end; + if not (!is_mergeable) then raise No_Merging + +and merge_Q cond (procs_R1,proc_S1) (procs_R2,proc_S2) next_f = + if List.length procs_R1 = List.length procs_R2 + then + merge_all_list_R cond procs_R1 [] procs_R2 (fun procs_R -> + merge_replP cond proc_S1 proc_S2 (fun proc_S -> + next_f (procs_R,proc_S) + ) + ) + else raise No_Merging + + +and merge_replP cond p1opt p2opt next_f = + match p1opt, p2opt with + None, None -> next_f None + | Some _, None | None, Some _ -> raise No_Merging + | Some p1, Some p2 -> + match p1.r_proc, p2.r_proc with + ([],r1),([],r2) -> + merge_replP cond r1 r2 (fun merged_r -> + next_f (put_some { + r_seq_names = check_disjoint_pair_append p1.r_seq_names p2.r_seq_names; + r_seq_lets = check_disjoint_pair_append p1.r_seq_lets p2.r_seq_lets; + r_proc = [], merged_r + })) + | ([],r1),_ -> + merge_replP cond r1 p2opt (fun merged_r -> + next_f (put_some { + r_seq_names = p1.r_seq_names; + r_seq_lets = p1.r_seq_lets; + r_proc = [], merged_r + })) + | _,([],r2) -> + merge_replP cond p1opt r2 (fun merged_r -> + next_f (put_some { + r_seq_names = p2.r_seq_names; + r_seq_lets = p2.r_seq_lets; + r_proc = [], merged_r + })) + | (l1,_),_ -> + choose_g (fun p1_sel p1_non_sel -> + let state = + { merged_part_names = p1_sel.r_seq_names; + merged_part_lets = p1_sel.r_seq_lets; + merged_part_proc = []; + in_group_to_merge_left = p1_sel.r_proc; + in_group_to_merge_right = ([],None); + rest_left = p1_non_sel; + rest_right = p2 } + in + merge_replP_inside cond state next_f + ) p1 l1 + +and merge_replP_inside cond state next_f = + match state.in_group_to_merge_left, state.in_group_to_merge_right with + ([],repl1),([],repl2) -> + (* We have finished merging a coherent group of non-replicated + processes. Add a replication over the rest, and continue *) + merge_replP cond (par_S (put_some state.rest_left) repl1) + (par_S (put_some state.rest_right) repl2) (fun merged_r -> + next_f (put_some { + r_seq_names = state.merged_part_names; + r_seq_lets = state.merged_part_lets; + r_proc = (state.merged_part_proc, merged_r) + })) + | (a1::l1, repl1), ([], repl2) -> + (* There is at least one non-replicated process on the left-hand side, + a1, but no non-replicated process in the currently selected group + on the right-hand side. Select a new process to merge with + a1, add its group, and continue *) + choose (fun a2 _ -> + merge_R cond a1 a2 (fun merged_a -> + let (sel2, non_sel2) = partition_processes a2 state.rest_right in + let (l2,repl2') = sel2.r_proc in + let l2_to_merge = remove_from a2 l2 in + let state' = + { merged_part_names = check_disjoint_pair_append sel2.r_seq_names state.merged_part_names; + merged_part_lets = check_disjoint_pair_append sel2.r_seq_lets state.merged_part_lets; + merged_part_proc = merged_a::state.merged_part_proc; + in_group_to_merge_left = (l1,repl1); + in_group_to_merge_right = (l2_to_merge,par_S repl2 repl2'); + rest_left = state.rest_left; + rest_right = non_sel2 + } + in + merge_replP_inside cond state' next_f + ) + ) [] (fst state.rest_right.r_proc) + | (l1, repl1), (a2::l2, repl2) -> + (* There is at least one non-replicated process on the right-hand side, + a2. Try to merge it with an element of l1, if possible. + Otherwise, select a new process in rest_left to merge with a2, + add its group, and continue *) + let is_mergeable = ref false in + begin + try + choose (fun a1 rest1 -> + merge_R cond a1 a2 (fun merged_a -> + let state' = + { state with + merged_part_proc = merged_a::state.merged_part_proc; + in_group_to_merge_left = (rest1, repl1); + in_group_to_merge_right = (l2, repl2) + } + in + merge_replP_inside cond state' next_f + ) + ) [] l1; + is_mergeable := true + with No_Merging -> () + end; + begin + try + choose (fun a1 _ -> + merge_R cond a1 a2 (fun merged_a -> + let (sel1, non_sel1) = partition_processes a1 state.rest_left in + let (l1',repl1') = sel1.r_proc in + let l1_to_merge = remove_from a1 l1' in + let state' = + { merged_part_names = check_disjoint_pair_append sel1.r_seq_names state.merged_part_names; + merged_part_lets = check_disjoint_pair_append sel1.r_seq_lets state.merged_part_lets; + merged_part_proc = merged_a::state.merged_part_proc; + in_group_to_merge_left = (l1_to_merge @ l1,par_S repl1 repl1'); + in_group_to_merge_right = (l2,repl2); + rest_left = non_sel1; + rest_right = state.rest_right + } + in + merge_replP_inside cond state' next_f + ) + ) [] (fst state.rest_left.r_proc); + is_mergeable := true + with No_Merging -> () + end; + if not (!is_mergeable) then raise No_Merging + +(* This is an old simple code for merging replicated + processes, by just keeping the structure, without + adding double replications. +and merge_replP cond p1 p2 next_f = + merge_Q cond p1.r_proc p2.r_proc (fun merged_Q -> + next_f { + r_seq_names = p1.r_seq_names @ p2.r_seq_names; + r_seq_lets = p1.r_seq_lets @ p2.r_seq_lets; + r_proc = merged_Q + }) +*) + +and merge_P cond proc_1 proc_2 next_f = + next_f { + seq_names = proc_1.seq_names @ proc_2.seq_names; + seq_lets = proc_1.seq_lets @ proc_2.seq_lets; + seq_cond = IfNorm(cond, proc_1.seq_cond, proc_2.seq_cond) + } + +(* Mergebranches *) + +let rec filter_dead_D acc_unify = function + IfNorm(cond, p1, p2) -> + if is_term_always_false cond acc_unify then + filter_dead_D acc_unify p2 + else if is_term_always_true cond acc_unify then + filter_dead_D acc_unify p1 + else + IfNorm(cond, filter_dead_D ((cond, Terms.true_term)::acc_unify) p1, + filter_dead_D ((cond, Terms.false_term)::acc_unify) p2) + | NormProc(p) -> NormProc(p) + +(* [select_leaf_D accu_cond context next_f p] + selects one leaf [q] of [p] and calls [next_f cond_list q rest]. + [accu_cond] is the list of conditions that must hold to reach [p]. + [context] is a function that puts the context of [p] around its argument. + [cond_list] is the list of conditions that must hold to reach the leaf [q]. + [rest] is the process [p] and its context with the leaf [q] removed. + + [select_leaf_D [] (fun p -> p) next_f p] + selects one leaf [q] of [p] and calls [next_f cond_list q rest] + where [p] is equivalent to [if cond_list then q else rest]. +*) + +let rec select_leaf_D accu_cond context next_f = function + IfNorm(cond, p1, p2) -> + begin + try + match p1 with + NormProc(q) -> + (* The input process is equivalent to + if (cond::accu_cond) then q else (context p2) + Try merging q with some other process. *) + next_f (cond::accu_cond) q (context p2) + | _ -> + (* Look into the leaves of p1 *) + select_leaf_D (cond::accu_cond) (fun p_hole -> context(IfNorm(cond, p_hole, p2))) next_f p1 + with No_Merging -> + match p2 with + NormProc(q) -> + (* The input process is equivalent to + if (not cond::accu_cond) then q else (context p1) + Try merging q with some other process. *) + next_f ((make_not cond)::accu_cond) q (context p1) + | _ -> + (* Look into the leaves of p2 *) + select_leaf_D ((make_not cond)::accu_cond) (fun p_hole -> context(IfNorm(cond, p1, p_hole))) next_f p2 + end + | NormProc(p) -> + Parsing_helper.internal_error "Should not reach the leaves" + +(* [and_list l] returns the conjunction of the terms in [l] *) + +let rec and_list = function + [] -> Terms.true_term + | [a] -> a + | a::l -> FunApp(Terms.and_fun(), [a; and_list l]) + +(* [or_not_list l] returns the disjunction of the negation of the terms in [l] *) + +let rec or_not_list = function + [] -> Terms.false_term + | [a] -> make_not a + | a::l -> FunApp(Terms.or_fun(), [make_not a; or_not_list l]) + +(* [find_remove_elem a l] returns + [None] when [a] is not in [l] and + [Some l'] when [a] is in [l] and [l'] is [l] with [a] removed (once) *) + +let rec find_remove_elem a = function + [] -> None + | a'::l -> + if Terms.equal_terms a a' then + Some l + else + match find_remove_elem a l with + None -> None + | Some l' -> Some (a'::l') + +(* [intersect l1 l2] returns [(common, l1 minus common, l2 minus common)] + where [common] is the intersect of the lists [l1] and [l2]. *) + +let rec intersect l1 = function + [] -> ([], l1, []) + | a::l -> + match find_remove_elem a l1 with + None -> + let (common, restl1, restl2) = intersect l1 l in + (common, restl1, a::restl2) + | Some l1' -> + let (common, restl1, restl2) = intersect l1' l in + (a::common, restl1, restl2) + +(* [or_and cond cond_list1 cond_list2] returns a term equal to + (cond && cond_list1) || ((not cond) && cond_list2) after making some + simplifications *) + +let or_and cond cond_list1 cond_list2 = + let (common, rest1, rest2) = intersect cond_list1 cond_list2 in + (* The condition is equal to (common && ((cond && rest1) || ((not cond) && rest2))) *) + let choice_true_false = FunApp(Param.choice_fun Param.bool_type, [Terms.true_term; Terms.false_term]) in + if Terms.equal_terms cond choice_true_false then + and_list ((FunApp(Param.choice_fun Param.bool_type, [and_list rest1; and_list rest2]))::common) + else + if rest1 = [] then + if rest2 = [] then + and_list common + else + and_list ((FunApp(Terms.or_fun(), [cond; and_list rest2]))::common) + else + if rest2 = [] then + and_list ((FunApp(Terms.or_fun(), [make_not cond; and_list rest1]))::common) + else + let test = Terms.gtest_fun Param.bool_type in + and_list ((FunApp(test, [cond; and_list rest1; and_list rest2]))::common) + +(* A version of [merge_Q] that sets [simplif_done] + when the merging has been done. *) + +let merge_Q cond q1 q2 next_f = + merge_Q cond q1 q2 (fun q_proc -> + let old_simplif_done = !simplif_done in + simplif_done := true; + next_f q_proc; + simplif_done := old_simplif_done) + +(* [merge_2_D next_f cond p1 p2] tries merging each leaf of [p1] with a leaf of [p2]. + A merging that succeeds is not undone when future mergings fail. + [merge_2_D next_f cond p1 p2] starts from a process + [if cond then p1 else p2] and calls [next_f] with a process + equivalent to that process after merging. + + [next_f] should never raise No_Merging; + [merge_2_D] never raises No_Merging *) +let rec merge_2_D next_f cond p1 p2 = + try + match p1, p2 with + NormProc(q1), NormProc(q2) -> + merge_Q cond q1 q2 (fun q_proc -> next_f (NormProc(q_proc))) + | NormProc(q1), _ -> + (* Try merging q1 with one leaf of p2 *) + select_leaf_D [] (fun p -> p) (fun cond_list q2 rest -> + merge_Q cond q1 q2 (fun q_proc -> next_f (IfNorm(FunApp(Terms.or_fun(), [cond; and_list cond_list]), NormProc(q_proc), rest)))) p2 + | _, NormProc(q2) -> + (* Try merging q2 with one leaf of p1 *) + select_leaf_D [] (fun p -> p) (fun cond_list q1 rest -> + merge_Q cond q1 q2 (fun q_proc -> next_f (IfNorm(FunApp(Terms.and_fun(), [cond; or_not_list cond_list]), rest, NormProc(q_proc))))) p1 + | _,_ -> + (* Try merging each leaf of p1 with a leaf of p2 + A merging that succeeds is not undone when future mergings fail *) + select_leaf_D [] (fun p -> p) (fun cond_list1 q1 rest1 -> + select_leaf_D [] (fun p -> p) (fun cond_list2 q2 rest2 -> + merge_Q cond q1 q2 (fun q_proc -> + let cond_q_proc = or_and cond cond_list1 cond_list2 in + merge_2_D (fun p' -> next_f (IfNorm(cond_q_proc, NormProc(q_proc), p'))) cond rest1 rest2 + ) + ) p2 + ) p1 + with No_Merging -> + next_f (IfNorm(cond, p1, p2)) + +(* next_f should never raise No_Merging *) +let rec merge_leaves_D next_f = function + IfNorm(cond, p1, p2) -> + merge_leaves_D (fun p1' -> + merge_leaves_D (fun p2' -> + merge_2_D next_f cond p1' p2' + ) p2 + ) p1 + | NormProc(p) -> next_f (NormProc(p)) + + +let rec mergebranches_P process acc_unify next_f = + let acc_unify' = (List.map (fun (b,t) -> (Var b,t)) process.seq_lets)@acc_unify in + let seq_cond_1 = filter_dead_D acc_unify' process.seq_cond in + merge_leaves_D (mergebranches_D acc_unify' (fun seq_cond1' -> next_f { process with seq_cond = seq_cond1' })) seq_cond_1 + +and mergebranches_D acc_unify next_f = function + NormProc(q) -> mergebranches_Q q acc_unify (fun q' -> next_f (NormProc(q'))) + | IfNorm(cond,p1,p2) -> + if (!reject_choice_true_false) && + (let choice_true_false = FunApp(Param.choice_fun Param.bool_type, [Terms.true_term; Terms.false_term]) in + Terms.equal_terms cond choice_true_false) then + (* Reject a process that still contains choice[true,false] + as condition: it is very likely that we will not be able to + prove observational equivalence for this process. *) + () + else + mergebranches_D ((cond, Terms.true_term)::acc_unify) (fun p1' -> + mergebranches_D ((cond, Terms.false_term)::acc_unify) (fun p2' -> + next_f (IfNorm(cond, p1', p2')) + ) p2 + ) p1 + +and mergebranches_Q (procs_R,proc_P) acc_unify next_f = match proc_P with + | None -> + mergebranches_R_list procs_R acc_unify (fun procs_R' -> + next_f (procs_R',None) + ) + | Some p -> + mergebranches_R_list procs_R acc_unify (fun procs_R' -> + mergebranches_Repl p acc_unify (fun p' -> + next_f (procs_R',Some p') + ) + ) + +and mergebranches_Repl process acc_unify next_f = + let acc_unify' = (List.map (fun (b,t) -> (Var b,t)) process.r_seq_lets)@acc_unify in + mergebranches_Q process.r_proc acc_unify' (fun q' -> next_f { process with r_proc = q' }) + +and mergebranches_R_list procs_R acc_unify next_f = match procs_R with + | [] -> next_f [] + | r::r_liste -> + mergebranches_R r acc_unify (fun r' -> + mergebranches_R_list r_liste acc_unify (fun r_liste' -> + next_f (r'::r_liste') + ) + ) + +and mergebranches_R proc_R acc_unify next_f = match proc_R with + | InNorm(ch,x,p) -> mergebranches_P p acc_unify (fun p' -> next_f (InNorm(ch,x,p'))) + | OutNorm(ch,t,q) -> mergebranches_Q q acc_unify (fun q' -> next_f (OutNorm(ch,t,q'))) + | InsertNorm(t,q) -> mergebranches_Q q acc_unify (fun q' -> next_f (InsertNorm(t,q'))) + | GetNorm(x,t,pthen,pelse) -> + mergebranches_P pthen acc_unify (fun pthen' -> + mergebranches_P pelse acc_unify (fun pelse' -> + next_f (GetNorm(x,t,pthen',pelse')) + ) + ) + | PhaseNorm(n,r) -> mergebranches_R r acc_unify (fun r' -> next_f (PhaseNorm(n,r'))) + + +(********************************************* + Get process +**********************************************) + +(* [get_proc_P proc] transforms a normalized process into + a standard ProVerif process. *) + +let rec get_names next_proc = function + | [] -> next_proc + | (a,args)::q -> Restr (a,args,get_names next_proc q,new_occurrence ()) + +let rec get_lets next_proc = function + | [] -> next_proc + | (x,t)::q -> Let (PatVar x,t,get_lets next_proc q,Nil,new_occurrence ()) + +let rec get_proc_P proc = + get_names (get_lets (get_proc_D proc.seq_cond) proc.seq_lets) proc.seq_names + +and get_proc_D = function + IfNorm(cond,p1,p2) -> Test(cond,get_proc_D p1, get_proc_D p2, new_occurrence ()) + | NormProc(q) -> get_proc_Q q + +and get_proc_Q (procs_R,proc_P) = + match proc_P with + | None -> + List.fold_right (fun proc_r acc -> + if acc = Nil + then get_proc_R proc_r + else Par(get_proc_R proc_r,acc) + ) procs_R Nil + | Some p -> + List.fold_right (fun proc_r acc -> + Par(get_proc_R proc_r,acc) + ) procs_R (Repl(get_proc_Repl p,new_occurrence ())) + +and get_proc_Repl proc = + get_names (get_lets (get_proc_Q proc.r_proc) proc.r_seq_lets) proc.r_seq_names + +and get_proc_R = function + | InNorm(ch,x,p) -> Input(ch, PatVar x, get_proc_P p,new_occurrence ()) + | OutNorm(ch,t,q) -> Output(ch, t, get_proc_Q q,new_occurrence ()) + | InsertNorm(t,q) -> Insert(t,get_proc_Q q,new_occurrence ()) + | GetNorm(x,t,pthen,pelse) -> Get(PatVar x, t, get_proc_P pthen, get_proc_P pelse,new_occurrence ()) + | PhaseNorm(n,r) -> Phase(n,get_proc_R r,new_occurrence ()) + + +(******************************************************* + [verify_process [] proc] verifies that the process [proc] is closed. + It is useful as a sanity check on the final processes after simplification or merging + *******************************************************) + +let rec verify_term free_var = function + | Var v -> + if not (List.memq v free_var) + then + begin + Display.Text.display_term2 (Var v); + internal_error "The previous variable is not declared:\n" + end; + |FunApp(_,l) -> List.iter (verify_term free_var) l + +let rec verify_pattern free_var = function + | PatVar(x) -> [x] + | PatTuple(_,l) -> List.concat (List.map (verify_pattern free_var) l) + | PatEqual(t) -> verify_term free_var t; [] + +let rec verify_process free_var proc = + match proc with + | Nil -> () + | Par(p1,p2) -> verify_process free_var p1; + verify_process free_var p2 + | Repl(p,_) -> verify_process free_var p + | Restr(_,_,p,_) -> verify_process free_var p + | Test(t,p1,p2,_) -> + verify_term free_var t; + verify_process free_var p1; + verify_process free_var p2 + | Input(t,pat,p,_) -> + let binders = verify_pattern free_var pat in + + verify_term free_var t; + verify_process (binders@free_var) p + | Output(t1,t2,p,_) -> + verify_term free_var t1; + verify_term free_var t2; + verify_process free_var p + | Let(pat,t,p1,p2,_) -> + let binders = verify_pattern free_var pat in + + verify_term free_var t; + verify_process (binders@free_var) p1; + verify_process free_var p2 + | Phase(_, proc,_) -> verify_process free_var proc + | LetFilter(_,_,_,_,_) -> input_error "verify_process does not support LetFilter in the process" dummy_ext + | Event(_,_,_) -> + internal_error "verify_process does not support Event in the process; it should never occur in the result of simplify_process" + + | Insert(t, p, _) -> + verify_term free_var t; + verify_process free_var p + + | Get(pat, t, p, q, _) -> + let binders = verify_pattern free_var pat in + let new_free_var = binders @ free_var in + + verify_term new_free_var t; + verify_process new_free_var p; + verify_process new_free_var q + +(********************************************* + Move_new +**********************************************) +(* We can use a stronger version of move_new after simplification, + because we know that 'let's never fail, so we can move them as well + if it helps to move 'new's *) + +type new_let = + NL_New of funsymb * new_args * occurrence + | NL_Let of binder * term * occurrence + +let rec put_new_lets l p = + match l with + [] -> p + | (NL_New(a,args,occ))::l' -> + put_new_lets l' (Restr(a, args, p, occ)) + | (NL_Let(x,t,occ))::l' -> + put_new_lets l' (Let(PatVar x,t, p, Nil, occ)) + +let rec partition_new_lets terms_to_allow = function + [] -> [],[] + | (NL_New(a,args,occ))::l -> + let (l1, l2) = partition_new_lets terms_to_allow l in + if List.exists (Terms.occurs_f a) terms_to_allow then + ((NL_New(a,args,occ))::l1, l2) + else + (l1, (NL_New(a,args,occ))::l2) + | (NL_Let(x,t,occ))::l -> + if List.exists (Terms.occurs_var x) terms_to_allow then + let (l1,l2) = partition_new_lets (t::terms_to_allow) l in + ((NL_Let(x,t,occ))::l1, l2) + else + let (l1,l2) = partition_new_lets terms_to_allow l in + (l1, (NL_Let(x,t,occ))::l2) + +let rec move_new_lets accu = function + Nil -> Nil + | Par(p1,p2) -> put_new_lets accu (Par(move_new_lets [] p1, move_new_lets [] p2)) + | Repl(p,occ) -> put_new_lets accu (Repl (move_new_lets [] p,occ)) + | Restr(f, args, p,occ) -> move_new_lets ((NL_New(f,args,occ))::accu) p + | Let(PatVar x,t,p,Nil,occ) -> + move_new_lets ((NL_Let(x,t,occ))::accu) p + | Let _ -> + internal_error "move_new_lets: after simplification, let should be of the form let x = t in p else 0" + | LetFilter _ -> + internal_error "move_new_lets does not support LetFilter in the process" + | Event _ -> + internal_error "move_new_lets does not support Event in the process" + | Test(t,p1,p2,occ) -> + if p2 <> Nil then + put_new_lets accu (Test(t, move_new_lets [] p1, move_new_lets [] p2,occ)) + else + let (l1,l2) = partition_new_lets [t] accu in + put_new_lets l1 (Test(t,move_new_lets l2 p1,Nil,occ)) + | Input(t,PatVar x,p,occ) -> + let (l1,l2) = partition_new_lets [t] accu in + put_new_lets l1 (Input(t,PatVar x, move_new_lets l2 p,occ)) + | Input _ -> + internal_error "move_new_lets: after simplification, the pattern in inputs should be a variable" + | Output(t1,t2,p,occ) -> + let (l1,l2) = partition_new_lets [t1;t2] accu in + put_new_lets l1 (Output(t1,t2,move_new_lets l2 p,occ)) + | Insert(t1,p,occ) -> + let (l1,l2) = partition_new_lets [t1] accu in + put_new_lets l1 (Insert(t1, move_new_lets l2 p, occ)) + | Get(PatVar x,t1,p,q,occ) -> + if q <> Nil then + put_new_lets accu (Get(PatVar x,t1,move_new_lets [] p, move_new_lets [] q,occ)) + else + let (l1,l2) = partition_new_lets [t1] accu in + put_new_lets l1 (Get(PatVar x, t1, move_new_lets l2 p, Nil, occ)) + | Get _ -> + internal_error "move_new_lets: after simplification, the pattern in get should be a variable" + | Phase(n,p,occ) -> + Phase(n, move_new_lets accu p,occ) + + +(********************************************* + Simplify process +**********************************************) +(** [simplify_process] is not a deterministic function: + [simplify_process process next_f] calls [next_f p] + for each simplified process [p] obtained from the initial + process [process] *) + +let simplify_process process next_f = + simplif_done := false; + let cano_proc = canonical_process process [] in + (*print_string "Canonical process:\n"; + Display.Text.display_process "" cano_proc;*) + + let norm_proc = norm None cano_proc in + + (*print_string "Normalized process before merging:\n"; + display_norm_P "" norm_proc;*) + + mergebranches_P norm_proc [] (fun norm_proc' -> + if (!simplif_done) || (not (!Param.reject_no_simplif)) then + begin + (*print_string "Normalized process after merging:\n"; + display_norm_P "" norm_proc';*) + let simp_proc = get_proc_P norm_proc' in + let moved_proc = + if !Param.move_new then + move_new_lets [] simp_proc + else + simp_proc + in + next_f moved_proc + end + ) + +(********************************************* + Biprocess from processes +**********************************************) + +(** The processes in argument of this function should not contain any diff. *) +let obtain_biprocess_from_processes process_1 process_2 next_f = + if !Param.reject_choice_true_false then + reject_choice_true_false := true; + let choice_symb = Param.choice_fun Param.bool_type in + let cond = FunApp(choice_symb,[Terms.true_term;Terms.false_term]) in + + let process = Test(cond,process_1,process_2,new_occurrence ()) in + + simplify_process process next_f diff --git a/preinstallTTool/linux/proverif/src/simplify.mli b/preinstallTTool/linux/proverif/src/simplify.mli new file mode 100644 index 0000000000000000000000000000000000000000..c1762c7b2267df88e872586be4f578a62d8ae1d8 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/simplify.mli @@ -0,0 +1,74 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Pitypes + +(* Table of names -> function symbol representing that name, + used in pitsyntax.ml *) + +val glob_table : (string, funsymb) Hashtbl.t + +(* [copy_process add_in_glob_table p] returns a copy of the process [p] + * If [add_in_glob_table] is true, it renames each name created by + a restriction to a fresh name, and adds these names to [glob_table]. + * It renames all bound variables to fresh distinct variables. + When [add_in_glob_table] is true, these variables receive distinct + numbers, so that they have distinct names when they are displayed. + * New occurrences are created for each program point in the process. + * Free variables of [p] may be linked to terms via [TLink t] on entry. + In this case, these variables are substituted by the terms in question + during the copy. Notice that variables that occur as arguments of + restrictions [Restr] can only be linked to variables via + [TLink (Var b)], not to other terms. *) +val copy_process : bool -> process -> process + +(* [prepare_process p] returns a copy of the process [p], such that: + * each name created by a restriction is renamed to a fresh name + (these names are in [glob_table]); + * all bound variables are renamed to fresh distinct variables, + with distinct numbers; + * new occurrences are created at each program point in the process, + starting from 1. *) +val prepare_process : process -> process + + +(* [simplify_process p next_f] simplifies the process [p] + by merging branches as much as possible, and calls [next_f p'] + for each obtained simplified process. *) +val simplify_process : process -> (process -> unit) -> unit + +(* [verify_process l p] verifies that all free variables of + [p] are in the list [l]. + In particular, [verify_process [] p] verifies that + the process [p] is closed. *) +val verify_process : binder list -> process -> unit + +(* [obtain_biprocess_from_processes p1 p2 next_f] tries to merge + the two processes [p1] and [p2] into a biprocess [p] and calls + [next_f p] for each obtained biprocess [p]. *) +val obtain_biprocess_from_processes : process -> process -> (process -> unit) -> unit diff --git a/preinstallTTool/linux/proverif/src/spassout.cmi b/preinstallTTool/linux/proverif/src/spassout.cmi new file mode 100644 index 0000000000000000000000000000000000000000..3572bceaee00c6186dab5eef1a0a481cbe2567cb Binary files /dev/null and b/preinstallTTool/linux/proverif/src/spassout.cmi differ diff --git a/preinstallTTool/linux/proverif/src/spassout.cmx b/preinstallTTool/linux/proverif/src/spassout.cmx new file mode 100644 index 0000000000000000000000000000000000000000..c9f246ffb099b8583de99c9631f92c2fffeeaacc Binary files /dev/null and b/preinstallTTool/linux/proverif/src/spassout.cmx differ diff --git a/preinstallTTool/linux/proverif/src/spassout.ml b/preinstallTTool/linux/proverif/src/spassout.ml new file mode 100644 index 0000000000000000000000000000000000000000..ca558e15f587cb92e18bb13edebdba2abdd67851 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/spassout.ml @@ -0,0 +1,324 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +let preamble filename = + output_string filename "begin_problem(Unknown). + +list_of_descriptions. +name({*A protocol*}). +author({*Bruno Blanchet - Automatic translator*}). +status(unknown). +description({**}). +end_of_list.\n\n" + + +let output_ident filename s = + (* SPASS identifiers can consist of digits, underscore, and alphabetic + characters. We code other characters into this set by using their + hexadecimal number. The hex. number is also used for the character 0 + to make sure the conversion is injective. *) + String.iter (fun c -> + if (c <= '0') || ((c > '9') && (c < 'A')) || ((c > 'Z') && (c < '_')) || + ((c > '_') && (c < 'a')) || (c > 'z') then + + let code = int_of_char c in + let hex_of_int n = + if n >= 10 then + char_of_int (n + (int_of_char 'A') - 10) + else + char_of_int (n + (int_of_char '0')) + in + let s = "0x00" in + s.[2] <- hex_of_int (code / 16); + s.[3] <- hex_of_int (code mod 16); + output_string filename s + else + output_char filename c + ) s + +let output_fun_name filename f = + match f.f_cat with + Tuple -> + output_string filename "tuple_"; + if f.f_name = "" then + let arity = List.length (fst f.f_type) in + if (arity = 0) || (Param.get_ignore_types()) then + output_string filename (string_of_int arity) + else + output_string filename (Terms.tl_to_string "_" (fst f.f_type)) + + else + output_ident filename f.f_name + | Name _ -> + output_string filename "name_"; + output_ident filename f.f_name + | Eq _ -> + output_string filename "constr_"; + output_ident filename f.f_name + | Failure -> + Parsing_helper.user_error "Error: The symbol fail cannot be handled by Spass. Stopping the translation\n" + | _ -> + Parsing_helper.internal_error "function symbols of these categories should not appear in rules" + +let output_pred_name filename p = + output_string filename "pred_"; + output_ident filename p.p_name + +let output_var_name filename v = + if v.unfailing then + Parsing_helper.user_error "Error: May-fail variables cannot be handled by Spass. Stopping the translation\n"; + output_string filename "var_"; + output_ident filename v.sname; + output_string filename "_"; + output_string filename (string_of_int v.vname) + +let func_set = Hashtbl.create 7 +let pred_set = Hashtbl.create 1 + +let add_func f = + if not (Hashtbl.mem func_set f) then + Hashtbl.add func_set f () + +let add_pred p = + if not (Hashtbl.mem pred_set p) then + Hashtbl.add pred_set p () + +let output_func_set filename = + output_string filename "list_of_symbols.\n"; + output_string filename "functions["; + let start = ref true in + Hashtbl.iter (fun f _ -> + if !start then + start := false + else + output_string filename ", "; + output_string filename "("; + output_fun_name filename f; + output_string filename ","; + output_string filename (string_of_int (List.length (fst f.f_type))); + output_string filename ")") func_set; + output_string filename "].\n"; + output_string filename "predicates["; + let start = ref true in + Hashtbl.iter (fun p _ -> + if !start then + start := false + else + output_string filename ", "; + output_string filename "("; + output_pred_name filename p; + output_string filename ","; + output_string filename (string_of_int (List.length p.p_type)); + output_string filename ")") pred_set; + output_string filename "].\n"; + output_string filename "end_of_list.\n" + +let rec fun_set_term = function + Var _ -> () +| FunApp(f,l) -> + add_func f; + List.iter fun_set_term l + +let fun_set_fact = function + Pred(p,l) -> + add_pred p; + List.iter fun_set_term l + | _ -> + (* TO DO implement translation of begin facts *) + Parsing_helper.user_error "Error: translation of begin facts into the Spass input format not yet\nimplemented\n" + +let fun_set rules = + List.iter (fun (hyp, concl, _, constra) -> + List.iter fun_set_fact hyp; + fun_set_fact concl; + (* TO DO implement translation of inequalities *) + match constra with + [] -> () + | _ -> print_string "Warning: translation of inequalities into the Spass input format not yet\nimplemented\n" + ) rules + +let rec output_term filename = function + Var v -> output_var_name filename v + | FunApp(f,l) -> + output_fun_name filename f; + if l != [] then + output_term_list filename l + +and output_term_list filename l = + output_string filename "("; + let start = ref true in + List.iter (fun t -> + if !start then + start := false + else + output_string filename ","; + output_term filename t) l; + output_string filename ")" + +let output_fact filename = function + Pred(p,l) -> + output_pred_name filename p; + if l != [] then + output_term_list filename l + | Out _ -> Parsing_helper.internal_error "internal error output_fact" + +let output_fact_list filename l = + let start = ref true in + List.iter (fun f -> + if !start then + start := false + else + output_string filename ","; + output_fact filename f) l + +let output_body filename (hyp, concl, _, constra) = + match hyp with + [] -> output_fact filename concl + | [a] -> output_string filename "implies("; + output_fact filename a; + output_string filename ", "; + output_fact filename concl; + output_string filename ")" + | _ -> output_string filename "implies(and("; + output_fact_list filename hyp; + output_string filename "), "; + output_fact filename concl; + output_string filename ")" + + +let output_rule filename ((hyp, concl,_,constra) as rule) = + let hyp = List.filter (function + Pred _ -> true + | Out _ -> false) hyp + in + let has_no_var = ref true in + let var_set = Hashtbl.create 1 in + let add_var v = + has_no_var := false; + if not (Hashtbl.mem var_set v) then + Hashtbl.add var_set v () + in + let rec var_set_term = function + Var v -> add_var v + | FunApp(f,l) -> List.iter var_set_term l + in + let var_set_fact = function + Pred(p,l) -> List.iter var_set_term l + | _ -> Parsing_helper.internal_error "var_set_fact of Out" + in + List.iter var_set_fact hyp; + var_set_fact concl; + output_string filename "formula("; + if !has_no_var then + output_body filename rule + else begin + output_string filename "forall(["; + let start = ref true in + Hashtbl.iter (fun v _ -> + if !start then + start:=false + else + output_string filename ","; + output_var_name filename v) var_set; + output_string filename "], "; + output_body filename rule; + output_string filename ")" + end; + output_string filename ").\n" + +let output_rules filename rules = + output_string filename "list_of_formulae(axioms).\n\n"; + List.iter (output_rule filename) rules; + output_string filename "\nend_of_list.\n\n" + +let output_query filename query = + let has_no_var = ref true in + let var_set = Hashtbl.create 1 in + let add_var v = + has_no_var := false; + if not (Hashtbl.mem var_set v) then + Hashtbl.add var_set v () + in + let rec var_set_term = function + Var v -> add_var v + | FunApp(f,l) -> List.iter var_set_term l + in + let var_set_fact = function + Pred(p,l) -> List.iter var_set_term l + | _ -> Parsing_helper.internal_error "query Out" + in + var_set_fact query; + output_string filename "list_of_formulae(conjectures).\n\nformula("; + if !has_no_var then + output_fact filename query + else begin + output_string filename "exists(["; + let start = ref true in + Hashtbl.iter (fun v _ -> + if !start then + start:=false + else + output_string filename ","; + output_var_name filename v) var_set; + output_string filename "], "; + output_fact filename query; + output_string filename ")" + end; + output_string filename ").\nend_of_list.\n\n" + +let main filename rules queries = + (* Spass does not support the special symbol fail and the may-fail + variables. We eliminate those completely when possible. + + We filter out rules that conclude p(...fail...). This is safe because + we stop the translation when a rule has fail or a may-fail variable + in its hypothesis, or when a query contains fail or a may-fail variable, + so rules that conclude p(...fail...) are useless. *) + let rules = List.filter (fun (_, concl, _, _) -> + match concl with + Pred(_, l) -> + List.for_all (function + FunApp({f_cat = Failure}, []) -> false + | _ -> true) l + | _ -> true) rules + in + (* Each query must be output in a separate file, otherwise spass tries to + prove the disjunction of the queries *) + let n = ref 0 in + List.iter (fun query -> + incr n; + let filename' = if !n = 1 then filename else (filename ^ "_" ^ (string_of_int (!n))) in + let out_ch = open_out filename' in + preamble out_ch; + fun_set rules; + output_func_set out_ch; + output_rules out_ch rules; + output_query out_ch query; + output_string out_ch "end_problem.\n"; + close_out out_ch) queries diff --git a/preinstallTTool/linux/proverif/src/spassout.mli b/preinstallTTool/linux/proverif/src/spassout.mli new file mode 100644 index 0000000000000000000000000000000000000000..180a5243fc4a404579a79e8193c8c6aa84e764d6 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/spassout.mli @@ -0,0 +1,28 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val main : string -> Types.reduction list -> Types.fact list -> unit diff --git a/preinstallTTool/linux/proverif/src/stringmap.cmi b/preinstallTTool/linux/proverif/src/stringmap.cmi new file mode 100644 index 0000000000000000000000000000000000000000..8bdb7ae280d6156aa8b595ce76f54d533b5b827b Binary files /dev/null and b/preinstallTTool/linux/proverif/src/stringmap.cmi differ diff --git a/preinstallTTool/linux/proverif/src/stringmap.cmx b/preinstallTTool/linux/proverif/src/stringmap.cmx new file mode 100644 index 0000000000000000000000000000000000000000..13d67a7ab11f1a4dc6fbca5b75b44478cdc7a88e Binary files /dev/null and b/preinstallTTool/linux/proverif/src/stringmap.cmx differ diff --git a/preinstallTTool/linux/proverif/src/stringmap.ml b/preinstallTTool/linux/proverif/src/stringmap.ml new file mode 100644 index 0000000000000000000000000000000000000000..f722b06c85fdf47ac0e6a135026337fc2dbe837f --- /dev/null +++ b/preinstallTTool/linux/proverif/src/stringmap.ml @@ -0,0 +1,33 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +module StringComp = struct + type t = string + let compare = compare +end + +module StringMap = Map.Make(StringComp) diff --git a/preinstallTTool/linux/proverif/src/stringmap.mli b/preinstallTTool/linux/proverif/src/stringmap.mli new file mode 100644 index 0000000000000000000000000000000000000000..d76387c41b3bc57694f6e22306d9de395a948de3 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/stringmap.mli @@ -0,0 +1,28 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +module StringMap : Map.S with type key = string diff --git a/preinstallTTool/linux/proverif/src/structure b/preinstallTTool/linux/proverif/src/structure new file mode 100755 index 0000000000000000000000000000000000000000..a320030e19d423ab0d96af7d176ddf9204b8c5e3 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/structure @@ -0,0 +1,57 @@ +parsing_helper.ml: functions for error messages + +For Horn clauses input +lexer.mll: lexer +parser.mly: parser +ptree.mli: type declarations for the parse tree +types.mli: type declarations for the facts and clauses +syntax.ml: translates parse tree into tree with bound variables (as declared in types.mli), front-end without types +tsyntax.ml: translates parse tree into tree with bound variables (as declared in types.mli), front-end with types + +display.ml: various display functions +param.ml: various parameters and declarations of predicates, function symbols, ... +terms.ml: various term manipulation functions +termsEq.ml: various term manipulation functions with an equational theory +termslinks.ml: various functions for manipulating terms with links (without expanding them) + +rules.ml: the resolution algorithm on clauses. +selfun.ml: selection function (determines the resolution strategy) +queue.ml: queue of clauses, used for the resolution algorithm +history.ml: reconstruct a derivation when a clause has been derived. + +spassout.ml: output of clauses in SPASS format + +For pi calculus input + Front-end without types: + pilexer.mll: lexer + piparser.mly: parser + piptree.mli: type declarations for the parse tree + pisyntax.ml: translates parse tree into tree with bound variables (as declared in pitypes.mli) + Front-end with types: + pitlexer.mll: lexer + pitparser.mly: parser + pitptree.mli: type declarations for the parse tree + pitsyntax.ml: translates parse tree into tree with bound variables (as declared in pitypes.mli) +pitypes.mli: type declarations for the processes and queries +stringmap.ml: map from strings to values, useful to represent environments +pievent.ml: routines for managing events +pitransl.ml: translates a process into clauses for secrecy (POPL'02), correspondences (SAS'02), strong secrecy (Oakland'04), weak secrets (LICS'05) +simplify.ml: merges two processes into one biprocess, in order to prove equivalences (POST'13 presents an earlier version of this work) +pitranslweak.ml: translates a process into clauses for proving equivalences, i.e. processes with "choice" (see LICS'05) +noninterf.ml: clauses manipulations and selection function for strong secrecy (Oakland'04) +weaksecr.ml clauses manipulations and selection function for proving equivalences and verifying protocols using weak secrets (LICS'05) +piauth.ml: checks whether a correspondence query is true after resolution. +reduction*.ml: reconstruct a trace (attack) from a derivation (see CSFW'05) + including: + - reduction_helper.ml: helper functions for trace reconstruction + - reduction.ml: trace reconstruction for secrecy (POPL'02), correspondences (SAS'02), strong secrecy (Oakland'04), weak secrets (LICS'05) + - reduction_bipro.ml: trace reconstruction for equivalences, i.e. processes with "choice" (see LICS'05) + +main.ml: main program; interprets the command line and calls the desired functions. + + +Program that translates ProVerif input to TeX: +lexertotex.mll: lexer for the pi calculus front-end +pitlexertotex.mll: lexer for the typed pi calculus front-end +fileprint.ml: helper file, mainly defines functions for printing to a file +proveriftotex.ml: main file diff --git a/preinstallTTool/linux/proverif/src/syntax.cmi b/preinstallTTool/linux/proverif/src/syntax.cmi new file mode 100644 index 0000000000000000000000000000000000000000..050813a8414c521d9aaad9b79ae4bd6857744cfb Binary files /dev/null and b/preinstallTTool/linux/proverif/src/syntax.cmi differ diff --git a/preinstallTTool/linux/proverif/src/syntax.cmx b/preinstallTTool/linux/proverif/src/syntax.cmx new file mode 100644 index 0000000000000000000000000000000000000000..9410fb5638a61b30a01ca95dbd74d31d6e4582ae Binary files /dev/null and b/preinstallTTool/linux/proverif/src/syntax.cmx differ diff --git a/preinstallTTool/linux/proverif/src/syntax.ml b/preinstallTTool/linux/proverif/src/syntax.ml new file mode 100644 index 0000000000000000000000000000000000000000..9f9aa68c29e17789dc3a7911fb4e23bb8493ffcc --- /dev/null +++ b/preinstallTTool/linux/proverif/src/syntax.ml @@ -0,0 +1,366 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + +open Ptree +open Parsing_helper +open Types + + +(* Parse a file *) + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + lexbuf.Lexing.lex_curr_p <- { lexbuf.Lexing.lex_curr_p with + Lexing.pos_fname = filename }; + let ptree = + try + Parser.all Lexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +(* Functions *) + +let fun_decls = Param.fun_decls + +let get_fun (s,ext) arity = + try + let r = Hashtbl.find fun_decls s in + let r_arity = List.length (fst r.f_type) in + if r_arity != arity then + input_error ("arity of function " ^ s ^ " should be " ^ + (string_of_int r_arity)) ext; + r + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + +let get_var env s = + try + Hashtbl.find env s + with Not_found -> + let r = Terms.new_var s Param.any_type in + Hashtbl.add env s r; + r + +let get_ident_any env (s,ext) = + try + let r = Hashtbl.find fun_decls s in + let r_arity = List.length (fst r.f_type) in + if (r_arity != 0) then + input_error ("function " ^ s ^ " is used without argument. It expects " ^ + (string_of_int r_arity) ^ " arguments") ext; + FunApp (r, []) + with Not_found -> + Var (get_var env s) + +let check_fun_decl is_tuple (name,ext) arity = + try + ignore(Hashtbl.find fun_decls name); + input_error ("function " ^ name ^ " already defined") ext + with Not_found -> + let cat = if is_tuple then Tuple else Eq [] in + Hashtbl.add fun_decls name { f_name = name; + f_type = (Terms.copy_n arity Param.any_type), Param.any_type; + f_private = false; + f_options = 0; + f_cat = cat; + f_initial_cat = cat } + +(* Equations *) + +let rec check_eq_term varenv = function + (PIdent i) -> + get_ident_any varenv i +| (PFunApp (f, tlist)) -> + FunApp(get_fun f (List.length tlist), + List.map (check_eq_term varenv) tlist) +| (PName ((_,ext),_)) -> input_error "No names in equations" ext +| (PTuple l) -> FunApp(Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) l), + List.map (check_eq_term varenv) l) + +let check_equation l = + let l' = List.map (fun (t1, t2) -> + let var_env = Hashtbl.create 7 in + let t1' = check_eq_term var_env t1 in + let t2' = check_eq_term var_env t2 in + (t1',t2')) l + in + TermsEq.register_equation EqNoInfo l' + + +let rule_counter = ref 0 +let rules = ref [] + +(* Predicates *) + +let pred_env = Param.pred_env + +let add_new_name p = + incr rule_counter; + let v1 = Terms.new_var_def Param.any_type in + let new_name = FunApp(Terms.new_name_fun Param.any_type, [v1]) in + let f = Pred(p, List.map (fun _ -> new_name) p.p_type) in + rules := ([], f, Rule(!rule_counter, Rn p, [], f, []), []) :: (!rules) + +let rec interpret_info arity r = function + ("memberOptim", ext) -> + if arity != 2 then + input_error "memberOptim makes sense only for predicates of arity 2" ext; + r.p_prop <- r.p_prop lor Param.pred_ELEM + | ("elimVar", ext) -> + if arity == 0 then + input_error "elimVar does not make sense for predicates without arguments" ext; + add_new_name r; + r.p_prop <- r.p_prop lor Param.pred_ANY + | ("elimVarStrict", ext) -> + if arity == 0 then + input_error "elimVarStrict does not make sense for predicates without arguments" ext; + add_new_name r; + r.p_prop <- r.p_prop lor Param.pred_ANY_STRICT + | ("decompData",_) -> r.p_prop <- r.p_prop lor Param.pred_TUPLE + | ("decompDataSelect",_) -> r.p_prop <- r.p_prop lor Param.pred_TUPLE lor Param.pred_TUPLE_SELECT + | ("block",_) -> r.p_prop <- r.p_prop lor Param.pred_BLOCKING + | (s,ext) -> input_error ("unknown predicate qualifier " ^ s) ext + +let check_pred (c,ext) arity info = + if Hashtbl.mem pred_env c then + input_error ("predicate " ^ c ^ " already declared") ext + else + let r = { p_name = c; + p_type = Terms.copy_n arity Param.any_type; + p_prop = 0; + p_info = [] } + in + List.iter (interpret_info arity r) info; + Hashtbl.add pred_env c r + +let get_pred (c,ext) arity = + try + let r = Hashtbl.find pred_env c in + let r_arity = List.length r.p_type in + if arity != r_arity then + input_error ("arity of predicate " ^ c ^ + " should be " ^ (string_of_int r_arity)) ext; + r + with Not_found -> + let r = { p_name = c; + p_type = Terms.copy_n arity Param.any_type; + p_prop = 0; + p_info = [] } + in + Hashtbl.add pred_env c r; + r + +(* Names *) + +let name_env = Hashtbl.create 7 + +let get_name s arity ext = + try + let r = Hashtbl.find name_env s in + let r_arity = List.length (fst r.f_type) in + if r_arity != arity then + input_error ("arity of name " ^ s ^ " should be " ^ + (string_of_int r_arity)) ext; + r + with Not_found -> + let r = Terms.create_name s ((Terms.copy_n arity Param.any_type), Param.any_type) true in + Hashtbl.add name_env s r; + r + +(* Clauses *) + +let rec check_term env = function + (PIdent i) -> get_ident_any env i + | (PFunApp(f,l)) -> + FunApp (get_fun f (List.length l), + List.map (check_term env) l) + | (PTuple l) -> FunApp(Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) l), + List.map (check_term env) l) + | (PName((s,ext),l)) -> + FunApp(get_name s (List.length l) ext, + List.map (check_term env) l) + +let check_cterm env (p,t) = + (get_pred p (List.length t), List.map (check_term env) t) + +let format_get_ident_any env (s,ext) = + try + let r = Hashtbl.find fun_decls s in + let r_arity = List.length (fst r.f_type) in + if (r_arity != 0) then + input_error ("function " ^ s ^ " is used without argument. It expects " ^ + (string_of_int r_arity) ^ " arguments") ext; + FFunApp (r, []) + with Not_found -> + FVar (get_var env s) + +let rec check_format env = function + (PFIdent i) -> format_get_ident_any env i + | (PFFunApp(f,l)) -> + FFunApp (get_fun f (List.length l), + List.map (check_format env) l) + | (PFTuple l) -> FFunApp(Terms.get_tuple_fun (List.map (fun _ -> Param.any_type) l), + List.map (check_format env) l) + | (PFName((s,ext),l)) -> + FFunApp(get_name s (List.length l) ext, + List.map (check_format env) l) + | PFAny (s,ext) -> + FAny (get_var env s) + + +let check_cformat_fact env (p,t) = + (get_pred p (List.length t), List.map (check_format env) t) + +let rec check_one_hyp (hyp_accu,constra_accu) env (fact, ext) = + match fact with + | PSNeq(t1,t2) -> (hyp_accu, [Neq(check_term env t1, check_term env t2)] :: + constra_accu) + | PSimpleFact(p,l) -> + let (p',l') = check_cterm env (p,l) in + (Pred(p',l')::hyp_accu, constra_accu) + +let check_simple_fact env (fact, ext) = + match fact with + | PSNeq(t1,t2) -> input_error "<> constraint not allowed here" ext + | PSimpleFact(p,l) -> + let (p',l') = check_cterm env (p,l) in + Pred(p',l') + +let rec check_red = function + [] -> () + | (Clause(i,c)::l) -> + begin + check_red l; + try + let env = Hashtbl.create 7 in + incr rule_counter; + let (hyp, constra) = List.fold_right (fun onehyp accu -> check_one_hyp accu env onehyp) i ([],[]) in + let concl = check_simple_fact env c in + let constra = TermsEq.simplify_constra_list (concl :: hyp) constra in + rules := (hyp, concl, + Rule(!rule_counter, LblNone, hyp, concl, constra), constra) :: (!rules) + + with TermsEq.FalseConstraint -> () + end + | (Equiv(i,c,select)::l) -> + check_red l; + let env = Hashtbl.create 7 in + let hyp = List.map (check_simple_fact env) i in + let concl = check_simple_fact env c in + let requiv = + incr rule_counter; + (hyp, concl, Rule(!rule_counter, LblEquiv, hyp, concl, []), []) + in + Rules.add_equiv (hyp, concl, !rule_counter); + if not select then Terms.add_unsel concl; + rules := + (List.map (fun h -> + incr rule_counter; + ([concl], h, Rule(!rule_counter, LblEquiv, [concl], h, []), [])) hyp) + @ (requiv :: (!rules)) + + +let gen_data_clauses () = + + let output_rule_hist h = + match History.get_rule_hist h with + (Rule(_, t, hyp, concl, constra)) -> + incr rule_counter; + rules := (hyp, concl, Rule(!rule_counter, t, hyp, concl, constra), constra) :: (!rules) + | _ -> Parsing_helper.internal_error "unexpected result in output_rule_hist" + in + + let gen_fun pred f = + output_rule_hist (RApplyFunc(f, pred)); + for n = 0 to (List.length (fst f.f_type))-1 do + output_rule_hist (RApplyProj(f, n, pred)) + done + in + + let tuples_rules p = + Hashtbl.iter (fun _ f -> + match f.f_cat with + Tuple -> gen_fun p f + | _ -> ()) fun_decls; + Hashtbl.iter (fun _ f -> gen_fun p f) Terms.tuple_table + in + + Hashtbl.iter (fun _ p -> + if (p.p_prop land Param.pred_TUPLE != 0) then + tuples_rules p; + ) pred_env + + +let query_facts = ref ([] : fact list) + +let rec check_all = function + (FunDecl (f,i))::l -> check_fun_decl false f i; check_all l + | (DataFunDecl(f,i))::l -> check_fun_decl true f i; check_all l + | (Equation(eql))::l -> check_equation eql; check_all l + | (Query fact) :: l -> + let env = Hashtbl.create 7 in + query_facts := (check_simple_fact env fact) :: (!query_facts); + check_all l + | (NoUnif (fact,n)) :: l -> + let env = Hashtbl.create 7 in + Selfun.add_no_unif (check_cformat_fact env fact) (-n); + check_all l + | (Not fact) :: l -> + let env = Hashtbl.create 7 in + Rules.add_not (check_simple_fact env fact); + check_all l + | (Elimtrue fact) :: l -> + let env = Hashtbl.create 7 in + let f = check_simple_fact env fact in + incr rule_counter; + rules := ([], f, Rule(!rule_counter, LblNone, [], f, []), []) :: (!rules); + Rules.add_elimtrue (!rule_counter, f); + check_all l + | (PredDecl (p, arity, info)) :: l -> + check_pred p arity info; + check_all l + | (Param((p,ext),v)) :: l -> + Param.common_parameters p ext v; + check_all l + | [Reduc r] -> + check_red r; + gen_data_clauses(); + !rules + | _ -> internal_error "The first reduc part is not the last element of the file" + +let parse_file s = + Param.set_ignore_types true; + check_all (parse s) + diff --git a/preinstallTTool/linux/proverif/src/syntax.mli b/preinstallTTool/linux/proverif/src/syntax.mli new file mode 100644 index 0000000000000000000000000000000000000000..e20f5309f313ef481b2a81d29f5aed1d780bae34 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/syntax.mli @@ -0,0 +1,32 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +val parse_file : string -> reduction list + +val query_facts : fact list ref diff --git a/preinstallTTool/linux/proverif/src/terms.cmi b/preinstallTTool/linux/proverif/src/terms.cmi new file mode 100644 index 0000000000000000000000000000000000000000..49ee508097ec94151995b290c89786f32398eae5 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/terms.cmi differ diff --git a/preinstallTTool/linux/proverif/src/terms.cmx b/preinstallTTool/linux/proverif/src/terms.cmx new file mode 100644 index 0000000000000000000000000000000000000000..10dbbbce87b9fd9b8ecb0bb24cc3ad7a16cb6aff Binary files /dev/null and b/preinstallTTool/linux/proverif/src/terms.cmx differ diff --git a/preinstallTTool/linux/proverif/src/terms.ml b/preinstallTTool/linux/proverif/src/terms.ml new file mode 100644 index 0000000000000000000000000000000000000000..18cdb8d485e0cfa0d72b32b688db8ebc3e776997 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/terms.ml @@ -0,0 +1,1606 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Parsing_helper +open Types + +let tuple_table = Hashtbl.create 1 + +let get_tuple_fun tl = + let tl = + if Param.get_ignore_types() then + List.map (fun t -> Param.any_type) tl + else + tl + in + try + Hashtbl.find tuple_table tl + with Not_found -> + let r = { f_name = ""; + f_type = tl, Param.bitstring_type; + f_cat = Tuple; + f_initial_cat = Tuple; + f_private = false; + f_options = 0 } + in + Hashtbl.add tuple_table tl r; + r + +let get_term_type = function + Var b -> b.btype + | FunApp(f,_) -> snd f.f_type + +let equal_types t1 t2 = + (Param.get_ignore_types()) || t1 == t2 + +(* Get the type of a pattern *) + +let get_pat_type = function + PatVar b -> b.btype + | PatTuple (f,l) -> snd f.f_type + | PatEqual t -> get_term_type t + +let get_format_type = function + FVar b -> b.btype + | FAny b -> b.btype + | FFunApp(f,_) -> snd f.f_type + +let term_of_pattern_variable = function + | PatVar(v) -> Var(v) + | _ -> internal_error "[term_of_pattern_variable] The pattern must be a variable" + +let rec copy_n n v = + if n <= 0 then [] else v :: (copy_n (n-1) v) + +let rec tl_to_string sep = function + [] -> "" + | [a] -> a.tname + | (a::l) -> a.tname ^ sep ^ (tl_to_string sep l) + +let rec eq_lists l1 l2 = + match l1,l2 with + [],[] -> true + | a1::q1,a2::q2 -> (a1 == a2) && (eq_lists q1 q2) + | _,_ -> false + +(* These functions are used to guarantee the freshness of new identifiers + Each identifier is represented by a pair (s,n): + - if n = 0, then (s,n) is displayed s + - otherwise, (s,n) is displayed s_n + Invariant: n has at most 9 digits (supports one billion of variables); + when n = 0, s is never of the form N_xxx where xxx is a non-zero + number of at most 9 digits. + This guarantees that for each identifier, (s,n) is unique. + We guarantee the freshness by changing the value of n +*) + +(* [get_id_n s] converts [s] into a pair [(s',n)] displayed [s] *) + +let get_id_n s = + let l = String.length s in + if '0' <= s.[l-1] && s.[l-1] <= '9' then + let rec underscore_number n = + if (n > 0) && (l-n<=10) then + if s.[n] = '_' then n + else if '0' <= s.[n] && s.[n] <= '9' then underscore_number (n-1) else + raise Not_found + else + raise Not_found + in + try + let pos_underscore = underscore_number (l-2) in + if s.[pos_underscore+1] = '0' then raise Not_found; + let n' = int_of_string (String.sub s (pos_underscore+1) (l-pos_underscore-1)) in + let s' = String.sub s 0 pos_underscore in + (* print_string (s ^ " split into " ^ s' ^ " " ^ (string_of_int n') ^ "\n"); *) + (s',n') + with Not_found -> + (* s does not end with _xxx *) + (s,0) + else + (s,0) + +(* Counter incremented to generate fresh variable names *) +let var_idx = ref 0 + +(* The maximum xxx such N_xxx occurs and xxx does not come from var_idx *) +let max_source_idx = ref 0 + +(* Set of pairs (s,n) used, stored in a hash table. + All pairs (_,n) where 0 < n <= !var_idx are considered as always used, + so we need not add them to the hash table. + All pairs (s,n) in [used_ids] satisfy [n <= !max_source_idx] *) +let used_ids = Hashtbl.create 7 + +(* [record_id s ext] records the identifier [s] so that it will not be reused elsewhere. + [record_id] must be called only before calls to [fresh_id] or [new_var_name], so that + [s] cannot collide with an identifier generated by [fresh_id] or [new_var_name]. + Moreover, !var_idx = 0, there are no pairs (_,n) with 0 < n <= !var_idx, + so the used pairs are exactly those in the hash table used_ids. *) + +let record_id s ext = + let (_,n) as s_n = get_id_n s in + if n > !max_source_idx then max_source_idx := n; + if Hashtbl.mem used_ids s_n then + input_error ("identifier " ^ s ^ " already defined (as a free name, a function, a predicate, a type, an event, or a table)") ext + else + Hashtbl.add used_ids s_n () + + + + +(*************************************************** + Function for Var +****************************************************) + +(* [new_var_name s] creates a fresh pair [(s,n)] using [!var_idx]. *) + +let rec new_var_name s = + incr var_idx; + let n = !var_idx in + if (n <= !max_source_idx) && (Hashtbl.mem used_ids (s,n)) then + new_var_name s + else + (s,n) + +(* [fresh_id s] creates a fresh identifier [s'] corresponding to + identifier [s], preferably [s] itself. If [s] is already used, + create a fresh identifier by changing the number suffix of [s], or + adding a number suffix to [s] if there is none, using [new_var_name] *) + +let fresh_id s = + if not (!Param.typed_frontend) then + (* When the front-end is not typed, we do not try to reuse exactly [s]; + free names may be discovered after some bound names in the untyped + front-end, so we do not know when we could use a bound name without + renaming. *) + let (s',n') = new_var_name s in + s' ^ "_" ^ (string_of_int n') + else + let ((s',n) as s_n) = get_id_n s in + if ((n != 0) && (n <= !var_idx)) || (Hashtbl.mem used_ids s_n) then + let (s',n') = new_var_name s' in + s' ^ "_" ^ (string_of_int n') + else + begin + if n > !max_source_idx then max_source_idx := n; + Hashtbl.add used_ids s_n (); + s + end + +(* [fresh_id_keep_s s] creates a fresh pair [(s,n)] corresponding to + identifier [s], preferably the pair [(s,0)], which displays exactly as [s], + if possible, that is, if [s] does not end with _number and this pair is + not already used. Otherwise, create a fresh pair using [new_var_name] *) + +let fresh_id_keep_s s = + if not (!Param.typed_frontend) then + (* When the front-end is not typed, we do not try to reuse exactly [s]; + free names may be discovered after some bound names in the untyped + front-end, so we do not know when we could use a bound name without + renaming. *) + new_var_name s + else + let ((s',n) as s_n) = get_id_n s in + if n != 0 then + new_var_name s + else + if Hashtbl.mem used_ids s_n then + new_var_name s + else + begin + (* n = 0, so no need to increase max_source_idx, it is already >= n *) + Hashtbl.add used_ids s_n (); + s_n + end + + +(* [new_var s t] creates a fresh variable with name [s] and type [t] *) + +let new_var s t = + let (s',n) = fresh_id_keep_s s in + { sname = s'; vname = n; unfailing = false; btype = t; link = NoLink } + +(* [new_var s t] creates a fresh variable with name [s] and type [t] *) + +let new_unfailing_var s t = + let s_mfail = if s = "" then "@mayfail" else "@mayfail_" ^ s in + let (s',n) = fresh_id_keep_s s_mfail in + { sname = s'; vname = n; unfailing = true; btype = t; link = NoLink } + +(* [new_var_noren s t] creates a fresh variable with name [s] and type [t] + The name of this variable is exactly [s], without renaming it to + a fresh name even if s is already used. Such variables should never + be displayed. *) + +let new_var_noren s t = + { sname = s; vname = -1; unfailing = false; btype = t; link = NoLink } + +(* [copy_var v] creates a fresh variable with the same sname and type as [v] + Invariant: if vname = 0, then sname never contains N_xxx where xxx is a non-zero + number of at most 9 digits. As a consequence, we don't need to split v.sname + using fresh_id_n. *) + +let copy_var v = + let (s',n) = new_var_name v.sname in + { sname = s'; vname = n; unfailing = v.unfailing; btype = v.btype; link = NoLink } + +(* [copy_var_noren v] creates a fresh variable with the same name and type + as [v]. The name is exactly the same as [v], without renaming to a fresh + name. *) + +let copy_var_noren v = + { sname = v.sname; vname = v.vname; unfailing = v.unfailing; btype = v.btype; link = NoLink } + +(* [new_var_def t] creates a fresh variable with a default name and type [t] *) +let new_var_def t = + Var (new_var Param.def_var_name t) + +let new_unfailing_var_def t = + Var (new_unfailing_var "" t) + +(* [val_gen tl] creates new variables of types [tl] and returns them in a + list *) +let var_gen tl = List.map new_var_def tl + +(* [occurs_var v t] determines whether the variable [v] occurs in the term [t] *) + +let rec occurs_var v = function + Var v' -> v == v' + | FunApp(f,l) -> List.exists (occurs_var v) l + +let occurs_var_fact v = function + Pred(_,l) -> List.exists (occurs_var v) l + | Out _ -> internal_error "Unexpected Out fact in occurs_var_fact" + +(* [occurs_f f t] determines whether the function symbol [f] occurs in the term [t] *) + +let rec occurs_f f = function + Var _ -> false + | FunApp(f',l) -> + (f == f') || (List.exists (occurs_f f) l) + +let rec occurs_f_pat f = function + PatVar v -> false + | PatTuple (_,l) -> List.exists (occurs_f_pat f) l + | PatEqual t -> occurs_f f t + +let occurs_f_fact f = function + Pred(_,l) -> List.exists (occurs_f f) l + | Out(t, l) -> + (occurs_f f t) || + (List.exists(fun (_,t) -> occurs_f f t) l) + +let is_may_fail_term = function + | FunApp(f,[]) when f.f_cat = Failure -> true + | Var(v) when v.unfailing -> true + | _ -> false + +let is_unfailing_var = function + | Var(v) when v.unfailing -> true + | _ -> false + +let is_failure = function + | FunApp(f,[]) when f.f_cat = Failure -> true + | _ -> false + +(* Equality tests *) + +let rec equal_terms t1 t2 = match (t1,t2) with + | (FunApp(f1,l1), FunApp(f2,l2)) -> + (f1 == f2) && (List.for_all2 equal_terms l1 l2) + | (Var v1, Var v2) -> v1 == v2 + | (_,_) -> false + +let equals_term_pair (v, t) (v', t') = (v == v') && (equal_terms t t') + +let equal_facts f1 f2 = + match (f1,f2) with + Pred(chann1, t1),Pred(chann2, t2) -> + (chann1 == chann2) && (List.for_all2 equal_terms t1 t2) + | Out(t1,l1),Out(t2,l2) -> + (equal_terms t1 t2) && (List.length l1 = List.length l2) + && (List.for_all2 equals_term_pair l1 l2) + | _ -> false + +let equals_simple_constraint c1 c2 = + match (c1,c2) with + (Neq(t1, t2), Neq(t1', t2')) -> (equal_terms t1 t1') && (equal_terms t2 t2') + +(* Copy and cleanup *) + +let current_bound_vars = ref [] + +let link v l = + (* Check that message variables are linked only to messages, + not to fail or to may-fail variables *) + if not v.unfailing then + begin + match l with + VLink v' -> assert (not v'.unfailing) + | TLink t -> + begin + match t with + Var v' -> assert (not v'.unfailing) + | FunApp(f, _) -> assert (f.f_cat != Failure) + end + | TLink2 _ -> + (* TLink2 is not used with function link *) + assert false + | NoLink -> + (* NoLink should not be used with function link, + it is set by cleanup *) + assert false + | FLink _ | PGLink _ -> () + end; + (* Check that types are correct, when they are not ignored *) + begin + match l with + VLink v' -> assert (equal_types v.btype v'.btype) + | TLink t -> assert (equal_types v.btype (get_term_type t)) + | _ -> () + end; + current_bound_vars := v :: (!current_bound_vars); + v.link <- l + +let link_var t l = match t with + |Var(v) -> link v l + |_ -> internal_error "[link_var] The term must be a variable" + +let cleanup () = + List.iter (fun v -> v.link <- NoLink) (!current_bound_vars); + current_bound_vars := [] + +let auto_cleanup f = + let tmp_bound_vars = !current_bound_vars in + current_bound_vars := []; + try + let r = f () in + List.iter (fun v -> v.link <- NoLink) (!current_bound_vars); + current_bound_vars := tmp_bound_vars; + r + with x -> + List.iter (fun v -> v.link <- NoLink) (!current_bound_vars); + current_bound_vars := tmp_bound_vars; + raise x + +(* We could also define the following functions instead of cleanup: + +let in_auto_cleanup = ref false + +let link v l = + if not (!in_auto_cleanup) then + Parsing_helper.internal_error "should be in auto_cleanup to use link"; + current_bound_vars := v :: (!current_bound_vars); + v.link <- l + +let auto_cleanup f = + let tmp_in_auto_cleanup = !in_auto_cleanup in + in_auto_cleanup := true; + let tmp_bound_vars = !current_bound_vars in + current_bound_vars := []; + try + let r = f () in + List.iter (fun v -> v.link <- NoLink) (!current_bound_vars); + current_bound_vars := tmp_bound_vars; + in_auto_cleanup := tmp_in_auto_cleanup; + r + with x -> + List.iter (fun v -> v.link <- NoLink) (!current_bound_vars); + current_bound_vars := tmp_bound_vars; + in_auto_cleanup := tmp_in_auto_cleanup; + raise x + +Use + auto_cleanup (fun () -> ...) +instead of + let tmp_bound_vars = !current_bound_vars in + current_bound_vars := []; + ... + cleanup(); + current_bound_vars := tmp_bound_vars +and of + if !current_bound_vars != [] then + Parsing_helper.internal_error "..."; + ... + cleanup() +This would be a better programming style, but this conflicts +with the way the function Rules.build_rules_eq is written... +and would probably also slow down a bit the system. + +*) + +(*************************************************** + Functions for General Variables +****************************************************) + +let gen_var_counter = ref 0 + +let new_gen_var t may_fail = + incr gen_var_counter; + let f_cat = if may_fail then General_mayfail_var else General_var in + { f_name = (if !Param.tulafale != 1 then "@gen" else "gen") ^ + (if may_fail then "mf" else "") ^ + (string_of_int (!gen_var_counter)); + f_type = [], t; + f_cat = f_cat; + f_initial_cat = f_cat; + f_private = true; + f_options = 0 } + +let rec generalize_vars_not_in vlist = function + Var v -> + begin + if List.memq v vlist then Var v else + match v.link with + | NoLink -> + let v' = FunApp(new_gen_var v.btype v.unfailing, []) in + link v (TLink v'); + v' + | TLink l -> l + | _ -> internal_error "Unexpected link in generalize_vars" + end + | FunApp(f, l) -> + FunApp(f, List.map (generalize_vars_not_in vlist) l) + +let rec generalize_vars_in vlist = function + Var v -> + begin + if not (List.memq v vlist) then Var v else + match v.link with + NoLink -> + let v' = FunApp(new_gen_var v.btype v.unfailing, []) in + link v (TLink v'); + v' + | TLink l -> l + | _ -> internal_error "Unexpected link in generalize_vars" + end + | FunApp(f, l) -> + FunApp(f, List.map (generalize_vars_in vlist) l) + + +(*************************************************** + Copy term functions +****************************************************) + +let rec copy_term = function + | FunApp(f,l) -> FunApp(f, List.map copy_term l) + | Var v -> + match v.link with + NoLink -> + let r = copy_var v in + link v (VLink r); + Var r + | VLink l -> Var l + | _ -> internal_error "Unexpected link in copy_term" + +let copy_term_pair = fun (v,t) -> (v, copy_term t) + +let copy_fact = function + Pred(chann, t) -> Pred(chann, List.map copy_term t) + | Out(t, l) -> Out(copy_term t, List.map copy_term_pair l) + +let copy_constra c = List.map (function + Neq(t1,t2) -> Neq(copy_term t1, copy_term t2)) c + +let rec copy_rule (hyp,concl,hist,constra) = + let tmp_bound = !current_bound_vars in + current_bound_vars := []; + let r = (List.map copy_fact hyp, copy_fact concl, hist, List.map copy_constra constra) in + cleanup(); + current_bound_vars := tmp_bound; + r + +let copy_red (left_list, right, side_c) = + assert (!current_bound_vars == []); + let left_list' = List.map copy_term left_list in + let right' = copy_term right in + let side_c' = List.map (function (t1,t2) -> + copy_term t1, copy_term t2) side_c in + cleanup(); + (left_list', right', side_c') + +(* Unification *) + +exception Unify + +let rec occur_check v t = + match t with + Var v' -> + begin + if v == v' then raise Unify; + match v'.link with + NoLink -> () + | TLink t' -> occur_check v t' + | _ -> internal_error "unexpected link in occur_check" + end + | (FunApp(_,l)) -> List.iter (occur_check v) l + +let term_string = function + FunApp(f,l) -> if l = [] then f.f_name else f.f_name ^ "(...)" + | Var(b) -> b.sname ^ "_" ^ (string_of_int b.vname) + +let rec unify t1 t2 = + (* Commented out this typing checking test for speed + if not (Param.get_ignore_types()) then + begin + if get_term_type t1 != get_term_type t2 then + Parsing_helper.internal_error + ("Type error in unify: " ^ + (term_string t1) ^ " has type " ^ (get_term_type t1).tname ^ + " while " ^ + (term_string t2) ^ " has type " ^ (get_term_type t2).tname) + end; *) + match (t1,t2) with + (Var v, Var v') when v == v' -> () + | (Var v, _) -> + begin + match v.link with + | NoLink -> + begin + match t2 with + | Var {link = TLink t2'} -> unify t1 t2' + | Var v' when v.unfailing -> + link v (TLink t2) + | Var v' when v'.unfailing -> + link v' (TLink t1) + | FunApp (f_symb,_) when f_symb.f_cat = Failure && v.unfailing = false -> raise Unify + | Var v' when v'.sname = Param.def_var_name -> + link v' (TLink t1) + | _ -> + occur_check v t2; + link v (TLink t2) + end + | TLink t1' -> unify t1' t2 + | _ -> internal_error "Unexpected link in unify 1" + end + | (FunApp(f_symb,_), Var v) -> + begin + match v.link with + NoLink -> + if v.unfailing = false && f_symb.f_cat = Failure + then raise Unify + else + begin + occur_check v t1; + link v (TLink t1) + end + | TLink t2' -> unify t1 t2' + | _ -> internal_error "Unexpected link in unify 2" + end + | (FunApp(f1, l1), FunApp(f2,l2)) -> + if f1 != f2 then raise Unify; + List.iter2 unify l1 l2 + +let rec skip n l = + if n = 0 then l else + match l with + (a::l) -> skip (n-1) l + | [] -> internal_error "skip error" + +let unify_facts f1 f2 = + match (f1,f2) with + Pred(chann1, t1),Pred(chann2,t2) -> + if chann1 != chann2 then raise Unify; + List.iter2 unify t1 t2 + | Out(t1,l1),Out(t2,l2) -> + unify t1 t2; + (* Warning: this might be a bit insecure? + if List.length l1 != List.length l2 then raise Unify; *) + let len1 = List.length l1 in + let len2 = List.length l2 in + if len2 < len1 then + begin + let l1 = skip (len1-len2) l1 in + List.iter2 (fun (v1,t1) (v2,t2) -> + if v1 != v2 then raise Unify; + unify t1 t2) l1 l2 + end + else + begin + let l2 = skip (len2-len1) l2 in + List.iter2 (fun (v1,t1) (v2,t2) -> + if v1 != v2 then raise Unify; + unify t1 t2) l1 l2 + end + | _ -> raise Unify + + +let rec copy_term2 = function + | FunApp(f,l) -> FunApp(f, List.map copy_term2 l) + | Var v -> + match v.link with + | NoLink -> + let r = copy_var v in + link v (VLink r); + Var r + | TLink l -> copy_term2 l + | VLink r -> Var r + | _ -> internal_error "unexpected link in copy_term2" + +let copy_term2_pair = fun (v,t) -> (v, copy_term2 t) + +let copy_fact2 = function + Pred(chann, t) -> Pred(chann, List.map copy_term2 t) + | Out(t,l) -> Out(copy_term2 t, List.map copy_term2_pair l) + +let rec copy_constra2 c = List.map (function + Neq(t1,t2) -> Neq(copy_term2 t1, copy_term2 t2)) c + +let copy_rule2 (hyp, concl, hist, constra) = + let tmp_bound = !current_bound_vars in + current_bound_vars := []; + let r = (List.map copy_fact2 hyp, copy_fact2 concl, hist, List.map copy_constra2 constra) in + cleanup(); + current_bound_vars := tmp_bound; + r + +(* Matching *) + +exception NoMatch + +let rec match_terms t1 t2 = + (* Commented out this typing checking test for speed + if not (Param.get_ignore_types()) then + begin + if get_term_type t1 != get_term_type t2 then + Parsing_helper.internal_error + ("Type error in match_terms: " ^ + (term_string t1) ^ " has type " ^ (get_term_type t1).tname ^ + " while " ^ + (term_string t2) ^ " has type " ^ (get_term_type t2).tname) + end; *) + match (t1,t2) with + (Var v), t -> + begin + match v.link with + NoLink -> + if v.unfailing + then link v (TLink t) + else + begin + match t with + | Var v' when v'.unfailing -> raise NoMatch + | FunApp(f_symb,_) when f_symb.f_cat = Failure -> raise NoMatch + | _ -> link v (TLink t) + end + | TLink t' -> if not (equal_terms t t') then raise NoMatch + | _ -> internal_error "Bad link in match_terms" + end + | (FunApp (f1,l1')), (FunApp (f2,l2')) -> + if f1 != f2 then raise NoMatch; + List.iter2 match_terms l1' l2' + | _,_ -> raise NoMatch + +let match_facts f1 f2 = + match (f1,f2) with + Pred(chann1, t1),Pred(chann2, t2) -> + if chann1 != chann2 then raise NoMatch; + List.iter2 match_terms t1 t2 + | Out(t1,l1),Out(t2,l2) -> + match_terms t1 t2; + let len1 = List.length l1 in + let len2 = List.length l2 in + if len2 < len1 then raise NoMatch; + let l2 = skip (len2-len1) l2 in + List.iter2 (fun (v1,t1) (v2,t2) -> + if v1 != v2 then raise NoMatch; + match_terms t1 t2) l1 l2 + | _ -> raise NoMatch + +let matchafact finst fgen = + assert (!current_bound_vars == []); + try + match_facts fgen finst; + cleanup(); + true + with NoMatch -> + cleanup(); + false + +(* [occurs_test_loop seen_vars v t] returns true when + variable [v] occurs in term [t], following links + inside terms. It uses the list [seen_vars] to avoid + loops. [seen_vars] should be initialized to [ref []]. *) + +let rec occurs_test_loop seen_vars v t = + match t with + Var v' -> + begin + if List.memq v' (!seen_vars) then false else + begin + seen_vars := v' :: (!seen_vars); + if v == v' then true else + match v'.link with + NoLink -> false + | TLink t' -> occurs_test_loop seen_vars v t' + | _ -> internal_error "unexpected link in occur_check" + end + end + | FunApp(_,l) -> List.exists (occurs_test_loop seen_vars v) l + +let matchafactstrict finst fgen = + assert (!current_bound_vars == []); + try + match_facts fgen finst; + (* If a variable v is instantiated in the match into + a term that is not a variable and that contains v, then + by repeated resolution, the term will be instantiated into + an infinite number of different terms obtained by + iterating the substitution. We should adjust the selection + function to avoid this non-termination. *) + if List.exists (fun v -> match v.link with + | TLink (Var _) -> false + | TLink t -> occurs_test_loop (ref []) v t + | _ -> false) (!current_bound_vars) then + begin + cleanup(); + true + end + else + begin + cleanup(); + false + end + with NoMatch -> + cleanup(); + false + + +(* Size *) + +let rec term_size = function + Var _ -> 0 + | FunApp(f, l) -> 1 + term_list_size l + +and term_list_size = function + [] -> 0 + | a::l -> term_size a + term_list_size l + +let rec term_pair_list_size = function + [] -> 0 + | (v,t)::l -> 1 + term_size t + term_pair_list_size l + +let fact_size = function + Pred(_, tl) -> 1 + term_list_size tl + | Out(t,l) -> term_size t + term_pair_list_size l + + + +(* [replace_f_var vl t] replaces names in t according to + the association list vl. That is, vl is a reference to a list of pairs + (f_i, v_i) where f_i is a (nullary) function symbol and + v_i is a variable. Each f_i is replaced with v_i in t. + If an f_i in general_vars occurs in t, a new entry is added + to the association list vl, and f_i is replaced accordingly. *) + +let rec replace_f_var vl = function + | Var v2 -> Var v2 + | FunApp(f2,[]) -> + begin + try + Var (List.assq f2 (!vl)) + with Not_found -> + if f2.f_cat = General_var then + begin + let v = new_var f2.f_name (snd f2.f_type) in + vl := (f2, v) :: (!vl); + Var v + end + else if f2.f_cat = General_mayfail_var then + begin + let v = new_unfailing_var f2.f_name (snd f2.f_type) in + vl := (f2, v) :: (!vl); + Var v + end + else + FunApp(f2,[]) + end + | FunApp(f2,l) -> FunApp(f2, List.map (replace_f_var vl) l) + +(* [rev_assoc v2 vl] looks for v2 in the association list vl. + That is, vl is a list of pairs (f_i, v_i) where f_i is a + (nullary) function symbol and v_i is a variable. + If v2 is a v_i, then it returns f_i[], + otherwise it returns v2 unchanged. *) + +let rec rev_assoc v2 = function + [] -> Var v2 + | ((f,v)::l) -> if v2 == v then FunApp(f,[]) else rev_assoc v2 l + +(* [follow_link var_case t] follows links stored in variables in t + and returns the resulting term. Variables are translated + by the function [var_case] *) + +let rec follow_link var_case = function + Var v -> + begin + match v.link with + TLink t -> follow_link var_case t + | NoLink -> var_case v + | _ -> Parsing_helper.internal_error "unexpected link in follow_link" + end + | FunApp(f,l) -> FunApp(f, List.map (follow_link var_case) l) + +(* [replace name f t t'] replaces all occurrences of the name f (ie f[]) with t + in t' *) + +let rec replace_name f t = function + Var v -> Var v + | FunApp(f',[]) -> if f' == f then t else FunApp(f',[]) + | FunApp(f',l') -> FunApp(f', List.map (replace_name f t) l') + +(* List of variables *) + +let rec get_vars vlist = function + Var v -> if not (List.memq v (!vlist)) then vlist := v :: (!vlist) + | FunApp(_,l) -> + List.iter (get_vars vlist) l + +let get_vars_constra vlist = function + Neq(t1,t2) -> get_vars vlist t1; + get_vars vlist t2 + +let get_vars_fact vlist = function + Pred(_,l) -> List.iter (get_vars vlist) l + | Out(t,l) -> + get_vars vlist t; + List.iter(fun (_,t') -> get_vars vlist t') l + +(* Copy of terms and constraints after matching *) + +let rec copy_term3 = function + | FunApp(f,l) -> FunApp(f, List.map copy_term3 l) + | Var v -> match v.link with + NoLink -> Var v + | TLink l -> l + | _ -> internal_error "unexpected link in copy_term3" + +let copy_fact3 = function + Pred(p,l) -> Pred(p, List.map copy_term3 l) + | Out(t,l) -> Out(copy_term3 t, List.map (fun (x,t') -> (x, copy_term3 t')) l) + +let rec copy_constra3 c = List.map (function + | Neq(t1,t2) -> Neq(copy_term3 t1, copy_term3 t2) + )c + +(* Do not select Out facts, blocking facts, or pred_TUPLE(vars) *) + +let is_var = function + Var _ -> true + | _ -> false + +let unsel_set = ref ([] : fact list) +let add_unsel f = + unsel_set := f :: (!unsel_set) + +let is_unselectable = function + Pred(p,pl) as f -> + (p.p_prop land Param.pred_BLOCKING != 0) || + (p.p_prop land Param.pred_TUPLE != 0 && + p.p_prop land Param.pred_TUPLE_SELECT = 0 && + List.for_all is_var pl) || + (List.exists (function f' -> + try + auto_cleanup (fun () -> + unify_facts f f'); + true + with Unify -> + false + ) (!unsel_set)) + | Out _ -> true + +(* Helper functions for decomposition of tuples *) + +let rec reorganize_list l = + let rec get_first = function + [] -> ([], []) + | (a ::l)::l' -> + let (firstl, rest) = get_first l' in + (a :: firstl, l :: rest) + | [] :: _ -> internal_error "unexpected case in reorganize_list" + in + match l with + [] :: _ -> [] + | _ -> + let (firstl, rest) = get_first l in + firstl :: (reorganize_list rest) + +let fun_app f = function + FunApp(f',l) when f == f' -> l + | _ -> raise Not_found + +let reorganize_fun_app f l0 = + reorganize_list (List.map (fun_app f) l0) + +(********************************************* + Definition of several functions +**********************************************) + +(* Failure Constants *) + +let get_fail_symb_memo = Param.memo (fun ty -> + { + f_name = "fail-"^ty.tname; + f_type = [], ty; + f_cat = Failure; + f_initial_cat = Failure; + f_private = false; + f_options = 0 + }) + +let get_fail_symb ty = + get_fail_symb_memo (Param.get_type ty) + +let get_fail_term ty = FunApp(get_fail_symb ty, []) + +let fail_bool() = get_fail_term Param.bool_type + (* fail_bool must be recomputed once Param.ignore_types is correctly set *) + +(* Boolean Constants *) + +let true_cst = + { f_name = "true"; + f_type = [], Param.bool_type; + f_cat = Tuple; + f_initial_cat = Tuple; + f_private = false; + f_options = 0 } + +let false_cst = + { f_name = "false"; + f_type = [], Param.bool_type; + f_cat = Tuple; + f_initial_cat = Tuple; + f_private = false; + f_options = 0 } + +let true_term = FunApp(true_cst, []) +let false_term = FunApp(false_cst, []) + +(* is_true destructor: returns true when its argument is true, + fails otherwise *) + +let is_true_ref = ref None +let is_true_fun() = + match !is_true_ref with + Some f -> f + | None -> + let x = new_var_def Param.bool_type in + + let semantics = Red + [ + [true_term], true_term, []; + [x], fail_bool(), [(x,true_term)]; + [fail_bool()], fail_bool(), [] + ] in + let f = + { + f_name = "is-true"; + f_type = [Param.bool_type], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = false; + f_options = 0 + } + in + is_true_ref := Some f; + f + +(* Boolean Functions *) + +let equal_memo = Param.memo (fun ty -> + let x = new_var_def ty + and y = new_var_def ty + and u = new_unfailing_var_def ty + and fail = get_fail_term ty in + + let semantics = Red + [ + [x;x], true_term, []; + [x;y], false_term, [(x,y)]; + [fail;u], fail_bool(), []; + [x;fail], fail_bool(), [] + ] in + + { f_name = "="; + f_type = [ty;ty], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = false; + f_options = 0 }) + +let equal_fun t = + equal_memo (Param.get_type t) + +let diff_memo = Param.memo (fun ty -> + let x = new_var_def ty + and y = new_var_def ty + and u = new_unfailing_var_def ty + and fail = get_fail_term ty in + + let semantics = Red + [ + [x;x], false_term, []; + [x;y], true_term, [(x,y)]; + [fail;u], fail_bool(), []; + [x;fail], fail_bool(), [] + ] in + + { f_name = "<>"; + f_type = [ty;ty], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = false; + f_options = 0 }) + + +let diff_fun t = + diff_memo (Param.get_type t) + +let and_ref = ref None +let and_fun() = + match !and_ref with + Some f ->f + | None -> + let u = new_unfailing_var_def Param.bool_type + and x = new_var_def Param.bool_type in + + let semantics = Red + [ + (* When the first conjunct is "false", the second conjunct is not evaluated, + so the conjunction is "false" even if the second conjunct fails *) + [true_term; u], u, []; + [x;u], false_term, [(x,true_term)]; + [fail_bool(); u], fail_bool(), [] + ] in + let f = + { f_name = "&&"; + f_type = [Param.bool_type; Param.bool_type], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = false; + f_options = 0 } + in + and_ref := Some f; + f + +let or_ref = ref None +let or_fun() = + match !or_ref with + Some f -> f + | None -> + let u = new_unfailing_var_def Param.bool_type + and x = new_var_def Param.bool_type in + + let semantics = Red + [ + (* When the first disjunct is "true", the second disjunct is not evaluated, + so the disjunction is "true" even if the second disjunct fails *) + [true_term; u], true_term, []; + [x;u], u, [(x,true_term)]; + [fail_bool(); u], fail_bool(), [] + ] in + let f = + { f_name = "||"; + f_type = [Param.bool_type; Param.bool_type], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = false; + f_options = 0 } + in + or_ref := Some f; + f + +let not_ref = ref None +let not_fun() = + match !not_ref with + Some f -> f + | None -> + let x = new_var_def Param.bool_type in + + let semantics = Red + [ + [true_term], false_term, []; + [x], true_term, [(x,true_term)]; + [fail_bool()], fail_bool(), [] + ] in + let f = + { f_name = "not"; + f_type = [Param.bool_type], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = false; + f_options = 0 } + in + not_ref := Some f; + f + +(* The Let in else operators *) + +let glet_constant_memo = Param.memo (fun ty -> + { f_name = "caught-fail"; + f_type = [],ty; + f_cat = Tuple; + f_initial_cat = Tuple; + f_private = true; + f_options = 0 + }) + + +let glet_constant_fun t = + glet_constant_memo (Param.get_type t) + +let glet_constant_never_fail_memo = Param.memo (fun ty -> + { f_name = "never-fail"; + f_type = [],ty; + f_cat = Tuple; + f_initial_cat = Tuple; + f_private = true; + f_options = 0 + }) + +let glet_constant_never_fail_fun t = + glet_constant_never_fail_memo (Param.get_type t) + + +let glet_memo = Param.memo (fun ty -> + let x = new_var_def ty + and fail = get_fail_term ty + and c_o = glet_constant_fun ty in + + let semantics = Red + [ + [x], x, []; + [fail], FunApp(c_o,[]), [] + ] in + + { f_name = "catch-fail"; + f_type = [ty], ty; + f_cat = semantics; + f_initial_cat = semantics; + f_private = true; + f_options = 0 }) + + +let glet_fun t = + glet_memo (Param.get_type t) + + +(* The success operators *) + +let success_memo = Param.memo (fun ty -> + let x = new_var_def ty + and fail = get_fail_term ty in + + let semantics = Red + [ + [x], true_term, []; + [fail], false_term, [] + ] in + + { f_name = "success?"; + f_type = [ty], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = false; + f_options = 0 } + ) + +let success_fun t = + success_memo (Param.get_type t) + +let not_caught_fail_memo = Param.memo (fun ty -> + let x = new_var_def ty + and c_o = glet_constant_fun ty + and fail = get_fail_term ty in + + let semantics = Red + [ + [x], true_term, [(x,FunApp(c_o,[]))]; + [FunApp(c_o,[])], false_term, []; + [fail], fail_bool(), [] + ] in + + { f_name = "not-caught-fail"; + f_type = [ty], Param.bool_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = true; + f_options = 0 } + ) + +let not_caught_fail_fun t = + not_caught_fail_memo (Param.get_type t) + + +let gtest_memo = Param.memo (fun ty -> + let u = new_unfailing_var_def ty + and v = new_unfailing_var_def ty + and x = new_var_def Param.bool_type + and fail = get_fail_term ty in + + let semantics = Red + [ + [true_term;u;v], u, []; + [x;u;v], v, [(x, true_term)]; + [fail_bool();u;v], fail, [] + ] + in + { f_name = "if-then-else"; + f_type = [Param.bool_type;ty;ty], ty; + f_cat = semantics; + f_initial_cat = semantics; + f_private = true; + f_options = 0 }) + + +let gtest_fun t = + gtest_memo (Param.get_type t) + +(* The projection operator *) + +let complete_semantics_constructors type_arg type_result = + let var_fail_list = List.map new_unfailing_var_def type_arg + and var_list = List.map new_var_def type_arg + and fail_list = List.map get_fail_term type_arg + and fail_result = get_fail_term type_result in + + let rec sub_complete var_list var_fail_list fail_list = + match var_list, var_fail_list, fail_list with + | [], [], [] -> [] + | x::var_l, _::var_fl, fail::fail_l -> + let prev_list = sub_complete var_l var_fl fail_l in + (fail::var_fl)::(List.map (fun l -> x::l) prev_list) + | _,_,_ -> internal_error "The three lists should have the same size" + in + List.map (fun l -> l, fail_result,[]) (sub_complete var_list var_fail_list fail_list) + +let red_rules_constructor f = + let vars1 = var_gen (fst f.f_type) in + (vars1, FunApp(f, vars1),[]) :: + (complete_semantics_constructors (fst f.f_type) (snd f.f_type)) + +let red_rules_fun f = + match f.f_cat with + Eq red_rules -> (red_rules_constructor f) @ (List.map (fun (lhs,rhs) -> (lhs, rhs, [])) red_rules) + | Red red_rules -> red_rules + | Name _ -> [([],FunApp(f,[]),[])] + (* This is ok because this function is called + either not with names (calls from Pitransl/Pitranslweak + and from TermsEq.close_term_destr_eq when it is used on + clauses that define LetFilter predicates) + or only with names from processes (calls from + TermsEq.close_term_destr_eq that come from Simplify). + We never have name function symbols here. *) + | _ -> red_rules_constructor f + +let get_function_name f = + match f.f_cat with + Tuple when f.f_name = "" -> + let arity = List.length (fst f.f_type) in + if (arity = 0) || (Param.get_ignore_types()) then + (string_of_int arity) ^ "-tuple" + else + (tl_to_string "-" (fst f.f_type)) ^ "-tuple" + | _ -> f.f_name + +let projection_fun = Param.memo (fun (f_symb,i) -> + if f_symb.f_cat <> Tuple + then internal_error "[Terms.projection_fun] This should be a tuple"; + + let type_list = fst f_symb.f_type in + let type_result = snd f_symb.f_type in + let var_list = var_gen type_list + and gen_var_list = List.map (fun ty -> FunApp(new_gen_var ty false,[])) type_list + and x = new_var_def type_result + + and ieme_type = List.nth type_list (i-1) in + + let fail = get_fail_term type_result + and fail' = get_fail_term ieme_type in + + let semantics = Red + [ + [FunApp(f_symb,var_list)], List.nth var_list (i-1), []; + [x], fail', [x,FunApp(f_symb,gen_var_list)]; + [fail], fail', [] + ] + in + + { f_name = Printf.sprintf "%d-proj-%s" i (get_function_name f_symb); + f_type = [type_result], ieme_type; + f_cat = semantics; + f_initial_cat = semantics; + f_private = f_symb.f_private; + f_options = 0 }) + +let get_all_projection_fun tuple_symb = + let rec sub_get_proj n l = + match l with + | [] -> [] + | _::q -> (projection_fun (tuple_symb,n))::(sub_get_proj (n+1) q) + in + sub_get_proj 1 (fst tuple_symb.f_type) + +(* [clauses_for_function clauses_for_red_rules s f] generates clauses + for a function [f], given a function [clauses_for_red_rules] such + that [clauses_for_red_rules f red_rules] generates clauses for + function that has rewrite rules [red_rules]. + (For constructors, the rewrite rules f(...fail...) -> fail are + omitted from [red_rules]. The function [clauses_for_red_rules] must + take this point into account. In practice, this is easy because the + clauses that come from f(...fail...) -> fail are useless. This + however needs to be justified in each case.) + [s] is unused. It helps for calling [clauses_for_function] + as argument of [Hashtbl.iter]. *) + +let rec clauses_for_function clauses_for_red_rules s f = + if (not f.f_private) && + (* Don't generate clauses for type converter functions when we ignore types + (These functions disappear.) *) + (not ((f.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()))) + then + match f.f_cat with + Eq red_rules -> + let vars1 = var_gen (fst f.f_type) in + let red_rules = (vars1, FunApp(f, vars1),[]) :: (List.map (fun (lhs,rhs) -> (lhs, rhs, [])) red_rules) in + clauses_for_red_rules f red_rules + | Red red_rules -> + clauses_for_red_rules f red_rules + | Tuple -> + (* For tuple constructor *) + let vars1 = var_gen (fst f.f_type) in + clauses_for_red_rules f [(vars1, FunApp(f, vars1),[])]; + (* For corresponding projections *) + List.iter (clauses_for_function clauses_for_red_rules s) (get_all_projection_fun f) + | _ -> () + +(* Names *) + +let new_name_memo = Param.memo (fun t -> + let cat = Name { prev_inputs = None; prev_inputs_meaning = [MAttSid] } in + { f_name = "new-name" ^ (Param.get_type_suffix t); + f_type = [Param.sid_type], t; + f_cat = cat; + f_initial_cat = cat; + f_private = false; + f_options = 0 }) + +let new_name_fun t = + new_name_memo (Param.get_type t) + + +(********************************************* + Occurrences +**********************************************) + +let occ_count = ref 0 + +let reset_occurrence () = + occ_count := 0 + +let new_occurrence () = + incr occ_count; + !occ_count + +(********************************************* + New names +**********************************************) + +let create_name s ty is_private = + let cat = Name { prev_inputs = None; prev_inputs_meaning = [] } in + { f_name = s; + f_type = ty; + f_cat = cat; + f_initial_cat = cat; + f_private = is_private; + f_options = 0 } + +(********************************************** + Rewrite rules for destructors with otherwise +***********************************************) + +exception True_inequality +exception False_inequality + + +let generate_destructor_with_side_cond prev_args lht_list rht ext = + + (* Given an inequality [for all (may-fail variabless in uni_term_list), term_list <> uni_term_list], + [remove_uni_fail_var] returns [(l1,l2)] representing an inequality [l1 <> l2] equivalent + to the initial inequality, by removing the may-fail variables. *) + + let rec remove_uni_fail_var term_list uni_term_list = match term_list, uni_term_list with + | [],[] -> [],[] + | [],_ | _,[] -> internal_error "The two lists should have the same length" + | t::q, Var(v)::uq when v.unfailing -> + begin match v.link with + | NoLink -> + link v (TLink t); + remove_uni_fail_var q uq + | TLink t' -> + let (list_left,list_right) = remove_uni_fail_var q uq in + (t::list_left,t'::list_right) + | _ -> internal_error "Unexpected link" + end + | t::q,ut::uq -> let (list_left,list_right) = remove_uni_fail_var q uq in + (t::list_left,ut::list_right) + in + + (* When [prev_args = (a1,...,an)] is the list of arguments of the previous + rewrite rules, [generalize_prev_args] builds returns a list of pairs + [(li,li')] representing the inequality [\wedge_i li <> li'] + equivalent to the inequality + [\wedge_i forall (variables in ai), lht_list <> ai]. + The returned inequalities do not contain general may-fail variables + (thanks to remove_uni_fail_var), but may contain may-fail variables. + These variables will be removed in the next steps by case distinctions. *) + + let rec generalize_prev_args prev_args = match prev_args with + | [] -> [] + | term_list::q -> + (* Get the variables *) + let vars = ref [] in + List.iter (get_vars vars) term_list; + + (* Remove the may-fail variables *) + let message_var_list = List.filter (fun v -> not (v.unfailing)) !vars in + + (* Generalize the variables *) + let term_list' = + auto_cleanup (fun () -> + List.map (generalize_vars_in message_var_list) term_list + ) + in + + (* Remove the universal may-fail variables *) + let (lterms_left,lterms_right) = auto_cleanup (fun () -> + remove_uni_fail_var lht_list term_list' + ) + in + + (lterms_left,lterms_right)::(generalize_prev_args q) + in + + let rec get_may_fail_vars varsl term = match term with + | Var(v) -> + begin match v.link with + | NoLink -> if v.unfailing && not (List.memq v (!varsl)) then varsl := v :: (!varsl) + | TLink(t) -> get_may_fail_vars varsl t + | _ -> internal_error "Unexpected link" + end + | FunApp(_,l) -> List.iter (get_may_fail_vars varsl) l + in + + let rec simplify_one_neq term_left term_right = match term_left,term_right with + | Var(vl),Var(vr) when vl==vr -> raise False_inequality + | FunApp(f,_), FunApp(f',_) when f.f_cat = Failure && f'.f_cat = Failure -> raise False_inequality + | Var({link = TLink tl}),tr -> simplify_one_neq tl tr + | tl, Var({link = TLink tr}) -> simplify_one_neq tl tr + | Var(v),FunApp(f,_) when v.unfailing = false && f.f_cat = Failure -> raise True_inequality + | FunApp(f,_), Var(v) when v.unfailing = false && f.f_cat = Failure -> raise True_inequality + | FunApp(f,_),FunApp(f',_) when f'.f_cat = Failure -> raise True_inequality + | FunApp(f,_),FunApp(f',_) when f.f_cat = Failure -> raise True_inequality + | _,_ -> term_left,term_right + in + + let simplify_neq lterm_left lterm_right = + List.fold_left2 (fun (neql,neqr) term_left term_right -> + try + let term_left',term_right' = simplify_one_neq term_left term_right in + (term_left'::neql),(term_right'::neqr) + with + | False_inequality -> (neql,neqr) + ) ([],[]) lterm_left lterm_right + in + + let destructors = ref [] in + + let rec remove_may_fail_term_neq list_neq = + (* Simplify Neq *) + + let list_neq' = List.fold_left (fun lneq (lterm_left,lterm_right) -> + try + let (lterm_left', lterm_right') = simplify_neq lterm_left lterm_right in + + if lterm_left' = [] + then raise False_inequality; + + (lterm_left', lterm_right')::lneq + with + True_inequality -> lneq + ) [] list_neq + in + + (* Get the may_fail_variables *) + + let vars = ref [] in + List.iter (fun (lleft,lright) -> + List.iter (get_may_fail_vars vars) lleft; + List.iter (get_may_fail_vars vars) lright + ) list_neq'; + + let may_fail_var_list = !vars in + + if may_fail_var_list = [] + then + (* If no more may-fail variables in inequalities then return the destructor *) + auto_cleanup (fun () -> + let rht' = copy_term2 rht + and lht' = List.map copy_term2 lht_list + and side_c = List.map (fun (left_l, right_l) -> + let left_l' = List.map copy_term2 left_l + and right_l' = List.map copy_term2 right_l in + + let type_list = List.map get_term_type left_l' in + let tuple_symb = get_tuple_fun type_list in + + FunApp(tuple_symb,left_l'),FunApp(tuple_symb,right_l') + ) list_neq' in + + (* Check the variables of the right hand terms *) + + let var_list_rht = ref [] in + get_vars var_list_rht rht'; + + if not (List.for_all (fun v -> List.exists (occurs_var v) lht') (!var_list_rht)) then + Parsing_helper.input_error "All variables of the right-hand side of a \"reduc\" definition\nshould also occur in the left-hand side." ext; + + destructors := (lht',rht',side_c)::!destructors + ) + else + begin + let mf_var = List.hd may_fail_var_list in + + (* Replace the may-fail variable by Fail *) + auto_cleanup (fun () -> + let fail = get_fail_term mf_var.btype in + link mf_var (TLink fail); + try + remove_may_fail_term_neq list_neq' + with + | False_inequality -> () + ); + + (* Replace the may-fail variable by a message variable *) + auto_cleanup (fun () -> + let x = new_var_def mf_var.btype in + link mf_var (TLink x); + try + remove_may_fail_term_neq list_neq' + with + | False_inequality -> () + ) + end + in + + let list_side_c = generalize_prev_args prev_args in + remove_may_fail_term_neq list_side_c; + + !destructors + diff --git a/preinstallTTool/linux/proverif/src/terms.mli b/preinstallTTool/linux/proverif/src/terms.mli new file mode 100644 index 0000000000000000000000000000000000000000..13ed31875041a1c9235615fef848c756c02d848b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/terms.mli @@ -0,0 +1,280 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* This modules contains basic functions to manipulate terms *) + +open Types + +val tuple_table : (typet list, funsymb) Hashtbl.t + +(* [get_tuple_fun tl] returns the function symbol corresponding + to tuples with arguments of types [tl] *) +val get_tuple_fun : typet list -> funsymb +val get_term_type : term -> typet +val get_pat_type : pattern -> typet + +val is_var : term -> bool + +val equal_types : typet -> typet -> bool + +val term_of_pattern_variable : pattern -> term + +val get_format_type : format -> typet +val copy_n : int -> 'a -> 'a list +val tl_to_string : string -> typet list -> string + +(* [eq_lists l1 l2] tests the physical equality between + the elements of [l1] and [l2] *) +val eq_lists : 'a list -> 'a list -> bool + +(* Creates and returns a new identifier or variable *) + +(* [record_id s ext] records the identifier [s] so that it will not be + reused elsewhere. [record_id] must be called only before calls to + [fresh_id] or [new_var_name] *) +val record_id : string -> Parsing_helper.extent -> unit + +(* [fresh_id s] creates a fresh identifier by changing the number of [s]. + Reuses exactly [s] when [s] has not been used before. *) +val fresh_id : string -> string + +(* [new_var s t] creates a fresh variable with name [s] and type [t] *) +val new_var : string -> typet -> binder +val new_unfailing_var : string -> typet -> binder + +(* [new_var_noren s t] creates a fresh variable with name [s] and type [t] + The name of this variable is exactly [s], without renaming it to + a fresh name even if s is already used. Such variables should never + be displayed. *) +val new_var_noren : string -> typet -> binder + +(* [copy_var v] creates a fresh variable with the same sname and type as [v] *) +val copy_var : binder -> binder + +(* [copy_var_noren v] creates a fresh variable with the same name and type + as [v]. The name is exactly the same as [v], without renaming to a fresh + name. *) +val copy_var_noren : binder -> binder + +(* [new_var_def t] creates a fresh variable with a default name and type [t] *) +val new_var_def : typet -> term +val new_unfailing_var_def : typet -> term + +(* [val_gen tl] creates new variables of types [tl] and returns them in a + list *) +val var_gen : typet list -> term list + +(* [is_may_fail_term t] returns true if [t] is the constant [fail] or a may-fail variable *) +val is_may_fail_term : term -> bool + +(* [is_unfailing_var t] returns true if [t] is the constant [fail] or a may-fail variable *) +val is_unfailing_var : term -> bool + +(* [is_failure t] returns true if [t] is the constant [fail] or a may-fail variable *) +val is_failure : term -> bool + +(* [occurs_var v t] returns true when variable [v] occurs in [t] *) +val occurs_var : binder -> term -> bool +val occurs_var_fact : binder -> fact -> bool + +(* [occurs_f f t] returns true when function symbol [f] occurs in [t] *) +val occurs_f : funsymb -> term -> bool +val occurs_f_pat : funsymb -> pattern -> bool +val occurs_f_fact : funsymb -> fact -> bool + +(* Syntactic equality *) +val equal_terms : term -> term -> bool +val equals_term_pair : 'a * term -> 'a * term -> bool +val equal_facts : fact -> fact -> bool +val equals_simple_constraint : constraints -> constraints -> bool + +(* General variables *) +val new_gen_var : typet -> bool -> funsymb +val generalize_vars_not_in : binder list -> term -> term +val generalize_vars_in : binder list -> term -> term + +(* Copies. Variables must be linked only to other variables, with VLink. *) +val copy_term : term -> term +val copy_fact : fact -> fact +val copy_constra : constraints list -> constraints list +val copy_rule : reduction -> reduction +val copy_red : rewrite_rule -> rewrite_rule +(* To cleanup variable links after copies and other manipulations + [current_bound_vars] is the list of variables that currently have a link. + [cleanup()] removes all links of variables in [current_bound_vars], + and resets [current_bound_vars] to the empty list. + + Furthermore, [cleanup_assoc_table_gen_and_ex] cleanup the association table. + *) +val current_bound_vars : binder list ref +val cleanup : unit -> unit +val link : binder -> linktype -> unit +val link_var : term -> linktype -> unit +val auto_cleanup : (unit -> 'a) -> 'a + +(* Exception raised when unification fails *) +exception Unify +val occur_check : binder -> term -> unit +(* Unify two terms/facts by linking their variables to terms *) +val unify : term -> term -> unit +val unify_facts : fact -> fact -> unit +(* Copies. Variables can be linked to terms with TLink *) +val copy_term2 : term -> term +val copy_fact2 : fact -> fact +val copy_constra2 : constraints list -> constraints list +val copy_rule2 : reduction -> reduction + +exception NoMatch +val match_terms : term -> term -> unit +val match_facts : fact -> fact -> unit +val matchafact : fact -> fact -> bool +(* Same as matchafact except that it returns true only when some variable + x is mapped to a term that is not a variable and that contains x by + the matching substitution *) +val matchafactstrict : fact -> fact -> bool + +(* Copy of terms and constraints after matching. + Variables can be linked to terms with TLink, but the link + is followed only once, not recursively *) +val copy_term3 : term -> term +val copy_fact3 : fact -> fact +val copy_constra3 : constraints list -> constraints list + +(* Size of terms/facts *) +val term_size : term -> int +val fact_size : fact -> int + +(* [get_var vlist t] accumulate in reference list [vlist] the list of variables + in the term [t]. + [get_vars_constra vlist c] does the same for the constraint [c], and + [get_vars_fact vlist f] for the fact f *) +val get_vars : binder list ref -> term -> unit +val get_vars_constra : binder list ref -> constraints -> unit +val get_vars_fact : binder list ref -> fact -> unit + +(* [replace_f_var vl t] replaces names in t according to + the association list vl. That is, vl is a reference to a list of pairs + (f_i, v_i) where f_i is a (nullary) function symbol and + v_i is a variable. Each f_i is replaced with v_i in t. + If an f_i in general_vars occurs in t, a new entry is added + to the association list vl, and f_i is replaced accordingly. *) + +val replace_f_var : (funsymb * binder) list ref -> term -> term + +(* [rev_assoc v2 vl] looks for [v2] in the association list [vl]. + That is, [vl] is a list of pairs (f_i, v_i) where f_i is a + (nullary) function symbol and v_i is a variable. + If [v2] is a v_i, then it returns f_i[], + otherwise it returns [v2] unchanged. *) + +val rev_assoc : binder -> (funsymb * binder) list -> term + +(* [follow_link var_case t] follows links stored in variables in [t] + and returns the resulting term. Variables are translated + by the function [var_case] *) + +val follow_link : (binder -> term) -> term -> term + +(* [replace name f t t'] replaces all occurrences of the name [f] (ie f[]) with [t] + in [t'] *) + +val replace_name : funsymb -> term -> term -> term + +(* [skip n l] returns list [l] after removing its first [n] elements *) +val skip : int -> 'a list -> 'a list + +(* Do not select Out facts, blocking facts, or pred_TUPLE(vars) *) +val add_unsel : fact -> unit +val is_unselectable : fact -> bool + +(* helper function for decomposition of tuples *) +val reorganize_fun_app : funsymb -> term list -> + term list list + +(* Symbols *) + +val get_fail_symb : typet -> funsymb +val get_fail_term : typet -> term + +(* Constants *) + +val true_cst : funsymb +val false_cst : funsymb + +val true_term : term +val false_term : term + +(* Functions *) + +val is_true_fun : unit -> funsymb + +val equal_fun : typet -> funsymb +val diff_fun : typet -> funsymb +val or_fun : unit -> funsymb +val and_fun : unit -> funsymb +val not_fun : unit -> funsymb +val new_name_fun : typet -> funsymb + +val glet_constant_fun : typet -> funsymb +val glet_constant_never_fail_fun : typet -> funsymb + +val glet_fun : typet -> funsymb +val gtest_fun : typet -> funsymb +val success_fun : typet -> funsymb +val not_caught_fail_fun : typet -> funsymb + +val complete_semantics_constructors : typet list -> typet -> rewrite_rules +val red_rules_fun : funsymb -> rewrite_rules + +(* [clauses_for_function clauses_for_red_rules s f] generates clauses + for a function [f], given a function [clauses_for_red_rules] such + that [clauses_for_red_rules f red_rules] generates clauses for + function that has rewrite rules [red_rules]. + (For constructors, the rewrite rules f(...fail...) -> fail are + omitted from [red_rules]. The function [clauses_for_red_rules] must + take this point into account. In practice, this is easy because the + clauses that come from f(...fail...) -> fail are useless. This + however needs to be justified in each case.) + [s] is unused. It helps for calling [clauses_for_function] + as argument of [Hashtbl.iter]. *) +val clauses_for_function : (funsymb -> rewrite_rules -> unit) -> + 'a -> funsymb -> unit + +val get_function_name : funsymb -> string +val projection_fun : funsymb * int -> funsymb +val get_all_projection_fun : funsymb -> funsymb list + + +val reset_occurrence : unit -> unit +val new_occurrence : unit -> int + +val create_name : string -> typet list * typet -> bool -> funsymb + +exception False_inequality + +val generate_destructor_with_side_cond : term list list -> + term list -> term -> Parsing_helper.extent -> rewrite_rules diff --git a/preinstallTTool/linux/proverif/src/termsEq.cmi b/preinstallTTool/linux/proverif/src/termsEq.cmi new file mode 100644 index 0000000000000000000000000000000000000000..16099d5cf695202d93589ff7f666dae4a662ff8e Binary files /dev/null and b/preinstallTTool/linux/proverif/src/termsEq.cmi differ diff --git a/preinstallTTool/linux/proverif/src/termsEq.cmx b/preinstallTTool/linux/proverif/src/termsEq.cmx new file mode 100644 index 0000000000000000000000000000000000000000..85f9f4dc0f71d8722c5a9ce0781c858ed6259cd6 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/termsEq.cmx differ diff --git a/preinstallTTool/linux/proverif/src/termsEq.ml b/preinstallTTool/linux/proverif/src/termsEq.ml new file mode 100644 index 0000000000000000000000000000000000000000..7239dac4c14c8ab8f4a97e0974d06c536fe0d51b --- /dev/null +++ b/preinstallTTool/linux/proverif/src/termsEq.ml @@ -0,0 +1,1792 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Terms +open Parsing_helper + +let equationsToRecord = ref false + +let equations_list = ref [] +let register_equation eq_info l = + equationsToRecord := true; + equations_list := (l,eq_info) :: (!equations_list) + +let hasEquations() = + !equations_list != [] + +let hasEquationsToRecord() = + !equationsToRecord + +let non_syntactic f = + match f.f_cat with + | Syntactic f' -> f' + | _ -> f + + +(******** Close clauses modulo the equational theory ****** + close_rule_eq is used for clauses entered by the user in Horn-clause + front-ends, + close_fact_eq is used for closing the goals *) + +let rec close_term_eq restwork = function + Var x -> + begin + match x.link with + TLink t -> close_term_eq restwork t + (* TO DO should I always recursively close links modulo equations? *) + | NoLink -> restwork (Var x) + | _ -> internal_error "unexpected link in close_term_eq" + end + + | FunApp(f,l) -> + close_term_list_eq (fun l' -> + restwork (FunApp(f,l')); + match f.f_cat with + | Eq eqlist -> + List.iter (fun (lhd,rhs) -> + Terms.auto_cleanup (fun () -> + let (leq', req',_) = copy_red (lhd,rhs,[]) in + try + List.iter2 unify l' leq'; + restwork req' + with Unify -> () + ) + ) eqlist + | _ -> () + ) l + +and close_term_list_eq restwork = function + | [] -> restwork [] + | (a::l) -> + close_term_eq (fun a' -> + close_term_list_eq (fun l' -> + restwork (a'::l') + ) l + ) a + +let close_fact_eq restwork = function + Pred(p,l) -> + close_term_list_eq (fun l' -> restwork (Pred(p,l'))) l + | Out(t,l) -> + Parsing_helper.internal_error "Out facts should not appear in TermsEq.close_fact_eq" + (* restwork (Out(t,l)) + If Out facts were present, we might need to + apply equations to the "fact" part of Out facts; + the environment part is left unchanged + close_term_eq (fun t' -> + restwork (Out(t',l))) t *) + + +let rec close_fact_list_eq restwork = function + [] -> restwork [] + | (a::l) -> + close_fact_eq (fun a' -> + close_fact_list_eq (fun l' -> + restwork (a'::l')) l) a + +let close_rule_eq restwork (hyp,concl,hist,constra) = + close_fact_list_eq (fun hyp' -> + close_fact_eq (fun concl' -> + let tmp_bound = !current_bound_vars in + current_bound_vars := []; + let hyp'' = List.map copy_fact2 hyp' in + let concl'' = copy_fact2 concl' in + let histref = ref hist in + let rank = ref 0 in + List.iter2 (fun hyp1 hyp1' -> + if not (equal_facts hyp1 hyp1') then + histref := HEquation(!rank, copy_fact2 hyp1, copy_fact2 hyp1', !histref); + incr rank) hyp hyp'; + let r = (hyp'', concl'', + (if equal_facts concl concl' then + (!histref) + else + HEquation(-1, concl'', copy_fact2 concl, !histref)), + List.map copy_constra2 constra) in + cleanup(); + restwork r; + current_bound_vars := tmp_bound + ) concl) hyp + + +let close_term_eq restwork t = + if hasEquations() then close_term_eq restwork t else restwork t + +let close_term_list_eq restwork t = + if hasEquations() then close_term_list_eq restwork t else restwork t + +let close_fact_eq restwork t = + if hasEquations() then close_fact_eq restwork t else restwork t + +let close_fact_list_eq restwork t = + if hasEquations() then close_fact_list_eq restwork t else restwork t + +let close_rule_eq restwork t = + if hasEquations() then close_rule_eq restwork t else restwork t + + +(***** Close clauses by rewrite rules of constructors and destructors. ***** + Used for clauses that define predicates (for LetFilter). + + The variable accu_constra collects side-conditions of + destructors. *) + +let rec close_term_destr_eq accu_constra restwork = function + Var x -> + begin + match x.link with + TLink t -> + (* TO DO should I always recursively close links modulo equations? *) + close_term_eq (fun t' -> restwork accu_constra t') t + | NoLink -> restwork accu_constra (Var x) + | _ -> internal_error "unexpected link in close_term_destr_eq" + end + | FunApp(f,l) -> + close_term_destr_list_eq accu_constra (fun accu_constra' l' -> + let eqlist = Terms.red_rules_fun f in + + List.iter (fun red -> + Terms.auto_cleanup (fun () -> + let (leq', req', side_c') = copy_red red in + + try + List.iter2 unify l' leq'; + restwork (side_c' @ accu_constra') req' + with Unify -> () + ) + ) eqlist + ) l + +and close_term_destr_list_eq accu_constra restwork = function + [] -> restwork accu_constra [] + | (a::l) -> + close_term_destr_eq accu_constra (fun accu_constra' a' -> + close_term_destr_list_eq accu_constra' (fun accu_constra'' l' -> + restwork accu_constra'' (a'::l')) l) a + +let close_fact_destr_eq accu_constra restwork = function + Pred(p,l) -> + close_term_destr_list_eq accu_constra + (fun accu_constra' l' -> + Terms.auto_cleanup (fun () -> + try + (* Check that the arguments of the predicate do not fail, + by unifying them with a message variable (which cannot be fail) *) + List.iter (fun t -> unify t (Terms.new_var_def (Terms.get_term_type t))) l'; + restwork accu_constra' (Pred(p,l')) + with Unify -> () + ) + ) l + | Out(t,l) -> + Parsing_helper.internal_error "Out facts should not appear in TermsEq.close_fact_destr_eq" + +let rec close_fact_destr_list_eq accu_constra restwork = function + [] -> restwork accu_constra [] + | (a::l) -> + close_fact_destr_eq accu_constra (fun accu_constra' a' -> + close_fact_destr_list_eq accu_constra' (fun accu_constra'' l' -> + restwork accu_constra'' (a'::l')) l) a + +let close_constra1_destr_eq accu_constra restwork = function + Neq(t1,t2) -> + close_term_destr_eq accu_constra (fun accu_constra' t1' -> + close_term_destr_eq accu_constra' (fun accu_constra'' t2' -> + Terms.auto_cleanup (fun () -> + try + (* Check that the arguments of Neq do not fail, + by unifying them with a message variable (which cannot be fail) *) + unify t1' (Terms.new_var_def (Terms.get_term_type t1')); + unify t2' (Terms.new_var_def (Terms.get_term_type t2')); + restwork accu_constra'' (Neq(t1',t2')) + with Unify -> () + ) + ) t2) t1 + +let rec close_constra_destr_eq accu_constra restwork = function + [] -> restwork accu_constra [] + | (a::l) -> + close_constra1_destr_eq accu_constra (fun accu_constra' a' -> + close_constra_destr_eq accu_constra' (fun accu_constra'' l' -> + restwork accu_constra'' (a'::l') + ) l) a + +let rec close_constra_destr_list_eq accu_constra restwork = function + [] -> restwork accu_constra [] + | (a::l) -> + close_constra_destr_eq accu_constra (fun accu_constra' a' -> + close_constra_destr_list_eq accu_constra' (fun accu_constra'' l' -> + restwork accu_constra'' (a'::l') + ) l) a + +let close_rule_destr_eq restwork (hyp,concl,constra) = + close_fact_destr_list_eq [] (fun accu_constra hyp' -> + close_fact_destr_eq accu_constra (fun accu_constra' concl' -> + close_constra_destr_list_eq accu_constra' (fun accu_constra'' constra' -> + let tmp_bound = !current_bound_vars in + current_bound_vars := []; + let r = (List.map copy_fact2 hyp', copy_fact2 concl', + List.map copy_constra2 ((List.map (fun (t1,t2) -> [Neq(t1,t2)]) accu_constra'') @ constra')) in + cleanup(); + restwork r; + current_bound_vars := tmp_bound + ) constra) concl) hyp + +(********* Transform equations into rewrite rules *********) + +(* Copy an equation *) + +let copy_eq (leq, req) = + assert (!current_bound_vars == []); + let eq' = (copy_term2 leq, copy_term2 req) in + cleanup(); + eq' + +(* Swap sides of an equation *) + +let swap_eq (leq, req) = (req, leq) + +(* Complete the equations, to obtain all terms equal to one term + Store the result in the information associated with each constructor *) + +let rewrite_system = ref [] +let order = ref [] + +let rec normal_form = function + Var v -> Var v + | FunApp(f,l) -> + let t' = FunApp(f, List.map normal_form l) in + let rec find_red = function + [] -> t' + | ((leq,req)::redl) -> + try + if not (Terms.equal_types (Terms.get_term_type leq) (Terms.get_term_type t')) then + raise NoMatch; + Terms.match_terms leq t'; + let r = copy_term3 req in + Terms.cleanup(); + normal_form r + with NoMatch -> + Terms.cleanup(); + find_red redl + in + find_red (!rewrite_system) + +let rec joinable_critical_pairs build_context (leq1, req1) (leq2, req2) = + match leq2 with + Var v -> true + | FunApp(f,l) -> + ((not (Terms.equal_types (Terms.get_term_type leq1) (Terms.get_term_type leq2))) || + (try + Terms.unify leq1 leq2; + let req1' = copy_term2 (build_context req1) in + let req2' = copy_term2 req2 in + Terms.cleanup(); + let r = Terms.equal_terms (normal_form req1') (normal_form req2') in + (*if not r then + begin + print_string "Non-joinable critical pair:"; + display_eq (leq1,req1); + print_string " and "; + display_eq (leq2,req2); + print_string ". We should have "; + display_eq (req1',req2'); + print_string "\n" + end;*) + r + with Unify -> + Terms.cleanup(); + true + )) + && + ( + let seen = ref [] in + let to_see = ref l in + List.for_all (fun x -> + to_see := List.tl (!to_see); + let cur_seen = !seen in + let cur_to_see = !to_see in + let r = joinable_critical_pairs (fun y -> build_context ( + FunApp(f, List.rev_append cur_seen (y :: cur_to_see)))) + (leq1, req1) (x, req2) in + seen := x :: (!seen); + r) l + ) + + +let rec check_confluent new_rule = function + [] -> true +| (a::l) -> + (joinable_critical_pairs (fun x -> x) a new_rule) && + (joinable_critical_pairs (fun x -> x) new_rule a) && + (check_confluent new_rule l) + + +let eq_queue = Queue.new_queue() +let eq_base = ref [] +let eq_count = ref 0 + +let rec build_rules_eq leq req f get_rule = function + FunApp(f2,l) as t -> + if f2 == f then + begin + assert (!current_bound_vars == []); + try + unify t leq; + get_rule req + with Unify -> + cleanup() + end; + build_rules_eq_list leq req f (fun concl_list -> get_rule (FunApp(f2,concl_list))) l + | Var _ -> () + +and build_rules_eq_list leq req f get_rule = function + [] -> () + | (a::l) -> + build_rules_eq leq req f (fun concl -> get_rule (concl::l)) a; + build_rules_eq_list leq req f (fun concl_list -> get_rule (a::concl_list)) l + +let rec implies_eq (leq1, req1) (leq2, req2) = + assert (!current_bound_vars == []); + try + if not (Terms.equal_types (Terms.get_term_type leq1) (Terms.get_term_type leq2)) then + raise NoMatch; + Terms.match_terms leq1 leq2; + Terms.match_terms req1 req2; + cleanup(); + true + with NoMatch -> + cleanup(); + (* Try to match the equation inside a context *) + match leq2, req2 with + (FunApp(fl, ll), FunApp(fr, lr)) when fl == fr -> + List.exists2 (fun leq2 req2 -> + implies_eq (leq1, req1) (leq2, req2)) ll lr + | _ -> false + +let add_eq (leq, req) = + (* reduce to normal form *) + let leq = + match leq with + FunApp(f,l) -> FunApp(f, List.map normal_form l) + | _ -> leq in + let req = normal_form req in + let new_eq = (leq, req) in + (* check not a trivial equation *) + if equal_terms leq req then () else + (* check not x = y *) + match (leq, req) with + Var x, Var y when x != y -> + user_error "Error: The equational theory equates all terms.\nThis trivial case is not supported by the verifier.\n" + | _ -> + (* check not subsumed *) + let test_impl = fun eq -> implies_eq eq new_eq in + if (List.exists test_impl (!eq_base)) || + (Queue.exists eq_queue test_impl) then () else + begin + let test_impl = fun eq -> not(implies_eq new_eq eq) in + eq_base := List.filter test_impl (!eq_base); + Queue.filter eq_queue test_impl; + Queue.add eq_queue new_eq + end + +(* Combine leq2 -> req2 followed by leq1 -> req1 + when req2 unifies with C[leq1] *) + +let combine_eq_eq1 (leq1, req1) (leq2, req2) = + match leq1 with + Var _ -> () + | FunApp(f,_) -> + build_rules_eq leq1 req1 f (fun new_term -> + let eq3 = (copy_term2 leq2, copy_term2 new_term) in + cleanup(); + add_eq eq3) req2 + +(* Combine leq2 -> req2 followed by leq1 -> req1 + when leq1 unifies with C[req2] *) + +let combine_eq_eq2 (leq1, req1) (leq2, req2) = + match req2 with + Var _ -> () + | FunApp(f,_) -> + build_rules_eq req2 leq2 f (fun new_term -> + let eq3 = (copy_term2 new_term, copy_term2 req1) in + cleanup(); + add_eq eq3) leq1 + +(* Close the equational theory *) + +let rec complete_eq bothdir = + match Queue.get eq_queue with + None -> !eq_base + | Some eq -> + eq_base := eq :: (!eq_base); + let eq' = copy_eq eq in + List.iter (fun eq2 -> + combine_eq_eq1 eq' eq2; + combine_eq_eq1 eq2 eq'; + if bothdir then + begin + combine_eq_eq2 eq' eq2; + combine_eq_eq2 eq2 eq'; + if (!rewrite_system) != [] then (* Useful only for non-proved algo. *) + begin + let eqs' = swap_eq eq' in + let eqs2 = swap_eq eq2 in + (* Swap eq' *) + combine_eq_eq1 eqs' eq2; + combine_eq_eq1 eq2 eqs'; + combine_eq_eq2 eqs' eq2; + combine_eq_eq2 eq2 eqs'; + (* Swap eq2 *) + combine_eq_eq1 eq' eqs2; + combine_eq_eq1 eqs2 eq'; + combine_eq_eq2 eq' eqs2; + combine_eq_eq2 eqs2 eq'; + (* Swap eq' and eq2 *) + combine_eq_eq1 eqs' eqs2; + combine_eq_eq1 eqs2 eqs'; + combine_eq_eq2 eqs' eqs2; + combine_eq_eq2 eqs2 eqs'; + end (* End useful only for non-proved algo. *) + end) (!eq_base); + if !Param.verbose_rules then + begin + Display.Text.display_eq eq; + Display.Text.newline() + end + else + begin + incr eq_count; + if (!eq_count) mod 200 = 0 then + begin + print_string ((string_of_int (!eq_count)) ^ + " equations inserted. The rule base contains " ^ + (string_of_int (List.length (!eq_base))) ^ + " equations. " ^ + (string_of_int (Queue.length eq_queue)) ^ + " equations in the queue."); + Display.Text.newline() + end + end; + complete_eq bothdir + +(* Check subterm *) + +let rec check_subterm t1 t2 = + (equal_terms t1 t2) || (check_strict_subterm t1 t2) + +and check_strict_subterm t1 t2 = + match t1 with + FunApp(_,l) -> List.exists (fun t -> check_subterm t t2) l + | _ -> false + +(* Find the rewrite system S *) + +let add_rewrite ((leq, req) as r) = + (* check that all variables on the right-hand side also occur in the + left-hand side *) + let var_right = ref [] in + Terms.get_vars var_right req; + if List.for_all (fun v -> Terms.occurs_var v leq) (!var_right) then + begin + (* check that the resulting system is confluent *) + rewrite_system := r :: (!rewrite_system); + if not (check_confluent r (!rewrite_system)) then + begin + rewrite_system := List.tl (!rewrite_system); + false + end + else + true + end + else + false + +let rec check_no_path f f' = + (f != f') && + (List.for_all (fun (f2,f2') -> + if f == f2 then check_no_path f2' f' else true) (!order)) + + +let find_rewrite_system eq = + let (leq, req) = copy_eq eq in + if check_strict_subterm req leq then + ignore (add_rewrite (leq, req)) + else + match leq with + FunApp(f,l) -> + let rec find_fun_symb accu = function + Var _ -> accu + | FunApp(f2,l2) -> + let accu' = if List.memq f2 accu then accu else f2::accu in + List.fold_left find_fun_symb accu' l2 + in + let new_symbols = find_fun_symb [] req in + if List.for_all (fun f2 -> check_no_path f2 f) new_symbols then + if add_rewrite (leq, req) then + order := (List.map (fun f2 -> (f,f2)) new_symbols) @ (!order) + | Var _ -> () + + +(* Lexicographic path ordering *) + +let rec add_order = function + (FunApp(f1,l1), (FunApp(f2,l2) as t2)) when f1 == f2 -> + List.iter (fun t1 -> add_order (t1,t2)) l1; + List.iter2 (fun t1 t2 -> add_order (t1,t2)) l1 l2 + | (FunApp(f1,l1), t2) when occurs_f f1 t2 -> + (* + Useful for finding a good ordering for Delaune-ex3.prv, but then + the generation of the rewrite rules corresponding to the equations + does not terminate anyway, so it's not that useful. + begin + match t2 with + FunApp(f2,_) -> + if check_no_path f2 f1 then + order := (f1,f2) :: (!order) + | _ -> () + end; *) + List.iter (fun t1 -> add_order (t1,t2)) l1 + | (FunApp(f1,l1), t2) -> + let rec find_fun_symb accu = function + Var _ -> accu + | FunApp(f2,l2) -> + let accu' = if List.memq f2 accu then accu else f2::accu in + List.fold_left find_fun_symb accu' l2 + in + let new_symbols = find_fun_symb [] t2 in + if List.for_all (fun f2 -> check_no_path f2 f1) new_symbols then + order := (List.map (fun f2 -> (f1,f2)) new_symbols) @ (!order) + | _ -> () + +let rec greater_lpo t1 t2 = match (t1,t2) with + (Var v1, _) -> false +| (t1, Var v2) -> occurs_var v2 t1 +| (FunApp(f1,l1), FunApp(f2,l2)) -> + (List.exists (fun t1' -> greater_lpo t1' t2) l1) || + ((f1 != f2) && (not (check_no_path f1 f2)) && + (List.for_all (greater_lpo t1) l2)) || + ((f1 == f2) && (List.for_all (greater_lpo t1) l2) && + (greater_lpo_lex l1 l2)) + +and greater_lpo_lex l1 l2 = match (l1,l2) with + ([], []) -> false +| (t1::l1',t2::l2') -> + (greater_lpo t1 t2) || + ((equal_terms t1 t2) && (greater_lpo_lex l1' l2')) +| _ -> Parsing_helper.internal_error "Different length in greater_lpo_lex" + +(* Build block of equations disjoint from others *) + +let rec get_fun_symb flist = function + Var v -> () + | FunApp(f,l) -> + if not (List.mem f (!flist)) then flist := f :: (!flist); + List.iter (get_fun_symb flist) l + +let rec unionlist l1 = function + [] -> l1 + | (a::l) -> + if List.memq a l1 then + unionlist l1 l + else + a::(unionlist l1 l) + +let disjoint_list l1 l2 = + List.for_all (fun x1 -> not (List.memq x1 l2)) l1 + +let buildblocks eqlists = + (* Group the blocks of equations into two sets: + no_info_block: all equations with no specific information + other_blocks: the groups of equations with specific information *) + let no_info_block = ref [] in + let other_blocks = ref [] in + List.iter (fun (eqlist, eqinfo) -> + if eqinfo = EqNoInfo then + no_info_block := eqlist @ (!no_info_block) + else + let flist = ref [] in + List.iter (fun (eq1,eq2) -> + get_fun_symb flist eq1; + get_fun_symb flist eq2) eqlist; + other_blocks := (!flist, eqlist, eqinfo) :: (!other_blocks) + ) eqlists; + (* Split no_info_block into groups of equations with disjoint + function symbols *) + let blocks = ref [] in + List.iter (fun eq -> + let flist = ref [] in + get_fun_symb flist (fst eq); + get_fun_symb flist (snd eq); + let tmpblocks = !blocks in + let cur_block = ref ((!flist),[eq]) in + blocks := []; + List.iter (fun (bfunsymb, beq) -> + if List.exists (fun f1 -> List.memq f1 (!flist)) bfunsymb then + (* Block has common function symbol with cur_block + -> merge them *) + cur_block := (unionlist bfunsymb (fst (!cur_block)), + beq @ (snd (!cur_block))) + else + (* Block has no common function symbol with cur_block + -> leave it as it is *) + blocks := (bfunsymb, beq) :: (!blocks) + ) tmpblocks; + blocks := (!cur_block) :: (!blocks); + ) (!no_info_block); + (* Check that the other groups of equations (!other_blocks) + use pairwise disjoint sets of function symbols *) + List.iter (fun (f1,l1,_) -> + List.iter (fun (f2,l2) -> + if not (disjoint_list f1 f2) then + begin + print_string "Error: the following sets of equations"; + Display.Text.display_item_list Display.Text.display_eq l1; + print_string "and"; + Display.Text.display_item_list Display.Text.display_eq l2; + print_string "use common function symbols.\n"; + Parsing_helper.user_error "Error: Blocks of equations marked [convergent] or [linear] should use function symbols disjoint from equations not marked [convergent] or [linear].\n" + end + ) (!blocks) + ) (!other_blocks); + let rec check_disj = function + [] -> () + | (f1,l1,_)::l -> + List.iter (fun (f2,l2,_) -> + if not (disjoint_list f1 f2) then + begin + print_string "Error: the following sets of equations"; + Display.Text.display_item_list Display.Text.display_eq l1; + print_string "and"; + Display.Text.display_item_list Display.Text.display_eq l2; + print_string "use common function symbols.\n"; + Parsing_helper.user_error "Error: Blocks of equations marked [convergent] or [linear] should use function symbols disjoint from each other.\n" + end + ) l; + check_disj l + in + check_disj (!other_blocks); + (* Return the blocks of equations, with associated eqinfo *) + (List.map (fun (_,eqlist) -> (eqlist, EqNoInfo)) (!blocks)) + @ (List.map (fun (_,eqlist,eqinfo) -> (eqlist,eqinfo)) (!other_blocks)) + +(* Check block convergent *) + +exception Nontermination of equation +exception Nonconfluent of equation * equation + +let check_term block = + (* Check termination *) + List.iter (fun ((leq, req) as eq) -> if not (greater_lpo leq req) then + raise (Nontermination eq)) block + +let check_confluent block = + (* Check confluence *) + rewrite_system := block; + List.iter (fun r1 -> + let r1 = copy_eq r1 in + List.iter (fun r2 -> + if not (joinable_critical_pairs (fun x -> x) r1 r2) then + begin + rewrite_system := []; + raise (Nonconfluent(r1,r2)) + end) block + ) block; + rewrite_system := [] + +let check_convergent block = + check_term block; + check_confluent block + +(* Check block linear *) + +let rec is_linear_term vlist = function + Var v -> + if List.memq v (!vlist) then false else + begin + vlist := v :: (!vlist); + true + end + | FunApp(_,l) -> + List.for_all (is_linear_term vlist) l + +let is_linear block = + List.for_all (fun (leq, req) -> + (is_linear_term (ref []) leq) && (is_linear_term (ref []) req)) block + + +(* Transforms equations into "equational destructors" *) + +let record_eqs () = + if hasEquationsToRecord() then + begin + equationsToRecord := false; + + if !Param.eqtreatment = Param.ConvLin then + begin + (*print_string "Building order..."; + Display.Text.newline();*) + List.iter (fun (l, _) -> List.iter add_order l) (!equations_list); + (*print_string "Building blocks..."; + Display.Text.newline();*) + let blocks = buildblocks (!equations_list) in + (*print_string "Separating convergent/linear..."; + Display.Text.newline();*) + let convergent_part = ref [] in + let linear_part = ref [] in + List.iter (fun (block,eqinfo) -> + match eqinfo with + EqNoInfo -> + begin + try + check_convergent block; + convergent_part := block @ (!convergent_part) + with + (Nontermination _ | Nonconfluent _) as e -> + if is_linear block then + linear_part := block @ (!linear_part) + else + begin + print_string "Error: Cannot handle the following equations:"; + Display.Text.display_item_list Display.Text.display_eq block; + print_string "This block of equations is not linear and could not be proved convergent.\n"; + begin + match e with + Nontermination eq -> + print_string "(I could not prove that\n"; + Display.Text.display_eq eq; + print_string "\nis decreasing in a lexicographic path ordering.)\n" + | Nonconfluent(eq1,eq2) -> + print_string "(The system is not confluent because of a critical pair between\n"; + Display.Text.display_eq eq1; + print_string "\nand\n"; + Display.Text.display_eq eq2; + print_string ".)\n" + | _ -> Parsing_helper.internal_error "TermsEq: added to avoid warning for non-exhaustive pattern-matching" + end; + Parsing_helper.user_error "These equations cannot be handled.\n" + end + end + | EqLinear -> + if is_linear block then + linear_part := block @ (!linear_part) + else + begin + print_string "Error: Cannot handle the following equations:"; + Display.Text.display_item_list Display.Text.display_eq block; + print_string "This block of equations is declared linear but it is not.\n"; + Parsing_helper.user_error "These equations cannot be handled.\n" + end + | EqConvergent -> + begin + try + check_term block + with Nontermination _ -> + print_string "Warning: the following equations"; + Display.Text.display_item_list Display.Text.display_eq block; + print_string "are declared convergent. I could not prove termination.\n"; + print_string "I assume that they really terminate.\n"; + print_string "Expect problems (such as ProVerif going into a loop) if they do not!\n"; + flush stdout + end; + begin + try + check_confluent block + with Nonconfluent(eq1,eq2) -> + print_string "Error: Cannot handle the following equations:"; + Display.Text.display_item_list Display.Text.display_eq block; + print_string "This block of equations is declared convergent but it is not\n"; + print_string "confluent because of a critical pair between\n"; + Display.Text.display_eq eq1; + print_string "\nand\n"; + Display.Text.display_eq eq2; + print_string ".)\n"; + Parsing_helper.user_error "These equations cannot be handled.\n" + end; + convergent_part := block @ (!convergent_part) + ) blocks; + + if !Param.html_output then + begin + Display.Html.print_string "<H2>Linear part</H2>\n"; + Display.Html.print_string "Initial equations:"; + Display.Html.display_item_list Display.Html.display_eq (!linear_part) + end + else if !Param.verbose_eq then + begin + Display.Text.print_string "Linear part:"; + Display.Text.display_item_list Display.Text.display_eq (!linear_part) + end; + List.iter (fun eq -> + add_eq eq; + add_eq (swap_eq eq)) (!linear_part); + print_string "Completing equations..."; + Display.Text.newline(); + let resulting_equations_linear = complete_eq true in + eq_base := []; + if !Param.html_output then + begin + Display.Html.print_string "Completed equations:"; + Display.Html.display_item_list Display.Html.display_eq resulting_equations_linear + end + else if !Param.verbose_eq then + begin + Display.Text.print_string "Completed equations:"; + Display.Text.display_item_list Display.Text.display_eq resulting_equations_linear + end; + + if !Param.html_output then + begin + Display.Html.print_string "<H2>Convergent part</H2>\n"; + Display.Html.print_string "Initial equations:"; + Display.Html.display_item_list Display.Html.display_eq (!convergent_part) + end + else if !Param.verbose_eq then + begin + Display.Text.print_string "Convergent part:"; + Display.Text.display_item_list Display.Text.display_eq (!convergent_part) + end; + rewrite_system := !convergent_part; + List.iter add_eq (!convergent_part); + print_string "Completing equations..."; + Display.Text.newline(); + let resulting_equations_convergent = complete_eq false in + if !Param.html_output then + begin + Display.Html.print_string "Completed equations:"; + Display.Html.display_item_list Display.Html.display_eq resulting_equations_convergent + end + else if !Param.verbose_eq then + begin + Display.Text.print_string "Completed equations:"; + Display.Text.display_item_list Display.Text.display_eq resulting_equations_convergent + end; + + let resulting_equations = resulting_equations_linear @ resulting_equations_convergent in + (* record the equations in each constructor *) + List.iter (function + (FunApp(f, l), req) as eq -> + begin + let var_list_rhs = ref [] in + Terms.get_vars var_list_rhs req; + if not (List.for_all (fun v -> List.exists (Terms.occurs_var v) l) (!var_list_rhs)) then + begin + print_string "Error in equation: "; + Display.Text.display_eq eq; + print_newline(); + Parsing_helper.user_error "All variables of the right-hand side of an equation\nshould also occur in the left-hand side.\n" + end; + + match f.f_cat with + Eq leq -> f.f_cat <- Eq ((l, req) :: leq) + | _ -> user_error "Does not support equations on non-constructors\n" + end + | _ -> ()) resulting_equations + + end + else + begin + (* Old, non-proved treatment of equations. + Kept just in case it is useful... + Just ignore the convergent/linear information. *) + let eq_list = ref [] in + List.iter (fun (eqlist,_) -> + eq_list := eqlist @ (!eq_list)) (!equations_list); + List.iter find_rewrite_system (!eq_list); + if !Param.verbose_eq then + begin + print_string "Rewriting system:"; + Display.Text.display_item_list Display.Text.display_eq (!rewrite_system) + end; + + List.iter (fun eq -> add_eq eq; + add_eq (swap_eq eq)) (!eq_list); + print_string "Completing equations..."; + Display.Text.newline(); + let resulting_equations = complete_eq true in + (* record the equations in each constructor *) + if !Param.verbose_eq then + begin + print_string "Completed equations:"; + Display.Text.display_item_list Display.Text.display_eq resulting_equations + end; + List.iter (function + (FunApp(f, l), req) as eq -> + begin + let var_list_rhs = ref [] in + Terms.get_vars var_list_rhs req; + if not (List.for_all (fun v -> List.exists (Terms.occurs_var v) l) (!var_list_rhs)) then + begin + print_string "Equation: "; + Display.Text.display_eq eq; + print_newline(); + Parsing_helper.user_error "Error: All variables of the right-hand side of an equation\nshould also occur in the left-hand side.\n" + end; + + match f.f_cat with + Eq leq -> f.f_cat <- Eq ((l, req) :: leq) + | _ -> user_error "Does not support equations on non-constructors\n" + end + | _ -> ()) resulting_equations + + end + end + + +(****** Unification modulo the equational theory ******) + +(* Equivalent of copy_term, but replaces function symbols with + syntactic ones *) + +let syntactic_table = Hashtbl.create 7 + +let get_syntactic f = + try + Hashtbl.find syntactic_table f + with Not_found -> + let f' = { f_name = (* "sy_" ^ *) f.f_name; + f_type = f.f_type; + f_cat = Syntactic f; + f_initial_cat = Syntactic f; + f_private = f.f_private; + f_options = f.f_options } in + Hashtbl.add syntactic_table f f'; + f' + +let rec put_syntactic = function + | FunApp(f,l) -> FunApp(get_syntactic f, List.map put_syntactic l) + | Var v -> + match v.link with + | NoLink -> + let r = + { vname = v.vname; + sname = v.sname; + unfailing = v.unfailing; + btype = v.btype; + link = NoLink } + in + link v (VLink r); + Var r + | VLink l -> Var l + | _ -> internal_error "Unexpected link in put_syntactic" + +(* Equivalent of copy_term2, but replaces syntactic function symbols + with their non-syntactic equivalents *) + +let rec copy_remove_syntactic = function + | FunApp(f,l) -> FunApp(non_syntactic f, List.map copy_remove_syntactic l) + | Var v -> + match v.link with + NoLink -> + let r = copy_var v in + link v (VLink r); + Var r + | TLink l -> copy_remove_syntactic l + | VLink r -> Var r + | _ -> internal_error "unexpected link in copy_remove_syntactic" + +let copy_remove_syntactic_pair = fun (v,t) -> (v, copy_remove_syntactic t) + +let copy_remove_syntactic_fact = function + Pred(chann, t) -> Pred(chann, List.map copy_remove_syntactic t) + | Out(t,l) -> Out(copy_remove_syntactic t, List.map copy_remove_syntactic_pair l) + +let rec copy_remove_syntactic_constra c = List.map (function + Neq(t1,t2) -> Neq(copy_remove_syntactic t1, copy_remove_syntactic t2)) c + +(* Remove syntactic function symbols without copying *) + +let rec remove_syntactic_term = function + | FunApp(f,l) -> FunApp(non_syntactic f, List.map remove_syntactic_term l) + | Var v -> match v.link with + NoLink -> Var v + | TLink l -> remove_syntactic_term l + | _ -> internal_error "unexpected link in remove_syntactic_term" + +let remove_syntactic_pair = fun (v,t) -> (v, remove_syntactic_term t) + +let remove_syntactic_fact = function + Pred(chann, t) -> Pred(chann, List.map remove_syntactic_term t) + | Out(t,l) -> Out(remove_syntactic_term t, List.map remove_syntactic_pair l) + +let rec remove_syntactic_constra c = List.map (function + Neq(t1,t2) -> Neq(remove_syntactic_term t1, remove_syntactic_term t2) + ) c + +(* Collect variables that are not defined yet *) + +let rec collect_unset_vars accu = function + FunApp(f,l) -> List.iter (collect_unset_vars accu) l + | Var v -> + match v.link with + NoLink -> + if not (List.memq v (!accu)) then + accu := v :: (!accu) + | TLink t -> collect_unset_vars accu t + | _ -> internal_error "unexpected link in collect_unset_vars" + +(* Unification modulo itself *) + +let f_has_no_eq f = + match f.f_cat with + Eq [] -> true + | Eq _ -> false + | _ -> true + +exception NoBacktrack of binder list ref + +let rec close_term_eq_synt restwork = function + | (Var x) as t -> + begin + match x.link with + | TLink t -> close_term_eq_synt restwork t + | NoLink -> restwork t + | _ -> internal_error "unexpected link in close_term_eq_synt" + end + | (FunApp(f,l) as t) when f_has_no_eq f -> + (* Distinguishing this case explicitly helps avoiding a + stack overflow: the stack does not grow in this case + because we make a tail call. *) + restwork t + | (FunApp(f,l) as t) -> + try + auto_cleanup (fun () -> restwork t) + with Unify -> + match f.f_cat with + | Eq eqlist -> + let rec reweqlist = function + | (leq, req) :: lrew -> + let leq', req' = auto_cleanup (fun () -> + List.map put_syntactic leq, + put_syntactic req) + in + begin + try + auto_cleanup (fun () -> + unify_modulo_list (fun () -> restwork req') l leq') + with Unify -> + (* Try another rewriting when Unify is raised *) + reweqlist lrew + end + | [] -> raise Unify + in + reweqlist eqlist + | _ -> Parsing_helper.internal_error "close_term_eq_synt: cases other than Eq should have been treated before" + +and unify_modulo restwork t1 t2 = + close_term_eq_synt (fun t1 -> + close_term_eq_synt (fun t2 -> + match (t1,t2) with + | (Var v, Var v') when v == v' -> restwork () + | (Var v, _) -> + begin + match v.link with + | NoLink -> + begin + match t2 with + | Var {link = TLink t2'} -> unify_modulo restwork t1 t2' + | Var v' when v.unfailing -> + link v (TLink t2); + restwork () + | Var v' when v'.unfailing -> + link v' (TLink t1); + restwork () + | FunApp (f_symb,_) when (non_syntactic f_symb).f_cat = Failure && v.unfailing = false -> raise Unify + | _ -> + occur_check v t2; + link v (TLink t2); + restwork () + end + | TLink t1' -> unify_modulo restwork t1' t2 + | _ -> internal_error "Unexpected link in unify 1" + end + | (FunApp(f,_), Var v) -> + begin + match v.link with + | NoLink -> + if v.unfailing = false && (non_syntactic f).f_cat = Failure + then raise Unify + else + begin + occur_check v t1; + link v (TLink t1); + restwork () + end + | TLink t2' -> unify_modulo restwork t1 t2' + | _ -> internal_error "Unexpected link in unify 2" + end + | (FunApp(f1, l1), FunApp(f2,l2)) -> + if (non_syntactic f1) != (non_syntactic f2) then raise Unify; + unify_modulo_list restwork l1 l2 + ) t2 + ) t1 + +and unify_modulo_list_internal restwork l1 l2 = + match (l1, l2) with + | [], [] -> restwork () + | (a1::l1'), (a2::l2') -> + begin + let unset_vars = ref [] in + collect_unset_vars unset_vars a1; + collect_unset_vars unset_vars a2; + try + unify_modulo (fun () -> + if not (List.exists (fun v -> v.link != NoLink) (!unset_vars)) then + (* No variable of a1, a2 defined by unification modulo. + In this case, we do not need to backtrack on the choices made + in unify_modulo (...) a1 a2 when a subsequent unification fails. *) + raise (NoBacktrack unset_vars) + else + unify_modulo_list_internal restwork l1' l2' + ) a1 a2; + with NoBacktrack unset_vars' when unset_vars == unset_vars' -> + unify_modulo_list_internal restwork l1' l2' + end + | _ -> internal_error "Lists should have same length in unify_modulo_list" + +(* Optimized version of unification modulo: try to decompose + the root symbols as much as possible when they do not use an + equational theory. *) + +and unify_modulo_list restwork l1 l2 = + let unif_to_do_left = ref [] in + let unif_to_do_right = ref [] in + let rec add_unif_term t1 t2 = + match t1, t2 with + FunApp(f1, l1), FunApp(f2,l2) when f_has_no_eq f1 && f_has_no_eq f2 -> + if (non_syntactic f1) != (non_syntactic f2) then raise Unify; + List.iter2 add_unif_term l1 l2 + | Var v, Var v' when v == v' -> () + | (Var v, _) -> + begin + match v.link with + | NoLink -> + begin + match t2 with + | Var {link = TLink t2'} -> add_unif_term t1 t2' + | Var v' when v.unfailing -> + link v (TLink t2) + | Var v' when v'.unfailing -> + link v' (TLink t1) + | FunApp (f_symb,_) when (non_syntactic f_symb).f_cat = Failure && v.unfailing = false -> raise Unify + | _ -> + try + occur_check v t2; + link v (TLink t2) + with Unify -> + (* When the occur check fails, it might succeed + after rewriting the terms, so try that *) + unif_to_do_left := t1 :: (!unif_to_do_left); + unif_to_do_right := t2 :: (!unif_to_do_right) + end + | TLink t1' -> add_unif_term t1' t2 + | _ -> internal_error "Unexpected link in unify_modulo_list (optimized) 1" + end + | (FunApp(f,_), Var v) -> + begin + match v.link with + | NoLink -> + if v.unfailing = false && (non_syntactic f).f_cat = Failure + then raise Unify + else + begin + try + occur_check v t1; + link v (TLink t1) + with Unify -> + (* When the occur check fails, it might succeed + after rewriting the terms, so try that *) + unif_to_do_left := t1 :: (!unif_to_do_left); + unif_to_do_right := t2 :: (!unif_to_do_right) + end + | TLink t2' -> add_unif_term t1 t2' + | _ -> internal_error "Unexpected link in unify_modulo_list (optimized) 2" + end + | _ -> + unif_to_do_left := t1 :: (!unif_to_do_left); + unif_to_do_right := t2 :: (!unif_to_do_right) + in + auto_cleanup (fun () -> + List.iter2 add_unif_term l1 l2; + unify_modulo_list_internal restwork (!unif_to_do_left) (!unif_to_do_right)) + +let unify_modulo restwork t1 t2 = + unify_modulo_list restwork [t1] [t2] + +(* Unification of environments, modulo an equational theory *) + +let rec get_list l1 l2 = + match (l1,l2) with + | [],[] -> [] + | ((v1,t1)::l1'),((v2,t2)::l2') -> + let l' = get_list l1' l2' in + (* Unification of environments ignores variables that do not match. + When needed, the result of the unification should be an + environment that contains only the common variables *) + if v1 == v2 then t1 :: l' else l' + | _ -> internal_error "Lists should have same length in get_list" + +let unify_modulo_env restwork l1 l2 = + let len1 = List.length l1 in + let len2 = List.length l2 in + if len2 < len1 then + begin + let l1 = Terms.skip (len1-len2) l1 in + unify_modulo_list restwork (get_list l1 l2) (get_list l2 l1) + end + else + begin + let l2 = Terms.skip (len2-len1) l2 in + unify_modulo_list restwork (get_list l1 l2) (get_list l2 l1) + end + +(************** Treatment of inequality constraints ************) + +(* Implication between constraints. Use this after simplification + to get the best possible precision. *) + +let assoc_gen_with_term = ref [] + +let rec implies_list_terms nextf l_t1 l_t2 = match (l_t1,l_t2) with + | [], [] -> nextf () + | ((FunApp(f1,[]))::l1, t2::l2) when f1.f_cat = General_var -> + begin + try + let t = List.assq f1 (!assoc_gen_with_term) in + if not (equal_terms t t2) then raise NoMatch; + + implies_list_terms nextf l1 l2 + + with Not_found -> + assoc_gen_with_term := (f1, t2) :: (!assoc_gen_with_term); + try + let r = implies_list_terms nextf l1 l2 in + assoc_gen_with_term := List.tl (!assoc_gen_with_term); + r + with NoMatch -> + assoc_gen_with_term := List.tl (!assoc_gen_with_term); + raise NoMatch + end + + | ((Var v1)::l1), ((Var v2)::l2) when v1 == v2 -> + implies_list_terms nextf l1 l2 + | ((FunApp (f1,l1'))::l1, (FunApp (f2,l2'))::l2) -> + if f1 != f2 then raise NoMatch; + implies_list_terms nextf (l1' @ l1) (l2' @ l2) + | _,_ -> raise NoMatch + +let implies_simple_constraint nextf (Neq(t1,t1')) (Neq(t2, t2')) = + implies_list_terms nextf [t1;t1'] [t2;t2'] + +let rec search_for_implied_constraint_in nextf sc1 = function + [] -> raise NoMatch + | (sc2::sc_l2) -> + try + implies_simple_constraint nextf sc1 sc2 + with NoMatch -> + search_for_implied_constraint_in nextf sc1 sc_l2 + +let implies_constraint sc_list1 sc_list2 = + let rec sub_implies_constraint sc_list1 sc_list2 () = + match sc_list1 with + | [] -> () + | sc1::sc_l1 -> search_for_implied_constraint_in (sub_implies_constraint sc_l1 sc_list2) sc1 sc_list2 + in + try + sub_implies_constraint sc_list1 sc_list2 (); + true + with NoMatch -> + false + +(* Simplification of constraints *) + +(* Remark: for the way the subsumption test is implemented, + it is important that all variables that occur in constraints + also occur in the rest of the rule. + Indeed, only the variables that occur in the rest of the rule + are bound during the subsumption test. Other variables + are always considered to be different, yielding the non-detection + of subsumption + + When there is no universally quantified variable and no equational + theory, we can simply remove all inequalities that contain variables + not in the rest of the rule. + However, "for all x, x <> y" is wrong even when y does not + occur elsewhere. Similarly, "x <> decrypt(encrypt(x,y),y)" is wrong + with the equation "decrypt(encrypt(x,y),y) = x". + In this case, we can replace these variables with _new_ + constants. + In the long run, the best solution might be to consider + inequalities as an ordinary blocking predicate (and to remove + constraints completely). + *) + +exception TrueConstraint +exception FalseConstraint + +let any_val_counter = ref 0 + +(** [elim_var_if_possible has_gen_var keep_vars v] checks if [v] occurs + in the list of variables [keep_vars]. If not then it adds a [Tlink] + into [v] with an "any_val" symbol, so that [v] will be replaced + with "any_val". *) +let elim_var_if_possible has_gen_var keep_vars v = + if not (List.memq v keep_vars) then + begin + if (not has_gen_var) && (not (hasEquations())) + then raise TrueConstraint + else + begin + match v.link with + | NoLink -> + incr any_val_counter; + Terms.link v (TLink (FunApp( + { f_name = "any_val" ^ (string_of_int (!any_val_counter)); + f_type = [], v.btype; + f_cat = Eq []; (* Should not be a name to avoid bad interaction with any_name_fsymb *) + f_initial_cat = Eq []; (* Should not be a name to avoid bad interaction with any_name_fsymb *) + f_private = true; + f_options = 0 }, []))) + | TLink _ -> () + | _ -> Parsing_helper.internal_error "unexpected link in elim_var_if_possible" + end + end + +let rec check_vars_occurs has_gen_var keep_vars = function + | FunApp(_,l) -> List.iter (check_vars_occurs has_gen_var keep_vars) l + | Var v -> elim_var_if_possible has_gen_var keep_vars v + +let rec has_gen_var = function + Var v -> false + | FunApp(f,[]) when f.f_cat = General_var -> true + | FunApp(_,l) -> List.exists has_gen_var l + +(** [elim_var_notelsewhere] expect contraints with variable on the left part + of the disequation *) +let elim_var_notelsewhere has_gen_var keep_vars = function + | (Neq(Var v1, Var v2)) -> + assert(v1 != v2); + elim_var_if_possible has_gen_var keep_vars v1; + elim_var_if_possible has_gen_var keep_vars v2 + (* constraints Neq(x,t), where x does not appear in the keep_vars and t is not a variable, are true + Note that, if t was a universally quantified variable, it would have been removed by swap. + *) + | (Neq(Var v, t)) -> + elim_var_if_possible false keep_vars v; + check_vars_occurs has_gen_var keep_vars t + | c -> + Display.Text.display_constra [c]; + Parsing_helper.internal_error "unexpected constraint in simplify_simple_constraint: t <> t', t not variable" + +(********************************************************* + functions for formula simplification. This section + include the functions : + - unify_disequation + - elim_universal_variable +**********************************************************) + +(** Unify_disequations *) + +let rev_assoc2 keep_vars assoc_gen_var v = + match rev_assoc v (!assoc_gen_var) with + Var _ -> + if List.mem v keep_vars then + Var v + else + let v' = new_gen_var v.btype false in + assoc_gen_var := (v', v) :: (!assoc_gen_var); + FunApp(v', []) + | x -> x + + +(** [make_disequation_from_unify] create the list of simple constraint + corresponding to $\bigvee_j x_j \neq \sigma_k x_j$*) +let rec make_disequation_from_unify keep_vars assoc_gen_with_var = function + | [] -> [] + | (var::l) -> + let l' = make_disequation_from_unify keep_vars assoc_gen_with_var l in + match var.link with + | NoLink -> l' + | TLink _ -> + (Neq(rev_assoc2 keep_vars assoc_gen_with_var var, follow_link (rev_assoc2 keep_vars assoc_gen_with_var) (Var var))) :: l' + | _ -> internal_error "unexpected link in make_disequation_from_unify" + +let rec close_disequation_eq restwork = function + | [] -> restwork () + | Neq(t1,t2)::l -> + begin + try + unify_modulo (fun () -> + close_disequation_eq restwork l; + raise Unify) t1 t2 + (* In fact, always terminates by raising Unify; never returns; cleanup() *) + with + Unify -> cleanup () + end + +let unify_disequation nextf accu constra = + let assoc_gen_with_var = ref [] in (* Association list general var * var *) + + assert (!Terms.current_bound_vars == []); + + (* Get all classic variables *) + + let keep_vars = ref [] in + List.iter (get_vars_constra keep_vars) constra; + + (* all general variable in [constra] are replaced by classic variables *) + let constra' = List.map (function + | Neq(t1,t2) -> Neq(replace_f_var assoc_gen_with_var t1, replace_f_var assoc_gen_with_var t2) + ) constra + in + let var_list = ref [] in + List.iter (get_vars_constra var_list) constra'; + + close_disequation_eq (fun () -> + try + let new_disequation = make_disequation_from_unify !keep_vars assoc_gen_with_var !var_list in + cleanup (); + accu := (nextf new_disequation) :: (!accu) + with + TrueConstraint -> cleanup () + ) constra'; + + assert (!Terms.current_bound_vars == []) + +(** Elim_universal_variables *) + +(** This function must be applied after [unify_disequation]. Indeed we assume that for + any v \neq t in [constra], v only occur once in [constra].*) +let elim_universal_variable constra = + + let rec look_for_general_var constra_done = function + | [] -> List.rev constra_done + | Neq(FunApp(f,[]),_)::q when f.f_cat = General_mayfail_var -> + look_for_general_var constra_done q + | Neq(v1, FunApp(f,[]))::q when f.f_cat = General_mayfail_var -> + let rep = function + | Neq(x, t) -> Neq(x, replace_name f v1 t) + in + + let constra_done' = List.map rep constra_done + and q' = List.map rep q in + + look_for_general_var constra_done' q' + | Neq(Var v,_)::q when v.unfailing -> + Parsing_helper.internal_error "May-fail variables forbidden in inequalities (1)" + | Neq(_, Var v)::q when v.unfailing -> + Parsing_helper.internal_error "May-fail variables forbidden in inequalities (2)" + (* Given the previous cases, at this point, in Neq(t,t'), t and t' cannot + fail: they cannot be General_mayfail_vars nor may-fail variables, + and they cannot be the constant fail, because the unification of + fail with the cases that remain (General_var, variable) fails. *) + | Neq(FunApp(f,[]),_)::q when f.f_cat = General_var -> + look_for_general_var constra_done q + | Neq(Var(v) as v1,FunApp(f,[]))::q when f.f_cat = General_var -> + let rep = function + | Neq(x, t) -> Neq(x, replace_name f v1 t) + in + + let constra_done' = List.map rep constra_done + and q' = List.map rep q in + + look_for_general_var constra_done' q' + | t::q -> look_for_general_var (t::constra_done) q + in + look_for_general_var [] constra + +(*** Combining the simplification ***) + +let feed_new_constra keep_vars accu constra = +(* TO DO do not keep "syntactic" terms after unification modulo? + let constra = remove_syntactic_constra constra in *) + try + let constra_has_gen_var = List.exists (function + | Neq(x,t) -> has_gen_var t) constra in + List.iter (elim_var_notelsewhere constra_has_gen_var keep_vars) constra; + let constrasimp = copy_constra3 constra in + Terms.cleanup(); + if constrasimp = [] then + raise FalseConstraint + else if List.exists (fun a'' -> implies_constraint a'' constrasimp) (!accu) then + () + else + accu := constrasimp :: (List.filter (fun a'' -> not (implies_constraint constrasimp a'')) (!accu)) + with TrueConstraint -> + Terms.cleanup() + + +(* Check that the current constraints are still satisfiable. + Raise Unify when they are not. Returns the simplified constraints + when they are. + + In the next function, Terms.auto_cleanup is useful because + links may be stored in Terms.current_bound_vars when the function is called; + these links must remain. *) + +let check_constraint_list constra_list = + Terms.auto_cleanup (fun _ -> + let constra_list_1 = List.map Terms.copy_constra2 constra_list in + Terms.cleanup(); + let accu = ref [] in + List.iter (unify_disequation elim_universal_variable accu) constra_list_1; + List.iter (function [] -> raise Terms.Unify |_ -> ()) !accu; + !accu + ) + +(* [simplify_constra_list_keepvars keep_vars constralist] + simplifies the constraints [constralist] knowing that + variables in [keep_vars] occur elsewhere, so they should be preserved. + Raises FalseConstraint when the constraints are not satisfiable. + + In the next function, Terms.auto_cleanup is useful for two reasons: + - links may be stored in Terms.current_bound_vars when the function is called; + these links must remain. + - during the function, exception FalseConstraint may be raised, with some + links created during the function remaining; these links must be deleted + before the function returns. *) + +let simplify_constra_list_keepvars keep_vars constralist = + Terms.auto_cleanup (fun () -> + let accu = ref [] in + List.iter (unify_disequation elim_universal_variable accu) constralist; + let accu' = ref [] in + List.iter (feed_new_constra keep_vars accu') (!accu); + !accu' + ) + +(* [simplify_constra_list rule constralist] + simplifies the constraints [constralist] knowing that + they occur in a clause containing the facts in the list [rule]. + Raises FalseConstraint when the constraints are not satisfiable. *) + +let get_vars_facts l = + let vars = ref [] in + List.iter (Terms.get_vars_fact vars) l; + !vars + +let simplify_constra_list rule constralist = + simplify_constra_list_keepvars (get_vars_facts rule) constralist + +(* Implication between constraints + +1/ copy the constraints to instantiate variables according to + the substitution computed by matching conclusion and hypotheses. + This uses copy_constra3 + +2/ simplify the obtained constraint, by simplify_constra_list + +3/ test the implication, by implies_constra + raise NoMatch if it fails + +Notice that variables may not be cleaned up when this function is called. +*) + +let implies_constra_list_keepvars keep_vars formula1 formula2 () = + (* Apply the previous calculated substitution on [formula2] *) + let formula2' = List.map copy_constra3 formula2 in + (* We are assuming in this function that formula1 is already simplified + so only formula2' need to be simplified *) + try + let formula2'' = simplify_constra_list_keepvars keep_vars formula2' in + if not + (List.for_all (fun c2elem -> + List.exists (fun c1elem -> implies_constraint c1elem c2elem) formula1 + ) formula2'') then raise NoMatch + with FalseConstraint -> + raise NoMatch + +let implies_constra_list rule formula1 formula2 () = + implies_constra_list_keepvars (get_vars_facts rule) formula1 formula2 () + + +(***** Close destructor rewrite rules under equations ******) + + +(* Subsumption between rewrite rules with side conditions *) + +let implies_rew (leq1, req1, side_c1) (leq2, req2, side_c2) = + assert (!current_bound_vars == []); + try + List.iter2 Terms.match_terms leq1 leq2; + Terms.match_terms req1 req2; + (* test side_c2 => \sigma side_c1 + where \sigma is obtained by the above matching.*) + let vars = ref [] in + List.iter (Terms.get_vars vars) leq2; + Terms.get_vars vars req2; + implies_constra_list_keepvars (!vars) side_c2 side_c1 (); + Terms.cleanup(); + true + with NoMatch -> + Terms.cleanup(); + false + +(* Convert from Neq form to pair form *) + +let neq_to_pair = function + [Neq(t1,t2)] -> (t1,t2) + | l -> + let l1 = List.map (fun (Neq(t,_)) -> t) l in + let l2 = List.map (fun (Neq(_,t)) -> t) l in + let tuple_fun = Terms.get_tuple_fun (List.map Terms.get_term_type l1) in + (FunApp(tuple_fun, l1), FunApp(tuple_fun, l2)) + +(* Closure of destructors itself *) + +let close_destr_eq f l = + let results = ref [] in + + List.iter (fun (leq, req,side_c) -> + close_term_list_eq (function + | [] -> internal_error "should not be empty" + | (req'::leq') -> + let curr_bound_vars = !current_bound_vars in + current_bound_vars := []; + + let (leq1,req1, side_c1) = + (List.map copy_term2 leq', copy_term2 req', + List.map (fun (t1,t2) -> [Neq(copy_term2 t1, copy_term2 t2)]) side_c) + in + cleanup(); + + (* Simplify the obtained constraints *) + begin + try + let vars = ref [] in + List.iter (Terms.get_vars vars) leq1; + Terms.get_vars vars req1; + let side_c1' = simplify_constra_list_keepvars (!vars) side_c1 in + let rew1 = (leq1, req1, side_c1') in + + (* Eliminate redundant rewrite rules *) + if List.exists (fun rew2 -> + implies_rew rew2 rew1) (!results) then () + else + results := rew1 :: (List.filter (fun rew2 -> + not(implies_rew rew1 rew2)) (!results)); + with FalseConstraint -> () + end; + current_bound_vars := curr_bound_vars + ) (req::leq) + ) l; + + (* Convert back from the Neq form to the pair form *) + List.map (fun (leq, req, side_c) -> + let var_list_rhs = ref [] in + Terms.get_vars var_list_rhs req; + List.iter (List.iter (Terms.get_vars_constra var_list_rhs)) side_c; + if not (List.for_all (fun v -> List.exists (Terms.occurs_var v) leq) (!var_list_rhs)) then + begin + print_string ("Error in the definition of destructor " ^ f.f_name ^ " after taking into account equations:\nIncorrect rewrite rule: "); + Display.Text.display_red f [leq, req, List.map neq_to_pair side_c]; + Parsing_helper.user_error "All variables of the right-hand side of a rewrite rule\nshould also occur in the left-hand side.\n" + end; + + (leq, req, List.map neq_to_pair side_c) + ) !results + +(* Record equations, also updating rewrite rules of destructors *) + +let record_eqs_with_destr () = + if !Param.html_output then + Display.LangHtml.openfile ((!Param.html_dir) ^ "/eq.html") "ProVerif: equations and destructors"; + + if hasEquationsToRecord() then + begin + if !Param.html_output then + begin + Display.Html.print_string "<H1>Equations</H1>\n" + end; + record_eqs() + end; + + if !Param.html_output then + Display.Html.print_string "<H1>Completed destructors</H2>\n" + else if !Param.verbose_destr then + Display.Text.print_line "Completed destructors:"; + + Hashtbl.iter (fun _ f -> + match f.f_cat with + | Red red_rules -> + let red_rules' = close_destr_eq f red_rules in + if !Param.html_output then + (Display.Html.display_red f red_rules';Display.Html.print_string "<br>") + else if !Param.verbose_destr then + (Display.Text.display_red f red_rules';Display.Text.print_string "\n"); + f.f_cat <- Red red_rules' + | _ -> () + ) Param.fun_decls; + + if !Param.html_output then + begin + Display.LangHtml.close(); + Display.Html.print_string "<A HREF=\"eq.html\">Equations & Destructors</A><br>\n" + end + +(********* Simplifies a term using the equations ********) + +exception Reduces + +let simp_eq t = + if not (!Param.simpeq_remove) then + normal_form t + else + let rec find_red_term = function + Var v -> () + | (FunApp(f,l)) as t -> + List.iter find_red_term l; + let rec find_red = function + [] -> () + | ((leq,req)::redl) -> + try + if not (Terms.equal_types (Terms.get_term_type leq) (Terms.get_term_type t)) then + raise NoMatch; + Terms.match_terms leq t; + (*let r = copy_term3 req in*) + Terms.cleanup(); + raise Reduces + with NoMatch -> + Terms.cleanup(); + find_red redl + in + find_red (!rewrite_system) + in + find_red_term t; + t + +(* +let simp_eq t = + print_string "Simplifying "; + Display.Text.display_term t; + print_string " into "; + let r = simp_eq t in + Display.Text.display_term r; + Display.Text.newline(); + r +*) diff --git a/preinstallTTool/linux/proverif/src/termsEq.mli b/preinstallTTool/linux/proverif/src/termsEq.mli new file mode 100644 index 0000000000000000000000000000000000000000..8f9872384bd8bd96ec3c23c67f26097e4eacdeb6 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/termsEq.mli @@ -0,0 +1,115 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* This module contains basic functions to manipulate terms modulo + an equational theory *) + +open Types + +(* Register equations *) +val register_equation : eq_info -> (term * term) list -> unit + +(* returns true when at least one equation has been registered since last + call to record_eqs *) +val hasEquationsToRecord : unit -> bool + +(* returns true when at least one equation has been registered *) +val hasEquations : unit -> bool + +(* Transforms equations into rewrite rules on constructors + When !Param.html_output is set, an HTML file must be open to receive + the display. *) +val record_eqs : unit -> unit + + +(* Close clauses modulo the equational theory * + close_rule_eq is used for clauses entered by the user in Horn-clause + front-ends, + close_fact_eq is used for closing the goals *) +val close_term_eq : (term -> unit) -> term -> unit +val close_term_list_eq : (term list -> unit) -> term list -> unit +val close_fact_eq : (fact -> unit) -> fact -> unit +val close_fact_list_eq : (fact list -> unit) -> fact list -> unit +val close_rule_eq : (reduction -> unit) -> reduction -> unit + +(* Close terms by rewrite rules of constructors and destructors. *) +val close_term_destr_eq : (term * term) list -> ((term * term) list -> term -> unit) -> term -> unit + +(* Close clauses by rewrite rules of constructors and destructors. * + Used for clauses that define predicates (for LetFilter). *) +val close_rule_destr_eq : (fact list * fact * constraints list list -> unit) -> fact list * fact * constraints list list -> unit + +(* [f_has_no_eq f] returns [true] when the function symbol [f] + has no equation. *) +val f_has_no_eq : funsymb -> bool + +(* Unification modulo the equational theory *) +val unify_modulo : (unit -> 'a) -> term -> term -> 'a +val unify_modulo_list : (unit -> 'a) -> term list -> term list -> 'a +val unify_modulo_env : (unit -> 'a) -> (binder * term) list -> (binder * term) list -> 'a + +val copy_remove_syntactic : term -> term +val copy_remove_syntactic_fact : fact -> fact +val copy_remove_syntactic_constra : constraints list -> constraints list +val remove_syntactic_term : term -> term +val remove_syntactic_fact : fact -> fact +val remove_syntactic_constra : constraints list -> constraints list + +(* Treatment of inequatity constraints *) + +(* [check_constraint_list constra] checks that the constraints [constra] + are still satisfiable. It raises Unify when they are not. + It returns the simplified constraints when they are. *) +val check_constraint_list : constraints list list -> constraints list list + +(* [simplify_constra_list rule constralist] + simplifies the constraints [constralist] knowing that + they occur in a clause containing the facts in the list [rule]. + Raises FalseConstraint when the constraints are not satisfiable. *) +exception FalseConstraint +val simplify_constra_list : fact list -> constraints list list -> constraints list list + +(* [implies_constra_list rule formula1 formula2 ()] + checks that the inequalities in [formula1] imply those in [formula2]. + It returns unit when the check succeeds and raises NoMatch when it fails. + [formula2] is supposed to contain links that come from a previous matching. + [rule] is a list of facts of the clause that contains [formula1]. + (The argument [rule] is used to know which variables should be preserved in + the simplification of the instance of [formula2], which after substitution + uses variables of the clause [rule, formula1].) *) + +val implies_constra_list : fact list -> constraints list list -> constraints list list -> unit -> unit + +(* Transforms equations into rewrite rules on constructors, also closing + the rewrite rules of destructors modulo equations. + When !Param.html_output is set, an HTML file must be open to receive + the display. *) +val record_eqs_with_destr : unit -> unit + +(* Simplifies a term using the equations *) +exception Reduces +val simp_eq : term -> term diff --git a/preinstallTTool/linux/proverif/src/termslinks.cmi b/preinstallTTool/linux/proverif/src/termslinks.cmi new file mode 100644 index 0000000000000000000000000000000000000000..5ef09a1a2c1892302faea433da84fea1708019f1 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/termslinks.cmi differ diff --git a/preinstallTTool/linux/proverif/src/termslinks.cmx b/preinstallTTool/linux/proverif/src/termslinks.cmx new file mode 100644 index 0000000000000000000000000000000000000000..544294a5f98c331702a9fed9441ac2f804fd2d3d Binary files /dev/null and b/preinstallTTool/linux/proverif/src/termslinks.cmx differ diff --git a/preinstallTTool/linux/proverif/src/termslinks.ml b/preinstallTTool/linux/proverif/src/termslinks.ml new file mode 100644 index 0000000000000000000000000000000000000000..8e1084b244b5b1ff20e1710707ec35215489ded0 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/termslinks.ml @@ -0,0 +1,141 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Terms + +(* Equality *) + +let rec equal_terms_with_links t1 t2 = (t1 == t2) || (match (t1,t2) with + Var { link = TLink t }, t' -> equal_terms_with_links t t' +| Var { link = VLink v }, t' -> equal_terms_with_links (Var v) t' +| t, Var { link = TLink t' } -> equal_terms_with_links t t' +| t, Var { link = VLink v' } -> equal_terms_with_links t (Var v') +| Var v, Var v' -> v == v' +| FunApp(f,l),FunApp(f',l') -> + (f == f') && (List.for_all2 equal_terms_with_links l l') +| _,_ -> false) + +let equal_facts_with_links f f' = (f == f') || (match (f,f') with + Pred(p,l), Pred(p',l') -> (p == p') && (List.for_all2 equal_terms_with_links l l') +| Out(t,l),Out(t',l') -> + (equal_terms_with_links t t') && + (List.for_all2 (fun (v,t) (v',t') -> (v == v') && (equal_terms_with_links t t')) l l') +| _,_ -> false) + +let rec equal_closed_terms t1 t2 = match (t1,t2) with + Var v, t' -> + begin + match v.link with + TLink t -> equal_closed_terms t t' + | _ -> Parsing_helper.internal_error "unexpected link in equal_closed_terms (reduction.ml)" + end +| t, Var v' -> + begin + match v'.link with + TLink t' -> equal_closed_terms t t' + | _ -> Parsing_helper.internal_error "unexpected link in equal_closed_terms (reduction.ml)" + end +| FunApp(f,l),FunApp(f',l') -> + (f == f') && (List.for_all2 equal_closed_terms l l') + + +let equal_tags t1 t2 = + match (t1,t2) with + ProcessRule(h1, tl1), ProcessRule(h2,tl2) -> + (List.length h1 == List.length h2) && (List.for_all2 (=) h1 h2) && + (List.length tl1 == List.length tl2) && + (List.for_all2 equal_terms_with_links tl1 tl2) + | Apply(f1,p1), Apply(f2,p2) -> (f1 == f2) && (p1 == p2) + | TestApply(f1,p1), TestApply(f2,p2) -> (f1 == f2) && (p1 == p2) + | TestEq p1, TestEq p2 -> p1 == p2 + | Rl(p1,p1'), Rl(p2,p2') -> p1 == p2 && p1' == p2' + | Rs(p1,p1'), Rs(p2,p2') -> p1 == p2 && p1' == p2' + | Ri(p1,p1'), Ri(p2,p2') -> p1 == p2 && p1' == p2' + | Ro(p1,p1'), Ro(p2,p2') -> p1 == p2 && p1' == p2' + | TestComm(p1,p1'), TestComm(p2,p2') -> p1 == p2 && p1' == p2' + | InputSecr p1, InputSecr p2 -> p1 == p2 + | OutputSecr p1, OutputSecr p2 -> p1 == p2 + | Elem(pl1,p1), Elem(pl2,p2) -> + (List.length pl1 == List.length pl2) && + (List.for_all2 (==) pl1 pl2) && + (p1 == p2) + | LblEquiv, LblEquiv -> true + | LblClause, LblClause -> true + | LblEq, LblEq -> true + | WeakSecr, WeakSecr -> true + | Rn p1, Rn p2 -> p1 == p2 + | Init, Init -> true + | PhaseChange, PhaseChange -> true + | TblPhaseChange, TblPhaseChange -> true + | LblComp, LblComp -> true + | LblNone, LblNone -> true + | TestUnif, TestUnif -> true + | _ -> false + +let equal_constra1 c1 c2 = + match c1,c2 with + | Neq(t1,t1'),Neq(t2,t2') -> + (equal_terms_with_links t1 t2) && + (equal_terms_with_links t1' t2') + +let equal_constraint c1 c2 = + (List.length c1 == List.length c2) && + (List.for_all2 equal_constra1 c1 c2) + +let equal_constra c1 c2 = + (List.length c1 == List.length c2) && + (List.for_all2 equal_constraint c1 c2) + +(* Matching *) + +let rec match_terms t1 t2 = + if not (Param.get_ignore_types()) then + if (get_term_type t1 != get_term_type t2) then + assert false; + match (t1,t2) with + (Var { link = TLink t1' }, _) -> match_terms t1' t2 + | (_, Var { link = TLink t2' }) -> match_terms t1 t2' + | (_, Var _) -> Parsing_helper.internal_error "Bad link in match_terms (1)" + | (Var v), t -> + begin + match v.link with + NoLink -> + if v.unfailing + then link v (TLink t) + else + begin + match t with + | FunApp(f_symb,_) when f_symb.f_cat = Failure -> raise Unify + | _ -> link v (TLink t) + end + | _ -> Parsing_helper.internal_error "Bad link in match_terms (2)" + end + | (FunApp (f1,l1')), (FunApp (f2,l2')) -> + if f1 != f2 then raise Unify; + List.iter2 match_terms l1' l2' + diff --git a/preinstallTTool/linux/proverif/src/termslinks.mli b/preinstallTTool/linux/proverif/src/termslinks.mli new file mode 100644 index 0000000000000000000000000000000000000000..85f61650ae8892b1495e93adb29233f3ae0f86b5 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/termslinks.mli @@ -0,0 +1,36 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val equal_terms_with_links : Types.term -> Types.term -> bool +val equal_facts_with_links : Types.fact -> Types.fact -> bool + +val equal_closed_terms : Types.term -> Types.term -> bool + +val equal_tags : Types.label -> Types.label -> bool +val equal_constra : Types.constraints list list -> Types.constraints list list -> bool + +val match_terms : Types.term -> Types.term -> unit diff --git a/preinstallTTool/linux/proverif/src/tsyntax.cmi b/preinstallTTool/linux/proverif/src/tsyntax.cmi new file mode 100644 index 0000000000000000000000000000000000000000..2850cddb401af40544ac492399d30d1c9bca783a Binary files /dev/null and b/preinstallTTool/linux/proverif/src/tsyntax.cmi differ diff --git a/preinstallTTool/linux/proverif/src/tsyntax.cmx b/preinstallTTool/linux/proverif/src/tsyntax.cmx new file mode 100644 index 0000000000000000000000000000000000000000..fb3889fa04903255e700ca2bcd567e11c1411982 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/tsyntax.cmx differ diff --git a/preinstallTTool/linux/proverif/src/tsyntax.ml b/preinstallTTool/linux/proverif/src/tsyntax.ml new file mode 100644 index 0000000000000000000000000000000000000000..709f03d833b6c9579e076b2d0c7500e6b46d7bf4 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/tsyntax.ml @@ -0,0 +1,524 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) + +open Ptree +open Parsing_helper +open Types + + +(* Parse a file *) + +let parse filename = + try + let ic = open_in filename in + let lexbuf = Lexing.from_channel ic in + lexbuf.Lexing.lex_curr_p <- { lexbuf.Lexing.lex_curr_p with + Lexing.pos_fname = filename }; + let ptree = + try + Parser.tall Lexer.token lexbuf + with Parsing.Parse_error -> + input_error "Syntax error" (extent lexbuf) + in + close_in ic; + ptree + with Sys_error s -> + user_error ("File error: " ^ s ^ "\n") + +(** Types **) + +let get_type_polym polym (s, ext) = + if s = "any_type" then + if polym then + Param.any_type + else + input_error "polymorphic type not allowed here" ext + else + try + List.find (fun t -> t.tname = s) (!Param.all_types) + with Not_found -> + input_error ("type " ^ s ^ " not declared") ext + +let get_type (s, ext) = get_type_polym false (s,ext) + +let check_type_decl (s, ext) = + if s = "any_type" then + input_error "type any_type reserved for polymorphism" ext; + if List.exists (fun t -> t.tname = s) (!Param.all_types) then + input_error ("type " ^ s ^ " already declared") ext; + Param.all_types := { tname = s } :: (!Param.all_types) + +(** Names **) + +let name_env = Hashtbl.create 7 + +let get_name (s,ext) tl = + try + let r = Hashtbl.find name_env s in + if fst r.f_type == Param.tmp_type then + r.f_type <- tl, snd r.f_type + else if not (Terms.eq_lists tl (fst r.f_type)) then + input_error ("name " ^ s ^ " expects arguments of type " ^ + (Terms.tl_to_string ", " (fst r.f_type)) ^ + " but is given arguments of type " ^ + (Terms.tl_to_string ", " tl)) ext; + r + with Not_found -> + input_error ("name " ^ s ^ " not declared") ext + +let check_name_decl (s,ext) ty = + let t = get_type ty in + try + ignore (Hashtbl.find name_env s); + input_error ("name " ^ s ^ " already declared") ext + with Not_found -> + try + ignore(Hashtbl.find Param.fun_decls s); + input_error ("name " ^ s ^ " already defined as a function") ext + with Not_found -> + let r = Terms.create_name s (Param.tmp_type, t) true in + Hashtbl.add name_env s r + +(* Functions *) + +let fun_decls = Param.fun_decls + +let get_fun (s,ext) tl = + try + let r = Hashtbl.find fun_decls s in + if not (Terms.eq_lists (fst r.f_type) tl) then + input_error ("function " ^ s ^ " expects arguments of type " ^ + (Terms.tl_to_string ", " (fst r.f_type)) ^ + " but is given arguments of type " ^ + (Terms.tl_to_string ", " tl)) ext; + r + with Not_found -> + input_error ("function " ^ s ^ " not defined") ext + +let check_fun_decl (name, ext) argtypes restype options = + let tyarg = List.map get_type argtypes in + let tyres = get_type restype in + try + ignore(Hashtbl.find fun_decls name); + input_error ("function " ^ name ^ " already defined") ext + with Not_found -> + try + ignore(Hashtbl.find name_env name); + input_error ("function " ^ name ^ " already defined as a name") ext + with Not_found -> + let is_tuple = ref false in + let opt = ref 0 in + List.iter (function + ("data",_) -> is_tuple := true + | ("typeConverter",_) -> + if List.length tyarg != 1 then + input_error "only unary functions can be declared \"typeConverter\"" ext; + is_tuple := true; + opt := (!opt) lor Param.fun_TYPECONVERTER + | (_,ext) -> + input_error "for functions, the only allowed options are data and typeConverter" ext) options; + let cat = if !is_tuple then Tuple else Eq [] in + Hashtbl.add fun_decls name { f_name = name; + f_type = tyarg, tyres; + f_private = false; + f_options = !opt; + f_cat = cat; + f_initial_cat = cat } + +(** Variables **) + +let get_var env (s, ext) = + try + Hashtbl.find env s + with Not_found -> + input_error ("variable " ^ s ^ " not declared") ext + +let get_ident_any env (s,ext) = + try + let r = Hashtbl.find fun_decls s in + if (List.length (fst r.f_type) != 0) then + input_error ("function " ^ s ^ " is used without argument. It expects " ^ + (string_of_int (List.length (fst r.f_type))) ^ " arguments") ext; + FunApp (r, []) + with Not_found -> + Var (get_var env (s,ext)) + +let rec gen_env env = function + [] -> env + | ((s,ext),ty)::l -> + let t = get_type ty in + try + ignore(Hashtbl.find fun_decls s); + input_error ("variable " ^ s ^ " already defined as a function") ext + with Not_found -> + try + ignore(Hashtbl.find name_env s); + input_error ("variable " ^ s ^ " already defined as a name") ext + with Not_found -> + try + ignore(Hashtbl.find env s); + input_error ("variable " ^ s ^ " already defined") ext + with Not_found -> + let v = Terms.new_var s t in + Hashtbl.add env s v; + gen_env env l + +let create_env l = gen_env (Hashtbl.create 7) l + +(* Equations *) + +let rec check_eq_term varenv = function + (PIdent i) -> + let t = get_ident_any varenv i in + (t, Terms.get_term_type t) + | (PFunApp (f, tlist)) -> + let (tl, tyl) = List.split (List.map (check_eq_term varenv) tlist) in + let f' = get_fun f tyl in + if (f'.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) then + match tl with + [t] -> (t, snd f'.f_type) + | _ -> internal_error "type converter functions should always be unary" + else + (FunApp(f', tl), snd f'.f_type) + | (PName ((_,ext),_)) -> input_error "No names in equations" ext + | (PTuple l) -> + let (tl, tyl) = List.split (List.map (check_eq_term varenv) l) in + (FunApp(Terms.get_tuple_fun tyl, tl), Param.bitstring_type) + +let check_equation l eqinfo = + let l' = List.map (fun (env, t1, t2) -> + let var_env = create_env env in + let (t1', ty1) = check_eq_term var_env t1 in + let (t2', ty2) = check_eq_term var_env t2 in + if ty1 != ty2 then + begin + (* TO DO locate this error message *) + user_error "The two members of an equation should have the same type.\n" + end; + (t1', t2')) l + in + let eqinfo' = match eqinfo with + [] -> EqNoInfo + | ["convergent",ext] -> EqConvergent + | ["linear",ext] -> EqLinear + | (_,ext)::_ -> Parsing_helper.input_error "for equations, the only allowed options are either convergent or linear" ext + in + TermsEq.register_equation eqinfo' l' + + +let rule_counter = ref 0 +let rules = ref [] + +(* Predicates *) + +let pred_env = Param.pred_env + +let add_new_name p = + incr rule_counter; + let t = List.hd p.p_type in + let v1 = Terms.new_var_def Param.sid_type in + let new_name = FunApp(Terms.new_name_fun t, [v1]) in + let f = Pred(p, List.map (fun _ -> new_name) p.p_type) in + rules := ([], f, Rule(!rule_counter, Rn p, [], f, []), []) :: (!rules) + +let rec interpret_info ty r = function + ("memberOptim", ext) -> + if List.length ty != 2 then + input_error "memberOptim makes sense only for predicates of arity 2" ext; + r.p_prop <- r.p_prop lor Param.pred_ELEM + | ("elimVar", ext) -> + begin + match ty with + [] -> input_error "elimVar does not make sense for predicates without arguments" ext + | (t1::tr) -> + if not (List.for_all (fun t -> t == t1) tr) then + input_error "elimVar does not make sense for predicates that have arguments of different types" ext + end; + add_new_name r; + r.p_prop <- r.p_prop lor Param.pred_ANY + | ("elimVarStrict", ext) -> + begin + match ty with + [] -> input_error "elimVarStrict does not make sense for predicates without arguments" ext + | (t1::tr) -> + if not (List.for_all (fun t -> t == t1) tr) then + input_error "elimVarStrict does not make sense for predicates that have arguments of different types" ext + end; + add_new_name r; + r.p_prop <- r.p_prop lor Param.pred_ANY_STRICT + | ("decompData",ext) -> + if List.exists (fun t -> t != Param.any_type) ty then + input_error "decompData makes sense only for predicates that are polymorphic in all their arguments" ext; + r.p_prop <- r.p_prop lor Param.pred_TUPLE + | ("decompDataSelect",ext) -> + if List.exists (fun t -> t != Param.any_type) ty then + input_error "decompDataSelect makes sense only for predicates that are polymorphic in all their arguments" ext; + r.p_prop <- r.p_prop lor Param.pred_TUPLE lor Param.pred_TUPLE_SELECT + | ("block",_) -> r.p_prop <- r.p_prop lor Param.pred_BLOCKING + | (s,ext) -> input_error ("unknown predicate qualifier " ^ s) ext + +let check_pred (c,ext) tl info = + let tyl = List.map (get_type_polym true) tl in + if Hashtbl.mem pred_env c then + input_error ("predicate " ^ c ^ " already declared") ext + else + let r = { p_name = c; + p_type = tyl; + p_prop = 0; + p_info = [] } in + List.iter (interpret_info tyl r) info; + if List.exists (fun t -> t == Param.any_type) tyl then + r.p_info <- [PolymPred(c, r.p_prop, tyl)]; + Hashtbl.add pred_env c r + +let get_pred (c,ext) tl = + try + let r = Hashtbl.find pred_env c in + if not ((List.length r.p_type == List.length tl) && (List.for_all2 (fun t1 t2 -> t1 == t2 || t1 == Param.any_type) r.p_type tl)) then + input_error ("predicate " ^ c ^ " expects arguments of type " ^ + (Terms.tl_to_string ", " r.p_type) ^ + " but is given arguments of type " ^ + (Terms.tl_to_string ", " tl)) ext; + if List.exists (fun t -> t == Param.any_type) r.p_type then + Param.get_pred (PolymPred(r.p_name, r.p_prop, tl)) + else + r + with Not_found -> + input_error ("predicate " ^ c ^ " not declared") ext + + +let rec check_term env = function + (PIdent i) -> + let t = get_ident_any env i in + (t, Terms.get_term_type t) + | (PFunApp(f,l)) -> + let (tl, tyl) = List.split (List.map (check_term env) l) in + let f' = get_fun f tyl in + if (f'.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) then + match tl with + [t] -> (t, snd f'.f_type) + | _ -> internal_error "type converter functions should always be unary" + else + (FunApp(f', tl), snd f'.f_type) + | (PTuple l) -> + let (tl, tyl) = List.split (List.map (check_term env) l) in + (FunApp(Terms.get_tuple_fun tyl, tl), Param.bitstring_type) + | (PName(n,l)) -> + let (tl, tyl) = List.split (List.map (check_term env) l) in + let n' = get_name n tyl in + (FunApp(n', tl), snd n'.f_type) + +let check_cterm env (p,t) = + let (tl, tyl) = List.split (List.map (check_term env) t) in + (get_pred p tyl, tl) + +let format_get_ident_any env (s,ext) = + try + let r = Hashtbl.find fun_decls s in + if (List.length (fst r.f_type) != 0) then + input_error ("function " ^ s ^ " is used without argument. It expects " ^ + (string_of_int (List.length (fst r.f_type))) ^ " arguments") ext; + FFunApp (r, []) + with Not_found -> + FVar (get_var env (s,ext)) + +let rec check_format env = function + (PFIdent i) -> + let t = format_get_ident_any env i in + (t, Terms.get_format_type t) + | (PFFunApp(f,l)) -> + let (tl, tyl) = List.split (List.map (check_format env) l) in + let f' = get_fun f tyl in + if (f'.f_options land Param.fun_TYPECONVERTER != 0) && (Param.get_ignore_types()) then + match tl with + [t] -> (t, snd f'.f_type) + | _ -> internal_error "type converter functions should always be unary" + else + (FFunApp(f', tl), snd f'.f_type) + | (PFTuple l) -> + let (tl, tyl) = List.split (List.map (check_format env) l) in + (FFunApp(Terms.get_tuple_fun tyl, tl), Param.bitstring_type) + | (PFName(n,l)) -> + let (tl, tyl) = List.split (List.map (check_format env) l) in + let n' = get_name n tyl in + (FFunApp(n', tl), snd n'.f_type) + | PFAny i -> + let v = get_var env i in + (FAny v, v.btype) + + +let check_cformat_fact env (p,t) = + let (tl, tyl) = List.split (List.map (check_format env) t) in + (get_pred p tyl, tl) + +let rec check_one_hyp (hyp_accu,constra_accu) env (fact, ext) = + match fact with + | PSNeq(t1,t2) -> + let (t1',ty1) = check_term env t1 in + let (t2',ty2) = check_term env t2 in + if ty1 != ty2 then + input_error "the two arguments of an inequality should have the same type" ext; + (hyp_accu, [Neq(t1',t2')] :: constra_accu) + | PSimpleFact(p,l) -> + let (p',l') = check_cterm env (p,l) in + (Pred(p',l')::hyp_accu, constra_accu) + +let check_simple_fact env (fact, ext) = + match fact with + | PSNeq(t1,t2) -> input_error "<> constraint not allowed here" ext + | PSimpleFact(p,l) -> + let (p',l') = check_cterm env (p,l) in + Pred(p',l') + +let rec check_red = function + [] -> () + | (env, Clause(i,c))::l -> + begin + check_red l; + try + let env = create_env env in + incr rule_counter; + let (hyp, constra) = List.fold_right (fun onehyp accu -> check_one_hyp accu env onehyp) i ([],[]) in + let concl = check_simple_fact env c in + let constra = TermsEq.simplify_constra_list (concl :: hyp) constra in + rules := (hyp, concl, + Rule(!rule_counter, LblNone, hyp, concl, constra), constra) :: (!rules) + + with TermsEq.FalseConstraint -> () + end + | (env, Equiv(i,c,select))::l -> + check_red l; + let env = create_env env in + let hyp = List.map (check_simple_fact env) i in + let concl = check_simple_fact env c in + let requiv = + incr rule_counter; + (hyp, concl, Rule(!rule_counter, LblEquiv, hyp, concl, []), []) + in + Rules.add_equiv (hyp, concl, !rule_counter); + if not select then Terms.add_unsel concl; + rules := (List.map (fun h -> + incr rule_counter; + ([concl], h, Rule(!rule_counter, LblEquiv, [concl], h, []), [])) hyp) + @ (requiv :: (!rules)) + + +let gen_data_clauses () = + let output_rule_hist h = + match History.get_rule_hist h with + (Rule(_, t, hyp, concl, constra)) -> + incr rule_counter; + rules := (hyp, concl, Rule(!rule_counter, t, hyp, concl, constra), constra) :: (!rules) + | _ -> Parsing_helper.internal_error "unexpected result in output_rule_hist" + in + + let gen_fun pred f = + output_rule_hist (RApplyFunc(f, pred)); + for n = 0 to (List.length (fst f.f_type))-1 do + output_rule_hist (RApplyProj(f,n, pred)) + done + in + + let tuples_rules p = + Hashtbl.iter (fun _ f -> + match f.f_cat with + Tuple -> if (f.f_options land Param.fun_TYPECONVERTER == 0) || + (not (Param.get_ignore_types())) then gen_fun p f + | _ -> ()) fun_decls; + Hashtbl.iter (fun _ f -> gen_fun p f) Terms.tuple_table + in + + Hashtbl.iter (fun _ p -> + if (p.p_prop land Param.pred_TUPLE != 0) then + begin + if match p.p_info with + [PolymPred (_,_,tl)] -> List.for_all (fun t -> t == Param.any_type) tl + | _ -> false + then + tuples_rules p + else + Parsing_helper.internal_error "In the typed front-end, only polymorphic predicates can be declated data" + end + ) pred_env + +let query_facts = ref ([] : fact list) + +let rec check_all = function + (TTypeDecl(i))::l -> check_type_decl i; check_all l + | (TNameDecl(n,t))::l -> check_name_decl n t; check_all l + | (TFunDecl(f,argt,rest,i))::l -> check_fun_decl f argt rest i; check_all l + | (TConstDecl(f,rest,i))::l -> check_fun_decl f [] rest i; check_all l + | (TEquation(leq,eqinfo))::l -> check_equation leq eqinfo; check_all l + | (TQuery(env,fact)) :: l -> + let env = create_env env in + query_facts := (check_simple_fact env fact) :: (!query_facts); + check_all l + | (TNoUnif (env,fact,n)) :: l -> + let env = create_env env in + Selfun.add_no_unif (check_cformat_fact env fact) (-n); + check_all l + | (TNot (env,fact)) :: l -> + let env = create_env env in + Rules.add_not (check_simple_fact env fact); + check_all l + | (TElimtrue (env,fact)) :: l -> + let env = create_env env in + let f = check_simple_fact env fact in + incr rule_counter; + rules := ([], f, Rule(!rule_counter, LblNone, [], f, []), []) :: (!rules); + Rules.add_elimtrue (!rule_counter, f); + check_all l + | (TPredDecl (p, argt, info)) :: l -> + check_pred p argt info; + check_all l + | [TReduc r] -> + check_red r; + gen_data_clauses(); + !rules + | _ -> internal_error "The first reduc part is not the last element of the file" + +let parse_file s = + let decl = parse s in + (* ignoreTypes must be set before doing the rest of the work + Setting all parameters beforehand does not hurt. *) + List.iter (function + TSet((p,ext),v) -> + begin + match (p,v) with + "ignoreTypes", S (("true" | "yes"), _) -> Param.set_ignore_types true + | "ignoreTypes", S (("false" | "no"), _) -> Param.set_ignore_types false + | "ignoreTypes", _ -> + Parsing_helper.input_error ("Unexpected value for parameter " ^ p ^ "=" ^ + (match v with S (s,_) -> s | I n -> string_of_int n)) ext + | _,_ -> Param.common_parameters p ext v + end + | _ -> ()) decl; + Param.default_set_ignore_types(); + check_all (List.filter (function + TSet _ -> false + | _ -> true) decl) diff --git a/preinstallTTool/linux/proverif/src/tsyntax.mli b/preinstallTTool/linux/proverif/src/tsyntax.mli new file mode 100644 index 0000000000000000000000000000000000000000..e20f5309f313ef481b2a81d29f5aed1d780bae34 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/tsyntax.mli @@ -0,0 +1,32 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types + +val parse_file : string -> reduction list + +val query_facts : fact list ref diff --git a/preinstallTTool/linux/proverif/src/types.cmi b/preinstallTTool/linux/proverif/src/types.cmi new file mode 100644 index 0000000000000000000000000000000000000000..675d9cd461f2446cebdef7fac91daa6939b3aff0 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/types.cmi differ diff --git a/preinstallTTool/linux/proverif/src/types.mli b/preinstallTTool/linux/proverif/src/types.mli new file mode 100644 index 0000000000000000000000000000000000000000..027775fb24f363667daa53ac9fc67160aa96dba5 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/types.mli @@ -0,0 +1,298 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +(* Types module declares types of the abstract syntax + tree and of sets of messages. + There are recursive dependencies between these types, + that is why they are included in the same module +*) + +open Stringmap + +type occurrence = int + +(* Types *) + +type typet = { tname : string } + +(* Information for predicates. The integer argument corresponds + to the phase of the predicate *) +type info = + Attacker of int * typet + | Mess of int * typet + | InputP of int + | OutputP of int + | AttackerBin of int * typet + | MessBin of int * typet + | InputPBin of int + | OutputPBin of int + | AttackerGuess of typet + | Compromise of typet + | Equal of typet + | Table of int + | TableBin of int + | TestUnifP of typet + | PolymPred of string * int(*value of p_prop*) * typet list + +type predicate = { p_name: string; + p_type: typet list; + mutable p_prop: int; + mutable p_info: info list } + +type when_include = + Always + | IfQueryNeedsIt + +type eq_info = + EqNoInfo + | EqConvergent + | EqLinear + +type binder = { sname : string; + vname : int; + unfailing : bool; + btype : typet; + mutable link : linktype } + +(* Processes: patterns *) + +and pattern = + PatVar of binder + | PatTuple of funsymb * pattern list + | PatEqual of term + +(* Processes themselves *) + +and linktype = + NoLink + | VLink of binder + | TLink of term + | TLink2 of term (* used only in reduction.ml *) + | FLink of format (* used only in syntax.ml *) + | PGLink of (unit -> term) (* used only in pisyntax.ml and pitsyntax.ml *) + +(* Meaning of arguments of names *) + +and arg_meaning = + MUnknown + | MSid of int (* The argument represents a session identifier *) + | MCompSid + | MAttSid + | MVar of binder * string option + (* The argument represents a variable. + The string option is [Some x] when the argument can be + designated by the string [x] in "new a[x = ....]" *) + +and name_info = { mutable prev_inputs : term option; + mutable prev_inputs_meaning : arg_meaning list } + +and funcats = + Red of rewrite_rules + | Eq of (term list * term) list + | Tuple + | Name of name_info + | SpecVar of binder + | Syntactic of funsymb + | General_var + | General_mayfail_var + | Choice + | Failure + +and rewrite_rule = term list * term * (term * term) list + +and rewrite_rules = rewrite_rule list + +and funsymb = { + f_name : string; + mutable f_type : typet list * typet; (* type of the arguments, type of the result *) + mutable f_cat : funcats; + f_initial_cat : funcats; (* Used to memorize f_cat before closing using the + equational theory. The initial f_cat is used in reduction.ml, + and also in check_several_types *) + f_private : bool; (* true when the function cannot be applied by the adversary *) + f_options : int + } + +and term = + Var of binder + | FunApp of funsymb * term list + +(* Format, to represent facts with jokers *) + +and format = + FVar of binder + | FFunApp of funsymb * format list + | FAny of binder + +type fact_format = predicate * format list + +type fact = + Pred of predicate * term list + | Out of term * (binder * term) list + +(* Environment elements; environments are needed for terms in queries + that cannot be expanded before process translation, see link PGTLink + below *) + +type envElement = + EFun of funsymb + | EVar of binder + | EName of funsymb + | EPred of predicate + | EEvent of funsymb + | EType of typet + | ETable of funsymb + | ELetFun of (term list -> (term -> process) -> process) * (typet list) * typet + +(* Each restriction "new" is annotated with + - optionally, the identifiers given between brackets after the "new", + which serve to determine the arguments in the internal representation + of the name + - the current environment at the restriction, which serves to determine + which variables to use in queries of the form "new a[x = ...]" *) + +and new_args = binder list option * envElement StringMap.t + +(* Processes *) + +and process = + Nil + | Par of process * process + | Repl of process * occurrence + | Restr of funsymb * new_args * process * occurrence + | Test of term * process * process * occurrence + | Input of term * pattern * process * occurrence + | Output of term * term * process * occurrence + | Let of pattern * term * process * process * occurrence + | LetFilter of binder list * fact * process * process * occurrence + | Event of term * process * occurrence + | Insert of term * process * occurrence + | Get of pattern * term * process * process * occurrence + | Phase of int * process * occurrence + +(* The following constraints are simple constraints. + A list of simple constraints is a constraint, and represents the OR + of the simple constraints. + A list of constraints represents the AND of the simple constraints. + TRUE can be represented by the list of constraints []. + FALSE can be represented by any list of constraints that contains [], + but these representations of FALSE are not used in the program: + a false constraint leads to the immediate removal of the rule. +*) + +type constraints = + | Neq of term * term + +(* Rule descriptions for History.get_rule_hist *) + +type rulespec = + | RElem of predicate list * predicate + | RApplyFunc of funsymb * predicate + | RApplyProj of funsymb * int * predicate (* For projections corresponding to data constructors *) + +(* History of construction of rules *) + +type onestatus = + No | NonInj | Inj + +type hypspec = + ReplTag of occurrence * int(*Number of elements of name_params after it*) + | InputTag of occurrence + | BeginEvent of occurrence + | BeginFact + | LetFilterTag of occurrence + | LetFilterFact + | OutputTag of occurrence + | TestTag of occurrence + | LetTag of occurrence + | TestUnifTag of occurrence + | TestUnifTag2 of occurrence + | InputPTag of occurrence + | OutputPTag of occurrence + | InsertTag of occurrence + | GetTag of occurrence + | GetTagElse of occurrence + +type label = + ProcessRule of hypspec list * term list + | Apply of funsymb * predicate + | TestApply of funsymb * predicate + | TestEq of predicate + | LblEquiv + | LblClause + | LblEq + | Rl of predicate * predicate + | Rs of predicate * predicate + | Ri of predicate * predicate + | Ro of predicate * predicate + | Rfail of predicate + | TestComm of predicate * predicate + | InputSecr of predicate + | OutputSecr of predicate + | WeakSecr + | Rn of predicate + | Init + | PhaseChange + | TblPhaseChange + | LblComp + | LblNone + | Elem of predicate list * predicate + | TestUnif + | TestDeterministic of funsymb + | TestTotal of funsymb + +(* Rules *) + +type history = + Rule of int * label * fact list * fact * constraints list list + | Removed of int * int * history + | Any of int * history + | Empty of fact + | HEquation of int * fact * fact * history + | Resolution of history * int * history + | TestUnifTrue of int * history + +type reduction = fact list * fact * history * constraints list list + +(* Equational theory *) + +type equation = term * term + +(* Proof history *) + +type fact_tree_desc = + FHAny + | FEmpty + | FRemovedWithProof of fact_tree + | FRule of int * label * constraints list list * fact_tree list + | FEquation of fact_tree + +and fact_tree = + { mutable desc: fact_tree_desc; + mutable thefact: fact; + } + diff --git a/preinstallTTool/linux/proverif/src/weaksecr.cmi b/preinstallTTool/linux/proverif/src/weaksecr.cmi new file mode 100644 index 0000000000000000000000000000000000000000..cdb812de6e598cb08f88c798fc7a23aac785106a Binary files /dev/null and b/preinstallTTool/linux/proverif/src/weaksecr.cmi differ diff --git a/preinstallTTool/linux/proverif/src/weaksecr.cmx b/preinstallTTool/linux/proverif/src/weaksecr.cmx new file mode 100644 index 0000000000000000000000000000000000000000..bd221c52d5cde870970bb37c1475c9ed9afeaac8 Binary files /dev/null and b/preinstallTTool/linux/proverif/src/weaksecr.cmx differ diff --git a/preinstallTTool/linux/proverif/src/weaksecr.ml b/preinstallTTool/linux/proverif/src/weaksecr.ml new file mode 100644 index 0000000000000000000000000000000000000000..458ee1a0f55db6e28e768349fb4b2d53e7cd19e5 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/weaksecr.ml @@ -0,0 +1,193 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +open Types +open Terms + +let detect_atteq = function + ([Pred(p1, [Var v1; Var v2]); Pred(p2, [Var v3; Var v4])], + (Pred(p4, [])), _, [[Neq(Var v5, Var v6)]]) + when p1.p_prop land Param.pred_ELIMVAR != 0 + && p2.p_prop land Param.pred_ELIMVAR != 0 + && p4 == Param.bad_pred + && v1 == v3 + && ((v2 == v5 && v4 == v6) || (v2 == v6 && v4 == v5)) -> true + | _ -> false + +let detect_atteq2 = function + ([Pred(p1, [Var v1; Var v2]); Pred(p2, [Var v3; Var v4])], + (Pred(p4, [])), _, [[Neq(Var v5, Var v6)]]) + when p1.p_prop land Param.pred_ELIMVAR != 0 + && p2.p_prop land Param.pred_ELIMVAR != 0 + && p4 == Param.bad_pred + && v2 == v4 + && ((v1 == v5 && v3 == v6) || (v1 == v6 && v3 == v5)) -> true + | _ -> false + +let detect_atteq3 = function + ([Pred(p1, [Var v1]); Pred(p2, [Var v3; Var v4])], + (Pred(p4, [])), _, [[Neq(Var v5, Var v6)]]) + when p1.p_prop land Param.pred_ATTACKER != 0 + && p2.p_prop land Param.pred_ELIMVAR != 0 + && p4 == Param.bad_pred + && v1 == v3 + && ((v3 == v5 && v4 == v6) || (v3 == v6 && v4 == v5)) -> true + | _ -> false + +let detect_atteq4 = function + ([Pred(p1, [Var v1]); Pred(p2, [Var v3; Var v4])], + (Pred(p4, [])), _, [[Neq(Var v5, Var v6)]]) + when p1.p_prop land Param.pred_ATTACKER != 0 + && p2.p_prop land Param.pred_ELIMVAR != 0 + && p4 == Param.bad_pred + && v1 == v4 + && ((v3 == v5 && v4 == v6) || (v3 == v6 && v4 == v5)) -> true + | _ -> false + +let is_bad = function + Pred(p, []) -> p==Param.bad_pred + | _ -> false + +let attrulenum = ref [] + +let elim_att_guess_xx next_stage repeat_next_stage (hyp, concl, hist, constra) = + let redo_all_optim = ref false in + let hist' = ref hist in + let rec f n = function + [] -> [] + | (Pred({ p_info = [AttackerGuess _]}, [Var v1; Var v2])) :: l when v1 == v2 -> + redo_all_optim := true; + hist' := Resolution(List.assq (Param.get_type v1.btype) (!attrulenum), n, !hist'); + (Pred(Param.get_pred (Attacker(!Param.max_used_phase, v1.btype)), [Var v1])) :: (f (n+1) l) + | fact :: l -> fact :: (f (n+1) l) + in + let r' = (f 0 hyp, concl, !hist', constra) in + if !redo_all_optim then + repeat_next_stage r' + else + next_stage r' + +let rec follow_link v = + match v.link with + TLink (Var v') -> follow_link v' + | NoLink -> v + | _ -> Parsing_helper.internal_error "unexpected link in follow_link (weaksecr)" + +let simplify next_stage repeat_next_stage ((hyp, concl, hist, constra) as r) = + if (not (!Param.weaksecret_mode)) || (detect_atteq r) || (detect_atteq2 r) || + (detect_atteq3 r) || (detect_atteq4 r) (* || (not (is_bad concl)) *) + then + next_stage r + else + let redo_all_optim = ref false in + let rec find_att x = function + [] -> false + | (Pred(p', [Var v])) :: _ when p'.p_prop land Param.pred_ATTACKER != 0 + && v == x -> true + | _ :: l -> find_att x l + in + let rec find_right x y = function + [] -> None + | (Pred(p', [Var v1; Var v2])) :: _ + when p'.p_prop land Param.pred_ELIMVAR != 0 && v1 == x && v2 != y -> + Some v2 + | _ :: l -> find_right x y l + in + let rec find_left x y = function + [] -> None + | (Pred(p', [Var v1; Var v2])) :: _ + when p'.p_prop land Param.pred_ELIMVAR != 0 && v2 == x && v2 != y -> + Some v1 + | _ :: l -> find_left x y l + in + let link v1 v2 = + let v1 = follow_link v1 in + let v2 = follow_link v2 in + if v1 != v2 then + begin + (* When v1 is a may-fail variable and + v2 is a message variable, we can store v2 as + a link to v1 but not the converse. + + In case we have att(may_failv, messv), replacing + mayfailv with a message variable is fine, because + the case att(fail, message) already derives bad by + the initial clauses. *) + if v1.unfailing && not (v2.unfailing) then + Terms.link v1 (TLink (Var v2)) + else + Terms.link v2 (TLink (Var v1)); + redo_all_optim := true + end + in + let rec inst = function + [] -> () + | (h::r) -> + begin + match h with + Pred(p, [Var v1; Var v2]) when p.p_prop land Param.pred_ELIMVAR != 0 -> + begin + if find_att v1 hyp then + link v1 v2 + else if find_att v2 hyp then + link v2 v1 + else + match find_right v1 v2 r with + Some v2' -> link v2' v2 + | None -> + match find_left v2 v1 r with + Some v1' -> link v1' v1 + | None -> () + end + | _ -> () + end; + inst r + in + inst hyp; + if (!redo_all_optim) then + begin + let hyp' = List.map Terms.copy_fact2 hyp in + let concl' = Terms.copy_fact2 concl in + let constra' = List.map Terms.copy_constra2 constra in + Terms.cleanup(); + repeat_next_stage (hyp', concl', hist, constra') + end + else + elim_att_guess_xx next_stage repeat_next_stage r + +(* Selection function: called when the standard selection function says + to select the conclusion *) + +let selfun ((hyp, concl, hist, constra) as r) = + if not ((!Param.weaksecret_mode) && (is_bad concl) && (hyp != [])) then -1 + else + if (detect_atteq r) || (detect_atteq2 r) then 0 else + begin + print_string "Warning: selection not found in Weaksecr.selfun in rule\n"; + Display.Text.display_rule r; + -1 + end diff --git a/preinstallTTool/linux/proverif/src/weaksecr.mli b/preinstallTTool/linux/proverif/src/weaksecr.mli new file mode 100644 index 0000000000000000000000000000000000000000..2bb7a01532b8561f022a88e31925de306986cee3 --- /dev/null +++ b/preinstallTTool/linux/proverif/src/weaksecr.mli @@ -0,0 +1,30 @@ +(************************************************************* + * * + * Cryptographic protocol verifier * + * * + * Bruno Blanchet and Vincent Cheval * + * * + * Copyright (C) INRIA, CNRS 2000-2014 * + * * + *************************************************************) + +(* + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details (in file LICENSE). + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +*) +val attrulenum : (Types.typet * Types.history) list ref +val simplify : (Types.reduction -> unit) -> (Types.reduction -> unit) -> Types.reduction -> unit +val selfun : Types.reduction -> int diff --git a/preinstallTTool/linux/proverif/test b/preinstallTTool/linux/proverif/test new file mode 100755 index 0000000000000000000000000000000000000000..e07b51b7b2e446f0d30551153472ce1848b913ca --- /dev/null +++ b/preinstallTTool/linux/proverif/test @@ -0,0 +1,464 @@ +#!/bin/bash + +if [ -x ./xtime ] +then + if [ .$2 = . ] + then + PROG=./xtime + else + PROG="./xtime -repeat 10 -o /dev/null" + fi +else + PROG= +fi + +PROVERIF="$PROG ./proverif -test" + +if [ \( .$1 != .all \) -a \( .$1 != .secr \) -a \( .$1 != .bidsecr \) -a \( .$1 != .both \) -a \( .$1 != .noninterf \) -a \( .$1 != .weak \) -a \( .$1 != .choice \) -a \( .$1 != .obsequi \) -a \( .$1 != .attack \) -a \( .$1 != .bugs \) -a \( .$1 != .jfk \) -a \( .$1 != .mailprot \) -a \( .$1 != .ffgg \) ] +then + echo Usage: test "<test-name>" [repeat] + echo where "<test-name>" can be all, secr, bidsecr, both, noninterf, + echo weak, choice, obsequi, attack, bugs, jfk, mailprot, or ffgg. + exit 2 +fi + +output=$1`date '+%Y.%m.%d-%H_%M_%S'` + +( + +# Test for secrecy using clauses (CSFW'01) + +if [ \( .$1 = .all \) -o \( .$1 = .secr \) ] +then + +echo +echo SECRECY TESTS +echo + +echo PROTOCOL Needham-Schroeder public key +$PROVERIF examples/horn/secr/needham-orig +echo PROTOCOL Needham-Schroeder public key corrected +$PROVERIF examples/horn/secr/needham-corr-orig +echo PROTOCOL Needham-Schroeder shared key +$PROVERIF examples/horn/secr/needham-shr-orig4 +echo PROTOCOL Needham-Schroeder shared key corrected +$PROVERIF examples/horn/secr/needham-shr-corr4 +echo PROTOCOL Denning-Sacco +$PROVERIF examples/horn/secr/denning-sacco-orig +echo PROTOCOL Denning-Sacco corrected +$PROVERIF examples/horn/secr/denning-sacco-corr-orig +echo PROTOCOL Otway-Rees +$PROVERIF examples/horn/secr/otway-rees-orig +echo PROTOCOL Otway-Rees Paulson err +$PROVERIF examples/horn/secr/otway-rees-paulson-err +echo PROTOCOL Yahalom +$PROVERIF examples/horn/secr/yahalom +echo PROTOCOL Simplified Yahalom +$PROVERIF examples/horn/secr/simpleryahalom +echo PROTOCOL Skeme +$PROVERIF examples/horn/secr/skeme-eq + +fi + + +# Bidirectional test for secrecy using clauses + +if [ \( .$1 = .all \) -o \( .$1 = .bidsecr \) ] +then + +echo +echo BIDIRECTIONAL SECRECY TESTS +echo + +echo PROTOCOL Needham-Schroeder public key +$PROVERIF examples/horn/secr/needham-orig-bid +echo PROTOCOL Needham-Schroeder public key corrected +$PROVERIF examples/horn/secr/needham-corr-orig-bid +echo PROTOCOL Needham-Schroeder shared key +$PROVERIF examples/horn/secr/needham-shr-orig-bid +echo PROTOCOL Needham-Schroeder shared key corrected +$PROVERIF examples/horn/secr/needham-shr-corr-bid +echo PROTOCOL Denning-Sacco +$PROVERIF examples/horn/secr/denning-sacco-orig-bid +echo PROTOCOL Denning-Sacco corrected +$PROVERIF examples/horn/secr/denning-sacco-corr-orig-bid +echo PROTOCOL Otway-Rees +$PROVERIF examples/horn/secr/otway-rees-orig-bid +echo PROTOCOL Otway-Rees Paulson err +$PROVERIF examples/horn/secr/otway-rees-paulson-err-bid +echo PROTOCOL Yahalom +$PROVERIF examples/horn/secr/yahalom-bid +echo PROTOCOL Simplified Yahalom +$PROVERIF examples/horn/secr/simpleryahalom-bid +echo PROTOCOL Skeme +$PROVERIF examples/horn/secr/skeme-eq-bid + + +fi + +# Tests for secrecy and authentication (pi calculus) + +if [ \( .$1 = .all \) -o \( .$1 = .both \) ] +then + +echo +echo SECRECY AND AUTHENTICATION TESTS +echo + +cd examples/pi/secr-auth +(echo "param keyCompromise = approx."; cat pineedham-shr-orig4) > pineedham-shr-orig4-compapprox +(echo "param keyCompromise = approx."; cat pineedham-shr-corr4) > pineedham-shr-corr4-compapprox +(echo "param keyCompromise = strict."; cat pineedham-shr-orig4) > pineedham-shr-orig4-comp +(echo "param keyCompromise = strict."; cat pineedham-shr-corr4) > pineedham-shr-corr4-comp +cd ../../.. + + +function analyzeb() +{ + echo PROTOCOL $1 + $PROVERIF -in pi examples/pi/secr-auth/$2 +} + +analyzeb "Needham-Schroeder public key" pineedham-orig +analyzeb "Needham-Schroeder public key corrected" pineedham-corr-orig +analyzeb "Woo Lam public key (1992)" piwoolampk-orig +analyzeb "Woo Lam public key (1997)" piwoolampk +analyzeb "Woo Lam shared key (GJorig)" piwoolam-orig2 +analyzeb "Woo Lam shared key (GJcorr)" piwoolam-corr3 + +analyzeb "Denning-Sacco" pidenning-sacco-orig +analyzeb "Denning-Sacco corrected" pidenning-sacco-corr-orig +analyzeb "Needham-Schroeder shared key" pineedham-shr-orig4 +analyzeb "Needham-Schroeder shared key corrected" pineedham-shr-corr4 +analyzeb "Needham-Schroeder shared key comp. approx" pineedham-shr-orig4-compapprox +analyzeb "Needham-Schroeder shared key corrected comp. approx" pineedham-shr-corr4-compapprox +analyzeb "Needham-Schroeder shared key comp." pineedham-shr-orig4-comp +analyzeb "Needham-Schroeder shared key corrected comp." pineedham-shr-corr4-comp +analyzeb "Yahalom" piyahalom-orig +analyzeb "Simplified Yahalom, unidirectional" piyahalom +analyzeb "Simplified Yahalom, bidirectional" piyahalom-bid +analyzeb "Simplified Yahalom, bidirectional with nicer encoding" piyahalom-bid-nicecoding +analyzeb "Otway-Rees" piotwayrees +analyzeb "Otway-Rees abadi" piotwayreesabadi +analyzeb "Otway-Rees Paulson err" piotway-rees-paulson-err +analyzeb "Skeme" piskeme + +fi + +# Tests for non-interference (Oakland'04) + +if [ \( .$1 = .all \) -o \( .$1 = .noninterf \) ] +then + +echo +echo NON-INTERFERENCE TESTS +echo + +echo PROTOCOL Otway-Rees +$PROVERIF -in pi examples/pi/noninterf/piotwayrees +echo PROTOCOL Otway-Rees \(probabilistic encryption\) +$PROVERIF -in pi examples/pi/noninterf/piotwayrees-proba +echo PROTOCOL Otway-Rees \(key\) +$PROVERIF -in pi examples/pi/noninterf/piotwayrees-key + +echo PROTOCOL Needham-Schroeder public key corrected +$PROVERIF -in pi examples/pi/noninterf/pineedham-corr-orig + +echo PROTOCOL Yahalom +$PROVERIF -in pi examples/pi/noninterf/piyahalom-orig + +echo PROTOCOL Skeme +$PROVERIF -in pi examples/pi/noninterf/piskeme + +fi + +# Tests for weak secrets + +if [ \( .$1 = .all \) -o \( .$1 = .weak \) ] +then + +echo +echo WEAK SECRET TESTS +echo + +function analyzew() +{ + echo PROTOCOL $1 + $PROVERIF -in pi examples/pi/weaksecr/$2 +} + +analyzew "Trivial vote example" pivote +analyzew "Trivial handshake example" pihandshake +analyzew "EKE (A and B talk only to honest participants)" eke1 +analyzew "EKE (A and B talk to anybody)" eke2 +analyzew "EKE DH" ekedh1 +analyzew "EKE DH 2" ekedh2 +analyzew "Augmented EKE" augmentedeke1 +analyzew "Augmented EKE 2" augmentedeke2 +analyzew "Signed Augmented EKE 2" signedaugmentedeke2 +analyzew "Enhanced Kerberos (recognizable tuples)" kerberos-gl1 + +fi + +# Tests for choice (LICS'05 and others) + +if [ \( .$1 = .all \) -o \( .$1 = .choice \) ] +then + +echo +echo CHOICE TESTS +echo + +function analyzec() +{ + echo PROTOCOL $1 + $PROVERIF -in pi examples/pi/choice/$2 +} + +analyzec "DH" dh-fs +analyzec "NDE" nde-pk +analyzec "MACS" macs + +analyzec "Trivial vote example" pivote +analyzec "Trivial handshake example" pihandshake +analyzec "EKE (A and B talk only to honest participants)" eke1 +analyzec "EKE (A and B talk to anybody)" eke +analyzec "EKE DH" ekedh1 +analyzec "EKE DH 2" ekedh +analyzec "EKE DH 3 (without rounds of key confirmation)" ekedh3 +analyzec "Augmented EKE" augmentedeke +analyzec "Signed augmented EKE" signedaugmentedeke +analyzec "Needham-Schroeder corrected" pineedham-corr-orig +analyzec "Needham-Schroeder corrected (secrets A and B)" pineedham-corr-orig2 +analyzec "Wide Mouth Frog" wmf-auth +analyzec "Wide Mouth Frog (multisessions, flawed version -- false attack)" wmf-many-auth +analyzec "Wide Mouth Frog (multisessions, corrected version -- false attack)" wmf-many-auth3 +analyzec "Wide Mouth Frog (lemma for multisessions, flawed version)" wmf-many-auth2 +analyzec "Wide Mouth Frog (lemma for multisessions, corrected version)" wmf-many-auth4 +analyzec "JFKr, core security: equivalence for messages" JFKr-coresec + + +fi + +# Tests for choice (exactly LICS'05) + +if [ \( \( .$1 = .all \) -o \( .$1 = .obsequi \) \) -a \( -d ../../dev/web/webperso/proverif/obsequi \) ] +then + +echo +echo "CHOICE TESTS (LICS'05)" +echo + + +function analyzeo() +{ + echo PROTOCOL $1 + $PROVERIF -in pi ../../dev/web/webperso/proverif/obsequi/$2 +} + +analyzeo "DH" dh-fs +analyzeo "NDE" nde-pk +analyzeo "MACS" macs + +analyzeo "EKE" eke +analyzeo "EKE DH" ekedh +analyzeo "Augmented EKE" augmentedeke +analyzeo "Signed augmented EKE" signedaugmentedeke +analyzeo "Wide Mouth Frog" wmf-auth +analyzeo "JFKr, core security: equivalence for messages" JFKr-coresec + +fi + +# Tests for attacks (CSFW'05) + +if [ \( \( .$1 = .all \) -o \( .$1 = .attack \) \) -a \( -d examplesnd/attackspeed \) ] +then + +echo +echo "ATTACK TESTS" +echo + +function analyze() +{ + echo PROTOCOL $1 + $PROVERIF -in pi examplesnd/attackspeed/$2 +} + +function analyzenotrace() +{ + echo PROTOCOL $1 + (echo "param reconstructTrace = no."; cat examplesnd/attackspeed/$2) > examplesnd/attackspeed/$2.notrace + $PROVERIF -in pi examplesnd/attackspeed/$2.notrace +} + +function analyzenounif() +{ + echo PROTOCOL $1 + (echo "param unifyDerivation = false."; cat examplesnd/attackspeed/$2) > examplesnd/attackspeed/$2.nounif + $PROVERIF -in pi examplesnd/attackspeed/$2.nounif +} + +echo PROTOCOL Test traces without unification heuristic + +analyzenounif "Needham-Schroeder public key" pineedham-orig +analyzenounif "Woo Lam public key (1992)" piwoolampk-orig +analyzenounif "Woo Lam shared key (GJorig)" piwoolam-orig2 + +analyzenounif "Denning-Sacco" pidenning-sacco-orig +analyzenounif "Yahalom" piyahalom-orig +analyzenounif "Simplified Yahalom, bidirectional" piyahalom-bid +analyzenounif "Otway-Rees" piotwayrees +analyzenounif "Otway-Rees abadi" piotwayreesabadi +analyzenounif "Otway-Rees Paulson err" piotway-rees-paulson-err + +analyzenounif "Skeme" Skeme + +analyzenounif "JFKr" JFKr +analyzenounif "JFKr (no cache)" JFKr-nocache + +analyzenounif "WS Leiden" Leiden.tf.pf +analyzenounif "WS firewall-authentication" firewall-authentication.tf.pf +analyzenounif "WS username-digest" username-digest.tf.pf +analyzenounif "WS username-signature" username-signature.tf.pf +analyzenounif "WS x509-signature" x509-signature.tf.pf + +analyzenounif "FFGG 50" piffgg-orig50 +analyzenounif "Certified email" mailprot + +echo PROTOCOL Test traces + +analyze "Needham-Schroeder public key" pineedham-orig +analyze "Woo Lam public key (1992)" piwoolampk-orig +analyze "Woo Lam shared key (GJorig)" piwoolam-orig2 + +analyze "Denning-Sacco" pidenning-sacco-orig +analyze "Yahalom" piyahalom-orig +analyze "Simplified Yahalom, bidirectional" piyahalom-bid +analyze "Otway-Rees" piotwayrees +analyze "Otway-Rees abadi" piotwayreesabadi +analyze "Otway-Rees Paulson err" piotway-rees-paulson-err + +analyze "Skeme" Skeme + +analyze "JFKr" JFKr +analyze "JFKr (no cache)" JFKr-nocache + +analyze "WS Leiden" Leiden.tf.pf +analyze "WS firewall-authentication" firewall-authentication.tf.pf +analyze "WS username-digest" username-digest.tf.pf +analyze "WS username-signature" username-signature.tf.pf +analyze "WS x509-signature" x509-signature.tf.pf + +analyze "FFGG 50" piffgg-orig50 +analyze "Certified email" mailprot + +echo PROTOCOL Test without trace reconstruction + +analyzenotrace "Needham-Schroeder public key" pineedham-orig +analyzenotrace "Woo Lam public key (1992)" piwoolampk-orig +analyzenotrace "Woo Lam shared key (GJorig)" piwoolam-orig2 + +analyzenotrace "Denning-Sacco" pidenning-sacco-orig +analyzenotrace "Yahalom" piyahalom-orig +analyzenotrace "Simplified Yahalom, bidirectional" piyahalom-bid +analyzenotrace "Otway-Rees" piotwayrees +analyzenotrace "Otway-Rees abadi" piotwayreesabadi +analyzenotrace "Otway-Rees Paulson err" piotway-rees-paulson-err + +analyzenotrace "Skeme" Skeme + +analyzenotrace "JFKr" JFKr +analyzenotrace "JFKr (no cache)" JFKr-nocache + +analyzenotrace "WS Leiden" Leiden.tf.pf +analyzenotrace "WS firewall-authentication" firewall-authentication.tf.pf +analyzenotrace "WS username-digest" username-digest.tf.pf +analyzenotrace "WS username-signature" username-signature.tf.pf +analyzenotrace "WS x509-signature" x509-signature.tf.pf + +analyzenotrace "FFGG 50" piffgg-orig50 +analyzenotrace "Certified email" mailprot + +fi + +# Tests for previous bugs + +if [ \( \( .$1 = .all \) -o \( .$1 = .bugs \) \) -a \( \( -d examplesnd/pibugs \) -o \( -d examplesnd/bugs \) \) ] +then + +echo +echo "REGRESSION TESTS ON OLD BUGS" +echo + + +for i in examplesnd/pibugs/* +do + if [ -f $i ] + then + echo PROTOCOL $i + $PROVERIF -in pi $i + fi +done + +for i in examplesnd/bugs/* +do + if [ -f $i ] + then + echo PROTOCOL $i + $PROVERIF $i + fi +done + + +fi + +# JFK + +if [ \( .$1 = .all \) -o \( .$1 = .jfk \) ] +then + +echo +echo JFK TESTS +echo + +cd examples/pi/jfk +./gen +cd ../../.. + +fi + +# Certified email protocol + +if [ \( \( .$1 = .all \) -o \( .$1 = .mailprot \) \) -a \( -d examples/pi/mailprotAbadi \) ] +then + +echo +echo CERTIFIED EMAIL PROTOCOL TESTS +echo + +cd examples/pi/mailprotAbadi/onefile2 +./generate +cd ../journalsas2 +./generate +cd ../../../.. + +fi + +# FFGG + +if [ \( .$1 = .all \) -o \( .$1 = .ffgg \) ] +then + +echo +echo FFGG TESTS +echo + +cd examples/pi/ffgg +./gen +cd ../../.. + +fi + +) > tests/$output 2>&1 + +egrep \(TESTS\|PROTOCOL\|RESULT\|user\) tests/$output > tests/sum-$output diff --git a/preinstallTTool/linux/proverif/test-type b/preinstallTTool/linux/proverif/test-type new file mode 100755 index 0000000000000000000000000000000000000000..bc6488b32836fded0fb2a1373c2227f514cc3c89 --- /dev/null +++ b/preinstallTTool/linux/proverif/test-type @@ -0,0 +1,184 @@ +#!/bin/bash + +if [ -x ./xtime ] +then + PROG=./xtime +else + PROG= +fi + +PROVERIF="$PROG ./proverif -test" + +if [ \( .$1 != .all \) -a \( .$1 != .secr-auth \) -a \( .$1 != .noninterf \) -a \( .$1 != .weak \) -a \( .$1 != .choice \) -a \( .$1 != .bugs \) -a \( .$1 != .jfk \) -a \( .$1 != .mailprot \) -a \( .$1 != .ffgg \) ] +then + echo Usage: test-type "<test-name>" + echo where "<test-name>" can be all, secr-auth, noninterf, + echo weak, choice, bugs, jfk, mailprot, or ffgg. + exit 2 +fi + +output=$1-type`date '+%Y.%m.%d-%H_%M_%S'` + +( + +# Tests for secrecy and authentication (pi calculus) + +if [ \( \( .$1 = .all \) -o \( .$1 = .secr-auth \) \) -a \( -d examples/pitype/secr-auth \) ] +then + +echo +echo SECRECY AND AUTHENTICATION TESTS +echo + +cd examples/pitype/secr-auth +(echo "set keyCompromise = approx."; cat NeedhamSchroederSK.pv) > NeedhamSchroederSK-compapprox.pv +(echo "set keyCompromise = strict."; cat NeedhamSchroederSK.pv) > NeedhamSchroederSK-comp.pv +(echo "set keyCompromise = approx."; cat NeedhamSchroederSK-corr.pv) > NeedhamSchroederSK-corr-compapprox.pv +(echo "set keyCompromise = strict."; cat NeedhamSchroederSK-corr.pv) > NeedhamSchroederSK-corr-comp.pv +cd ../../.. + + +for i in examples/pitype/secr-auth/*.pv +do + if [ -f $i ] + then + echo PROTOCOL $i + $PROVERIF $i + fi +done + +fi + + +# Tests for non-interference (Oakland'04) + +if [ \( \( .$1 = .all \) -o \( .$1 = .noninterf \) \) -a \( -d examples/pitype/noninterf \) ] +then + +echo +echo NON-INTERFERENCE TESTS +echo + +for i in examples/pitype/noninterf/*.pv +do + if [ -f $i ] + then + echo PROTOCOL $i + $PROVERIF $i + fi +done + +fi + +# Tests for weak secrets + +if [ \( \( .$1 = .all \) -o \( .$1 = .weak \) \) -a \( -d examples/pitype/weaksecr \) ] +then + +echo +echo WEAK SECRET TESTS +echo + +for i in examples/pitype/weaksecr/*.pv +do + if [ -f $i ] + then + echo PROTOCOL $i + $PROVERIF $i + fi +done + +fi + +# Tests for choice (LICS'05 and others) + +if [ \( \( .$1 = .all \) -o \( .$1 = .choice \) \) -a \( -d examples/pitype/choice \) ] +then + +echo +echo CHOICE TESTS +echo + +for i in examples/pitype/choice/*.pv +do + if [ -f $i ] + then + echo PROTOCOL $i + $PROVERIF $i + fi +done + +fi + +# Tests for previous bugs + +if [ \( \( .$1 = .all \) -o \( .$1 = .bugs \) \) -a \( -d examplesnd/pitype \) ] +then + +echo +echo "REGRESSION TESTS ON OLD BUGS" +echo + + +for i in examplesnd/pitype/* +do + if [ -f $i ] + then + echo PROTOCOL $i + $PROVERIF -in pitype $i + fi +done + +fi + +# JFK + +if [ \( \( .$1 = .all \) -o \( .$1 = .jfk \) \) -a \( -d examples/pitype/jfk \) ] +then + +echo +echo JFK TESTS +echo + +cd examples/pitype/jfk +./gen +cd ../../.. + +fi + +# Certified email protocol + +if [ \( \( .$1 = .all \) -o \( .$1 = .mailprot \) \) -a \( -d examples/pitype/certified-mail-AbadiGlewHornePinkas \) ] +then + +echo +echo CERTIFIED EMAIL PROTOCOL TESTS +echo + +cd examples/pitype/certified-mail-AbadiGlewHornePinkas/onefile +./generate +cd ../journalsas +./generate +cd ../../../.. + +fi + +# FFGG + +if [ \( \( .$1 = .all \) -o \( .$1 = .ffgg \) \) -a \( -d examples/pitype/ffgg \) ] +then + +echo +echo FFGG TESTS +echo + +cd examples/pitype/ffgg +./gen +cd ../../.. + +fi + + +) > tests/$output 2>&1 + +egrep \(TESTS\|PROTOCOL\|RESULT\|user\) tests/$output > tests/sum-$output diff --git a/preinstallTTool/linux/ttool.exe b/preinstallTTool/linux/ttool.exe new file mode 100755 index 0000000000000000000000000000000000000000..d48338cd0491961d843d205f275f578ddb80cf74 --- /dev/null +++ b/preinstallTTool/linux/ttool.exe @@ -0,0 +1 @@ +cd TTool/bin; java -Xmx1024m -jar ttool.jar -launcher -config config.xml -nc -diplodocus -avatar -proverif diff --git a/preinstallTTool/linux/uppaal/bin-Linux/server b/preinstallTTool/linux/uppaal/bin-Linux/server new file mode 100755 index 0000000000000000000000000000000000000000..e545f681bb9aba34586b3a7d8869c0e571d9e83d Binary files /dev/null and b/preinstallTTool/linux/uppaal/bin-Linux/server differ diff --git a/preinstallTTool/linux/uppaal/bin-Linux/verifyta b/preinstallTTool/linux/uppaal/bin-Linux/verifyta new file mode 100755 index 0000000000000000000000000000000000000000..23daedcb85e93cc50d518f7ef2743694c5951082 Binary files /dev/null and b/preinstallTTool/linux/uppaal/bin-Linux/verifyta differ diff --git a/preinstallTTool/linux/uppaal/bin-Win32/server.exe b/preinstallTTool/linux/uppaal/bin-Win32/server.exe new file mode 100755 index 0000000000000000000000000000000000000000..726a0899d6d5a333ab372d4b65ecfea821dfc6b2 Binary files /dev/null and b/preinstallTTool/linux/uppaal/bin-Win32/server.exe differ diff --git a/preinstallTTool/linux/uppaal/bin-Win32/verifyta.exe b/preinstallTTool/linux/uppaal/bin-Win32/verifyta.exe new file mode 100755 index 0000000000000000000000000000000000000000..55e33ef7c0ef4bd67677bdb8e9e6797f4ac510bb Binary files /dev/null and b/preinstallTTool/linux/uppaal/bin-Win32/verifyta.exe differ diff --git a/preinstallTTool/linux/uppaal/demo/2doors.q b/preinstallTTool/linux/uppaal/demo/2doors.q new file mode 100644 index 0000000000000000000000000000000000000000..32544466075ccd9f21ac0e644e617fd77e08f3af --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/2doors.q @@ -0,0 +1,68 @@ +//This file was generated from UPPAAL 3.3.35, Mar 2003 + +/* +971204, Kim G. Larsen, Fredrik Larsson, Paul Pettersson & Arne Skou, + at Fairmont Hotel, San Francisco, USA. +971208, Paul, finalized, in the air between San Francisco and London. +011015, Paul, added deadlock and livness properties. + +TWO DOORS + +This example was suggested to us by Alan Burns at RTSS'97. + +DESCRIPTION: A room has two doors which can not be open at the same +time. A door starts to open if its button is pushed. The door opens +for six seconds, thereafter it stays open for at least four seconds, +but no more than eight seconds. The door takes six seconds to close +and it stays closed for at least five seconds. + +EXERCISE: Model the system, write a requirement specification that shows +that the system enjoys the mutex property (i.e. the two doors are never +open at the same time), also derive an upper bound for a door to open +(completely) after its button has been pushed, and show that the upper +bound is the least upper bound. + +COMMENTS: The following assumptions are used in our model: +(i) A door button should not be pushed while the door is opening, + open (or closing). +(ii) An upper bound is needed in location "closed", i.e. when the door + delays after it has been closed. + +*/ +//NO_QUERY + +/* +Mutex: The two doors are never open at the same time. +*/ +A[] not (Door1.open and Door2.open) + +/* +Bounded Liveness: A door will open within 31 seconds. +*/ +A[] (Door1.opening imply User1.w<=31) and \ + (Door2.opening imply User2.w<=31) + +/* +Door 1 can open. +*/ +E<> Door1.open + +/* +Door 2 can open. +*/ +E<> Door2.open + +/* +Liveness: Whenever a button is pushed, the corresponding door will eventually open. +*/ +Door1.wait --> Door1.open + +/* + +*/ +Door2.wait --> Door2.open + +/* +The system is deadlock-free. +*/ +A[] not deadlock diff --git a/preinstallTTool/linux/uppaal/demo/2doors.xml b/preinstallTTool/linux/uppaal/demo/2doors.xml new file mode 100644 index 0000000000000000000000000000000000000000..194a03f707401cde31997440657c1a8a3c786886 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/2doors.xml @@ -0,0 +1,13 @@ +<?xml version='1.0' encoding='utf-8'?><!DOCTYPE nta PUBLIC '-//Uppaal Team//DTD Flat System 1.1//EN' 'http://www.it.uu.se/research/group/darts/uppaal/flat-1_1.dtd'><nta><declaration>// 971204, Arne, Fredrik, Kim & Paul. +// Fairmont Hotel, San Francisco. +</declaration><template><name x="32" y="16">Door</name><parameter>bool &activated, urgent chan &pushed, urgent chan &closed1, urgent chan &closed2</parameter><declaration>clock x;</declaration><location id="id0" x="224" y="96"><name x="248" y="104">wait</name></location><location id="id1" x="96" y="368"><name x="24" y="352">closing</name><label kind="invariant" x="40" y="368">x<=6</label></location><location id="id2" x="96" y="224"><name x="120" y="208">closed</name><label kind="invariant" x="120" y="224">x<=5</label></location><location id="id3" x="224" y="368"><name x="248" y="352">open</name><label kind="invariant" x="248" y="368">x<=8</label></location><location id="id4" x="224" y="224"><name x="248" y="208">opening</name><label kind="invariant" x="248" y="224">x<=6</label></location><location id="id5" x="96" y="96"><name x="112" y="104">idle</name></location><init ref="id5"/><transition><source ref="id2"/><target ref="id2"/><label kind="synchronisation" x="24" y="192">closed1!</label><nail x="56" y="248"/><nail x="56" y="224"/></transition><transition><source ref="id2"/><target ref="id5"/><label kind="guard" x="56" y="152">x>=5</label></transition><transition><source ref="id1"/><target ref="id2"/><label kind="guard" x="40" y="264">x==6</label><label kind="assignment" x="40" y="288">x=0, +activated=false</label></transition><transition><source ref="id5"/><target ref="id5"/><label kind="synchronisation" x="16" y="64">closed1!</label><nail x="56" y="120"/><nail x="56" y="96"/></transition><transition><source ref="id5"/><target ref="id0"/><label kind="synchronisation" x="128" y="48">pushed?</label><label kind="assignment" x="120" y="64">activated = true</label></transition><transition><source ref="id3"/><target ref="id1"/><label kind="guard" x="136" y="344">x>=4</label><label kind="assignment" x="144" y="376">x=0</label></transition><transition><source ref="id4"/><target ref="id3"/><label kind="guard" x="232" y="264">x==6</label><label kind="assignment" x="232" y="288">x=0</label></transition><transition><source ref="id0"/><target ref="id4"/><label kind="synchronisation" x="232" y="136">closed2?</label><label kind="assignment" x="232" y="152">x=0</label></transition><transition><source ref="id0"/><target ref="id0"/><label kind="synchronisation" x="280" y="80">closed1!</label><nail x="272" y="72"/><nail x="272" y="96"/></transition></template><template><name x="32" y="16">User</name><parameter>bool &activated, urgent chan &pushed</parameter><declaration>clock w;</declaration><location id="id6" x="192" y="160"></location><location id="id7" x="96" y="96"><name x="72" y="64">idle</name></location><init ref="id7"/><transition><source ref="id7"/><target ref="id6"/><label kind="guard" x="72" y="168">!activated</label><label kind="assignment" x="72" y="184">w=0</label><nail x="96" y="160"/></transition><transition><source ref="id6"/><target ref="id7"/><label kind="synchronisation" x="152" y="72">pushed!</label><nail x="192" y="96"/></transition></template><system>bool activated1, activated2; +urgent chan pushed1, pushed2; +urgent chan closed1, closed2; + +Door1 = Door(activated1, pushed1, closed1, closed2); +Door2 = Door(activated2, pushed2, closed2, closed1); +User1 = User(activated1, pushed1); +User2 = User(activated2, pushed2); + +system Door1, Door2, User1, User2;</system></nta> \ No newline at end of file diff --git a/preinstallTTool/linux/uppaal/demo/bridge.q b/preinstallTTool/linux/uppaal/demo/bridge.q new file mode 100644 index 0000000000000000000000000000000000000000..dc366a536b21b3bcf32fa119682af9ceee7730a2 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/bridge.q @@ -0,0 +1,42 @@ +//This file was generated from UPPAAL 3.3.35, Mar 2003 + +/* + +*/ +//NO_QUERY + +/* +The system is deadlock free. +*/ +A[] not deadlock + +/* +Viking 1 can cross the bridge. +*/ +E<> Viking1.safe + +/* + +*/ +E<> Viking2.safe + +/* + +*/ +E<> Viking3.safe + +/* + +*/ +A[] not (Viking4.safe and time<slowest) + +/* + +*/ +E<> Viking4.safe imply time>=slowest + +/* +Scheduling problem reformulated as reachability property. Use +'Diagnostic Trace:Fastest' option to find fastest solution. +*/ +E<> Viking1.safe and Viking2.safe and Viking3.safe and Viking4.safe diff --git a/preinstallTTool/linux/uppaal/demo/bridge.xml b/preinstallTTool/linux/uppaal/demo/bridge.xml new file mode 100644 index 0000000000000000000000000000000000000000..8fb2aca8b27e1cb10b792992f24dd125f5068715 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/bridge.xml @@ -0,0 +1,25 @@ +<?xml version='1.0' encoding='utf-8'?><!DOCTYPE nta PUBLIC '-//Uppaal Team//DTD Flat System 1.1//EN' 'http://www.it.uu.se/research/group/darts/uppaal/flat-1_1.dtd'><nta><declaration>/* + * Four vikings are about to cross a damaged bridge in the middle of the + * night. The bridge can only carry two of the vikings at the time and to + * find the way over the bridge the vikings need to bring a torch. The + * vikings need 5, 10, 20 and 25 minutes (one-way) respectively to cross + * the bridge. + + * Does a schedule exist which gets all four vikings over the bridge + * within 60 minutes? + */ + +chan take, release; // Take and release torch +int[0,1] L; // The side the torch is on +clock time; // Global time +</declaration><template><name x="32" y="16">Soldier</name><parameter>const int delay</parameter><declaration>clock y;</declaration><location id="id0" x="288" y="80"></location><location id="id1" x="288" y="216"><name x="272" y="232">safe</name></location><location id="id2" x="64" y="216"></location><location id="id3" x="64" y="80"><name x="56" y="48">unsafe</name></location><init ref="id3"/><transition><source ref="id2"/><target ref="id3"/><label kind="guard" x="72" y="176">y >= delay</label><label kind="synchronisation" x="72" y="120">release!</label></transition><transition><source ref="id1"/><target ref="id2"/><label kind="guard" x="208" y="224">L == 1</label><label kind="synchronisation" x="216" y="192">take !</label><label kind="assignment" x="104" y="224">y = 0</label></transition><transition><source ref="id0"/><target ref="id1"/><label kind="guard" x="296" y="112">y >= delay</label><label kind="synchronisation" x="296" y="160">release!</label></transition><transition><source ref="id3"/><target ref="id0"/><label kind="guard" x="120" y="56">L == 0</label><label kind="synchronisation" x="120" y="88">take !</label><label kind="assignment" x="216" y="56">y = 0</label></transition></template><template><name x="32" y="-16">Torch</name><location id="id4" x="200" y="192"><name x="192" y="200">one</name></location><location id="id5" x="200" y="48"><urgent/></location><location id="id6" x="64" y="120"><name x="48" y="88">free</name></location><location id="id7" x="336" y="120"><name x="328" y="88">two</name></location><init ref="id6"/><transition><source ref="id6"/><target ref="id5"/><label kind="synchronisation" x="104" y="56">take?</label></transition><transition><source ref="id5"/><target ref="id4"/></transition><transition><source ref="id5"/><target ref="id7"/><label kind="synchronisation" x="264" y="56">take?</label></transition><transition><source ref="id4"/><target ref="id6"/><label kind="synchronisation" x="96" y="176">release?</label><label kind="assignment" x="32" y="144">L = 1 - L</label></transition><transition><source ref="id7"/><target ref="id4"/><label kind="synchronisation" x="256" y="176">release?</label></transition></template><system>const int fastest = 5; +const int fast = 10; +const int slow = 20; +const int slowest = 25; + +Viking1 = Soldier(fastest); +Viking2 = Soldier(fast); +Viking3 = Soldier(slow); +Viking4 = Soldier(slowest); + +system Viking1, Viking2, Viking3, Viking4, Torch;</system></nta> \ No newline at end of file diff --git a/preinstallTTool/linux/uppaal/demo/fischer.q b/preinstallTTool/linux/uppaal/demo/fischer.q new file mode 100644 index 0000000000000000000000000000000000000000..6c0d508711c11479ab5f4bed0b92010b184259cc --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/fischer.q @@ -0,0 +1,26 @@ +//This file was generated from UPPAAL 3.6 Beta 3 (rev. 1796), April 2006 + +/* +Fischer's mutual exclusion protocol. +*/ +//NO_QUERY + +/* +Mutex requirement. +*/ +A[] forall (i:id_t) forall (j:id_t) P(i).cs && P(j).cs imply i == j + +/* +The system is deadlock free. +*/ +A[] not deadlock + +/* +Whenever P(1) requests access to the critical section it will eventually enter the wait state. +*/ +P(1).req --> P(1).wait + +/* + +*/ +//NO_QUERY diff --git a/preinstallTTool/linux/uppaal/demo/fischer.xml b/preinstallTTool/linux/uppaal/demo/fischer.xml new file mode 100644 index 0000000000000000000000000000000000000000..79bd53b99b350e9f5b2a84fc3665a89842722a03 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/fischer.xml @@ -0,0 +1,6 @@ +<?xml version='1.0' encoding='utf-8'?><!DOCTYPE nta PUBLIC '-//Uppaal Team//DTD Flat System 1.1//EN' 'http://www.it.uu.se/research/group/darts/uppaal/flat-1_1.dtd'><nta><declaration>// Fischer's mutual exclusion protocol. + +typedef int[1,6] id_t; +int id;</declaration><template><name x="16" y="-8">P</name><parameter>const id_t pid</parameter><declaration>clock x; +const int k = 2;</declaration><location id="id0" x="216" y="176"><name x="216" y="192">wait</name></location><location id="id1" x="216" y="48"><name x="216" y="16">req</name><label kind="invariant" x="240" y="32">x<=k</label></location><location id="id2" x="64" y="48"><name x="54" y="18">A</name></location><location id="id3" x="64" y="176"><name x="56" y="192">cs</name></location><init ref="id2"/><transition><source ref="id2"/><target ref="id1"/><label kind="guard" x="88" y="24">id== 0</label><label kind="assignment" x="160" y="24">x = 0</label></transition><transition><source ref="id1"/><target ref="id0"/><label kind="guard" x="144" y="72">x<=k</label><label kind="assignment" x="144" y="104">x = 0, +id = pid</label></transition><transition><source ref="id0"/><target ref="id1"/><label kind="guard" x="264" y="120">id== 0</label><label kind="assignment" x="264" y="88">x = 0</label><nail x="251" y="146"/><nail x="251" y="82"/></transition><transition><source ref="id0"/><target ref="id3"/><label kind="guard" x="96" y="184">x>k && id==pid</label></transition><transition><source ref="id3"/><target ref="id2"/><label kind="assignment" x="8" y="80">id = 0</label></transition></template><system>system P;</system></nta> \ No newline at end of file diff --git a/preinstallTTool/linux/uppaal/demo/fischer_symmetry.q b/preinstallTTool/linux/uppaal/demo/fischer_symmetry.q new file mode 100644 index 0000000000000000000000000000000000000000..ca8155fb3410a6c4254f6de1ffd7e4c279cc0ecc --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/fischer_symmetry.q @@ -0,0 +1,11 @@ +//This file was generated from UPPAAL 3.6 Beta 1-pre1 (rev. 1625), Mar 2006 + +/* +Mutex requirement. +*/ +A[] forall (i:pid_t) forall (j:pid_t) P(i).cs && P(j).cs imply i==j + +/* + +*/ +//NO_QUERY diff --git a/preinstallTTool/linux/uppaal/demo/fischer_symmetry.xml b/preinstallTTool/linux/uppaal/demo/fischer_symmetry.xml new file mode 100644 index 0000000000000000000000000000000000000000..1e2b88349a75898a1c08c42026f503aeb314013e --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/fischer_symmetry.xml @@ -0,0 +1,12 @@ +<?xml version='1.0' encoding='utf-8'?><!DOCTYPE nta PUBLIC '-//Uppaal Team//DTD Flat System 1.1//EN' 'http://www.it.uu.se/research/group/darts/uppaal/flat-1_1.dtd'><nta><declaration>// Fischer's mutual exclusion protocol. + +const int N = 40; + +typedef scalar[N] pid_t; + +bool set = false; +pid_t id; +</declaration><template><name x="16" y="-8">P</name><parameter>const pid_t pid</parameter><declaration>clock x; +const int k = 2;</declaration><location id="id0" x="216" y="176"><name x="216" y="192">wait</name></location><location id="id1" x="216" y="48"><name x="216" y="16">req</name><label kind="invariant" x="240" y="32">x<=k</label></location><location id="id2" x="64" y="48"><name x="54" y="18">A</name></location><location id="id3" x="64" y="176"><name x="56" y="192">cs</name></location><init ref="id2"/><transition><source ref="id2"/><target ref="id1"/><label kind="guard" x="104" y="24">!set</label><label kind="assignment" x="104" y="48">x = 0</label></transition><transition><source ref="id1"/><target ref="id0"/><label kind="guard" x="144" y="72">x<=k</label><label kind="assignment" x="144" y="88">x = 0, +id = pid, +set = true</label></transition><transition><source ref="id0"/><target ref="id1"/><label kind="guard" x="264" y="88">!set</label><label kind="assignment" x="264" y="104">x = 0</label><nail x="251" y="146"/><nail x="251" y="82"/></transition><transition><source ref="id0"/><target ref="id3"/><label kind="guard" x="96" y="184">x>k && id==pid</label></transition><transition><source ref="id3"/><target ref="id2"/><label kind="assignment" x="-8" y="104">set=false</label></transition></template><system>system P;</system></nta> \ No newline at end of file diff --git a/preinstallTTool/linux/uppaal/demo/interrupt.q b/preinstallTTool/linux/uppaal/demo/interrupt.q new file mode 100644 index 0000000000000000000000000000000000000000..de5e1f2960e1ce0e47f5483664891b0f77af2b36 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/interrupt.q @@ -0,0 +1,6 @@ +//This file was generated from UPPAAL 4.0.0 (rev. 1900), May 2006 + +/* +env cannot send 'up' or 'down' after sending 'shut_down' (encoded using an error location). +*/ +A[] not env.ERROR diff --git a/preinstallTTool/linux/uppaal/demo/interrupt.xml b/preinstallTTool/linux/uppaal/demo/interrupt.xml new file mode 100644 index 0000000000000000000000000000000000000000..04decae0a72c87e24d1a3385a7b326bc3a38f0a6 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/interrupt.xml @@ -0,0 +1,51 @@ +<?xml version='1.0' encoding='utf-8'?><!DOCTYPE nta PUBLIC '-//Uppaal Team//DTD Flat System 1.1//EN' 'http://www.it.uu.se/research/group/darts/uppaal/flat-1_1.dtd'><nta><declaration>// This model is based on the example of Section 2 in +// Priorities in Process Algebras, by Rance Cleveland and +// Matthew Hennesy (Information and Computation, 1990). + +// The interrupt controller INT should communicate 'i' +// whenever possible, so that C cannot receive 'up' or 'down' +// after INT has received 'shut_down'. + +// Uncomment one of the priority specifications to make the model work, +// by using channel priorities (end of these declarations), or +// process priorities (system declaration). + +// Input to the counter +chan up, down; + +// Shut down request +chan shut_down; + +// Internal communication +chan i; + +// Counter modulo (wrap-around). +const int MODULO = 16; + +// Counter value +int[0,MODULO-1] count = 0; + +// Channel priority declarations +// ============================= +// Uncomment one of the priority specifications to make the model work. + +// (1) 'i' has higher priority than others. +//chan priority default < i; + +// (2) 'i' has higher priority than 'up' and 'down' +//chan priority up, down < i; +</declaration><template><name x="5" y="5">INT</name><location id="id0" x="-232" y="-104"></location><location id="id1" x="-232" y="-192"></location><location id="id2" x="-232" y="-280"></location><init ref="id2"/><transition><source ref="id1"/><target ref="id0"/><label kind="synchronisation" x="-224" y="-160">i!</label></transition><transition><source ref="id2"/><target ref="id1"/><label kind="synchronisation" x="-224" y="-248">shut_down?</label></transition></template><template><name>C</name><declaration> +void count_up() +{ + count = (count + 1) % MODULO; +} + +void count_down() +{ + count = count > 0 ? (count - 1) % MODULO : 0; +} +</declaration><location id="id3" x="-384" y="-224"></location><location id="id4" x="-384" y="-312"></location><init ref="id4"/><transition><source ref="id4"/><target ref="id4"/><label kind="synchronisation" x="-480" y="-344">up?</label><label kind="assignment" x="-520" y="-328">count_up()</label><nail x="-448" y="-312"/><nail x="-448" y="-344"/></transition><transition><source ref="id4"/><target ref="id4"/><label kind="synchronisation" x="-320" y="-344">down?</label><label kind="assignment" x="-320" y="-328">count_down()</label><nail x="-328" y="-312"/><nail x="-328" y="-344"/></transition><transition><source ref="id4"/><target ref="id3"/><label kind="synchronisation" x="-376" y="-280">i?</label></transition></template><template><name>env</name><location id="id5" x="-176" y="64"><name x="-152" y="56">ERROR</name></location><location id="id6" x="-176" y="-40"><name x="-160" y="-48">OFF</name></location><location id="id7" x="-176" y="-136"><name x="-184" y="-176">ON</name></location><init ref="id7"/><transition><source ref="id6"/><target ref="id5"/><label kind="synchronisation" x="-248" y="0">down!</label><nail x="-208" y="-16"/><nail x="-208" y="32"/><nail x="-192" y="48"/></transition><transition><source ref="id6"/><target ref="id5"/><label kind="synchronisation" x="-200" y="0">up!</label></transition><transition><source ref="id7"/><target ref="id6"/><label kind="synchronisation" x="-168" y="-96">shut_down!</label></transition><transition><source ref="id7"/><target ref="id7"/><label kind="synchronisation" x="-288" y="-160">down!</label><nail x="-240" y="-136"/><nail x="-240" y="-168"/></transition><transition><source ref="id7"/><target ref="id7"/><label kind="synchronisation" x="-104" y="-160">up!</label><nail x="-112" y="-168"/><nail x="-112" y="-136"/></transition></template><system>system INT,C,env; + +// Use this system line to specify process priorities: +//system C,env < INT; +</system></nta> \ No newline at end of file diff --git a/preinstallTTool/linux/uppaal/demo/train-gate.q b/preinstallTTool/linux/uppaal/demo/train-gate.q new file mode 100644 index 0000000000000000000000000000000000000000..9aac80d7c30a7d18c12d2a595dee79cf6d747246 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/train-gate.q @@ -0,0 +1,94 @@ +//This file was generated from UPPAAL 4.0.2 (rev. 2491), August 2006 + +/* +===== Validation Properties: +*/ +//NO_QUERY + +/* +Gate can receive (and store in queue) msg's from approaching trains. +*/ +E<> Gate.Occ + +/* +Train 0 can reach crossing. +*/ +E<> Train(0).Cross + +/* +Train 1 can reach crossing. +*/ +E<> Train(1).Cross + +/* +Train 0 can be crossing bridge while Train 1 is waiting to cross. +*/ +E<> Train(0).Cross and Train(1).Stop + +/* +Train 0 can cross bridge while the other trains are waiting to cross. +*/ +E<> Train(0).Cross and (forall (i : id_t) i != 0 imply Train(i).Stop) + +/* +===== Safety Properties: +*/ +//NO_QUERY + +/* +There is never more than one train crossing the bridge (at +any time instance). +*/ +A[] forall (i : id_t) forall (j : id_t) Train(i).Cross && Train(j).Cross imply i == j + +/* +There can never be N elements in the queue (thus the array will not overflow). +*/ +A[] Gate.list[N] == 0 + +/* +===== Liveness Properties: +*/ +//NO_QUERY + +/* +Whenever a train approaches the bridge, it will eventually cross. +*/ +Train(0).Appr --> Train(0).Cross\ +\ + + +/* + +*/ +Train(1).Appr --> Train(1).Cross + +/* + +*/ +Train(2).Appr --> Train(2).Cross + +/* + +*/ +Train(3).Appr --> Train(3).Cross + +/* + +*/ +Train(4).Appr --> Train(4).Cross + +/* + +*/ +Train(5).Appr --> Train(5).Cross + +/* +===== Deadlock checking: +*/ +//NO_QUERY + +/* +The system is deadlock-free. +*/ +A[] not deadlock diff --git a/preinstallTTool/linux/uppaal/demo/train-gate.xml b/preinstallTTool/linux/uppaal/demo/train-gate.xml new file mode 100644 index 0000000000000000000000000000000000000000..511a3364a4e6d619eb3ecfe5c940d9a2ec844ec8 --- /dev/null +++ b/preinstallTTool/linux/uppaal/demo/train-gate.xml @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?><!DOCTYPE nta PUBLIC '-//Uppaal Team//DTD Flat System 1.1//EN' 'http://www.it.uu.se/research/group/darts/uppaal/flat-1_1.dtd'><nta><declaration>/* + * For more details about this example, see + * "Automatic Verification of Real-Time Communicating Systems by Constraint Solving", + * by Wang Yi, Paul Pettersson and Mats Daniels. In Proceedings of the 7th International + * Conference on Formal Description Techniques, pages 223-238, North-Holland. 1994. + */ + +const int N = 6; // # trains +typedef int[0,N-1] id_t; + +chan appr[N], stop[N], leave[N]; +urgent chan go[N]; +</declaration><template><name x="40" y="16">Train</name><parameter>const id_t id</parameter><declaration>clock x;</declaration><location id="id0" x="96" y="96"><name x="48" y="80">Safe</name></location><location id="id1" x="176" y="320"><name x="192" y="328">Stop</name></location><location id="id2" x="256" y="96"><name x="272" y="80">Cross</name><label kind="invariant" x="272" y="96">x<=5</label></location><location id="id3" x="96" y="232"><name x="32" y="216">Appr</name><label kind="invariant" x="32" y="232">x<=20</label></location><location id="id4" x="256" y="232"><name x="272" y="216">Start</name><label kind="invariant" x="272" y="232">x<= 15</label></location><init ref="id0"/><transition><source ref="id3"/><target ref="id2"/><label kind="guard" x="184" y="160">x>=10</label><label kind="assignment" x="184" y="176">x=0</label></transition><transition><source ref="id3"/><target ref="id1"/><label kind="guard" x="88" y="280">x<=10</label><label kind="synchronisation" x="88" y="296">stop[id]?</label></transition><transition><source ref="id2"/><target ref="id0"/><label kind="guard" x="184" y="56">x>=3</label><label kind="synchronisation" x="184" y="72">leave[id]!</label></transition><transition><source ref="id0"/><target ref="id3"/><label kind="synchronisation" x="32" y="128">appr[id]!</label><label kind="assignment" x="32" y="144">x=0</label></transition><transition><source ref="id4"/><target ref="id2"/><label kind="guard" x="264" y="160">x>=7</label><label kind="assignment" x="264" y="176">x=0</label></transition><transition><source ref="id1"/><target ref="id4"/><label kind="synchronisation" x="224" y="280">go[id]?</label><label kind="assignment" x="224" y="296">x=0</label></transition></template><template><name x="40" y="16">Gate</name><declaration>id_t list[N+1]; +int[0,N] len; + +// Put an element at the end of the queue +void enqueue(id_t element) +{ + list[len++] = element; +} + +// Remove the front element of the queue +void dequeue() +{ + int i = 0; + len -= 1; + while (i < len) + { + list[i] = list[i + 1]; + i++; + } + list[i] = 0; +} + +// Returns the front element of the queue +id_t front() +{ + return list[0]; +} + +// Returns the last element of the queue +id_t tail() +{ + return list[len - 1]; +}</declaration><location id="id5" x="192" y="360"><committed/></location><location id="id6" x="192" y="264"><name x="208" y="264">Occ</name></location><location id="id7" x="192" y="128"><name x="208" y="96">Free</name></location><init ref="id7"/><transition><source ref="id6"/><target ref="id5"/><label kind="select" x="104" y="288">e : id_t</label><label kind="synchronisation" x="104" y="304">appr[e]?</label><label kind="assignment" x="104" y="320">enqueue(e)</label></transition><transition><source ref="id6"/><target ref="id7"/><label kind="select" x="296" y="152">e : id_t</label><label kind="guard" x="296" y="168">e == front()</label><label kind="synchronisation" x="296" y="184">leave[e]?</label><label kind="assignment" x="296" y="200">dequeue()</label><nail x="288" y="264"/><nail x="288" y="128"/></transition><transition><source ref="id5"/><target ref="id6"/><label kind="synchronisation" x="224" y="304">stop[tail()]!</label><nail x="216" y="312"/></transition><transition><source ref="id7"/><target ref="id6"/><label kind="guard" x="104" y="168">len > 0</label><label kind="synchronisation" x="104" y="184">go[front()]!</label><nail x="96" y="128"/><nail x="96" y="264"/></transition><transition><source ref="id7"/><target ref="id6"/><label kind="select" x="200" y="152">e : id_t</label><label kind="guard" x="200" y="168">len == 0</label><label kind="synchronisation" x="200" y="184">appr[e]?</label><label kind="assignment" x="200" y="200">enqueue(e)</label></transition></template><system>system Train, Gate; +</system></nta> \ No newline at end of file diff --git a/preinstallTTool/linux/uppaal/lib/editor.jar b/preinstallTTool/linux/uppaal/lib/editor.jar new file mode 100644 index 0000000000000000000000000000000000000000..0736dca54986ee862c8d5ce3eee823a503f1a2fe Binary files /dev/null and b/preinstallTTool/linux/uppaal/lib/editor.jar differ diff --git a/preinstallTTool/linux/uppaal/lib/jdom.jar b/preinstallTTool/linux/uppaal/lib/jdom.jar new file mode 100644 index 0000000000000000000000000000000000000000..9992e10d10f3bf73be72809092f12bd7237605d4 Binary files /dev/null and b/preinstallTTool/linux/uppaal/lib/jdom.jar differ diff --git a/preinstallTTool/linux/uppaal/lib/jh.jar b/preinstallTTool/linux/uppaal/lib/jh.jar new file mode 100644 index 0000000000000000000000000000000000000000..c38233aaaccda645cfa7ce5e0b72920e2538a30c Binary files /dev/null and b/preinstallTTool/linux/uppaal/lib/jh.jar differ diff --git a/preinstallTTool/linux/uppaal/lib/jlfgr-1_0.jar b/preinstallTTool/linux/uppaal/lib/jlfgr-1_0.jar new file mode 100644 index 0000000000000000000000000000000000000000..6fdf3d5bf0f03463a5a405f339cb4d3a7424237d Binary files /dev/null and b/preinstallTTool/linux/uppaal/lib/jlfgr-1_0.jar differ diff --git a/preinstallTTool/linux/uppaal/lib/model.jar b/preinstallTTool/linux/uppaal/lib/model.jar new file mode 100644 index 0000000000000000000000000000000000000000..506a15084c5aa1b9bf89c20f2e5f02909c131629 Binary files /dev/null and b/preinstallTTool/linux/uppaal/lib/model.jar differ diff --git a/preinstallTTool/linux/uppaal/lib/swixml.jar b/preinstallTTool/linux/uppaal/lib/swixml.jar new file mode 100644 index 0000000000000000000000000000000000000000..5858197f0c6f1db52eddca972df8ea6314e47740 Binary files /dev/null and b/preinstallTTool/linux/uppaal/lib/swixml.jar differ diff --git a/preinstallTTool/linux/uppaal/man/man1/uppaal.1 b/preinstallTTool/linux/uppaal/man/man1/uppaal.1 new file mode 100644 index 0000000000000000000000000000000000000000..16631f288be645a3d4af639e0a1beaf0429fb9e4 --- /dev/null +++ b/preinstallTTool/linux/uppaal/man/man1/uppaal.1 @@ -0,0 +1,47 @@ +.TH UPPAAL 1 local +.SH NAME +uppaal \- An integrated tool environment for modelling, validation and +verification of real-time systems +.SH SYNOPSIS +.B uppaal +[ +.BI - "option value" +] ... +[ +.BI "URL" +] +.SH DESCRIPTION +.I UPPAAL +is an integrated tool environment for modelling, validation and +verification of real-time systems modelled as networks of timed +automata, extended with data types (bounded integers, arrays etc.) +.SH OPTIONS +.TP +.B --antialias on|off +Turn anti-aliasing on/off. +.TP +.B --engineName name +Set the name of the engine binary. +.TP +.B --enginePath path +Set the path to the engine binaries. +.TP +.B --serverPort number +Set the server port number. +.TP +.B --serverHost name +Set the server host name. +.TP +.B --native on|off +If on, try to execute and establish a direct connection to the engine. +.TP +.B --server on|off +If on, try to connect to a running engine using TCP/IP. +.TP +.B --psColors on|off +PostScript colours on/off. +.SH THANKS +Thanks to John A. Murdie for contributing a draft of this man-page. +.SH SEE ALSO +.nf +UPPAAL home page at http://www.uppaal.com diff --git a/preinstallTTool/linux/uppaal/readme.txt b/preinstallTTool/linux/uppaal/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..5794fe6e663cedfab7f945557446660368c4bfc7 --- /dev/null +++ b/preinstallTTool/linux/uppaal/readme.txt @@ -0,0 +1,134 @@ +README for UPPAAL 4.0.11 +Uppsala University and Aalborg University. +Copyright (c) 1995 - 2008. All right reserved. + +February, 2010 + +1. Introduction +2. Installation +3. New features in this release +4. Known issues in this release +5. Commercial license agreement +6. Non-commercial license agreement + +1. Introduction +=============== + +This is the 4.0.11 release of UPPAAL 4.0 -- a model checker +for timed automata. + +Note that UPPAAL is free for non-profit applications but we want all +users to fill in a license agreement. This can be done online on the +web site http://www.uppaal.com/ or by sending in the form attached +below. + +Please refer to the commercial license agreement for commercial uses. + +This product includes the libxml2 library which is copyrighted as +follows: "Copyright (C) 1998-2006 Daniel Veillard. All Rights +Reserved." + +2. Installation +=============== + +To install, unzip the zip-file. This should create the directory +uppaal-4.0.10 containing at least the files uppaal, uppaal.jar, and the +directories lib, man, bin-Linux, bin-Win32, lib, man and demo. The +bin-directories should all contain the two files verifyta(.exe) and +server(.exe) plus some additional files, depending on the +platform. The demo-directory should contain some demo files with +suffixes .xml and .q. + +Note that UPPAAL will not run without Java 2 installed on the host +system. Java 2 for SunOS, Windows95/98/Me/NT/2000/XP, and Linux can be +downloaded from http://java.sun.com. + +The present version of UPPAAL does no longer support versions 1.1, +1.2, 1.3, 1.4, and 1.5 of the Java Runtime Environment (JRE). You need at +least JRE 6, and we strongly recommend using the most recent version +available for your platform. Compatibility problems with Windows Vista +have been reported, however it is currently believed that these +problems are caused by the JRE. Please double check that you use the +latest JRE for Windows Vista before reporting any problems with +running Uppaal on Windows Vista. + +To run UPPAAL on Linux systems run the script named 'uppaal'. To run +on Windows 95/98/Me/NT/2000/XP systems double click the file +uppaal.jar. + +3. New features and changes +=========================== + +See the release notes at http://www.uppaal.com/. + +4. Known issues in this release +=============================== + +We now have a bug management system available at +http://www.uppaal.com/. Please use this system to obtain a list of +known problems. + + +5. Commercial license agreement +=============================== + +Upon payment of the license fee, UP4ALL International AB hereby offers us +(the licensee) an industrial licence to use the model-checking tool UPPAAL. +We understand that UPPAAL includes the following programs: uppaal.jar, +server, socketserver, verifyta, and uppaal. We agree on the following: + +1. The license is a one year floating license of the UPPAAL tool "as is" without + expressed or implied warranty. + +2. We are free to upgrade to newer releases of UPPAAL during the time period that + this agreement is valid. + +3. UP4ALL International AB neither has any responsibility for the correctness + of systems verified using UPPAAL, nor for the correctness of UPPAAL itself. + +4. We will never distribute, modify, or reverse-engineer (such as disassemble) + any part of UPPAAL. + +5. Support requests are handled as queries submitted to the UPPAAL mailing list + and answered by other users of the UPPAAL tool. + + +6. Non-commercial license agreement +=================================== + +Please read the license agreement carefully, fill in the form, and +send it to + + Wang Yi + Dept. of Information Technology + Uppsala University + Box 325 + 751 05 Uppsala, Sweden + +The text of the agreement follows: + +We (the licensee) understand that UPPAAL includes the programs: +uppaal.jar, server, socketserver, verifyta, and uppaal and that +they are supplied "as is", without expressed or implied warranty. + We agree on the following: + +1. You (the licensers) do not have any obligation to provide any + maintenance or consulting help with respect to UPPAAL. + +2. You neither have any responsibility for the correctness of systems + verified using UPPAAL, nor for the correctness of UPPAAL itself. + +3. We will never distribute, modify, or reverse-engineer (such + as disassemble) any part of the UPPAAL code (i.e. the source + code and the object code) without a written permission of + Kim G Larsen (Aalborg University), Alexandre David + (Aalborg University), Paul Petterson (Uppsala University), + or Wang Yi (Uppsala University). + +4. We will only use UPPAAL for non-profit and academic research purposes. + This implies that neither UPPAAL nor any part of its code should be used + or modified to be part of any commercial software production. + +In the event that you should release new versions of UPPAAL to us, we +agree that they will also fall under all of these terms. + diff --git a/preinstallTTool/linux/uppaal/uppaal b/preinstallTTool/linux/uppaal/uppaal new file mode 100755 index 0000000000000000000000000000000000000000..c8f71ed9624e6bc859798477f7ff764754516aaa --- /dev/null +++ b/preinstallTTool/linux/uppaal/uppaal @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# +# Run this script to start UPPAAL 4.0.x. +# + +# Default options if needed. +JAVA_DEF="" + +# Force language if LANG is defined. +if [ ! -z "$LANG" ]; then + JAVA_DEF="$JAVA_DEF -Duser.language=${LANG/_*/}" +fi + +# Fix splash option if no splash is asked (Java 6). +for opt in $* ; do + if [ "$opt" = "--no-splash" ]; then + JAVA_DEF="$JAVA_DEF -splash:/dev/null" + break + fi +done + +# Setup. +HERE=$(dirname "$(readlink -e $0)") +if [ "`uname -o`" = "Cygwin" ]; then + HERE="${HERE/#\/cygdrive\//}" + HERE="${HERE/\//:/}" + ENGINE="$HERE/bin-Win32" +else + ENGINE="$HERE/bin-`uname`" +fi +JAR="$HERE/uppaal.jar" + +# No antialias if remote execution (better performance). +if [ "$DISPLAY" = ":0.0" -o "$DISPLAY" = ":0" ]; then + java $JAVA_DEF -jar "$JAR" --enginePath "$ENGINE" $* +else + java $JAVA_DEF -splash:/dev/null -jar "$JAR" --enginePath "$ENGINE" --antialias off $* +fi diff --git a/preinstallTTool/linux/uppaal/uppaal.jar b/preinstallTTool/linux/uppaal/uppaal.jar new file mode 100644 index 0000000000000000000000000000000000000000..f25fd627b92b8a9fcbc66e868205b0ff49e8fde0 Binary files /dev/null and b/preinstallTTool/linux/uppaal/uppaal.jar differ diff --git a/preinstallTTool/macos/TTool/LICENSE b/preinstallTTool/macos/TTool/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..1a215125bf331a319b98670092f754eb11ce55fa --- /dev/null +++ b/preinstallTTool/macos/TTool/LICENSE @@ -0,0 +1,45 @@ +Copyright or © or Copr. GET / ENST, Telecom-Paris, Ludovic Apvrille + +ludovic.apvrille AT enst.fr + + +This software is a computer program whose purpose is to allow the edition of TURTLE analysis, de +sign and deployment diagrams, to allow the generation of RT-LOTOS or Java code from this diagram +, andd at last to allow the analysis of formal validation traces obtained from external tools, e +.g. RTL from LAAS-CNRS and CADP from INRIA Rhone-Alpes. + +TTool is a software computer program distributed under two licenses: + +* the source file src/myutil/TableSorter.java is ditributed by SUN Microsystems under a BSD+ license. The agreement for this license has been approved by Sharon Zakhour, from SUN Microsystems, the 30th of September, 2005. The BSD+ license is provided in the header of the corresponding file. For more information on this license, please, consult the corresponding SUN web site at: +http://access1.sun.com/FAQSets/BSD.html + +* Other parts are governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms. + +For fast information on CeCILL, we provide the english and french version of the license, in LICENSE_CECILL_ENG and LICENSE_CECILL_FR, respectively. + +Note: the TTool archive also contains materials from SUN, more precisely icons provided by SUN Microsystemes with a BSD+ License. This images are located in src/ui/images/toolbarButtonGraphics. For more information, please, refer to +http://java.sun.com/developer/techDocs/hi/repository/ \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/LICENSE_CECILL_ENG b/preinstallTTool/macos/TTool/LICENSE_CECILL_ENG new file mode 100755 index 0000000000000000000000000000000000000000..89ecc5b2b92f9abc8a32605410cb0b0673a6b017 --- /dev/null +++ b/preinstallTTool/macos/TTool/LICENSE_CECILL_ENG @@ -0,0 +1,504 @@ +CeCILL FREE SOFTWARE LICENSE AGREEMENT + + + Notice + +This Agreement is a Free Software license agreement that is the result +of discussions between its authors in order to ensure compliance with +the two main principles guiding its drafting: + + * firstly, compliance with the principles governing the distribution + of Free Software: access to source code, broad rights granted to + users, + * secondly, the election of a governing law, French law, with which + it is conformant, both as regards the law of torts and + intellectual property law, and the protection that it offers to + both authors and holders of the economic rights over software. + +The authors of the CeCILL (for Ce[a] C[nrs] I[nria] L[logiciel] L[ibre]) +license are: + +Commissariat à l'Energie Atomique - CEA, a public scientific, technical +and industrial establishment, having its principal place of business at +31-33 rue de la Fédération, 75752 Paris cedex 15, France. + +Centre National de la Recherche Scientifique - CNRS, a public scientific +and technological establishment, having its principal place of business +at 3 rue Michel-Ange 75794 Paris cedex 16, France. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, a public scientific and technological establishment, having its +principal place of business at Domaine de Voluceau, Rocquencourt, BP +105, 78153 Le Chesnay cedex, France. + + + Preamble + +The purpose of this Free Software license agreement is to grant users +the right to modify and redistribute the software governed by this +license within the framework of an open source distribution model. + +The exercising of these rights is conditional upon certain obligations +for users so as to preserve this status for all subsequent redistributions. + +In consideration of access to the source code and the rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors only have limited liability. + +In this respect, the risks associated with loading, using, modifying +and/or developing or reproducing the software by the user are brought to +the user's attention, given its Free Software status, which may make it +complicated to use, with the result that its use is reserved for +developers and experienced professionals having in-depth computer +knowledge. Users are therefore encouraged to load and test the +Software's suitability as regards their requirements in conditions +enabling the security of their systems and/or data to be ensured and, +more generally, to use and operate it in the same conditions of +security. This Agreement may be freely reproduced and published, +provided it is not altered, and that no provisions are either added or +removed herefrom. + +This Agreement may apply to any or all software for which the holder of +the economic rights decides to submit the use thereof to its provisions. + + + Article 1 - DEFINITIONS + +For the purpose of this Agreement, when the following expressions +commence with a capital letter, they shall have the following meaning: + +Agreement: means this license agreement, and its possible subsequent +versions and annexes. + +Software: means the software in its Object Code and/or Source Code form +and, where applicable, its documentation, "as is" when the Licensee +accepts the Agreement. + +Initial Software: means the Software in its Source Code and possibly its +Object Code form and, where applicable, its documentation, "as is" when +it is first distributed under the terms and conditions of the Agreement. + +Modified Software: means the Software modified by at least one +Contribution. + +Source Code: means all the Software's instructions and program lines to +which access is required so as to modify the Software. + +Object Code: means the binary files originating from the compilation of +the Source Code. + +Holder: means the holder(s) of the economic rights over the Initial +Software. + +Licensee: means the Software user(s) having accepted the Agreement. + +Contributor: means a Licensee having made at least one Contribution. + +Licensor: means the Holder, or any other individual or legal entity, who +distributes the Software under the Agreement. + +Contribution: means any or all modifications, corrections, translations, +adaptations and/or new functions integrated into the Software by any or +all Contributors, as well as any or all Internal Modules. + +Module: means a set of sources files including their documentation that +enables supplementary functions or services in addition to those offered +by the Software. + +External Module: means any or all Modules, not derived from the +Software, so that this Module and the Software run in separate address +spaces, with one calling the other when they are run. + +Internal Module: means any or all Module, connected to the Software so +that they both execute in the same address space. + +GNU GPL: means the GNU General Public License version 2 or any +subsequent version, as published by the Free Software Foundation Inc. + +Parties: mean both the Licensee and the Licensor. + +These expressions may be used both in singular and plural form. + + + Article 2 - PURPOSE + +The purpose of the Agreement is the grant by the Licensor to the +Licensee of a non-exclusive, transferable and worldwide license for the +Software as set forth in Article 5 hereinafter for the whole term of the +protection granted by the rights over said Software. + + + Article 3 - ACCEPTANCE + +3.1 The Licensee shall be deemed as having accepted the terms and +conditions of this Agreement upon the occurrence of the first of the +following events: + + * (i) loading the Software by any or all means, notably, by + downloading from a remote server, or by loading from a physical + medium; + * (ii) the first time the Licensee exercises any of the rights + granted hereunder. + +3.2 One copy of the Agreement, containing a notice relating to the +characteristics of the Software, to the limited warranty, and to the +fact that its use is restricted to experienced users has been provided +to the Licensee prior to its acceptance as set forth in Article 3.1 +hereinabove, and the Licensee hereby acknowledges that it has read and +understood it. + + + Article 4 - EFFECTIVE DATE AND TERM + + + 4.1 EFFECTIVE DATE + +The Agreement shall become effective on the date when it is accepted by +the Licensee as set forth in Article 3.1. + + + 4.2 TERM + +The Agreement shall remain in force for the entire legal term of +protection of the economic rights over the Software. + + + Article 5 - SCOPE OF RIGHTS GRANTED + +The Licensor hereby grants to the Licensee, who accepts, the following +rights over the Software for any or all use, and for the term of the +Agreement, on the basis of the terms and conditions set forth hereinafter. + +Besides, if the Licensor owns or comes to own one or more patents +protecting all or part of the functions of the Software or of its +components, the Licensor undertakes not to enforce the rights granted by +these patents against successive Licensees using, exploiting or +modifying the Software. If these patents are transferred, the Licensor +undertakes to have the transferees subscribe to the obligations set +forth in this paragraph. + + + 5.1 RIGHT OF USE + +The Licensee is authorized to use the Software, without any limitation +as to its fields of application, with it being hereinafter specified +that this comprises: + + 1. permanent or temporary reproduction of all or part of the Software + by any or all means and in any or all form. + + 2. loading, displaying, running, or storing the Software on any or + all medium. + + 3. entitlement to observe, study or test its operation so as to + determine the ideas and principles behind any or all constituent + elements of said Software. This shall apply when the Licensee + carries out any or all loading, displaying, running, transmission + or storage operation as regards the Software, that it is entitled + to carry out hereunder. + + + 5.2 ENTITLEMENT TO MAKE CONTRIBUTIONS + +The right to make Contributions includes the right to translate, adapt, +arrange, or make any or all modifications to the Software, and the right +to reproduce the resulting Software. + +The Licensee is authorized to make any or all Contributions to the +Software provided that it includes an explicit notice that it is the +author of said Contribution and indicates the date of the creation thereof. + + + 5.3 RIGHT OF DISTRIBUTION + +In particular, the right of distribution includes the right to publish, +transmit and communicate the Software to the general public on any or +all medium, and by any or all means, and the right to market, either in +consideration of a fee, or free of charge, one or more copies of the +Software by any means. + +The Licensee is further authorized to distribute copies of the modified +or unmodified Software to third parties according to the terms and +conditions set forth hereinafter. + + + 5.3.1 DISTRIBUTION OF SOFTWARE WITHOUT MODIFICATION + +The Licensee is authorized to distribute true copies of the Software in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Software is +redistributed, the Licensee allows future Licensees unhindered access to +the full Source Code of the Software by indicating how to access it, it +being understood that the additional cost of acquiring the Source Code +shall not exceed the cost of transferring the data. + + + 5.3.2 DISTRIBUTION OF MODIFIED SOFTWARE + +When the Licensee makes a Contribution to the Software, the terms and +conditions for the distribution of the Modified Software become subject +to all the provisions of this Agreement. + +The Licensee is authorized to distribute the Modified Software, in +Source Code or Object Code form, provided that said distribution +complies with all the provisions of the Agreement and is accompanied by: + + 1. a copy of the Agreement, + + 2. a notice relating to the limitation of both the Licensor's + warranty and liability as set forth in Articles 8 and 9, + +and that, in the event that only the Object Code of the Modified +Software is redistributed, the Licensee allows future Licensees +unhindered access to the full Source Code of the Modified Software by +indicating how to access it, it being understood that the additional +cost of acquiring the Source Code shall not exceed the cost of +transferring the data. + + + 5.3.3 DISTRIBUTION OF EXTERNAL MODULES + +When the Licensee has developed an External Module, the terms and +conditions of this Agreement do not apply to said External Module, that +may be distributed under a separate license agreement. + + + 5.3.4 COMPATIBILITY WITH THE GNU GPL + +The Licensee can include a code that is subject to the provisions of one +of the versions of the GNU GPL in the Modified or unmodified Software, +and distribute that entire code under the terms of the same version of +the GNU GPL. + +The Licensee can include the Modified or unmodified Software in a code +that is subject to the provisions of one of the versions of the GNU GPL, +and distribute that entire code under the terms of the same version of +the GNU GPL. + + + Article 6 - INTELLECTUAL PROPERTY + + + 6.1 OVER THE INITIAL SOFTWARE + +The Holder owns the economic rights over the Initial Software. Any or +all use of the Initial Software is subject to compliance with the terms +and conditions under which the Holder has elected to distribute its work +and no one shall be entitled to modify the terms and conditions for the +distribution of said Initial Software. + +The Holder undertakes that the Initial Software will remain ruled at +least by the current license, for the duration set forth in article 4.2. + + + 6.2 OVER THE CONTRIBUTIONS + +A Licensee who develops a Contribution is the owner of the intellectual +property rights over this Contribution as defined by applicable law. + + + 6.3 OVER THE EXTERNAL MODULES + +A Licensee who develops an External Module is the owner of the +intellectual property rights over this External Module as defined by +applicable law and is free to choose the type of agreement that shall +govern its distribution. + + + 6.4 JOINT PROVISIONS + +The Licensee expressly undertakes: + + 1. not to remove, or modify, in any manner, the intellectual property + notices attached to the Software; + + 2. to reproduce said notices, in an identical manner, in the copies + of the Software modified or not. + +The Licensee undertakes not to directly or indirectly infringe the +intellectual property rights of the Holder and/or Contributors on the +Software and to take, where applicable, vis-à-vis its staff, any and all +measures required to ensure respect of said intellectual property rights +of the Holder and/or Contributors. + + + Article 7 - RELATED SERVICES + +7.1 Under no circumstances shall the Agreement oblige the Licensor to +provide technical assistance or maintenance services for the Software. + +However, the Licensor is entitled to offer this type of services. The +terms and conditions of such technical assistance, and/or such +maintenance, shall be set forth in a separate instrument. Only the +Licensor offering said maintenance and/or technical assistance services +shall incur liability therefor. + +7.2 Similarly, any Licensor is entitled to offer to its licensees, under +its sole responsibility, a warranty, that shall only be binding upon +itself, for the redistribution of the Software and/or the Modified +Software, under terms and conditions that it is free to decide. Said +warranty, and the financial terms and conditions of its application, +shall be subject of a separate instrument executed between the Licensor +and the Licensee. + + + Article 8 - LIABILITY + +8.1 Subject to the provisions of Article 8.2, the Licensee shall be +entitled to claim compensation for any direct loss it may have suffered +from the Software as a result of a fault on the part of the relevant +Licensor, subject to providing evidence thereof. + +8.2 The Licensor's liability is limited to the commitments made under +this Agreement and shall not be incurred as a result of in particular: +(i) loss due the Licensee's total or partial failure to fulfill its +obligations, (ii) direct or consequential loss that is suffered by the +Licensee due to the use or performance of the Software, and (iii) more +generally, any consequential loss. In particular the Parties expressly +agree that any or all pecuniary or business loss (i.e. loss of data, +loss of profits, operating loss, loss of customers or orders, +opportunity cost, any disturbance to business activities) or any or all +legal proceedings instituted against the Licensee by a third party, +shall constitute consequential loss and shall not provide entitlement to +any or all compensation from the Licensor. + + + Article 9 - WARRANTY + +9.1 The Licensee acknowledges that the scientific and technical +state-of-the-art when the Software was distributed did not enable all +possible uses to be tested and verified, nor for the presence of +possible defects to be detected. In this respect, the Licensee's +attention has been drawn to the risks associated with loading, using, +modifying and/or developing and reproducing the Software which are +reserved for experienced users. + +The Licensee shall be responsible for verifying, by any or all means, +the product's suitability for its requirements, its good working order, +and for ensuring that it shall not cause damage to either persons or +properties. + +9.2 The Licensor hereby represents, in good faith, that it is entitled +to grant all the rights over the Software (including in particular the +rights set forth in Article 5). + +9.3 The Licensee acknowledges that the Software is supplied "as is" by +the Licensor without any other express or tacit warranty, other than +that provided for in Article 9.2 and, in particular, without any warranty +as to its commercial value, its secured, safe, innovative or relevant +nature. + +Specifically, the Licensor does not warrant that the Software is free +from any error, that it will operate without interruption, that it will +be compatible with the Licensee's own equipment and software +configuration, nor that it will meet the Licensee's requirements. + +9.4 The Licensor does not either expressly or tacitly warrant that the +Software does not infringe any third party intellectual property right +relating to a patent, software or any other property right. Therefore, +the Licensor disclaims any and all liability towards the Licensee +arising out of any or all proceedings for infringement that may be +instituted in respect of the use, modification and redistribution of the +Software. Nevertheless, should such proceedings be instituted against +the Licensee, the Licensor shall provide it with technical and legal +assistance for its defense. Such technical and legal assistance shall be +decided on a case-by-case basis between the relevant Licensor and the +Licensee pursuant to a memorandum of understanding. The Licensor +disclaims any and all liability as regards the Licensee's use of the +name of the Software. No warranty is given as regards the existence of +prior rights over the name of the Software or as regards the existence +of a trademark. + + + Article 10 - TERMINATION + +10.1 In the event of a breach by the Licensee of its obligations +hereunder, the Licensor may automatically terminate this Agreement +thirty (30) days after notice has been sent to the Licensee and has +remained ineffective. + +10.2 A Licensee whose Agreement is terminated shall no longer be +authorized to use, modify or distribute the Software. However, any +licenses that it may have granted prior to termination of the Agreement +shall remain valid subject to their having been granted in compliance +with the terms and conditions hereof. + + + Article 11 - MISCELLANEOUS + + + 11.1 EXCUSABLE EVENTS + +Neither Party shall be liable for any or all delay, or failure to +perform the Agreement, that may be attributable to an event of force +majeure, an act of God or an outside cause, such as defective +functioning or interruptions of the electricity or telecommunications +networks, network paralysis following a virus attack, intervention by +government authorities, natural disasters, water damage, earthquakes, +fire, explosions, strikes and labor unrest, war, etc. + +11.2 Any Failure by either Party, on one or more occasions, to invoke +one or more of the provisions hereof, shall under no circumstances be +interpreted as being a waiver by the interested Party of its right to +invoke said provision(s) subsequently. + +11.3 The Agreement cancels and replaces any or all previous agreements, +whether written or oral, between the Parties and having the same +purpose, and constitutes the entirety of the agreement between said +Parties concerning said purpose. No supplement or modification to the +terms and conditions hereof shall be effective as between the Parties +unless it is made in writing and signed by their duly authorized +representatives. + +11.4 In the event that one or more of the provisions hereof were to +conflict with a current or future applicable act or legislative text, +said act or legislative text shall prevail, and the Parties shall make +the necessary amendments so as to comply with said act or legislative +text. All other provisions shall remain effective. Similarly, invalidity +of a provision of the Agreement, for any reason whatsoever, shall not +cause the Agreement as a whole to be invalid. + + + 11.5 LANGUAGE + +The Agreement is drafted in both French and English and both versions +are deemed authentic. + + + Article 12 - NEW VERSIONS OF THE AGREEMENT + +12.1 Any person is authorized to duplicate and distribute copies of this +Agreement. + +12.2 So as to ensure coherence, the wording of this Agreement is +protected and may only be modified by the authors of the License, who +reserve the right to periodically publish updates or new versions of the +Agreement, each with a separate number. These subsequent versions may +address new issues encountered by Free Software. + +12.3 Any Software distributed under a given version of the Agreement may +only be subsequently distributed under the same version of the Agreement +or a subsequent version, subject to the provisions of Article 5.3.4. + + + Article 13 - GOVERNING LAW AND JURISDICTION + +13.1 The Agreement is governed by French law. The Parties agree to +endeavor to seek an amicable solution to any disagreements or disputes +that may arise during the performance of the Agreement. + +13.2 Failing an amicable solution within two (2) months as from their +occurrence, and unless emergency proceedings are necessary, the +disagreements or disputes shall be referred to the Paris Courts having +jurisdiction, by the more diligent Party. + + +Version 2.0 dated 2005-05-21. \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/LICENSE_CECILL_FR b/preinstallTTool/macos/TTool/LICENSE_CECILL_FR new file mode 100755 index 0000000000000000000000000000000000000000..3df252c31b21b714c8150932e2ed8c146429923c --- /dev/null +++ b/preinstallTTool/macos/TTool/LICENSE_CECILL_FR @@ -0,0 +1,511 @@ +CONTRAT DE LICENCE DE LOGICIEL LIBRE CeCILL + + + Avertissement + +Ce contrat est une licence de logiciel libre issue d'une concertation +entre ses auteurs afin que le respect de deux grands principes préside à +sa rédaction: + + * d'une part, le respect des principes de diffusion des logiciels + libres: accès au code source, droits étendus conférés aux + utilisateurs, + * d'autre part, la désignation d'un droit applicable, le droit + français, auquel elle est conforme, tant au regard du droit de la + responsabilité civile que du droit de la propriété intellectuelle + et de la protection qu'il offre aux auteurs et titulaires des + droits patrimoniaux sur un logiciel. + +Les auteurs de la licence CeCILL (pour Ce[a] C[nrs] I[nria] L[ogiciel] +L[ibre]) sont: + +Commissariat à l'Energie Atomique - CEA, établissement public de +caractère scientifique technique et industriel, dont le siège est situé +31-33 rue de la Fédération, 75752 Paris cedex 15. + +Centre National de la Recherche Scientifique - CNRS, établissement +public à caractère scientifique et technologique, dont le siège est +situé 3 rue Michel-Ange 75794 Paris cedex 16. + +Institut National de Recherche en Informatique et en Automatique - +INRIA, établissement public à caractère scientifique et technologique, +dont le siège est situé Domaine de Voluceau, Rocquencourt, BP 105, 78153 +Le Chesnay cedex. + + + Préambule + +Ce contrat est une licence de logiciel libre dont l'objectif est de +conférer aux utilisateurs la liberté de modification et de +redistribution du logiciel régi par cette licence dans le cadre d'un +modèle de diffusion en logiciel libre. + +L'exercice de ces libertés est assorti de certains devoirs à la charge +des utilisateurs afin de préserver ce statut au cours des +redistributions ultérieures. + +L'accessibilité au code source et les droits de copie, de modification +et de redistribution qui en découlent ont pour contrepartie de n'offrir +aux utilisateurs qu'une garantie limitée et de ne faire peser sur +l'auteur du logiciel, le titulaire des droits patrimoniaux et les +concédants successifs qu'une responsabilité restreinte. + +A cet égard l'attention de l'utilisateur est attirée sur les risques +associés au chargement, à l'utilisation, à la modification et/ou au +développement et à la reproduction du logiciel par l'utilisateur étant +donné sa spécificité de logiciel libre, qui peut le rendre complexe à +manipuler et qui le réserve donc à des développeurs ou des +professionnels avertis possédant des connaissances informatiques +approfondies. Les utilisateurs sont donc invités à charger et tester +l'adéquation du Logiciel à leurs besoins dans des conditions permettant +d'assurer la sécurité de leurs systèmes et/ou de leurs données et, plus +généralement, à l'utiliser et l'exploiter dans les même conditions de +sécurité. Ce contrat peut être reproduit et diffusé librement, sous +réserve de le conserver en l'état, sans ajout ni suppression de clauses. + +Ce contrat est susceptible de s'appliquer à tout logiciel dont le +titulaire des droits patrimoniaux décide de soumettre l'exploitation aux +dispositions qu'il contient. + + + Article 1 - DEFINITIONS + +Dans ce contrat, les termes suivants, lorsqu'ils seront écrits avec une +lettre capitale, auront la signification suivante: + +Contrat: désigne le présent contrat de licence, ses éventuelles versions +postérieures et annexes. + +Logiciel: désigne le logiciel sous sa forme de Code Objet et/ou de Code +Source et le cas échéant sa documentation, dans leur état au moment de +l'acceptation du Contrat par le Licencié. + +Logiciel Initial: désigne le Logiciel sous sa forme de Code Source et +éventuellement de Code Objet et le cas échéant sa documentation, dans +leur état au moment de leur première diffusion sous les termes du Contrat. + +Logiciel Modifié: désigne le Logiciel modifié par au moins une +Contribution. + +Code Source: désigne l'ensemble des instructions et des lignes de +programme du Logiciel et auquel l'accès est nécessaire en vue de +modifier le Logiciel. + +Code Objet: désigne les fichiers binaires issus de la compilation du +Code Source. + +Titulaire: désigne le ou les détenteurs des droits patrimoniaux d'auteur +sur le Logiciel Initial + +Licencié: désigne le ou les utilisateurs du Logiciel ayant accepté le +Contrat. + +Contributeur: désigne le Licencié auteur d'au moins une Contribution. + +Concédant: désigne le Titulaire ou toute personne physique ou morale +distribuant le Logiciel sous le Contrat. + +Contribution: désigne l'ensemble des modifications, corrections, +traductions, adaptations et/ou nouvelles fonctionnalités intégrées dans +le Logiciel par tout Contributeur, ainsi que tout Module Interne. + +Module: désigne un ensemble de fichiers sources y compris leur +documentation qui permet de réaliser des fonctionnalités ou services +supplémentaires à ceux fournis par le Logiciel. + +Module Externe: désigne tout Module, non dérivé du Logiciel, tel que ce +Module et le Logiciel s'exécutent dans des espaces d'adressages +différents, l'un appelant l'autre au moment de leur exécution. + +Module Interne: désigne tout Module lié au Logiciel de telle sorte +qu'ils s'exécutent dans le même espace d'adressage. + +GNU GPL: désigne la GNU General Public License dans sa version 2 ou +toute version ultérieure, telle que publiée par Free Software Foundation +Inc. + +Parties: désigne collectivement le Licencié et le Concédant. + +Ces termes s'entendent au singulier comme au pluriel. + + + Article 2 - OBJET + +Le Contrat a pour objet la concession par le Concédant au Licencié d'une +licence non exclusive, cessible et mondiale du Logiciel telle que +définie ci-après à l'article 5 pour toute la durée de protection des +droits portant sur ce Logiciel. + + + Article 3 - ACCEPTATION + +3.1 L'acceptation par le Licencié des termes du Contrat est réputée +acquise du fait du premier des faits suivants: + + * (i) le chargement du Logiciel par tout moyen notamment par + téléchargement à partir d'un serveur distant ou par chargement à + partir d'un support physique; + * (ii) le premier exercice par le Licencié de l'un quelconque des + droits concédés par le Contrat. + +3.2 Un exemplaire du Contrat, contenant notamment un avertissement +relatif aux spécificités du Logiciel, à la restriction de garantie et à +la limitation à un usage par des utilisateurs expérimentés a été mis à +disposition du Licencié préalablement à son acceptation telle que +définie à l'article 3.1 ci dessus et le Licencié +reconnaît en avoir pris connaissance. + + + Article 4 - ENTREE EN VIGUEUR ET DUREE + + + 4.1 ENTREE EN VIGUEUR + +Le Contrat entre en vigueur à la date de son acceptation par le Licencié +telle que définie en 3.1. + + + 4.2 DUREE + +Le Contrat produira ses effets pendant toute la durée légale de +protection des droits patrimoniaux portant sur le Logiciel. + + + Article 5 - ETENDUE DES DROITS CONCEDES + +Le Concédant concède au Licencié, qui accepte, les droits suivants sur +le Logiciel pour toutes destinations et pour la durée du Contrat dans +les conditions ci-après détaillées. + +Par ailleurs, si le Concédant détient ou venait à détenir un ou +plusieurs brevets d'invention protégeant tout ou partie des +fonctionnalités du Logiciel ou de ses composants, il s'engage à ne pas +opposer les éventuels droits conférés par ces brevets aux Licenciés +successifs qui utiliseraient, exploiteraient ou modifieraient le +Logiciel. En cas de cession de ces brevets, le Concédant s'engage à +faire reprendre les obligations du présent alinéa aux cessionnaires. + + + 5.1 DROIT D'UTILISATION + +Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant +aux domaines d'application, étant ci-après précisé que cela comporte: + + 1. la reproduction permanente ou provisoire du Logiciel en tout ou + partie par tout moyen et sous toute forme. + + 2. le chargement, l'affichage, l'exécution, ou le stockage du + Logiciel sur tout support. + + 3. la possibilité d'en observer, d'en étudier, ou d'en tester le + fonctionnement afin de déterminer les idées et principes qui sont + à la base de n'importe quel élément de ce Logiciel; et ceci, + lorsque le Licencié effectue toute opération de chargement, + d'affichage, d'exécution, de transmission ou de stockage du + Logiciel qu'il est en droit d'effectuer en vertu du Contrat. + + + 5.2 DROIT D'APPORTER DES CONTRIBUTIONS + +Le droit d'apporter des Contributions comporte le droit de traduire, +d'adapter, d'arranger ou d'apporter toute autre modification au Logiciel +et le droit de reproduire le Logiciel en résultant. + +Le Licencié est autorisé à apporter toute Contribution au Logiciel sous +réserve de mentionner, de façon explicite, son nom en tant qu'auteur de +cette Contribution et la date de création de celle-ci. + + + 5.3 DROIT DE DISTRIBUTION + +Le droit de distribution comporte notamment le droit de diffuser, de +transmettre et de communiquer le Logiciel au public sur tout support et +par tout moyen ainsi que le droit de mettre sur le marché à titre +onéreux ou gratuit, un ou des exemplaires du Logiciel par tout procédé. + +Le Licencié est autorisé à distribuer des copies du Logiciel, modifié ou +non, à des tiers dans les conditions ci-après détaillées. + + + 5.3.1 DISTRIBUTION DU LOGICIEL SANS MODIFICATION + +Le Licencié est autorisé à distribuer des copies conformes du Logiciel, +sous forme de Code Source ou de Code Objet, à condition que cette +distribution respecte les dispositions du Contrat dans leur totalité et +soit accompagnée: + + 1. d'un exemplaire du Contrat, + + 2. d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + et 9, + +et que, dans le cas où seul le Code Objet du Logiciel est redistribué, +le Licencié permette aux futurs Licenciés d'accéder facilement au Code +Source complet du Logiciel en indiquant les modalités d'accès, étant +entendu que le coût additionnel d'acquisition du Code Source ne devra +pas excéder le simple coût de transfert des données. + + + 5.3.2 DISTRIBUTION DU LOGICIEL MODIFIE + +Lorsque le Licencié apporte une Contribution au Logiciel, les conditions +de distribution du Logiciel Modifié sont alors soumises à l'intégralité +des dispositions du Contrat. + +Le Licencié est autorisé à distribuer le Logiciel Modifié, sous forme de +Code Source ou de Code Objet, à condition que cette distribution +respecte les dispositions du Contrat dans leur totalité et soit +accompagnée: + + 1. d'un exemplaire du Contrat, + + 2. d'un avertissement relatif à la restriction de garantie et de + responsabilité du Concédant telle que prévue aux articles 8 + et 9, + +et que, dans le cas où seul le Code Objet du Logiciel Modifié est +redistribué, le Licencié permette aux futurs Licenciés d'accéder +facilement au Code Source complet du Logiciel Modifié en indiquant les +modalités d'accès, étant entendu que le coût additionnel d'acquisition +du Code Source ne devra pas excéder le simple coût de transfert des données. + + + 5.3.3 DISTRIBUTION DES MODULES EXTERNES + +Lorsque le Licencié a développé un Module Externe les conditions du +Contrat ne s'appliquent pas à ce Module Externe, qui peut être distribué +sous un contrat de licence différent. + + + 5.3.4 COMPATIBILITE AVEC LA LICENCE GNU GPL + +Le Licencié peut inclure un code soumis aux dispositions d'une des +versions de la licence GNU GPL dans le Logiciel modifié ou non et +distribuer l'ensemble sous les conditions de la même version de la +licence GNU GPL. + +Le Licencié peut inclure le Logiciel modifié ou non dans un code soumis +aux dispositions d'une des versions de la licence GNU GPL et distribuer +l'ensemble sous les conditions de la même version de la licence GNU GPL. + + + Article 6 - PROPRIETE INTELLECTUELLE + + + 6.1 SUR LE LOGICIEL INITIAL + +Le Titulaire est détenteur des droits patrimoniaux sur le Logiciel +Initial. Toute utilisation du Logiciel Initial est soumise au respect +des conditions dans lesquelles le Titulaire a choisi de diffuser son +oeuvre et nul autre n'a la faculté de modifier les conditions de +diffusion de ce Logiciel Initial. + +Le Titulaire s'engage à ce que le Logiciel Initial reste au moins régi +par la présente licence et ce, pour la durée visée à l'article 4.2. + + + 6.2 SUR LES CONTRIBUTIONS + +Le Licencié qui a développé une Contribution est titulaire sur celle-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable. + + + 6.3 SUR LES MODULES EXTERNES + +Le Licencié qui a développé un Module Externe est titulaire sur celui-ci +des droits de propriété intellectuelle dans les conditions définies par +la législation applicable et reste libre du choix du contrat régissant +sa diffusion. + + + 6.4 DISPOSITIONS COMMUNES + +Le Licencié s'engage expressément: + + 1. à ne pas supprimer ou modifier de quelque manière que ce soit les + mentions de propriété intellectuelle apposées sur le Logiciel; + + 2. à reproduire à l'identique lesdites mentions de propriété + intellectuelle sur les copies du Logiciel modifié ou non. + +Le Licencié s'engage à ne pas porter atteinte, directement ou +indirectement, aux droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs sur le Logiciel et à prendre, le cas échéant, à +l'égard de son personnel toutes les mesures nécessaires pour assurer le +respect des dits droits de propriété intellectuelle du Titulaire et/ou +des Contributeurs. + + + Article 7 - SERVICES ASSOCIES + +7.1 Le Contrat n'oblige en aucun cas le Concédant à la réalisation de +prestations d'assistance technique ou de maintenance du Logiciel. + +Cependant le Concédant reste libre de proposer ce type de services. Les +termes et conditions d'une telle assistance technique et/ou d'une telle +maintenance seront alors déterminés dans un acte séparé. Ces actes de +maintenance et/ou assistance technique n'engageront que la seule +responsabilité du Concédant qui les propose. + +7.2 De même, tout Concédant est libre de proposer, sous sa seule +responsabilité, à ses licenciés une garantie, qui n'engagera que lui, +lors de la redistribution du Logiciel et/ou du Logiciel Modifié et ce, +dans les conditions qu'il souhaite. Cette garantie et les modalités +financières de son application feront l'objet d'un acte séparé entre le +Concédant et le Licencié. + + + Article 8 - RESPONSABILITE + +8.1 Sous réserve des dispositions de l'article 8.2, le Licencié a la +faculté, sous réserve de prouver la faute du Concédant concerné, de +solliciter la réparation du préjudice direct qu'il subirait du fait du +logiciel et dont il apportera la preuve. + +8.2 La responsabilité du Concédant est limitée aux engagements pris en +application du Contrat et ne saurait être engagée en raison notamment: +(i) des dommages dus à l'inexécution, totale ou partielle, de ses +obligations par le Licencié, (ii) des dommages directs ou indirects +découlant de l'utilisation ou des performances du Logiciel subis par le +Licencié et (iii) plus généralement d'un quelconque dommage indirect. En +particulier, les Parties conviennent expressément que tout préjudice +financier ou commercial (par exemple perte de données, perte de +bénéfices, perte d'exploitation, perte de clientèle ou de commandes, +manque à gagner, trouble commercial quelconque) ou toute action dirigée +contre le Licencié par un tiers, constitue un dommage indirect et +n'ouvre pas droit à réparation par le Concédant. + + + Article 9 - GARANTIE + +9.1 Le Licencié reconnaît que l'état actuel des connaissances +scientifiques et techniques au moment de la mise en circulation du +Logiciel ne permet pas d'en tester et d'en vérifier toutes les +utilisations ni de détecter l'existence d'éventuels défauts. L'attention +du Licencié a été attirée sur ce point sur les risques associés au +chargement, à l'utilisation, la modification et/ou au développement et à +la reproduction du Logiciel qui sont réservés à des utilisateurs avertis. + +Il relève de la responsabilité du Licencié de contrôler, par tous +moyens, l'adéquation du produit à ses besoins, son bon fonctionnement et +de s'assurer qu'il ne causera pas de dommages aux personnes et aux biens. + +9.2 Le Concédant déclare de bonne foi être en droit de concéder +l'ensemble des droits attachés au Logiciel (comprenant notamment les +droits visés à l'article 5). + +9.3 Le Licencié reconnaît que le Logiciel est fourni "en l'état" par le +Concédant sans autre garantie, expresse ou tacite, que celle prévue à +l'article 9.2 et notamment sans aucune garantie sur sa valeur +commerciale, son caractère sécurisé, innovant ou pertinent. + +En particulier, le Concédant ne garantit pas que le Logiciel est exempt +d'erreur, qu'il fonctionnera sans interruption, qu'il sera compatible +avec l'équipement du Licencié et sa configuration logicielle ni qu'il +remplira les besoins du Licencié. + +9.4 Le Concédant ne garantit pas, de manière expresse ou tacite, que le +Logiciel ne porte pas atteinte à un quelconque droit de propriété +intellectuelle d'un tiers portant sur un brevet, un logiciel ou sur tout +autre droit de propriété. Ainsi, le Concédant exclut toute garantie au +profit du Licencié contre les actions en contrefaçon qui pourraient être +diligentées au titre de l'utilisation, de la modification, et de la +redistribution du Logiciel. Néanmoins, si de telles actions sont +exercées contre le Licencié, le Concédant lui apportera son aide +technique et juridique pour sa défense. Cette aide technique et +juridique est déterminée au cas par cas entre le Concédant concerné et +le Licencié dans le cadre d'un protocole d'accord. Le Concédant dégage +toute responsabilité quant à l'utilisation de la dénomination du +Logiciel par le Licencié. Aucune garantie n'est apportée quant à +l'existence de droits antérieurs sur le nom du Logiciel et sur +l'existence d'une marque. + + + Article 10 - RESILIATION + +10.1 En cas de manquement par le Licencié aux obligations mises à sa +charge par le Contrat, le Concédant pourra résilier de plein droit le +Contrat trente (30) jours après notification adressée au Licencié et +restée sans effet. + +10.2 Le Licencié dont le Contrat est résilié n'est plus autorisé à +utiliser, modifier ou distribuer le Logiciel. Cependant, toutes les +licences qu'il aura concédées antérieurement à la résiliation du Contrat +resteront valides sous réserve qu'elles aient été effectuées en +conformité avec le Contrat. + + + Article 11 - DISPOSITIONS DIVERSES + + + 11.1 CAUSE EXTERIEURE + +Aucune des Parties ne sera responsable d'un retard ou d'une défaillance +d'exécution du Contrat qui serait dû à un cas de force majeure, un cas +fortuit ou une cause extérieure, telle que, notamment, le mauvais +fonctionnement ou les interruptions du réseau électrique ou de +télécommunication, la paralysie du réseau liée à une attaque +informatique, l'intervention des autorités gouvernementales, les +catastrophes naturelles, les dégâts des eaux, les tremblements de terre, +le feu, les explosions, les grèves et les conflits sociaux, l'état de +guerre... + +11.2 Le fait, par l'une ou l'autre des Parties, d'omettre en une ou +plusieurs occasions de se prévaloir d'une ou plusieurs dispositions du +Contrat, ne pourra en aucun cas impliquer renonciation par la Partie +intéressée à s'en prévaloir ultérieurement. + +11.3 Le Contrat annule et remplace toute convention antérieure, écrite +ou orale, entre les Parties sur le même objet et constitue l'accord +entier entre les Parties sur cet objet. Aucune addition ou modification +aux termes du Contrat n'aura d'effet à l'égard des Parties à moins +d'être faite par écrit et signée par leurs représentants dûment habilités. + +11.4 Dans l'hypothèse où une ou plusieurs des dispositions du Contrat +s'avèrerait contraire à une loi ou à un texte applicable, existants ou +futurs, cette loi ou ce texte prévaudrait, et les Parties feraient les +amendements nécessaires pour se conformer à cette loi ou à ce texte. +Toutes les autres dispositions resteront en vigueur. De même, la +nullité, pour quelque raison que ce soit, d'une des dispositions du +Contrat ne saurait entraîner la nullité de l'ensemble du Contrat. + + + 11.5 LANGUE + +Le Contrat est rédigé en langue française et en langue anglaise, ces +deux versions faisant également foi. + + + Article 12 - NOUVELLES VERSIONS DU CONTRAT + +12.1 Toute personne est autorisée à copier et distribuer des copies de +ce Contrat. + +12.2 Afin d'en préserver la cohérence, le texte du Contrat est protégé +et ne peut être modifié que par les auteurs de la licence, lesquels se +réservent le droit de publier périodiquement des mises à jour ou de +nouvelles versions du Contrat, qui possèderont chacune un numéro +distinct. Ces versions ultérieures seront susceptibles de prendre en +compte de nouvelles problématiques rencontrées par les logiciels libres. + +12.3 Tout Logiciel diffusé sous une version donnée du Contrat ne pourra +faire l'objet d'une diffusion ultérieure que sous la même version du +Contrat ou une version postérieure, sous réserve des dispositions de +l'article 5.3.4. + + + Article 13 - LOI APPLICABLE ET COMPETENCE TERRITORIALE + +13.1 Le Contrat est régi par la loi française. Les Parties conviennent +de tenter de régler à l'amiable les différends ou litiges qui +viendraient à se produire par suite ou à l'occasion du Contrat. + +13.2 A défaut d'accord amiable dans un délai de deux (2) mois à compter +de leur survenance et sauf situation relevant d'une procédure d'urgence, +les différends ou litiges seront portés par la Partie la plus diligente +devant les Tribunaux compétents de Paris. + + +Version 2.0 du 2005-05-21. \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/README b/preinstallTTool/macos/TTool/README new file mode 100755 index 0000000000000000000000000000000000000000..d26617ffa63fd0805d13e8581481b74aadba2911 --- /dev/null +++ b/preinstallTTool/macos/TTool/README @@ -0,0 +1,21 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +TTool: the TURTLE Toolkit +------------------------- + +TTool relies on JDK 1.6 or later. For more information about installation or use of TTool, please, refer to : +http://labsoc.comelec.enst.fr/TURTLE/HELP/index.html + +For the DIPLODOCUS UML profile, please refer to: +http://www.comelec.enst.fr/recherche/labsoc/projets/DIPLODOCUS + + +Installing TTool +---------------- + +Basically, TTool is offered as a gipped-tar archive. To uncompress it under Linux, type the following command (if we assume thar archive is named ttool.tgz) in the directory in which you wish to install TTool: +$ tar -xofz ttool.tgz + +Various directories are created. A README_<directory name> file located in each of them summarizes its purpose and content. \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/bin/README_bin b/preinstallTTool/macos/TTool/bin/README_bin new file mode 100755 index 0000000000000000000000000000000000000000..cb3c9aa0d666548d85f78e8a2810b84f34daca6d --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/README_bin @@ -0,0 +1,18 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +This directory contain files for starting the TTool's launcher and TTool itself.Assuming "java" is a recognized command of your system, you may: +1) start the launcher as follows: +$java -jar launcher.jar + +2) start TTool as follows +$ java -Xmx256m -jar ttool.jar config.xml + +Don't forget to correctly configure various settings in your config.xml file. + +For more installation on the running of TTool and the configuration of your config.xml, please, see http://labsoc.comelec.enst.fr/turtle/HELP + +------------------------------------------------------------------------------- +Various files: +configuration.gcf: Configuration file for distributor (CADP) diff --git a/preinstallTTool/macos/TTool/bin/commons-codec-1.10.jar b/preinstallTTool/macos/TTool/bin/commons-codec-1.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..1d7417c4031324cc6577a306cde57ae220f55523 Binary files /dev/null and b/preinstallTTool/macos/TTool/bin/commons-codec-1.10.jar differ diff --git a/preinstallTTool/macos/TTool/bin/config.xml b/preinstallTTool/macos/TTool/bin/config.xml new file mode 100755 index 0000000000000000000000000000000000000000..483729c89fc927404f0c1deaddbfc2eb98efa88d --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/config.xml @@ -0,0 +1,52 @@ +<?xml version="1.0" encoding="ISO-8859-1" ?> + +<TURTLECONFIGURATION> +<DOTTYPath data="/bin/dotty" /> +<DOTTYHost data="localhost" /> +<FILEPath data="../modeling/" /> +<LIBPath data="../lib" /> +<IMGPath data="../figure" /> +<LOTOSPath data="../lotos/" /> +<GGraphPath data="../graphs" /> +<TGraphPath data="../graphs" /> +<TToolUpdateProxy data="false" /> +<TToolUpdateProxyPort data="8080" /> +<TToolUpdateProxyHost data="To Be Completed" /> +<JavaCodeDirectory data="../javacode" /> +<JavaCompilerPath data="/usr/bin/javac" /> +<TToolClassPath data="../javacode" /> +<JavaExecutePath data="/usr/bin/java" /> +<JavaHeader data="import java.sql.*;" /> +<SystemCCodeDirectory data="../simulators/c++2/" /> +<SystemCHost data="localhost"/> +<SystemCCodeCompileCommand data="make -C ../simulators/c++2/" /> +<SystemCCodeExecuteCommand data="../simulators/c++2/run.x -ovcd ../simulators/c++2/vcddump.vcd" /> +<SystemCCodeInteractiveExecuteCommand data="../simulators/c++2/run.x -server" /> +<TMLCodeDirectory data="../tmlcode" /> +<GTKWavePath data="/usr/bin/gtkwave" /> +<VCDPath data="../vcd/" /> +<UPPAALCodeDirectory data="../uppaal/" /> +<UPPAALVerifierPath data="../../uppaal/verifyta" /> +<UPPAALVerifierHost data="localhost" /> +<ProVerifCodeDirectory data="../proverif/" /> +<ProVerifVerifierPath data="../../proverif/proverif" /> +<ProVerifVerifierHost data="localhost" /> +<AVATARExecutableCodeDirectory data="../executablecode/" /> +<AVATARExecutableCodeHost data="localhost"/> +<AVATARExecutableCodeCompileCommand data="make -C ../executablecode" /> +<AVATARExecutableCodeExecuteCommand data="../executablecode/run.x" /> +<AVATARExecutableSoclibCodeCompileCommand data="make -C ../executablecode updategeneratedcode compilesoclib" /> +<AVATARExecutableSoclibCodeExecuteCommand data="make -C ../executablecode runsoclib" /> + + +<ExternalCommand1Host data="localhost"/> +<ExternalCommand1 data="/usr/bin/gtkwave ../simulators/c++2/vcddump.vcd"/> + +<LastOpenFile data="/Users/ludovicapvrille/tmp/installTTool/macos/TTool/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml"/> + +<ExternalServer data="localhost:12345"/> + +<LastWindowAttributes x="240" y="107" width="1414" height="777" max="false" /> + + +</TURTLECONFIGURATION> diff --git a/preinstallTTool/macos/TTool/bin/configuration.gcf b/preinstallTTool/macos/TTool/bin/configuration.gcf new file mode 100644 index 0000000000000000000000000000000000000000..0e6a0f48ed8223e9d41ed37de9e1e93351847292 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/configuration.gcf @@ -0,0 +1,12 @@ +rsh= ssh -x +rcp= scp +cow10 +directory = /tmp/TTool +cow11 +directory = /tmp/TTool +cow12 +directory = /tmp/TTool +cow13 +directory = /tmp/TTool +cow15 +directory = /tmp/TTool \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/bin/jsoup-1.8.1.jar b/preinstallTTool/macos/TTool/bin/jsoup-1.8.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..ae717d450e8c89511b3ff7a81ba57cf8b5711892 Binary files /dev/null and b/preinstallTTool/macos/TTool/bin/jsoup-1.8.1.jar differ diff --git a/preinstallTTool/macos/TTool/bin/launcher.jar b/preinstallTTool/macos/TTool/bin/launcher.jar new file mode 100644 index 0000000000000000000000000000000000000000..a090bdffd452093130a1f6f18bbb2845d404df53 Binary files /dev/null and b/preinstallTTool/macos/TTool/bin/launcher.jar differ diff --git a/preinstallTTool/macos/TTool/bin/rundse.jar b/preinstallTTool/macos/TTool/bin/rundse.jar new file mode 100644 index 0000000000000000000000000000000000000000..925296b94d33b2a28824a6c95e7b15b1f33bae57 Binary files /dev/null and b/preinstallTTool/macos/TTool/bin/rundse.jar differ diff --git a/preinstallTTool/macos/TTool/bin/spec.h b/preinstallTTool/macos/TTool/bin/spec.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_0.h b/preinstallTTool/macos/TTool/bin/spec_0.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_0.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_1.f b/preinstallTTool/macos/TTool/bin/spec_1.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_1.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_1.h b/preinstallTTool/macos/TTool/bin/spec_1.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_1.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_1.t b/preinstallTTool/macos/TTool/bin/spec_1.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_1.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_2.f b/preinstallTTool/macos/TTool/bin/spec_2.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_2.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_2.h b/preinstallTTool/macos/TTool/bin/spec_2.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_2.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_2.t b/preinstallTTool/macos/TTool/bin/spec_2.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_2.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_3.f b/preinstallTTool/macos/TTool/bin/spec_3.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_3.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_3.h b/preinstallTTool/macos/TTool/bin/spec_3.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_3.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_3.t b/preinstallTTool/macos/TTool/bin/spec_3.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_3.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_4.h b/preinstallTTool/macos/TTool/bin/spec_4.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_4.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_4.t b/preinstallTTool/macos/TTool/bin/spec_4.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_4.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_5.f b/preinstallTTool/macos/TTool/bin/spec_5.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_5.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_5.h b/preinstallTTool/macos/TTool/bin/spec_5.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_5.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_5.t b/preinstallTTool/macos/TTool/bin/spec_5.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_5.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_6.f b/preinstallTTool/macos/TTool/bin/spec_6.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_6.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_6.h b/preinstallTTool/macos/TTool/bin/spec_6.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_6.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_6.t b/preinstallTTool/macos/TTool/bin/spec_6.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_6.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_7.f b/preinstallTTool/macos/TTool/bin/spec_7.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_7.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_7.h b/preinstallTTool/macos/TTool/bin/spec_7.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_7.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_7.t b/preinstallTTool/macos/TTool/bin/spec_7.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_7.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_8.f b/preinstallTTool/macos/TTool/bin/spec_8.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_8.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_8.h b/preinstallTTool/macos/TTool/bin/spec_8.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_8.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_8.t b/preinstallTTool/macos/TTool/bin/spec_8.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_8.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/spec_9.f b/preinstallTTool/macos/TTool/bin/spec_9.f new file mode 100644 index 0000000000000000000000000000000000000000..c700ee7ab10f9bdaffd460025987ec58e58aa885 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_9.f @@ -0,0 +1 @@ +#define CAESAR_ADT_EXPERT_F 5.2 diff --git a/preinstallTTool/macos/TTool/bin/spec_9.h b/preinstallTTool/macos/TTool/bin/spec_9.h new file mode 100755 index 0000000000000000000000000000000000000000..f58b6972c79b8a546f78378d973da4beb54b080e --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_9.h @@ -0,0 +1,460 @@ +/*** generated by caesar.adt 5.2 with options -cc "" ***/ + +#define CAESAR_ADT 5.2 + +#include <stdio.h> +#include <signal.h> +#include <string.h> +#include <stdlib.h> + +#ifndef CAESAR_ADT_ALLOC + +#ifndef CAESAR_ADT_GARBAGE_COLLECTION +#define GC_malloc(CAESAR_ADT_0) malloc(CAESAR_ADT_0) +#else +extern char *GC_malloc (); +#endif + +#define CAESAR_ADT_ALLOC(CAESAR_ADT_0,CAESAR_ADT_BODY,CAESAR_ADT_TYPE,CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (((CAESAR_ADT_0) = (CAESAR_ADT_TYPE) GC_malloc (sizeof (CAESAR_ADT_BODY))) == NULL) {printf ("#249 erreur dans le fichier ``.h'' :\n penurie de memoire pour les types abstraits\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } + +#endif + +#ifndef CAESAR_ADT_ERROR +#define CAESAR_ADT_ERROR(CAESAR_ADT_LOTOS_OPERATION,CAESAR_ADT_C_FUNCTION) if (1) {printf ("#250 erreur dans le fichier ``.h'' :\n cas imprevu (non defini par les equations)\n dans l'operation %s\n implementee par la fonction %s [%s:%d]\n", CAESAR_ADT_LOTOS_OPERATION, CAESAR_ADT_C_FUNCTION, __FILE__, __LINE__); raise (15); } else +#endif + +/* LINTLIBRARY */ + +/* ========================================================================= */ + +#define CAESAR_ADT_UNCANONICAL_CAESAR_ADT_TYPE_QUEUE_NAT + +#define CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT(CAESAR_ADT_0) (*(CAESAR_ADT_0)) + +#define CAESAR_ADT_SCALAR_CAESAR_ADT_TYPE_QUEUE_NAT + + /* forward */ typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_TYPE_QUEUE_NAT); + /* forward */ int CAESAR_ADT_CMP_QUEUE_NAT (); + /* forward */ void CAESAR_ADT_PRT_QUEUE_NAT (); + +/* ========================================================================= */ + +typedef unsigned char ADT_BOOL; + +#define CAESAR_ADT_SCALAR_ADT_BOOL + +#define CAESAR_ADT_BITS_ADT_BOOL : 1 + +/* ------------------------------------------------------------------------- */ + +#define ADT_FALSE() ((ADT_BOOL) 0) +#define ADT_TRUE() ((ADT_BOOL) 1) + +/* ------------------------------------------------------------------------- */ + +#define ADT_CMP_BOOL(CAESAR_ADT_1,CAESAR_ADT_2) ((CAESAR_ADT_1) == (CAESAR_ADT_2)) + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern char *CAESAR_ADT_ASCII_ADT_BOOL[]; + +#else + +char *CAESAR_ADT_ASCII_ADT_BOOL[] = { + "FALSE", + "TRUE" +}; + +#endif /* CAESAR_ADT_INTERFACE */ + +#define ADT_PRINT_BOOL(CAESAR_ADT_FILE,CAESAR_ADT_0) fprintf (CAESAR_ADT_FILE, CAESAR_ADT_ASCII_ADT_BOOL [CAESAR_ADT_0]) + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_ADT_FALSE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_FALSE()) +#define CAESAR_ADT_is_ADT_TRUE(CAESAR_ADT_0) ((CAESAR_ADT_0) == ADT_TRUE()) + +/* ========================================================================= */ + +#include "spec_1.t" + +#define CAESAR_ADT_INCLUDE_T + +/* CAUTION: there exists C types, comparison functions, enumeration functions and printing macros that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS sorts have no constructors. These C objects will be considered as extern and it is assumed that their definition is contained in file "spec_1.t" provided by the user. The list of these objects is given below: */ + +/* (1) the type ADT_NAT implementing sort NAT */ +/* (2) the comparison function ADT_CMP_NAT for sort NAT */ +/* (3) the enumeration macro ADT_ENUM_FIRST_NAT for sort NAT */ +/* (4) the enumeration macro ADT_ENUM_NEXT_NAT for sort NAT */ +/* (5) the printing function ADT_PRINT_NAT for sort NAT */ +/* (6) the function ADT_N0 implementing constructor 0 */ +/* (7) the testor function CAESAR_ADT_is_ADT_N0 for constructor 0 */ +/* (8) the function ADT_SUCC implementing constructor SUCC */ +/* (9) the testor function CAESAR_ADT_is_ADT_SUCC for constructor SUCC */ +/* (10) the selector #1 function CAESAR_ADT_Get_1_ADT_SUCC for constructor SUCC */ + +/* ========================================================================= */ + +#ifndef ADT_ENUM_FIRST_BOOL +#define ADT_ENUM_FIRST_BOOL() (ADT_FALSE()) +#endif + +#ifndef ADT_ENUM_NEXT_BOOL +#define ADT_ENUM_NEXT_BOOL(CAESAR_ADT_0) ((CAESAR_ADT_0)++ < ADT_TRUE()) +#endif + +/* ========================================================================= */ + +#define CAESAR_ADT_CASE_NIL ((unsigned char) 0) +#define CAESAR_ADT_CASE_ENQUEUE ((unsigned char) 1) + +typedef struct CAESAR_ADT_STRUCT_CAESAR_ADT_TYPE_QUEUE_NAT { + unsigned char CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT:1; + union { + struct { + ADT_NAT CAESAR_ADT_1_ENQUEUE +#ifdef CAESAR_ADT_BITS_ADT_NAT + CAESAR_ADT_BITS_ADT_NAT +#endif + ; + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2_ENQUEUE +#ifdef CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT + CAESAR_ADT_BITS_CAESAR_ADT_TYPE_QUEUE_NAT +#endif + ; + } CAESAR_ADT_FIELD_ENQUEUE; + } CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT; +} CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT; + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +int CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_1, CAESAR_ADT_2) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if ((CAESAR_ADT_1 == NULL) || (CAESAR_ADT_2 == NULL)) + return (CAESAR_ADT_1 == CAESAR_ADT_2); + if (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT != CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) + return 0; + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + return 1; + case CAESAR_ADT_CASE_ENQUEUE: + return ADT_CMP_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) && CAESAR_ADT_CMP_QUEUE_NAT (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_1).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_2).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + } + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_0) +FILE *CAESAR_ADT_FILE; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; +{ + if (CAESAR_ADT_0 == NULL) + fprintf (CAESAR_ADT_FILE, "?"); + else { + switch (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT) { + case CAESAR_ADT_CASE_NIL: + fprintf (CAESAR_ADT_FILE, "NIL"); + break; + case CAESAR_ADT_CASE_ENQUEUE: + fprintf (CAESAR_ADT_FILE, "ENQUEUE ("); + ADT_PRINT_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ", "); + CAESAR_ADT_PRT_QUEUE_NAT (CAESAR_ADT_FILE, CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE); + fprintf (CAESAR_ADT_FILE, ")"); + break; + } + } +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT NIL (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT NIL () +{ + static CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0 = NULL; + if (CAESAR_ADT_0 == NULL) { + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "NIL [8]", "NIL"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_NIL; + } + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifdef CAESAR_ADT_INTERFACE + +extern CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (); + +#else + +CAESAR_ADT_TYPE_QUEUE_NAT ENQUEUE (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_0; + CAESAR_ADT_ALLOC (CAESAR_ADT_0, CAESAR_ADT_BODY_CAESAR_ADT_TYPE_QUEUE_NAT, CAESAR_ADT_TYPE_QUEUE_NAT, "ENQUEUE [9]", "ENQUEUE"); + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT = CAESAR_ADT_CASE_ENQUEUE; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE = CAESAR_ADT_1; + CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE = CAESAR_ADT_2; + return CAESAR_ADT_0; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#define CAESAR_ADT_is_NIL(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_NIL) +#define CAESAR_ADT_is_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_ENUM_CAESAR_ADT_TYPE_QUEUE_NAT == CAESAR_ADT_CASE_ENQUEUE) +#define CAESAR_ADT_Get_1_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_1_ENQUEUE) +#define CAESAR_ADT_Get_2_ENQUEUE(CAESAR_ADT_0) (CAESAR_ADT_STAR_CAESAR_ADT_TYPE_QUEUE_NAT (CAESAR_ADT_0).CAESAR_ADT_UNION_CAESAR_ADT_TYPE_QUEUE_NAT.CAESAR_ADT_FIELD_ENQUEUE.CAESAR_ADT_2_ENQUEUE) + +/* ------------------------------------------------------------------------- */ + +/* sort QUEUE_NAT is infinite: no iterator can be generated automatically for this sort; however, it is possible to specify manually an iterator for a finite subset of QUEUE_NAT by defining two macros CAESAR_ADT_ITR_FIRST_QUEUE_NAT() and CAESAR_ADT_ITR_NEXT_QUEUE_NAT() in file "spec_1.t" */ + +/* ========================================================================= */ + + /* forward */ ADT_BOOL ADT_AND (); + /* forward */ ADT_BOOL ADT_OR (); + /* forward */ ADT_BOOL ADT_XOR (); + /* forward */ ADT_BOOL ADT_IFF (); + +/* ------------------------------------------------------------------------- */ + + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (); + /* forward */ ADT_NAT FIRST (); + /* forward */ ADT_NAT LAST (); + /* forward */ CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (); + +/* ========================================================================= */ + +#define ADT_NOT(CAESAR_ADT_1) (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_1) ? ADT_FALSE () : ADT_TRUE ()) + +/* ------------------------------------------------------------------------- */ + +#define ADT_IMPLIES(CAESAR_ADT_1, CAESAR_ADT_2) ADT_OR (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1)) + +/* ------------------------------------------------------------------------- */ + +#define ADT_EQ_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ------------------------------------------------------------------------- */ + +#define ADT_NE_BOOL(CAESAR_ADT_1, CAESAR_ADT_2) ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) + +/* ========================================================================= */ + +#define EMPTY(CAESAR_ADT_1) (CAESAR_ADT_is_NIL (CAESAR_ADT_1) ? ADT_TRUE () : ADT_FALSE ()) + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +#include "spec_1.f" + +#define CAESAR_ADT_INCLUDE_F + +#endif /* CAESAR_ADT_INTERFACE */ + +/* CAUTION: there exists C functions that can not be generated automatically by CAESAR.ADT, since the corresponding LOTOS (non-constructor) operations are not defined by equations. These C functions will be considered as extern and it is assumed that their definition is contained in file "spec_1.f" provided by the user. The list of these functions is given below: */ + +/* (1) the function ADT_PLUS implementing operation + */ +/* (2) the function ADT_MULT implementing operation * */ +/* (3) the function ADT_POWER implementing operation ** */ +/* (4) the function ADT_EQ_NAT implementing operation EQ */ +/* (5) the function ADT_NE_NAT implementing operation NE */ +/* (6) the function ADT_LT_NAT implementing operation LT */ +/* (7) the function ADT_LE_NAT implementing operation LE */ +/* (8) the function ADT_GT_NAT implementing operation GT */ +/* (9) the function ADT_GE_NAT implementing operation GE */ +/* (10) the function ADT_N1 implementing operation 1 */ +/* (11) the function ADT_N2 implementing operation 2 */ +/* (12) the function ADT_N3 implementing operation 3 */ +/* (13) the function ADT_N4 implementing operation 4 */ +/* (14) the function ADT_N5 implementing operation 5 */ +/* (15) the function ADT_N6 implementing operation 6 */ +/* (16) the function ADT_N7 implementing operation 7 */ +/* (17) the function ADT_N8 implementing operation 8 */ +/* (18) the function ADT_N9 implementing operation 9 */ +/* (19) the function ADT_MINUS implementing operation - */ +/* (20) the function ADT_DIV implementing operation DIV */ +/* (21) the function ADT_MOD implementing operation MOD */ +/* (22) the function ADT_EQ_BIS_NAT implementing operation == */ +/* (23) the function ADT_NE_BIS_NAT implementing operation <> */ +/* (24) the function ADT_LT_BIS_NAT implementing operation < */ +/* (25) the function ADT_LE_BIS_NAT implementing operation <= */ +/* (26) the function ADT_GT_BIS_NAT implementing operation > */ +/* (27) the function ADT_GE_BIS_NAT implementing operation >= */ +/* (28) the function ADT_MIN implementing operation MIN */ +/* (29) the function ADT_MAX implementing operation MAX */ +/* (30) the function ADT_GCD implementing operation GCD */ +/* (31) the function ADT_SCM implementing operation SCM */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_AND (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_1; + else + return CAESAR_ADT_2; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_OR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_ADT_TRUE (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else + return CAESAR_ADT_1; +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_XOR (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_OR (ADT_AND (CAESAR_ADT_1, ADT_NOT (CAESAR_ADT_2)), ADT_AND (CAESAR_ADT_2, ADT_NOT (CAESAR_ADT_1))); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_BOOL ADT_IFF (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_BOOL CAESAR_ADT_1; +ADT_BOOL CAESAR_ADT_2; +{ + return ADT_AND (ADT_IMPLIES (CAESAR_ADT_1, CAESAR_ADT_2), ADT_IMPLIES (CAESAR_ADT_2, CAESAR_ADT_1)); +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DEQUEUE (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return NIL (); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1), DEQUEUE (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + else + CAESAR_ADT_ERROR ("DEQUEUE [10]", "DEQUEUE"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT FIRST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + if (CAESAR_ADT_is_NIL (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1))) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else if (ADT_NOT (EMPTY (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)))) + return FIRST (CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_1)); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + else + CAESAR_ADT_ERROR ("FIRST [12]", "FIRST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +ADT_NAT LAST (CAESAR_ADT_1) +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_1; +{ + if (CAESAR_ADT_is_ENQUEUE (CAESAR_ADT_1)) + return CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_1); + else + CAESAR_ADT_ERROR ("LAST [13]", "LAST"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ------------------------------------------------------------------------- */ + +#ifndef CAESAR_ADT_INTERFACE + +CAESAR_ADT_TYPE_QUEUE_NAT DESTROY (CAESAR_ADT_1, CAESAR_ADT_2) +ADT_NAT CAESAR_ADT_1; +CAESAR_ADT_TYPE_QUEUE_NAT CAESAR_ADT_2; +{ + if (CAESAR_ADT_is_NIL (CAESAR_ADT_2)) + return CAESAR_ADT_2; + else if (ADT_EQ_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2)); + else if (ADT_NE_NAT (CAESAR_ADT_1, CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2))) + return ENQUEUE (CAESAR_ADT_Get_1_ENQUEUE (CAESAR_ADT_2), DESTROY (CAESAR_ADT_1, CAESAR_ADT_Get_2_ENQUEUE (CAESAR_ADT_2))); + else + CAESAR_ADT_ERROR ("DESTROY [14]", "DESTROY"); + /* NOTREACHED */ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ + +#ifndef CAESAR_ADT_INTERFACE + +void CAESAR_ADT_INIT () +{ +} + +#endif /* CAESAR_ADT_INTERFACE */ + +/* ========================================================================= */ diff --git a/preinstallTTool/macos/TTool/bin/spec_9.t b/preinstallTTool/macos/TTool/bin/spec_9.t new file mode 100644 index 0000000000000000000000000000000000000000..72c2a5b38cff86cc190d1eff1ce49a1493c6c183 --- /dev/null +++ b/preinstallTTool/macos/TTool/bin/spec_9.t @@ -0,0 +1,2 @@ +#define CAESAR_ADT_EXPERT_T 5.0 +#include "X_NATURAL.h" diff --git a/preinstallTTool/macos/TTool/bin/tiftranslator.jar b/preinstallTTool/macos/TTool/bin/tiftranslator.jar new file mode 100644 index 0000000000000000000000000000000000000000..88e089e1e82ad8e150ffeb74ef29810547224c84 Binary files /dev/null and b/preinstallTTool/macos/TTool/bin/tiftranslator.jar differ diff --git a/preinstallTTool/macos/TTool/bin/tmltranslator.jar b/preinstallTTool/macos/TTool/bin/tmltranslator.jar new file mode 100644 index 0000000000000000000000000000000000000000..ceee8e718ee3819a4f586821b064255092ec6f62 Binary files /dev/null and b/preinstallTTool/macos/TTool/bin/tmltranslator.jar differ diff --git a/preinstallTTool/macos/TTool/bin/ttool.jar b/preinstallTTool/macos/TTool/bin/ttool.jar new file mode 100644 index 0000000000000000000000000000000000000000..3fa70a32a9f9a27a947a1a7c54fb634963644757 Binary files /dev/null and b/preinstallTTool/macos/TTool/bin/ttool.jar differ diff --git a/preinstallTTool/macos/TTool/doc/README_doc b/preinstallTTool/macos/TTool/doc/README_doc new file mode 100644 index 0000000000000000000000000000000000000000..787167f56dffcdc5b1a170ca72c344eb8981d5dd --- /dev/null +++ b/preinstallTTool/macos/TTool/doc/README_doc @@ -0,0 +1,6 @@ +TTool, an open-source UML / sysML toolkit for modeling embedded systems and procotols. +TTool is developed at Telecom ParisTech, http://ttool.telecom-paristech.fr/ +------------------------------------------------------------------------------- + +This directory may contain the documentation distributed with the toolkit. The most recent documentation is located at: +http://ttool.telecom-paristech.fr/ diff --git a/preinstallTTool/macos/TTool/executablecode/Makefile b/preinstallTTool/macos/TTool/executablecode/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..a044518bec3b82420c15f76176447a981fb583b2 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/Makefile @@ -0,0 +1,32 @@ +UNAME := $(shell uname -s) +CC = gcc +#CC = test2.sh +#CC = /packages/gcc_3.2.2/bin/g++32 +OPT = -O1 -pthread +# Solaris +#LOPT = -O1 -pthread -ldl -lnsl -lsocket +#Linux +LOPT_UNIX = -O1 -pthread -ldl -lrt +LOPT_MAC = -O1 -pthread -ldl + +DEBUG = -g +OTHER = -Wall +TRY = +CFLAGS = $(OPT) $(OTHER) $(TRY) +LFLAGS_MAC = $(LOPT_MAC) $(OTHER) $(TRY) +LFLAGS_UNIX = $(LOPT_UNIX) $(OTHER) $(TRY) +# CFLAGS = $(DEBUG) $(OTHER) +OBJDIR = lib + +MODULE = run +SRCS_generated_DIR = generated_src/ +include Makefile.src +SRCS_base = src/request.c src/message.c src/myerrors.c src/debug.c src/syncchannel.c src/asyncchannel.c src/request_manager.c src/random.c src/mytimelib.c src/tracemanager.c +SRCS_base_DIR = . +SRCS_base_DIRSRC = src/ +OBJS_executor = $(SRCS_base:%.c=lib/%.o) +OBJS = $(SRCS:%.c=lib/%.o) + +include Makefile.defs + +include Makefile.forsoclib diff --git a/preinstallTTool/macos/TTool/executablecode/Makefile.defs b/preinstallTTool/macos/TTool/executablecode/Makefile.defs new file mode 100644 index 0000000000000000000000000000000000000000..fa9276ff99651594a42f44ddcb827ffefe68c4c2 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/Makefile.defs @@ -0,0 +1,36 @@ +## Variable that points to SystemC installation path + + +INCDIR = -I. -I$(SRCS_base_DIR) -I$(SRCS_base_DIRSRC) -I$(SRCS_generated_DIR) +LIBDIR = -L. -L.. +LIBS = -lm $(EXTRA_LIBS) + +EXE = $(MODULE).x + +.SUFFIXES: .c .o .x + + +$(EXE): makedir $(OBJS) $(OBJS_executor) +ifeq ($(UNAME),Darwin) + $(CC) $(LFLAGS_MAC) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_executor) $(LIBS) 2>&1 | c++filt +endif +ifneq ($(UNAME),Darwin) + $(CC) $(LFLAGS_UNIX) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_executor) $(LIBS) 2>&1 | c++filt +endif + +makedir: + echo Making directories + mkdir -p ./lib + mkdir -p ./lib/$(SRCS_generated_DIR) + mkdir -p ./lib/$(SRCS_base_DIRSRC) + +$(OBJDIR)/%.o: $(SRCS_base_DIR)/%.c + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + + +clean: + rm -f $(OBJS_simulator) $(OBJS_executor) $(OBJS) *~ $(EXE) core + +ultraclean: clean + rm -f Makefile.deps + diff --git a/preinstallTTool/macos/TTool/executablecode/Makefile.forsoclib b/preinstallTTool/macos/TTool/executablecode/Makefile.forsoclib new file mode 100644 index 0000000000000000000000000000000000000000..bef60e8437a022103d41c56b304e617dd2757d84 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/Makefile.forsoclib @@ -0,0 +1,50 @@ +SOCLIB_CPU=ppc405 +MUTEKH_CPU=ppc +SOCLIB_CPU_COUNT=5 + +#SOCLIB_CPU=sparcv8 +#MUTEKH_CPU=sparc +#SOCLIB_CPU_COUNT=1 + +PATH+=/opt/mutekh/bin +export PATH + +updateruntime: + cp ~/TTool/executablecode/src/*.c ~/Prog/mutekh/libavatar/ + cp ~/TTool/executablecode/src/*.h ~/Prog/mutekh/libavatar/include/ + +updategeneratedcode: + cp ~/TTool/executableCode/generated_src/*.h ~/Prog/mutekh/examples/avatar + cp ~/TTool/executableCode/generated_src/*.c ~/Prog/mutekh/examples/avatar + cp ~/TTool/executableCode/Makefile.soclib ~/Prog/mutekh/examples/avatar/Makefile + +compilesoclib: + cd ~/Prog/mutekh; make CONF=examples/avatar/config BUILD=soclib-$(MUTEKH_CPU):pf-tutorial + +runsoclib: + echo "running soclib" + cd ~/Prog/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial; SOCLIB_GDB=S ./system.x $(SOCLIB_CPU):$(SOCLIB_CPU_COUNT) ~/Prog/mutekh/avatar-soclib-$(MUTEKH_CPU).out +allsoclib: updateruntime updategeneratedcode compilesoclib runsoclib + + +updateruntime_hw: + cp ~/TTool/executablecode/src_soclib/*.c ~/Prog/mutekh/libavatar/ + cp ~/TTool/executablecode/src_soclib/include/*.h ~/Prog/mutekh/libavatar/include/ + +updategeneratedcode_hw: +#DG 31.10. prendre version du code appli pour soclib materiel + cp ~/TTool/executablecode/generated_src_soclib/*.h ~/Prog/mutekh/examples/avatar +#DG 31.10. prendre version du code appli pour soclib materiel + cp ~/TTool/executablecode/generated_src_soclib/*.c ~/Prog/mutekh/examples/avatar + + cp ~/TTool/executableCode/Makefile.soclib ~/Prog/mutekh/examples/avatar/Makefile + +compilesoclib_hw: + cd ~/Prog/mutekh; make CONF=examples/avatar/config BUILD=soclib-$(MUTEKH_CPU):pf-tutorial + +#DG 31.10.2014 ici ajoute un make dans le repertoire de la plateforme materielle +runsoclib_hw: + echo "running soclib" + cd ~/Prog/soclib/soclib/platform/topcells/caba-vgmn-mutekh_kernel_tutorial; make; SOCLIB_GDB=S ./system.x $(SOCLIB_CPU):$(SOCLIB_CPU_COUNT) ~/Prog/mutekh/avatar-soclib-$(MUTEKH_CPU).out +allsoclib: updateruntime updategeneratedcode compilesoclib runsoclib + diff --git a/preinstallTTool/macos/TTool/executablecode/generated_src/README b/preinstallTTool/macos/TTool/executablecode/generated_src/README new file mode 100644 index 0000000000000000000000000000000000000000..d274fe577921101f8158c64ab520b72c133a8230 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/generated_src/README @@ -0,0 +1 @@ +This directory is meant to contain the code generated by TTool from AVATAR design models diff --git a/preinstallTTool/macos/TTool/executablecode/src/asyncchannel.c b/preinstallTTool/macos/TTool/executablecode/src/asyncchannel.c new file mode 100644 index 0000000000000000000000000000000000000000..e2ce2ac48a62b888eedc7940c74b1ae1f3953013 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/asyncchannel.c @@ -0,0 +1,56 @@ +#include <stdlib.h> + +#include "message.h" +#include "asyncchannel.h" +#include "myerrors.h" + + +asyncchannel *getNewAsyncchannel(char *outname, char *inname, int isBlocking, int maxNbOfMessages) { + asyncchannel * asyncch = (asyncchannel *)(malloc(sizeof(struct asyncchannel))); + if (asyncch == NULL) { + criticalError("Allocation of asyncchannel failed"); + } + asyncch->inname = inname; + asyncch->outname = outname; + asyncch->isBlocking = isBlocking; + asyncch->maxNbOfMessages = maxNbOfMessages; + + return asyncch; +} + +void destroyAsyncchannel(asyncchannel *asyncch) { + free(asyncch); +} + +message* getAndRemoveOldestMessageFromAsyncChannel(asyncchannel *channel) { + message *msg; + message *previous; + + if (channel->currentNbOfMessages == 0) { + return NULL; + } + + if (channel->currentNbOfMessages == 1) { + channel->currentNbOfMessages = 0; + msg = channel->pendingMessages; + channel->pendingMessages = NULL; + return msg; + } + + msg = channel->pendingMessages; + previous = msg; + while(msg->next != NULL) { + previous = msg; + msg = msg->next; + } + + channel->currentNbOfMessages = channel->currentNbOfMessages -1; + previous->next = NULL; + return msg; +} + +void addMessageToAsyncChannel(asyncchannel *channel, message *msg) { + msg->next = channel->pendingMessages; + channel->pendingMessages = msg; + channel->currentNbOfMessages = channel->currentNbOfMessages+1; +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/asyncchannel.h b/preinstallTTool/macos/TTool/executablecode/src/asyncchannel.h new file mode 100644 index 0000000000000000000000000000000000000000..8f812359dbd67311f37391807b883890ee163f04 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/asyncchannel.h @@ -0,0 +1,28 @@ +#ifndef ASYNCCHANNEL_H +#define ASYNCCHANNEL_H + +struct asyncchannel; + +#include "message.h" +#include "request.h" + + +struct asyncchannel { + char *outname; + char *inname; + int isBlocking; // In writing. Reading is always blocking + int maxNbOfMessages; // + struct request* outWaitQueue; + struct request* inWaitQueue; + message *pendingMessages; + int currentNbOfMessages; +}; + +typedef struct asyncchannel asyncchannel; + +asyncchannel *getNewAsyncchannel(char *inname, char *outname, int isBlocking, int maxNbOfMessages); +void destroyAsyncchannel(asyncchannel *syncch); +message* getAndRemoveOldestMessageFromAsyncChannel(asyncchannel *channel); +void addMessageToAsyncChannel(asyncchannel *channel, message *msg); + +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/debug.c b/preinstallTTool/macos/TTool/executablecode/src/debug.c new file mode 100644 index 0000000000000000000000000000000000000000..067d0a8c17e3861ce60191884c13041d9e88431b --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/debug.c @@ -0,0 +1,86 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#include "debug.h" + + +#define DEBUG_ON 1 +#define DEBUG_OFF 2 + +int debug = DEBUG_OFF; + +void activeDebug() { + debug = DEBUG_ON; +} + +void unactiveDebug() { + debug = DEBUG_OFF; +} + +void debugThreeInts(char *msg, int value1, int value2, int value3) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %d, %d, %d\n", msg, value1, value2, value3); + } +} + +void debugTwoInts(char *msg, int value1, int value2) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %d, %d\n", msg, value1, value2); + } +} + +void debugInt(char *msg, int value) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %d\n", msg, value); + } +} + +void debugLong(char *msg, long value) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s: %ld\n", msg, value); + } +} + +void debugMsg(char *msg) { + if (debug == DEBUG_OFF) { + return; + } + + if (msg != NULL) { + printf("DT> %s\n", msg); + } +} + +void debug2Msg(char *name, char *msg) { + if (debug == DEBUG_OFF) { + return; + } + + if ((name != NULL) && (msg != NULL)) { + printf("DT - %s -> %s\n", name, msg); + } +} + +void debugTime(char *msg, struct timespec *ts) { + if (debug == DEBUG_OFF) { + return; + } + printf("DT> (-------t------->) %s sec=%ld nsec=%ld\n", msg, ts->tv_sec, ts->tv_nsec); +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/debug.h b/preinstallTTool/macos/TTool/executablecode/src/debug.h new file mode 100644 index 0000000000000000000000000000000000000000..7e73f3ce91684420195a07eb365184b0629e74f3 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/debug.h @@ -0,0 +1,19 @@ + + +#ifndef DEBUG_H +#define DEBUG_H + +void activeDebug(); +void unactiveDebug(); + +void debugThreeInts(char *msg, int value1, int value2, int value3); +void debugTwoInts(char *msg, int value1, int value2); +void debugLong(char *msg, long value); +void debugInt(char *msg, int value); +void debugMsg(char *msg); +void debug2Msg(char *name, char* msg); +void debugTime(char* msg, struct timespec *ts); + +#endif + + diff --git a/preinstallTTool/macos/TTool/executablecode/src/defs.h b/preinstallTTool/macos/TTool/executablecode/src/defs.h new file mode 100644 index 0000000000000000000000000000000000000000..3b997bfdf885b560dc4fde8264e8b5026565de10 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/defs.h @@ -0,0 +1,9 @@ +#ifndef DEFS_H +#define DEFS_H + +#define bool int +#define true 1 +#define false 0 + + +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/message.c b/preinstallTTool/macos/TTool/executablecode/src/message.c new file mode 100644 index 0000000000000000000000000000000000000000..1153a882f51d93d8596621162f82278bc01d7158 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/message.c @@ -0,0 +1,59 @@ + +#include <stdlib.h> +#include <unistd.h> +#include <pthread.h> + +#include "message.h" +#include "myerrors.h" + +long __id_message = 0; +pthread_mutex_t __message_mutex; + + +void initMessages() { + if (pthread_mutex_init(&__message_mutex, NULL) < 0) { exit(-1);} +} + +long getMessageID() { + long tmp; + pthread_mutex_lock(&__message_mutex); + tmp = __id_message; + __id_message ++; + pthread_mutex_unlock(&__message_mutex); + return tmp; +} + +message *getNewMessageWithParams(int nbOfParams) { + + message *msg = (message *)(malloc(sizeof(struct message))); + if (msg == NULL) { + criticalError("Allocation of request failed"); + } + msg->nbOfParams = nbOfParams; + msg->params = (int *)(malloc(sizeof(int) * nbOfParams)); + msg->id = getMessageID(); + return msg; +} + +message *getNewMessage(int nbOfParams, int *params) { + + message *msg = (message *)(malloc(sizeof(struct message))); + if (msg == NULL) { + criticalError("Allocation of request failed"); + } + msg->nbOfParams = nbOfParams; + msg->params = params; + msg->id = getMessageID(); + return msg; +} + + + +void destroyMessageWithParams(message *msg) { + free(msg->params); + free(msg); +} + +void destroyMessage(message *msg) { + free(msg); +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/message.h b/preinstallTTool/macos/TTool/executablecode/src/message.h new file mode 100644 index 0000000000000000000000000000000000000000..700ed07d97f6ae925ceeb6c172238a2f4bd37680 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/message.h @@ -0,0 +1,22 @@ +#ifndef MESSAGE_H +#define MESSAGE_H + + +struct message { + struct message *next; + int nbOfParams; + int *params; + long id; +}; + +typedef struct message message; + +void initMessages(); +message *getNewMessageWithParams(int nbOfParams); +message *getNewMessage(int nbOfParams, int *params); +void destroyMessageWithParams(message *msg); +void destroyMessage(message *msg); + + + +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/myerrors.c b/preinstallTTool/macos/TTool/executablecode/src/myerrors.c new file mode 100644 index 0000000000000000000000000000000000000000..dfe16a1c469f6e11382dfae037b3d4ff89cf8c7b --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/myerrors.c @@ -0,0 +1,24 @@ +#include <stdlib.h> +#include <stdio.h> + +#include "myerrors.h" + + + + +void criticalErrorInt(char *msg, int value) { + if (msg != NULL) { + printf("\nCritical error: %s, %d\n", msg, value); + } + + exit(-1); +} + + +void criticalError(char *msg) { + if (msg != NULL) { + printf("\nCritical error: %s\n", msg); + } + + exit(-1); +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/myerrors.h b/preinstallTTool/macos/TTool/executablecode/src/myerrors.h new file mode 100644 index 0000000000000000000000000000000000000000..8300da3ccfd1b5f2efd2f3514a8f543409363003 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/myerrors.h @@ -0,0 +1,11 @@ + + +#ifndef MY_ERRORS_H +#define MY_ERRORS_H + +void criticalErrorInt(char *msg, int value); +void criticalError(char *msg); + +#endif + + diff --git a/preinstallTTool/macos/TTool/executablecode/src/mytimelib.c b/preinstallTTool/macos/TTool/executablecode/src/mytimelib.c new file mode 100644 index 0000000000000000000000000000000000000000..d39c07ea85c258ce227365364163ce1761038663 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/mytimelib.c @@ -0,0 +1,108 @@ +#include<time.h> + +#include "mytimelib.h" +#include "random.h" +#include "debug.h" + +#ifndef CLOCK_REALTIME +#define CLOCK_REALTIME + +int clock_gettime(struct timespec *ts) { + struct timeval tv; + gettimeofday(&tv, NULL); + ts->tv_sec = tv.tv_sec; + ts->tv_nsec = tv.tv_usec * 1000; + return 0; +} + +int my_clock_gettime(struct timespec *tp) { + return clock_gettime(tp); +} + +#else + +int my_clock_gettime(struct timespec *tp) { + return clock_gettime(CLOCK_REALTIME, tp); +} + +#endif + + + +void addTime(struct timespec *src1, struct timespec *src2, struct timespec *dest) { + dest->tv_nsec = src1->tv_nsec + src2->tv_nsec; + dest->tv_sec = src1->tv_sec + src2->tv_sec; + if (dest->tv_nsec > 1000000000) { + dest->tv_sec = dest->tv_sec + (dest->tv_nsec / 1000000000); + dest->tv_nsec = dest->tv_nsec % 1000000000; + } +} + +void diffTime(struct timespec *src1, struct timespec *src2, struct timespec *dest) { + int diff = 0; + if (src1->tv_nsec > src2->tv_nsec) { + diff ++; + dest->tv_nsec = src2->tv_nsec - src1->tv_nsec + 1000000000; + } else { + dest->tv_nsec = src2->tv_nsec - src1->tv_nsec; + } + + dest->tv_sec = src2->tv_sec - src1->tv_sec - diff; +} + + + +int isBefore(struct timespec *src1, struct timespec *src2) { + if (src1->tv_sec > src2->tv_sec) { + return 0; + } + + if (src1->tv_sec < src2->tv_sec) { + return 1; + } + + if (src1->tv_nsec < src2->tv_nsec) { + return 1; + } + return 0; +} + +void minTime(struct timespec *src1, struct timespec *src2, struct timespec *dest) { + debugMsg("MIN TIME COMPUTATION"); + if (isBefore(src1,src2)) { + dest->tv_nsec = src1->tv_nsec; + dest->tv_sec = src1->tv_sec; + } else { + dest->tv_nsec = src2->tv_nsec; + dest->tv_sec = src2->tv_sec; + } + +} + + +void delayToTimeSpec(struct timespec *ts, long delay) { + ts->tv_nsec = (delay % 1000000)*1000; + ts->tv_sec = (delay / 1000000); +} + +void waitFor(long minDelay, long maxDelay) { + struct timespec tssrc; + struct timespec tsret; + int delay; + + + + debugMsg("Computing random delay"); + //debugLong("Min delay", minDelay); + //debugLong("Max delay", maxDelay); + delay = computeLongRandom(minDelay, maxDelay); + + debugLong("Random delay=", delay); + + delayToTimeSpec(&tssrc, delay); + + debugLong("............. waiting For", delay); + nanosleep(&tssrc, &tsret); + debugLong("............. waiting Done for: ", delay); +} + diff --git a/preinstallTTool/macos/TTool/executablecode/src/mytimelib.h b/preinstallTTool/macos/TTool/executablecode/src/mytimelib.h new file mode 100644 index 0000000000000000000000000000000000000000..76ed5d22fcd7cf9a2750cf2a9726f5cdb89e48f2 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/mytimelib.h @@ -0,0 +1,19 @@ +#ifndef MYTIMELIB_H +#define MYTIMELIB_H + +#include <time.h> +#include <sys/time.h> + + + +// in usec + +int my_clock_gettime(struct timespec *tp); +void addTime(struct timespec *src1, struct timespec *src2, struct timespec *dest); +void diffTime(struct timespec *src1, struct timespec *src2, struct timespec *dest); +int isBefore(struct timespec *src1, struct timespec *src2); +void minTime(struct timespec *src1, struct timespec *src2, struct timespec *dest); +void delayToTimeSpec(struct timespec *ts, long delay); +extern void waitFor(long minDelay, long maxDelay); + +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/random.c b/preinstallTTool/macos/TTool/executablecode/src/random.c new file mode 100644 index 0000000000000000000000000000000000000000..b4bbddb19ac1e4a51bf5c0205aab571a7580dd32 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/random.c @@ -0,0 +1,43 @@ + +#include <stdlib.h> +#include <unistd.h> +#include <time.h> +#include <limits.h> + +#include "random.h" +#include "debug.h" +#include <math.h> + +#include "mytimelib.h" + +int computeRandom(int min, int max) { + if (min == max) { + return min; + } + return (rand() % (max - min)) + min; +} + +long computeLongRandom(long min, long max) { + + if (min == max) { + return min; + } + + + long rand0 = (long)rand(); + long rand1 = rand0 % (max - min); + //debugLong("min=", min); + //debugLong("max=", max); + //debugLong("rand0", rand0); + //debugLong("rand1", rand1); + //debugLong("Random long", rand1 + min); + return rand1 + min; +} + +void initRandom() { + struct timespec ts; + + my_clock_gettime(&ts); + + srand((int)(ts.tv_nsec)); +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/random.h b/preinstallTTool/macos/TTool/executablecode/src/random.h new file mode 100644 index 0000000000000000000000000000000000000000..ecff7cb43cb9d3c38fd390243ad0cbd186fead97 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/random.h @@ -0,0 +1,7 @@ +#ifndef RANDOM_H +#define RANDOM_H + +extern void initRandom(); +extern int computeRandom(int min, int max); +extern long computeLongRandom(long min, long max); +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/request.c b/preinstallTTool/macos/TTool/executablecode/src/request.c new file mode 100644 index 0000000000000000000000000000000000000000..af1231c61b71a7aab28063dfcf5eefc9faabf6b5 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/request.c @@ -0,0 +1,271 @@ + +#include <stdlib.h> +#include <unistd.h> + +#include "request.h" +#include "mytimelib.h" +#include "myerrors.h" +#include "random.h" +#include "debug.h" + + +request *getNewRequest(int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params) { + request *req = (request *)(malloc(sizeof(struct request))); + + if (req == NULL) { + criticalError("Allocation of request failed"); + } + + makeNewRequest(req, ID, type, hasDelay, minDelay, maxDelay, nbOfParams, params); + return req; +} + + +// Delays are in microseconds +void makeNewRequest(request *req, int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params) { + long delay; + int i; + + req->next = NULL; + req->listOfRequests = NULL; + req->nextRequestInList = NULL; + + req->type = type; + req->ID = ID; + req->hasDelay = hasDelay; + + if (req->hasDelay > 0) { + delay = computeLongRandom(minDelay, maxDelay); + delayToTimeSpec(&(req->delay), delay); + } + + req->selected = 0; + req->nbOfParams = nbOfParams; + req->params = params; + + req->alreadyPending = 0; + req->delayElapsed = 0; + + req->relatedRequest = NULL; + + if (type == SEND_ASYNC_REQUEST) { + // Must create a new message + req->msg = getNewMessageWithParams(nbOfParams); + for(i=0; i<nbOfParams; i++) { + req->msg->params[i] = *(params[i]); + } + } + +} + + + + +void destroyRequest(request *req) { + free((void *)req); +} + +int isRequestSelected(request *req) { + return req->selected; +} + +int nbOfRequests(setOfRequests *list) { + int cpt = 0; + request *req; + + req = list->head; + + while(req != NULL) { + cpt ++; + req = req->nextRequestInList; + } + + return cpt; +} + +request *getRequestAtIndex(setOfRequests *list, int index) { + int cpt = 0; + request * req = list->head; + + while(cpt < index) { + req = req->nextRequestInList; + cpt ++; + } + + return req; + +} + + +request * addToRequestQueue(request *list, request *requestToAdd) { + request *origin = list; + + if (list == NULL) { + return requestToAdd; + } + + while(list->next != NULL) { + list = list->next; + } + + list->next = requestToAdd; + + requestToAdd->next = NULL; + + return origin; +} + +request * removeRequestFromList(request *list, request *requestToRemove) { + request *origin = list; + + if (list == requestToRemove) { + return list->next; + } + + + while(list->next != requestToRemove) { + list = list->next; + } + + list->next = requestToRemove->next; + + return origin; +} + + +void copyParameters(request *src, request *dst) { + int i; + for(i=0; i<dst->nbOfParams; i++) { + *(dst->params[i]) = *(src->params[i]); + } +} + + +void clearListOfRequests(setOfRequests *list) { + list->head = NULL; +} + +setOfRequests *newListOfRequests(pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex) { + setOfRequests *list = (setOfRequests *)(malloc(sizeof(setOfRequests))); + list->head = NULL; + list->wakeupCondition = wakeupCondition; + list->mutex = mutex; + + return list; +} + +void fillListOfRequests(setOfRequests *list, char *name, pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex) { + list->head = NULL; + list->owner = name; + list->wakeupCondition = wakeupCondition; + list->mutex = mutex; +} + + +void addRequestToList(setOfRequests *list, request* req) { + request *tmpreq; + + if (list == NULL) { + criticalError("NULL List in addRequestToList"); + } + + if (req == NULL) { + criticalError("NULL req in addRequestToList"); + } + + req->listOfRequests = list; + + if (list->head == NULL) { + list->head = req; + req->nextRequestInList = NULL; + return; + } + + tmpreq = list->head; + while(tmpreq->nextRequestInList != NULL) { + tmpreq = tmpreq->nextRequestInList; + } + + tmpreq->nextRequestInList = req; + req->nextRequestInList = NULL; +} + +void removeAllPendingRequestsFromPendingLists(request *req, int apartThisOne) { + setOfRequests *list = req->listOfRequests; + request *reqtmp; + + if (list == NULL) { + return; + } + + reqtmp = list->head; + + while(reqtmp != NULL) { + debugInt("Considering request of type", reqtmp->type); + if (reqtmp->alreadyPending) { + if (reqtmp->type == RECEIVE_SYNC_REQUEST) { + debugMsg("Removing send sync request from inWaitQueue"); + reqtmp->syncChannel->inWaitQueue = removeRequestFromList(reqtmp->syncChannel->inWaitQueue, reqtmp); + debugMsg("done"); + } + + if (reqtmp->type == SEND_SYNC_REQUEST) { + debugMsg("Removing receive sync request from outWaitQueue"); + reqtmp->syncChannel->outWaitQueue = removeRequestFromList(reqtmp->syncChannel->outWaitQueue, reqtmp); + debugMsg("done"); + } + + if (reqtmp->type == RECEIVE_BROADCAST_REQUEST) { + debugMsg("Removing broadcast receive request from inWaitQueue"); + reqtmp->syncChannel->inWaitQueue = removeRequestFromList(reqtmp->syncChannel->inWaitQueue, reqtmp); + debugMsg("done"); + } + } + reqtmp = reqtmp->nextRequestInList; + } +} + + +// Identical means belonging to the same ListOfRequest +// Returns the identical request if found, otherwise, null +request *hasIdenticalRequestInListOfSelectedRequests(request *req, request *list) { + + while(list != NULL) { + if (list->listOfRequests == req->listOfRequests) { + return list; + } + list = list->relatedRequest; + } + + return NULL; +} + +request* replaceInListOfSelectedRequests(request *oldRequest, request *newRequest, request *list) { + request *head = list; + + if (list == oldRequest) { + newRequest->relatedRequest = oldRequest->relatedRequest; + return newRequest; + } + + //list=list->relatedRequest; + while(list->relatedRequest != oldRequest) { + list = list->relatedRequest; + } + + list->relatedRequest = newRequest; + newRequest->relatedRequest = oldRequest->relatedRequest; + + return head; +} + + +int nbOfRelatedRequests(request *list) { + int cpt = 0; + while(list->relatedRequest != NULL) { + cpt ++; + list = list->relatedRequest; + } + + return cpt; +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/request.h b/preinstallTTool/macos/TTool/executablecode/src/request.h new file mode 100644 index 0000000000000000000000000000000000000000..00b93c8e5a007e2eecf6bde40417cdfb9457edc2 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/request.h @@ -0,0 +1,89 @@ +#ifndef REQUEST_H +#define REQUEST_H + +#include <time.h> +#include <pthread.h> + +struct request; + +#include "syncchannel.h" +#include "asyncchannel.h" +#include "message.h" + +#define SEND_SYNC_REQUEST 0 +#define RECEIVE_SYNC_REQUEST 2 +#define SEND_ASYNC_REQUEST 4 +#define RECEIVE_ASYNC_REQUEST 6 +#define DELAY 8 +#define IMMEDIATE 10 +#define SEND_BROADCAST_REQUEST 12 +#define RECEIVE_BROADCAST_REQUEST 14 + +typedef struct timespec timespec; + +struct setOfRequests { + char* owner; + struct request *head; + timespec startTime; + timespec completionTime; + pthread_cond_t *wakeupCondition; + pthread_mutex_t *mutex; + + int hasATimeRequest; // Means that at least on request of the list hasn't completed yet its time delay + timespec minTimeToWait; + struct request *selectedRequest; +}; + +typedef struct setOfRequests setOfRequests; + +struct request { + struct request *next; + struct setOfRequests* listOfRequests; + struct request* nextRequestInList; + struct request* relatedRequest; // For synchro and broadcast + struct syncchannel *syncChannel; + struct asyncchannel *asyncChannel; + + int type; + int ID; + int hasDelay;; + timespec delay; + int nbOfParams; // synchronous com. + int **params; // synchronous com. + message *msg; // Asynchronous comm. + + + // Filled by the request manager + int executable; + int selected; + int alreadyPending; // Whether it has been taken into account for execution or not + int delayElapsed; + timespec myStartTime; // Time at which the delay has expired +}; + +typedef struct request request; + +void makeNewRequest(request *req, int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params); +request *getNewRequest(int ID, int type, int hasDelay, long minDelay, long maxDelay, int nbOfParams, int **params); +void destroyRequest(request *req); +extern int isRequestSelected(request *req); + +int nbOfRequests(setOfRequests *list); +request *getRequestAtIndex(setOfRequests *list, int index); + +request * addToRequestQueue(request *list, request *requestToAdd); +request * removeRequestFromList(request *list, request *requestToRemove); + +void copyParameters(request *src, request *dst); + +setOfRequests *newListOfRequests(pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex); +void addRequestToList(setOfRequests *list, request* req); +void clearListOfRequests(setOfRequests *list); +void fillListOfRequests(setOfRequests *list, char *name, pthread_cond_t *wakeupCondition, pthread_mutex_t *mutex); + +void removeAllPendingRequestsFromPendingLists(request *req, int apartThisOne); +request *hasIdenticalRequestInListOfSelectedRequests(request *req, request *list); +request* replaceInListOfSelectedRequests(request *oldRequest, request *newRequest, request *list); +int nbOfRelatedRequests(request *list); + +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/request_manager.c b/preinstallTTool/macos/TTool/executablecode/src/request_manager.c new file mode 100644 index 0000000000000000000000000000000000000000..e1c39ba777944c41c018918f4fa7594eaf3f96b5 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/request_manager.c @@ -0,0 +1,570 @@ +#include <stdlib.h> +#include <pthread.h> +#include <time.h> + +#include "request_manager.h" +#include "request.h" +#include "myerrors.h" +#include "debug.h" +#include "mytimelib.h" +#include "random.h" +#include "asyncchannel.h" +#include "tracemanager.h" + + + +void executeSendSyncTransaction(request *req) { + int cpt; + request *selectedReq; + + // At least one transaction available -> must select one randomly + // First: count how many of them are available + // Then, select one + // Broadcast the new condition! + + cpt = 0; + request* currentReq = req->syncChannel->inWaitQueue; + debugMsg("Execute send sync tr"); + + while(currentReq != NULL) { + cpt ++; + currentReq = currentReq->next; + } + + cpt = random() % cpt; + + // Head of the list? + selectedReq = req->syncChannel->inWaitQueue; + while (cpt > 0) { + selectedReq = selectedReq->next; + cpt --; + } + + // Remove all related request from list requests + //req->syncChannel->inWaitQueue = removeRequestFromList(req->syncChannel->inWaitQueue, selectedReq); + debugMsg("Setting related request"); + req->relatedRequest = selectedReq; + + // Select the selected request, and notify the information + selectedReq->selected = 1; + selectedReq->listOfRequests->selectedRequest = selectedReq; + + // Handle parameters + copyParameters(req, selectedReq); + + debugMsg("Signaling"); + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + + traceSynchroRequest(req, selectedReq); +} + +void executeReceiveSyncTransaction(request *req) { + int cpt; + request *selectedReq; + + // At least one transaction available -> must select one randomly + // First: count how many of them are available + // Then, select one + // Broadcast the new condition! + + request* currentReq = req->syncChannel->outWaitQueue; + cpt = 0; + debugMsg("Execute receive sync tr"); + + while(currentReq != NULL) { + cpt ++; + //debugInt("cpt", cpt); + currentReq = currentReq->next; + } + cpt = random() % cpt; + selectedReq = req->syncChannel->outWaitQueue; + while (cpt > 0) { + selectedReq = selectedReq->next; + cpt --; + } + + //req->syncChannel->outWaitQueue = removeRequestFromList(req->syncChannel->outWaitQueue, selectedReq); + debugMsg("Setting related request"); + req->relatedRequest = selectedReq; + + // Select the request, and notify the information in the channel + selectedReq->selected = 1; + selectedReq->listOfRequests->selectedRequest = selectedReq; + + // Handle parameters + copyParameters(selectedReq, req); + + debugMsg("Signaling"); + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + + traceSynchroRequest(selectedReq, req); +} + + +void executeSendAsyncTransaction(request *req) { + request *selectedReq; + + // Full FIFO? + if (req->asyncChannel->currentNbOfMessages == req->asyncChannel->maxNbOfMessages) { + // Must remove the oldest message + getAndRemoveOldestMessageFromAsyncChannel(req->asyncChannel); + } + + addMessageToAsyncChannel(req->asyncChannel, req->msg); + + debugMsg("Signaling async write to all requests waiting "); + selectedReq = req->asyncChannel->inWaitQueue; + while (selectedReq != NULL) { + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + selectedReq = selectedReq->next; + } + debugMsg("Signaling done"); + + traceAsynchronousSendRequest(req); +} + +void executeReceiveAsyncTransaction(request *req) { + int i; + request *selectedReq; + + req->msg = getAndRemoveOldestMessageFromAsyncChannel(req->asyncChannel); + + selectedReq = req->asyncChannel->outWaitQueue; + + // Must recopy parameters + for(i=0; i<req->nbOfParams; i++) { + *(req->params[i]) = req->msg->params[i]; + } + + traceAsynchronousReceiveRequest(req); + + // unallocate message + destroyMessageWithParams(req->msg); + + debugMsg("Signaling async read to all requests waiting "); + while (selectedReq != NULL) { + pthread_cond_signal(selectedReq->listOfRequests->wakeupCondition); + selectedReq = selectedReq->next; + } + debugMsg("Signaling done"); +} + + +void executeSendBroadcastTransaction(request *req) { + int cpt; + request *tmpreq; + + // At least one transaction available -> must select all of them + // but at most one per task + // Then, broadcast the new condition! + + request* currentReq = req->syncChannel->inWaitQueue; + request* currentLastReq = req; + debugMsg("Execute broadcast sync tr"); + + + while(currentReq != NULL) { + tmpreq = hasIdenticalRequestInListOfSelectedRequests(currentReq, req->relatedRequest); + if (tmpreq != NULL) { + // Must select one of the two + // If =1, replace, otherwise, just do nothing + cpt = random() % 2; + if (cpt == 1) { + debugMsg("Replacing broadcast request"); + req->relatedRequest = replaceInListOfSelectedRequests(tmpreq, currentReq, req->relatedRequest); + currentReq->listOfRequests->selectedRequest = currentReq; + copyParameters(req, currentReq); + currentReq->selected = 1; + currentLastReq = req; + while(currentLastReq->relatedRequest != NULL) { + currentLastReq = currentLastReq->relatedRequest; + } + } + } else { + currentLastReq->relatedRequest = currentReq; + currentReq->relatedRequest = NULL; + currentReq->selected = 1; + currentReq->listOfRequests->selectedRequest = currentReq; + copyParameters(req, currentReq); + currentLastReq = currentReq; + } + + currentReq = currentReq->next; + + debugInt("Nb of requests selected:", nbOfRelatedRequests(req)); + } + + + debugMsg("Signaling"); + currentReq = req->relatedRequest; + cpt = 0; + while(currentReq != NULL) { + cpt ++; + pthread_cond_signal(currentReq->listOfRequests->wakeupCondition); + traceSynchroRequest(req, currentReq); + currentReq = currentReq->relatedRequest; + } + + debugInt("NUMBER of broadcast Requests", cpt); +} + + +int executable(setOfRequests *list, int nb) { + int cpt = 0; + //int index = 0; + request *req = list->head; + timespec ts; + int tsDone = 0; + + debugMsg("Starting loop"); + + list->hasATimeRequest = 0; + + while(req != NULL) { + if (!(req->delayElapsed)) { + if (req->hasDelay) { + // Is the delay elapsed??? + debugTime("begin time of list of request", &list->startTime); + debugTime("start time of this request", &req->myStartTime); + if (tsDone == 0) { + my_clock_gettime(&ts); + debugTime("Current time", &ts); + tsDone = 1; + } + + if (isBefore(&ts, &(req->myStartTime)) == 1) { + // Delay not elapsed + debugMsg("---------t--------> delay NOT elapsed"); + if (list->hasATimeRequest == 0) { + list->hasATimeRequest = 1; + list->minTimeToWait.tv_nsec = req->myStartTime.tv_nsec; + list->minTimeToWait.tv_sec = req->myStartTime.tv_sec; + } else { + minTime(&(req->myStartTime), &(list->minTimeToWait),&(list->minTimeToWait)); + } + } else { + // Delay elapsed + debugMsg("---------t--------> delay elapsed"); + req->delayElapsed = 1; + } + } else { + req->delayElapsed = 1; + } + } + req = req->nextRequestInList; + } + + req = list->head; + while((req != NULL) && (cpt < nb)) { + req->executable = 0; + if (req->delayElapsed) { + if (req->type == SEND_SYNC_REQUEST) { + debugMsg("Send sync"); + + if (req->syncChannel->inWaitQueue != NULL) { + debugMsg("Send sync executable"); + req->executable = 1; + cpt ++; + } else { + debugMsg("Send sync not executable"); + } + //index ++; + } + + if (req->type == RECEIVE_SYNC_REQUEST) { + debugMsg("receive sync"); + if (req->syncChannel->outWaitQueue != NULL) { + req->executable = 1; + cpt ++; + } + //index ++; + } + + if (req->type == SEND_ASYNC_REQUEST) { + debugMsg("Send async"); + + if (!(req->asyncChannel->isBlocking)) { + // Can always add a message -> executable + debugMsg("Send async executable since non blocking"); + req->executable = 1; + cpt ++; + + //blocking case ... channel full? + } else { + if (req->asyncChannel->currentNbOfMessages < req->asyncChannel->maxNbOfMessages) { + // Not full! + debugMsg("Send async executable since channel not full"); + req->executable = 1; + cpt ++; + } else { + debugMsg("Send async not executable: full, and channel is blocking"); + } + } + } + + if (req->type == RECEIVE_ASYNC_REQUEST) { + debugMsg("receive async"); + if (req->asyncChannel->currentNbOfMessages >0) { + debugMsg("Receive async executable: not empty"); + req->executable = 1; + cpt ++; + } else { + debugMsg("Receive async not executable: empty"); + } + //index ++; + } + + + if (req->type == SEND_BROADCAST_REQUEST) { + debugMsg("send broadcast"); + req->executable = 1; + cpt ++; + } + + if (req->type == RECEIVE_BROADCAST_REQUEST) { + debugMsg("receive broadcast"); + // A receive broadcast is never executable + req->executable = 0; + //index ++; + } + + + + + if (req->type == IMMEDIATE) { + debugMsg("immediate"); + req->executable = 1; + cpt ++; + } + } + + req = req->nextRequestInList; + + } + + return cpt; +} + +void private__makeRequestPending(setOfRequests *list) { + request *req = list->head; + while(req != NULL) { + if ((req->delayElapsed) && (!(req->alreadyPending))) { + if (req->type == SEND_SYNC_REQUEST) { + debugMsg("Adding pending request in outWaitqueue"); + req->syncChannel->outWaitQueue = addToRequestQueue(req->syncChannel->outWaitQueue, req); + req->alreadyPending = 1; + } + + if (req->type == RECEIVE_SYNC_REQUEST) { + debugMsg("Adding pending request in inWaitqueue"); + req->alreadyPending = 1; + req->syncChannel->inWaitQueue = addToRequestQueue(req->syncChannel->inWaitQueue, req); + } + + if (req->type == SEND_ASYNC_REQUEST) { + debugMsg("Adding pending request in outWaitqueue"); + req->asyncChannel->outWaitQueue = addToRequestQueue(req->asyncChannel->outWaitQueue, req); + req->alreadyPending = 1; + } + + if (req->type == RECEIVE_ASYNC_REQUEST) { + debugMsg("Adding pending request in inWaitqueue"); + req->alreadyPending = 1; + req->asyncChannel->inWaitQueue = addToRequestQueue(req->asyncChannel->inWaitQueue, req); + } + + if (req->type == RECEIVE_BROADCAST_REQUEST) { + debugMsg("Adding pending broadcast request in inWaitqueue"); + req->alreadyPending = 1; + req->syncChannel->inWaitQueue = addToRequestQueue(req->syncChannel->inWaitQueue, req); + } + + if (req->type == SEND_BROADCAST_REQUEST) { + debugMsg("Adding pending broadcast request in outWaitqueue"); + req->alreadyPending = 1; + req->syncChannel->outWaitQueue = addToRequestQueue(req->syncChannel->outWaitQueue, req); + } + + } + + req = req->nextRequestInList; + } +} + +void private__makeRequest(request *req) { + if (req->type == SEND_SYNC_REQUEST) { + executeSendSyncTransaction(req); + } + + if (req->type == RECEIVE_SYNC_REQUEST) { + executeReceiveSyncTransaction(req); + } + + if (req->type == SEND_ASYNC_REQUEST) { + executeSendAsyncTransaction(req); + } + + if (req->type == RECEIVE_ASYNC_REQUEST) { + executeReceiveAsyncTransaction(req); + } + + if (req->type == SEND_BROADCAST_REQUEST) { + executeSendBroadcastTransaction(req); + } + + // IMMEDIATE: Nothing to do + + // In all cases: remove other requests of the same list from their pending form + debugMsg("Removing original req"); + removeAllPendingRequestsFromPendingLists(req, 1); + removeAllPendingRequestsFromPendingListsRelatedRequests(req); + /*if (req->relatedRequest != NULL) { + debugMsg("Removing related req"); + removeAllPendingRequestsFromPendingLists(req->relatedRequest, 0); + }*/ + +} + +void removeAllPendingRequestsFromPendingListsRelatedRequests(request *req) { + if (req->relatedRequest != NULL) { + debugMsg("Removing related req"); + removeAllPendingRequestsFromPendingLists(req->relatedRequest, 0); + // Recursive call + removeAllPendingRequestsFromPendingListsRelatedRequests(req->relatedRequest); + } +} + + +request *private__executeRequests0(setOfRequests *list, int nb) { + int howMany, found; + int selectedIndex, realIndex; + request *selectedReq; + request *req; + + // Compute which requests can be executed + debugMsg("Counting requests"); + howMany = executable(list, nb); + + debugInt("Counting requests=", howMany); + + if (howMany == 0) { + debugMsg("No pending requests"); + // Must make them pending + + private__makeRequestPending(list); + + return NULL; + } + + debugInt("At least one pending request is executable", howMany); + + + // Select a request + req = list->head; + selectedIndex = (rand() % howMany)+1; + debugInt("selectedIndex=", selectedIndex); + realIndex = 0; + found = 0; + while(req != NULL) { + if (req->executable == 1) { + found ++; + if (found == selectedIndex) { + break; + } + } + realIndex ++; + req = req->nextRequestInList; + } + + debugInt("Getting request at index", realIndex); + selectedReq = getRequestAtIndex(list, realIndex); + selectedReq->selected = 1; + selectedReq->listOfRequests->selectedRequest = selectedReq; + + debugInt("Selected request of type", selectedReq->type); + + // Execute that request + private__makeRequest(selectedReq); + + return selectedReq; +} + + +request *private__executeRequests(setOfRequests *list) { + // Is a request already selected? + + if (list->selectedRequest != NULL) { + return list->selectedRequest; + } + + debugMsg("No request selected -> looking for one!"); + + return private__executeRequests0(list, nbOfRequests(list)); +} + + + + +request *executeOneRequest(setOfRequests *list, request *req) { + req->nextRequestInList = NULL; + req->listOfRequests = list; + list->head = req; + return executeListOfRequests(list); +} + + +void setLocalStartTime(setOfRequests *list) { + request *req = list->head; + + while(req != NULL) { + if (req->hasDelay) { + req->delayElapsed = 0; + addTime(&(list->startTime), &(req->delay), &(req->myStartTime)); + debug2Msg(list->owner, " -----t------>: Request with delay"); + } else { + req->delayElapsed = 1; + req->myStartTime.tv_nsec = list->startTime.tv_nsec; + req->myStartTime.tv_sec = list->startTime.tv_sec; + } + req = req->nextRequestInList; + } +} + + +// Return the executed request +request *executeListOfRequests(setOfRequests *list) { + request *req; + + my_clock_gettime(&list->startTime); + list->selectedRequest = NULL; + setLocalStartTime(list); + + // Try to find a request that could be executed + debug2Msg(list->owner, "Locking mutex"); + pthread_mutex_lock(list->mutex); + debug2Msg(list->owner, "Mutex locked"); + + debug2Msg(list->owner, "Going to execute request"); + + while((req = private__executeRequests(list)) == NULL) { + debug2Msg(list->owner, "Waiting for request!"); + if (list->hasATimeRequest == 1) { + debug2Msg(list->owner, "Waiting for a request and at most for a given time"); + debugTime("Min time to wait=", &(list->minTimeToWait)); + pthread_cond_timedwait(list->wakeupCondition, list->mutex, &(list->minTimeToWait)); + } else { + debug2Msg(list->owner, "Releasing mutex"); + pthread_cond_wait(list->wakeupCondition, list->mutex); + } + debug2Msg(list->owner, "Waking up for requests! -> getting mutex"); + } + + debug2Msg(list->owner, "Request selected!"); + + my_clock_gettime(&list->completionTime); + + pthread_mutex_unlock(list->mutex); + debug2Msg(list->owner, "Mutex unlocked"); + return req; +} + diff --git a/preinstallTTool/macos/TTool/executablecode/src/request_manager.h b/preinstallTTool/macos/TTool/executablecode/src/request_manager.h new file mode 100644 index 0000000000000000000000000000000000000000..e2ae0f800025b9394d6488c012b47f7396aaf609 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/request_manager.h @@ -0,0 +1,14 @@ +#ifndef REQUEST_MANAGER_H +#define REQUEST_MANAGER_H + + +#include "request.h" +#include "syncchannel.h" + + +request *executeOneRequest(setOfRequests *list, request *req); +request *executeListOfRequests(setOfRequests *list); + +void removeAllPendingRequestsFromPendingListsRelatedRequests(request *req); + +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/syncchannel.c b/preinstallTTool/macos/TTool/executablecode/src/syncchannel.c new file mode 100644 index 0000000000000000000000000000000000000000..e1c90875f2574a15318facbda32b27f918f82592 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/syncchannel.c @@ -0,0 +1,41 @@ +#include <stdlib.h> + + +#include "syncchannel.h" +#include "request.h" +#include "myerrors.h" +#include "debug.h" + + +syncchannel *getNewSyncchannel(char *outname, char *inname) { + syncchannel * syncch = (syncchannel *)(malloc(sizeof(struct syncchannel))); + if (syncch == NULL) { + criticalError("Allocation of request failed"); + } + syncch->inname = inname; + syncch->outname = outname; + syncch->inWaitQueue = NULL; + syncch->outWaitQueue = NULL; + syncch->isBroadcast = false; + return syncch; +} + +void setBroadcast(syncchannel *syncch, bool b) { + syncch->isBroadcast = b; +} + + + +/*request *makeNewSendSync(int hasDelay, long delay, int nbOfParams, int *params[]) { + request *req = getNewRequest(SEND_SYNC_REQUEST, hasDelay, delay, nbOfParams, params); + return req; +} + +request *makeNewReceiveSync(int hasDelay, long delay, int nbOfParams, int *params[]) { + request *req = getNewRequest(RECEIVE_SYNC_REQUEST, hasDelay, delay, nbOfParams, params); + return req; + }*/ + +void destroySyncchannel(syncchannel *syncch) { + free(syncch); +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/syncchannel.h b/preinstallTTool/macos/TTool/executablecode/src/syncchannel.h new file mode 100644 index 0000000000000000000000000000000000000000..6f4f92de5531f14c36b7d520992eb3decb305cdd --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/syncchannel.h @@ -0,0 +1,27 @@ +#ifndef SYNCCHANNEL_H +#define SYNCCHANNEL_H + +struct syncchannel; + +#include "request.h" +#include "defs.h" + +struct syncchannel { + char *outname; + char *inname; + struct request* inWaitQueue; + struct request* outWaitQueue; + bool isBroadcast; +}; + +typedef struct syncchannel syncchannel; + + +void setBroadcast(syncchannel *syncch, bool b); +syncchannel *getNewSyncchannel(char *inname, char *outname); +//request *makeNewSendSync(int hasDelay, long delay, int nbOfParams, int *params[]); +//request *makeNewReceiveSync(int hasDelay, long delay, int nbOfParams, int *params[]); +void destroySyncchannel(syncchannel *syncch); + + +#endif diff --git a/preinstallTTool/macos/TTool/executablecode/src/tracemanager.c b/preinstallTTool/macos/TTool/executablecode/src/tracemanager.c new file mode 100644 index 0000000000000000000000000000000000000000..fda3a0db1c76a9861708dd422c2cea7f180688b0 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/tracemanager.c @@ -0,0 +1,304 @@ +#include <stdlib.h> +#include <stdio.h> +#include <time.h> + +#include "tracemanager.h" +#include "debug.h" +#include "mytimelib.h" + + +#define TRACE_OFF 0 +#define TRACE_IN_FILE 1 +#define TRACE_IN_CONSOLE 2 + +#define TRACE_FILE_NAME "Trace.txt" + + +pthread_mutex_t __traceMutex; + +int trace = TRACE_OFF; +int id = 0; + +FILE *file; + +struct timespec begints; + + +void addInfo(char *dest, char *info) { + //char s1[10]; + long tmp; + //long tmp1; + //int i; + struct timespec ts, ts1; + my_clock_gettime(&ts); + + debugMsg("DIFF TIME"); + diffTime(&begints, &ts, &ts1); + + tmp = ts1.tv_nsec; + + if (tmp < 0) { + tmp = -tmp; + } + + /*tmp1 = 100000000; + + for(i=0; i<9; i++) { + s1[i] = 48 + (tmp / tmp1); + tmp = tmp % tmp1; + tmp1 = tmp1 / 10; + } + s1[9] = '\0';*/ + + /* s1 -> tmp */ + sprintf(dest, "#%d time=%ld.%09ld %s", id, ts1.tv_sec, tmp, info); + id ++; +} + + +void writeInTrace(char *info) { + pthread_mutex_lock(&__traceMutex); + char s[CHAR_ALLOC_SIZE]; + addInfo(s, info); + //printf("Write in file\n"); + switch(trace){ + case TRACE_IN_FILE: + if (file != NULL) { + debug2Msg("Saving in file", s); + fprintf(file, s); + fflush(file); + } + break; + case TRACE_IN_CONSOLE: + printf("%s\n", s); + break; + } + + pthread_mutex_unlock(&__traceMutex); +} + + +void activeTracingInFile(char *fileName) { + char *name; + trace = TRACE_IN_FILE; + my_clock_gettime(&begints); + if (fileName == NULL) { + name = TRACE_FILE_NAME; + } else { + name = fileName; + } + file = fopen(name,"w"); + + /* Initializing mutex */ + if (pthread_mutex_init(&__traceMutex, NULL) < 0) { exit(-1);} +} + +void activeTracingInConsole() { + trace = TRACE_IN_CONSOLE; + my_clock_gettime(&begints); + + /* Initializing mutex */ + if (pthread_mutex_init(&__traceMutex, NULL) < 0) { exit(-1);} +} + +void unactiveTracing() { + trace = TRACE_OFF; +} + + +void traceStateEntering(char *myname, char *statename) { + char s[CHAR_ALLOC_SIZE]; + + debugMsg("Trace function"); + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=state_entering state=%s\n", myname, statename); + + // Saving trace + writeInTrace(s); +} + +void traceFunctionCall(char *block, char *func, char *params) { + char s[CHAR_ALLOC_SIZE]; + + debugMsg("Trace function"); + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=function_call func=%s parameters=%s\n", block, func, params); + + // Saving trace + writeInTrace(s); +} + + +// type=0: int type = 1:bool +void traceVariableModification(char *block, char *var, int value, int type) { + char s[CHAR_ALLOC_SIZE]; + debugMsg("Trace variable modification"); + + if (trace == TRACE_OFF) { + return; + } + + + if (type == 0) { + sprintf(s, "block=%s type=variable_modification variable=%s setTo=%d\n", block, var, value); + } + + if (type == 1) { + if (value == 0) { + sprintf(s, "block=%s type=variable_modification variable=%s setTo=false\n", block, var); + } else { + sprintf(s, "block=%s type=variable_modification variable=%s setTo=true\n", block, var); + } + } + + // Saving trace + writeInTrace(s); + +} + +void traceSynchroRequest(request *from, request *to) { + char s[1024]; + int i; + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s blockdestination=%s type=synchro channel=%s params=", from->listOfRequests->owner, to->listOfRequests->owner, from->syncChannel->outname); + for(i=0; i<from->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, *(from->params[i])); + } + sprintf(s, "%s\n", s); + + debugMsg("Trace request synchro"); + + + // Saving trace + writeInTrace(s); +} + + +void traceAsynchronousSendRequest(request *req) { + char s[1024]; + int i; + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=send_async channel=%s msgid=%ld params=", req->listOfRequests->owner, req->asyncChannel->outname, req->msg->id); + if (req->msg != NULL) { + debugMsg("Computing params"); + for(i=0; i<req->msg->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, req->msg->params[i]); + } + } + sprintf(s, "%s\n", s); + + + + // Saving trace + writeInTrace(s); +} + + +void traceAsynchronousReceiveRequest(request *req) { + char s[1024]; + int i; + + if (trace == TRACE_OFF) { + return; + } + + sprintf(s, "block=%s type=receive_async channel=%s msgid=%ld params=", req->listOfRequests->owner, req->asyncChannel->outname, req->msg->id); + if (req->msg != NULL) { + debugMsg("Computing params"); + for(i=0; i<req->msg->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, req->msg->params[i]); + } + } + sprintf(s, "%s\n", s); + + + + // Saving trace + writeInTrace(s); +} + + + +void traceRequest(char *myname, request *req) { + char s[1024]; + int i; + + + debugMsg("Trace request"); + + + if (trace == TRACE_OFF) { + return; + } + + // Build corresponding char*; + + switch(req->type) { + case SEND_SYNC_REQUEST: + debug2Msg("Sync channel", req->syncChannel->outname); + sprintf(s, "block=%s type=send_synchro channel=%s params=", myname, req->syncChannel->outname); + for(i=0; i<req->nbOfParams; i++) { + if (i>0) { + sprintf(s, "%s,", s); + } + sprintf(s, "%s%d", s, *(req->params[i])); + } + sprintf(s, "%s\n", s); + + break; + case RECEIVE_SYNC_REQUEST: + sprintf(s, "block=%s type=receive_synchro channel=%s\n", myname, req->syncChannel->inname); + break; + case SEND_ASYNC_REQUEST: + debug2Msg("Async channel", req->asyncChannel->outname); + sprintf(s, "block=%s type=send_async_2 channel=%s\n", myname, req->asyncChannel->outname); + break; + case RECEIVE_ASYNC_REQUEST: + sprintf(s, "block=%s type=receive_async_2 channel=%s\n", myname, req->asyncChannel->inname); + break; + case SEND_BROADCAST_REQUEST: + debug2Msg("Sync channel", req->syncChannel->outname); + sprintf(s, "block=%s type=send_broadcast channel=%s\n", myname, req->syncChannel->outname); + break; + case RECEIVE_BROADCAST_REQUEST: + debug2Msg("Sync channel", req->syncChannel->outname); + sprintf(s, "block=%s type=receive_broadcast channel=%s\n", myname, req->syncChannel->outname); + break; + case IMMEDIATE: + sprintf(s, "block=%s type=action\n", myname); + break; + default: + sprintf(s, "block=%s type=unknown\n", myname); + } + + debugMsg("Trace request 2"); + + + // Saving trace + writeInTrace(s); +} diff --git a/preinstallTTool/macos/TTool/executablecode/src/tracemanager.h b/preinstallTTool/macos/TTool/executablecode/src/tracemanager.h new file mode 100644 index 0000000000000000000000000000000000000000..fb92d9fe6c0509167c7019eec365a08146ab62f1 --- /dev/null +++ b/preinstallTTool/macos/TTool/executablecode/src/tracemanager.h @@ -0,0 +1,21 @@ +#ifndef TRACEMANAGER_H +#define TRACEMANANER_H + +#include "request.h" + +#define CHAR_ALLOC_SIZE 1024 + + +void activeTracingInFile(); +void unactiveTracing(); +void traceRequest(char *myname, request *req); +void traceFunctionCall(char *block, char *func, char* params); +void traceVariableModification(char *block, char *var, int value, int type); // type=0: int type = 1:bool +void traceStateEntering(char *myname, char *statename); +void traceSynchroRequest(request *from, request *to); +void traceAsynchronousSendRequest(request *req); +void traceAsynchronousReceiveRequest(request *req); + +#endif + + diff --git a/preinstallTTool/macos/TTool/figure/README_figure b/preinstallTTool/macos/TTool/figure/README_figure new file mode 100644 index 0000000000000000000000000000000000000000..435809f47057dd1b156b2520214e6fc74a102d4d --- /dev/null +++ b/preinstallTTool/macos/TTool/figure/README_figure @@ -0,0 +1,6 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +Directory generally configured as the one for saving diagram captures performed from TTool. + diff --git a/preinstallTTool/macos/TTool/java/README_java b/preinstallTTool/macos/TTool/java/README_java new file mode 100644 index 0000000000000000000000000000000000000000..f2f0e0c14ddde505f09f3632f165636f7400330e --- /dev/null +++ b/preinstallTTool/macos/TTool/java/README_java @@ -0,0 +1,9 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +This directory contains: +*jttool.jar, librairy files used by Java files generated by the TTool Java code generator +*Java files generated by TTool (if configured in config.xml file), see +http://labsoc.comelec.enst.fr/turtle/HELP +for more information \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/java/jttool.jar b/preinstallTTool/macos/TTool/java/jttool.jar new file mode 100644 index 0000000000000000000000000000000000000000..579426f0cfefbe81d80abc80b80b7c18c79532c0 Binary files /dev/null and b/preinstallTTool/macos/TTool/java/jttool.jar differ diff --git a/preinstallTTool/macos/TTool/lib/README_lib b/preinstallTTool/macos/TTool/lib/README_lib new file mode 100644 index 0000000000000000000000000000000000000000..2f9854980830e5742df30421c431d5f14ff12683 --- /dev/null +++ b/preinstallTTool/macos/TTool/lib/README_lib @@ -0,0 +1,6 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +Directory generally configured as the one for loading and saving libraries of compenents from TTool. A few libraries are provided with TTool. + diff --git a/preinstallTTool/macos/TTool/lib/TClock1.lib b/preinstallTTool/macos/TTool/lib/TClock1.lib new file mode 100755 index 0000000000000000000000000000000000000000..bf2abad69077968bb8740d18da1f6c5780074d91 --- /dev/null +++ b/preinstallTTool/macos/TTool/lib/TClock1.lib @@ -0,0 +1,585 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGSELECTEDCOMPONENTS version="0.62" copyMaxId="21" decX="278" decY="154" > + +<TClassDiagramPanelCopy name="Class Diagram" xSel="278" ySel="154" widthSel="212" heightSel="342" > +<COMPONENT type="201" id="21" > +<cdparam x="283" y="167" /> +<sizeparam width="151" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="TClock" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +<TGConnectingPoint num="2" id="18" /> +<TGConnectingPoint num="3" id="19" /> +<TGConnectingPoint num="4" id="20" /> +<extraparam> +<Start isStart="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="3" > +<father id="21" num="0" /> +<cdparam x="283" y="198" /> +<sizeparam width="151" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="- value = 0 : Natural; +- isStart = false : Boolean; +" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<extraparam> +<Attribute access="0" id="value" value="0" type="0" /> +<Attribute access="0" id="isStart" value="false" type="4" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="6" > +<father id="21" num="1" /> +<cdparam x="283" y="244" /> +<sizeparam width="151" height="110" minWidth="150" minHeight="30" minDesiredWidth="151" minDesiredHeight="110" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass gates" value="+ set : Gate; ++ get : Gate; ++ reset : Gate; ++ start : Gate; ++ pause : Gate; +- internalIncrement : Gate; +" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<extraparam> +<Attribute access="2" id="set" value="" type="1" /> +<Attribute access="2" id="get" value="" type="1" /> +<Attribute access="2" id="reset" value="" type="1" /> +<Attribute access="2" id="start" value="" type="1" /> +<Attribute access="2" id="pause" value="" type="1" /> +<Attribute access="0" id="internalIncrement" value="" type="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="9" > +<father id="21" num="2" /> +<cdparam x="283" y="355" /> +<sizeparam width="151" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="188" maxY="188" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="7" /> +<TGConnectingPoint num="1" id="8" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="15" > +<father id="21" num="3" /> +<cdparam x="283" y="386" /> +<sizeparam width="151" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="219" maxY="219" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="10" /> +<TGConnectingPoint num="1" id="11" /> +<TGConnectingPoint num="2" id="12" /> +<TGConnectingPoint num="3" id="13" /> +<TGConnectingPoint num="4" id="14" /> +</SUBCOMPONENT> + + +</TClassDiagramPanelCopy><TActivityDiagramPanel name="TClock" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="23" > +<cdparam x="343" y="52" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="22" /> +</COMPONENT> + +<COMPONENT type="15" id="26" > +<cdparam x="459" y="331" /> +<sizeparam width="34" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="start" /> +<TGConnectingPoint num="0" id="24" /> +<TGConnectingPoint num="1" id="25" /> +</COMPONENT> + +<COMPONENT type="15" id="29" > +<cdparam x="127" y="348" /> +<sizeparam width="63" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="set?value" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +</COMPONENT> + +<COMPONENT type="15" id="32" > +<cdparam x="208" y="348" /> +<sizeparam width="59" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="get!value" /> +<TGConnectingPoint num="0" id="30" /> +<TGConnectingPoint num="1" id="31" /> +</COMPONENT> + +<COMPONENT type="19" id="40" > +<cdparam x="222" y="261" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="33" > +<father id="40" num="0" /> +<cdparam x="197" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="34" > +<father id="40" num="1" /> +<cdparam x="257" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="35" > +<father id="40" num="2" /> +<cdparam x="242" y="306" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="45" > +<cdparam x="222" y="421" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +</COMPONENT> + +<COMPONENT type="19" id="53" > +<cdparam x="460" y="251" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="49" /> +<TGConnectingPoint num="1" id="50" /> +<TGConnectingPoint num="2" id="51" /> +<TGConnectingPoint num="3" id="52" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="46" > +<father id="53" num="0" /> +<cdparam x="435" y="261" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="47" > +<father id="53" num="1" /> +<cdparam x="504" y="262" /> +<sizeparam width="78" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[isStart = true ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="48" > +<father id="53" num="2" /> +<cdparam x="480" y="296" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="56" > +<cdparam x="307" y="344" /> +<sizeparam width="38" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="reset" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +</COMPONENT> + +<COMPONENT type="17" id="61" > +<cdparam x="461" y="459" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="57" /> +<TGConnectingPoint num="1" id="58" /> +<TGConnectingPoint num="2" id="59" /> +<TGConnectingPoint num="3" id="60" /> +</COMPONENT> + +<COMPONENT type="19" id="69" > +<cdparam x="345" y="183" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +<TGConnectingPoint num="2" id="67" /> +<TGConnectingPoint num="3" id="68" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="62" > +<father id="69" num="0" /> +<cdparam x="320" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="63" > +<father id="69" num="1" /> +<cdparam x="380" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="64" > +<father id="69" num="2" /> +<cdparam x="365" y="228" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="74" > +<cdparam x="345" y="133" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="70" /> +<TGConnectingPoint num="1" id="71" /> +<TGConnectingPoint num="2" id="72" /> +<TGConnectingPoint num="3" id="73" /> +</COMPONENT> + +<COMPONENT type="15" id="77" > +<cdparam x="297" y="382" /> +<sizeparam width="59" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="value = 0" /> +<TGConnectingPoint num="0" id="75" /> +<TGConnectingPoint num="1" id="76" /> +</COMPONENT> + +<COMPONENT type="15" id="80" > +<cdparam x="382" y="310" /> +<sizeparam width="45" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="pause" /> +<TGConnectingPoint num="0" id="78" /> +<TGConnectingPoint num="1" id="79" /> +</COMPONENT> + +<COMPONENT type="15" id="83" > +<cdparam x="362" y="417" /> +<sizeparam width="85" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="isStart = false" /> +<TGConnectingPoint num="0" id="81" /> +<TGConnectingPoint num="1" id="82" /> +</COMPONENT> + +<COMPONENT type="15" id="86" > +<cdparam x="437" y="376" /> +<sizeparam width="79" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="isStart = true" /> +<TGConnectingPoint num="0" id="84" /> +<TGConnectingPoint num="1" id="85" /> +</COMPONENT> + +<COMPONENT type="11" id="90" > +<cdparam x="567" y="298" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="88" /> +<TGConnectingPoint num="1" id="89" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="87" > +<father id="90" num="0" /> +<cdparam x="582" y="318" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="1" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="93" > +<cdparam x="503" y="344" /> +<sizeparam width="138" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="internalIncrement!value" /> +<TGConnectingPoint num="0" id="91" /> +<TGConnectingPoint num="1" id="92" /> +</COMPONENT> + +<COMPONENT type="15" id="96" > +<cdparam x="522" y="379" /> +<sizeparam width="101" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="value = value + 1" /> +<TGConnectingPoint num="0" id="94" /> +<TGConnectingPoint num="1" id="95" /> +</COMPONENT> + +<CONNECTOR type="101" id="98" > +<cdparam x="131" y="500" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="197" y="276" id="37" /> +<P2 x="158" y="343" id="27" /> +<Point x="158" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="97" > +<father id="98" num="0" /> +<cdparam x="158" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="99" > +<cdparam x="171" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="237" y="316" id="39" /> +<P2 x="237" y="343" id="30" /> +</CONNECTOR> +<CONNECTOR type="101" id="100" > +<cdparam x="82" y="564" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="158" y="373" id="28" /> +<P2 x="222" y="436" id="42" /> +</CONNECTOR> +<CONNECTOR type="101" id="101" > +<cdparam x="242" y="576" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="237" y="373" id="31" /> +<P2 x="237" y="421" id="41" /> +</CONNECTOR> +<CONNECTOR type="101" id="103" > +<cdparam x="435" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="277" y="276" id="38" /> +<P2 x="326" y="339" id="54" /> +<Point x="326" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="102" > +<father id="103" num="0" /> +<cdparam x="326" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="104" > +<cdparam x="515" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="475" y="306" id="52" /> +<P2 x="476" y="326" id="24" /> +</CONNECTOR> +<CONNECTOR type="101" id="105" > +<cdparam x="608" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="476" y="401" id="85" /> +<P2 x="476" y="459" id="57" /> +</CONNECTOR> +<CONNECTOR type="101" id="106" > +<cdparam x="424" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="350" y="72" id="22" /> +<P2 x="360" y="133" id="70" /> +</CONNECTOR> +<CONNECTOR type="101" id="107" > +<cdparam x="360" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="360" y="163" id="73" /> +<P2 x="360" y="173" id="65" /> +</CONNECTOR> +<CONNECTOR type="101" id="108" > +<cdparam x="319" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="320" y="198" id="66" /> +<P2 x="237" y="251" id="36" /> +</CONNECTOR> +<CONNECTOR type="101" id="109" > +<cdparam x="399" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="400" y="198" id="67" /> +<P2 x="475" y="241" id="49" /> +</CONNECTOR> +<CONNECTOR type="101" id="110" > +<cdparam x="479" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="326" y="369" id="55" /> +<P2 x="326" y="377" id="75" /> +</CONNECTOR> +<CONNECTOR type="101" id="115" > +<cdparam x="307" y="453" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="237" y="451" id="44" /> +<P2 x="345" y="148" id="71" /> +<Point x="237" y="463" /> +<Point x="108" y="463" /> +<Point x="108" y="123" /> +<Point x="345" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="111" > +<father id="115" num="0" /> +<cdparam x="237" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="115" num="1" /> +<cdparam x="108" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="113" > +<father id="115" num="2" /> +<cdparam x="108" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="114" > +<father id="115" num="3" /> +<cdparam x="345" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="120" > +<cdparam x="640" y="612" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="476" y="489" id="60" /> +<P2 x="375" y="148" id="72" /> +<Point x="476" y="508" /> +<Point x="645" y="508" /> +<Point x="645" y="123" /> +<Point x="375" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="116" > +<father id="120" num="0" /> +<cdparam x="476" y="508" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="117" > +<father id="120" num="1" /> +<cdparam x="645" y="508" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="118" > +<father id="120" num="2" /> +<cdparam x="645" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="119" > +<father id="120" num="3" /> +<cdparam x="375" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="121" > +<cdparam x="403" y="422" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="326" y="407" id="76" /> +<P2 x="252" y="436" id="43" /> +</CONNECTOR> +<CONNECTOR type="101" id="122" > +<cdparam x="476" y="356" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="476" y="356" id="25" /> +<P2 x="476" y="371" id="84" /> +</CONNECTOR> +<CONNECTOR type="101" id="124" > +<cdparam x="435" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="435" y="266" id="50" /> +<P2 x="404" y="305" id="78" /> +<Point x="404" y="266" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="123" > +<father id="124" num="0" /> +<cdparam x="404" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="125" > +<cdparam x="403" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="404" y="335" id="79" /> +<P2 x="404" y="412" id="81" /> +</CONNECTOR> +<CONNECTOR type="101" id="126" > +<cdparam x="400" y="445" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="404" y="442" id="82" /> +<P2 x="461" y="474" id="58" /> +</CONNECTOR> +<CONNECTOR type="101" id="128" > +<cdparam x="515" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to deterministic delay" value="null" /> +<P1 x="515" y="266" id="51" /> +<P2 x="572" y="293" id="88" /> +<Point x="572" y="266" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="127" > +<father id="128" num="0" /> +<cdparam x="572" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="129" > +<cdparam x="551" y="344" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="572" y="333" id="89" /> +<P2 x="572" y="339" id="91" /> +</CONNECTOR> +<CONNECTOR type="101" id="130" > +<cdparam x="572" y="403" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="572" y="404" id="95" /> +<P2 x="491" y="474" id="59" /> +</CONNECTOR> +<CONNECTOR type="101" id="131" > +<cdparam x="572" y="369" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="572" y="369" id="92" /> +<P2 x="572" y="374" id="94" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</TURTLEGSELECTEDCOMPONENTS> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/lib/TTimerv01.lib b/preinstallTTool/macos/TTool/lib/TTimerv01.lib new file mode 100755 index 0000000000000000000000000000000000000000..e78069a438f6bde5a2f6376273a570d79e063d77 --- /dev/null +++ b/preinstallTTool/macos/TTool/lib/TTimerv01.lib @@ -0,0 +1,466 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGSELECTEDCOMPONENTS version="0.62" copyMaxId="43" decX="46" decY="21" > + +<TClassDiagramPanelCopy name="Class Diagram" xSel="46" ySel="21" widthSel="173" heightSel="251" > +<COMPONENT type="201" id="43" > +<cdparam x="57" y="32" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="TTimer" /> +<TGConnectingPoint num="0" id="38" /> +<TGConnectingPoint num="1" id="39" /> +<TGConnectingPoint num="2" id="40" /> +<TGConnectingPoint num="3" id="41" /> +<TGConnectingPoint num="4" id="42" /> +<extraparam> +<Start isStart="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="25" > +<father id="43" num="0" /> +<cdparam x="57" y="63" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="- value = 0 : Natural; +" /> +<TGConnectingPoint num="0" id="23" /> +<TGConnectingPoint num="1" id="24" /> +<extraparam> +<Attribute access="0" id="value" value="0" type="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="28" > +<father id="43" num="1" /> +<cdparam x="57" y="93" /> +<sizeparam width="150" height="110" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="110" /> +<cdrectangleparam minX="0" maxX="0" minY="61" maxY="61" /> +<infoparam name="Tclass gates" value="+ set : Gate; ++ get : Gate; ++ reset : Gate; ++ start : Gate; ++ pause : Gate; ++ interrupt : Gate; +" /> +<TGConnectingPoint num="0" id="26" /> +<TGConnectingPoint num="1" id="27" /> +<extraparam> +<Attribute access="2" id="set" value="" type="1" /> +<Attribute access="2" id="get" value="" type="1" /> +<Attribute access="2" id="reset" value="" type="1" /> +<Attribute access="2" id="start" value="" type="1" /> +<Attribute access="2" id="pause" value="" type="1" /> +<Attribute access="2" id="interrupt" value="" type="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="31" > +<father id="43" num="2" /> +<cdparam x="57" y="203" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="171" maxY="171" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="29" /> +<TGConnectingPoint num="1" id="30" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="37" > +<father id="43" num="3" /> +<cdparam x="57" y="234" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="202" maxY="202" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="32" /> +<TGConnectingPoint num="1" id="33" /> +<TGConnectingPoint num="2" id="34" /> +<TGConnectingPoint num="3" id="35" /> +<TGConnectingPoint num="4" id="36" /> +</SUBCOMPONENT> + + +</TClassDiagramPanelCopy><TActivityDiagramPanel name="TTimer" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="23" > +<cdparam x="343" y="52" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="22" /> +</COMPONENT> + +<COMPONENT type="15" id="26" > +<cdparam x="493" y="254" /> +<sizeparam width="34" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="start" /> +<TGConnectingPoint num="0" id="24" /> +<TGConnectingPoint num="1" id="25" /> +</COMPONENT> + +<COMPONENT type="15" id="29" > +<cdparam x="127" y="348" /> +<sizeparam width="63" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="set?value" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +</COMPONENT> + +<COMPONENT type="15" id="32" > +<cdparam x="208" y="348" /> +<sizeparam width="59" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="get!value" /> +<TGConnectingPoint num="0" id="30" /> +<TGConnectingPoint num="1" id="31" /> +</COMPONENT> + +<COMPONENT type="19" id="40" > +<cdparam x="222" y="261" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="33" > +<father id="40" num="0" /> +<cdparam x="197" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="34" > +<father id="40" num="1" /> +<cdparam x="257" y="271" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="35" > +<father id="40" num="2" /> +<cdparam x="242" y="306" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="45" > +<cdparam x="222" y="421" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +</COMPONENT> + +<COMPONENT type="15" id="56" > +<cdparam x="307" y="344" /> +<sizeparam width="38" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="reset" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +</COMPONENT> + +<COMPONENT type="19" id="69" > +<cdparam x="345" y="183" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +<TGConnectingPoint num="2" id="67" /> +<TGConnectingPoint num="3" id="68" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="62" > +<father id="69" num="0" /> +<cdparam x="320" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="63" > +<father id="69" num="1" /> +<cdparam x="380" y="193" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="64" > +<father id="69" num="2" /> +<cdparam x="365" y="228" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="74" > +<cdparam x="345" y="133" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="70" /> +<TGConnectingPoint num="1" id="71" /> +<TGConnectingPoint num="2" id="72" /> +<TGConnectingPoint num="3" id="73" /> +</COMPONENT> + +<CONNECTOR type="101" id="98" > +<cdparam x="131" y="500" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="197" y="276" id="37" /> +<P2 x="158" y="343" id="27" /> +<Point x="158" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="97" > +<father id="98" num="0" /> +<cdparam x="158" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="99" > +<cdparam x="171" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="237" y="316" id="39" /> +<P2 x="237" y="343" id="30" /> +</CONNECTOR> +<CONNECTOR type="101" id="100" > +<cdparam x="82" y="564" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="158" y="373" id="28" /> +<P2 x="222" y="436" id="42" /> +</CONNECTOR> +<CONNECTOR type="101" id="101" > +<cdparam x="242" y="576" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="237" y="373" id="31" /> +<P2 x="237" y="421" id="41" /> +</CONNECTOR> +<CONNECTOR type="101" id="103" > +<cdparam x="435" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="277" y="276" id="38" /> +<P2 x="326" y="339" id="54" /> +<Point x="326" y="276" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="102" > +<father id="103" num="0" /> +<cdparam x="326" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="106" > +<cdparam x="424" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="350" y="72" id="22" /> +<P2 x="360" y="133" id="70" /> +</CONNECTOR> +<CONNECTOR type="101" id="107" > +<cdparam x="360" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="360" y="163" id="73" /> +<P2 x="360" y="173" id="65" /> +</CONNECTOR> +<CONNECTOR type="101" id="108" > +<cdparam x="319" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="320" y="198" id="66" /> +<P2 x="237" y="251" id="36" /> +</CONNECTOR> +<CONNECTOR type="101" id="115" > +<cdparam x="307" y="453" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="237" y="451" id="44" /> +<P2 x="345" y="148" id="71" /> +<Point x="237" y="463" /> +<Point x="108" y="463" /> +<Point x="108" y="123" /> +<Point x="345" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="111" > +<father id="115" num="0" /> +<cdparam x="237" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="115" num="1" /> +<cdparam x="108" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="113" > +<father id="115" num="2" /> +<cdparam x="108" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="114" > +<father id="115" num="3" /> +<cdparam x="345" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="428" > +<cdparam x="326" y="369" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="326" y="369" id="55" /> +<P2 x="252" y="436" id="43" /> +</CONNECTOR> +<CONNECTOR type="101" id="429" > +<cdparam x="400" y="198" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="400" y="198" id="67" /> +<P2 x="510" y="249" id="24" /> +</CONNECTOR> +<COMPONENT type="16" id="430" > +<cdparam x="491" y="315" /> +<sizeparam width="38" height="20" minWidth="30" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="reset" /> +<TGConnectingPoint num="0" id="431" /> +<TGConnectingPoint num="1" id="432" /> +<TGConnectingPoint num="2" id="433" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="434" > +<father id="430" num="0" /> +<cdparam x="554" y="330" /> +<sizeparam width="29" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="60" maxX="68" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="value" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="435" > +<cdparam x="541" y="394" /> +<sizeparam width="55" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="interrupt" /> +<TGConnectingPoint num="0" id="436" /> +<TGConnectingPoint num="1" id="437" /> +</COMPONENT> + +<CONNECTOR type="101" id="438" > +<cdparam x="510" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time-limited offer" value="null" /> +<P1 x="510" y="279" id="25" /> +<P2 x="510" y="290" id="431" /> +</CONNECTOR> +<CONNECTOR type="101" id="439" > +<cdparam x="525" y="360" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to action state" value="null" /> +<P1 x="525" y="360" id="433" /> +<P2 x="568" y="389" id="436" /> +<Point x="525" y="374" /> +<Point x="568" y="374" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="452" > +<father id="439" num="0" /> +<cdparam x="525" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="453" > +<father id="439" num="1" /> +<cdparam x="568" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="440" > +<cdparam x="495" y="429" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="441" /> +<TGConnectingPoint num="1" id="442" /> +<TGConnectingPoint num="2" id="443" /> +<TGConnectingPoint num="3" id="444" /> +</COMPONENT> + +<CONNECTOR type="101" id="445" > +<cdparam x="510" y="360" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to junction" value="null" /> +<P1 x="510" y="360" id="432" /> +<P2 x="510" y="429" id="441" /> +</CONNECTOR> +<CONNECTOR type="101" id="446" > +<cdparam x="570" y="431" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="568" y="419" id="437" /> +<P2 x="525" y="444" id="443" /> +<Point x="568" y="444" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="454" > +<father id="446" num="0" /> +<cdparam x="568" y="444" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="447" > +<cdparam x="510" y="459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="510" y="459" id="444" /> +<P2 x="375" y="148" id="72" /> +<Point x="510" y="484" /> +<Point x="633" y="484" /> +<Point x="633" y="123" /> +<Point x="375" y="123" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="448" > +<father id="447" num="0" /> +<cdparam x="510" y="484" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="449" > +<father id="447" num="1" /> +<cdparam x="633" y="484" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="450" > +<father id="447" num="2" /> +<cdparam x="633" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="451" > +<father id="447" num="3" /> +<cdparam x="375" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +</TURTLEGSELECTEDCOMPONENTS> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/lotos/README_lotos b/preinstallTTool/macos/TTool/lotos/README_lotos new file mode 100644 index 0000000000000000000000000000000000000000..a21e405a0a43ec0220c9c63c5ea378b8fd45fd1b --- /dev/null +++ b/preinstallTTool/macos/TTool/lotos/README_lotos @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The lotos directory is intended to store the rt-lotos files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/BasicExchange.xml b/preinstallTTool/macos/TTool/modeling/BasicExchange.xml new file mode 100755 index 0000000000000000000000000000000000000000..e6af3f4aa7e773fbc0cef07ab78277cc364697d1 --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/BasicExchange.xml @@ -0,0 +1,1129 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.82beta2"> + +<Modeling type="Analysis" nameTab="Analysis" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="506" id="337" > +<cdparam x="254" y="157" /> +<sizeparam width="82" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="DataTransfer" /> +<TGConnectingPoint num="0" id="338" /> +<TGConnectingPoint num="1" id="339" /> +</COMPONENT> + +<COMPONENT type="502" id="340" > +<cdparam x="289" y="109" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="341" /> +</COMPONENT> + +<CONNECTOR type="105" id="342" > +<cdparam x="296" y="129" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Reference to a SD" value="null" /> +<P1 x="296" y="129" id="341" /> +<P2 x="295" y="152" id="338" /> +</CONNECTOR> +<COMPONENT type="503" id="346" > +<cdparam x="286" y="218" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="347" /> +</COMPONENT> + +<CONNECTOR type="105" id="348" > +<cdparam x="296" y="197" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="295" y="197" id="339" /> +<P2 x="296" y="213" id="347" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="701" id="248" > +<cdparam x="340" y="64" /> +<sizeparam width="92" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange" /> +<TGConnectingPoint num="0" id="249" /> +<TGConnectingPoint num="1" id="250" /> +<TGConnectingPoint num="2" id="251" /> +<TGConnectingPoint num="3" id="252" /> +<TGConnectingPoint num="4" id="253" /> +<TGConnectingPoint num="5" id="254" /> +<TGConnectingPoint num="6" id="255" /> +<TGConnectingPoint num="7" id="256" /> +<TGConnectingPoint num="8" id="257" /> +<TGConnectingPoint num="9" id="258" /> +<TGConnectingPoint num="10" id="259" /> +<TGConnectingPoint num="11" id="260" /> +<TGConnectingPoint num="12" id="261" /> +<TGConnectingPoint num="13" id="262" /> +<TGConnectingPoint num="14" id="263" /> +<TGConnectingPoint num="15" id="264" /> +</COMPONENT> + +<COMPONENT type="701" id="265" > +<cdparam x="273" y="186" /> +<sizeparam width="86" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data Request" /> +<TGConnectingPoint num="0" id="266" /> +<TGConnectingPoint num="1" id="267" /> +<TGConnectingPoint num="2" id="268" /> +<TGConnectingPoint num="3" id="269" /> +<TGConnectingPoint num="4" id="270" /> +<TGConnectingPoint num="5" id="271" /> +<TGConnectingPoint num="6" id="272" /> +<TGConnectingPoint num="7" id="273" /> +<TGConnectingPoint num="8" id="274" /> +<TGConnectingPoint num="9" id="275" /> +<TGConnectingPoint num="10" id="276" /> +<TGConnectingPoint num="11" id="277" /> +<TGConnectingPoint num="12" id="278" /> +<TGConnectingPoint num="13" id="279" /> +<TGConnectingPoint num="14" id="280" /> +<TGConnectingPoint num="15" id="281" /> +</COMPONENT> + +<COMPONENT type="700" id="282" > +<cdparam x="151" y="205" /> +<sizeparam width="30" height="70" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="actor" value="Client" /> +<TGConnectingPoint num="0" id="283" /> +<TGConnectingPoint num="1" id="284" /> +<TGConnectingPoint num="2" id="285" /> +<TGConnectingPoint num="3" id="286" /> +<TGConnectingPoint num="4" id="287" /> +<TGConnectingPoint num="5" id="288" /> +<TGConnectingPoint num="6" id="289" /> +<TGConnectingPoint num="7" id="290" /> +<TGConnectingPoint num="8" id="291" /> +<TGConnectingPoint num="9" id="292" /> +<TGConnectingPoint num="10" id="293" /> +<TGConnectingPoint num="11" id="294" /> +<TGConnectingPoint num="12" id="295" /> +<TGConnectingPoint num="13" id="296" /> +<TGConnectingPoint num="14" id="297" /> +<TGConnectingPoint num="15" id="298" /> +<TGConnectingPoint num="16" id="299" /> +<TGConnectingPoint num="17" id="300" /> +<TGConnectingPoint num="18" id="301" /> +<TGConnectingPoint num="19" id="302" /> +<TGConnectingPoint num="20" id="303" /> +<TGConnectingPoint num="21" id="304" /> +<TGConnectingPoint num="22" id="305" /> +<TGConnectingPoint num="23" id="306" /> +</COMPONENT> + +<CONNECTOR type="111" id="307" > +<cdparam x="358" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="386" y="104" id="252" /> +<P2 x="316" y="186" id="266" /> +</CONNECTOR> +<COMPONENT type="700" id="308" > +<cdparam x="635" y="206" /> +<sizeparam width="30" height="70" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="actor" value="Server" /> +<TGConnectingPoint num="0" id="309" /> +<TGConnectingPoint num="1" id="310" /> +<TGConnectingPoint num="2" id="311" /> +<TGConnectingPoint num="3" id="312" /> +<TGConnectingPoint num="4" id="313" /> +<TGConnectingPoint num="5" id="314" /> +<TGConnectingPoint num="6" id="315" /> +<TGConnectingPoint num="7" id="316" /> +<TGConnectingPoint num="8" id="317" /> +<TGConnectingPoint num="9" id="318" /> +<TGConnectingPoint num="10" id="319" /> +<TGConnectingPoint num="11" id="320" /> +<TGConnectingPoint num="12" id="321" /> +<TGConnectingPoint num="13" id="322" /> +<TGConnectingPoint num="14" id="323" /> +<TGConnectingPoint num="15" id="324" /> +<TGConnectingPoint num="16" id="325" /> +<TGConnectingPoint num="17" id="326" /> +<TGConnectingPoint num="18" id="327" /> +<TGConnectingPoint num="19" id="328" /> +<TGConnectingPoint num="20" id="329" /> +<TGConnectingPoint num="21" id="330" /> +<TGConnectingPoint num="22" id="331" /> +<TGConnectingPoint num="23" id="332" /> +</COMPONENT> + +<CONNECTOR type="110" id="333" > +<cdparam x="192" y="218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="181" y="240" id="292" /> +<P2 x="273" y="206" id="267" /> +</CONNECTOR> +<CONNECTOR type="110" id="334" > +<cdparam x="558" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="635" y="241" id="311" /> +<P2 x="359" y="206" id="268" /> +</CONNECTOR> +<CONNECTOR type="110" id="335" > +<cdparam x="187" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="181" y="222" id="291" /> +<P2 x="340" y="84" id="250" /> +</CONNECTOR> +<CONNECTOR type="110" id="336" > +<cdparam x="570" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="635" y="223" id="310" /> +<P2 x="432" y="84" id="251" /> +</CONNECTOR> +<COMPONENT type="701" id="549" > +<cdparam x="287" y="361" /> +<sizeparam width="97" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data Response" /> +<TGConnectingPoint num="0" id="550" /> +<TGConnectingPoint num="1" id="551" /> +<TGConnectingPoint num="2" id="552" /> +<TGConnectingPoint num="3" id="553" /> +<TGConnectingPoint num="4" id="554" /> +<TGConnectingPoint num="5" id="555" /> +<TGConnectingPoint num="6" id="556" /> +<TGConnectingPoint num="7" id="557" /> +<TGConnectingPoint num="8" id="558" /> +<TGConnectingPoint num="9" id="559" /> +<TGConnectingPoint num="10" id="560" /> +<TGConnectingPoint num="11" id="561" /> +<TGConnectingPoint num="12" id="562" /> +<TGConnectingPoint num="13" id="563" /> +<TGConnectingPoint num="14" id="564" /> +<TGConnectingPoint num="15" id="565" /> +</COMPONENT> + +<COMPONENT type="701" id="566" > +<cdparam x="446" y="350" /> +<sizeparam width="77" height="40" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data forging" /> +<TGConnectingPoint num="0" id="567" /> +<TGConnectingPoint num="1" id="568" /> +<TGConnectingPoint num="2" id="569" /> +<TGConnectingPoint num="3" id="570" /> +<TGConnectingPoint num="4" id="571" /> +<TGConnectingPoint num="5" id="572" /> +<TGConnectingPoint num="6" id="573" /> +<TGConnectingPoint num="7" id="574" /> +<TGConnectingPoint num="8" id="575" /> +<TGConnectingPoint num="9" id="576" /> +<TGConnectingPoint num="10" id="577" /> +<TGConnectingPoint num="11" id="578" /> +<TGConnectingPoint num="12" id="579" /> +<TGConnectingPoint num="13" id="580" /> +<TGConnectingPoint num="14" id="581" /> +<TGConnectingPoint num="15" id="582" /> +</COMPONENT> + +<CONNECTOR type="111" id="583" > +<cdparam x="358" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="386" y="104" id="256" /> +<P2 x="484" y="350" id="567" /> +</CONNECTOR> +<CONNECTOR type="111" id="584" > +<cdparam x="358" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="386" y="104" id="260" /> +<P2 x="335" y="361" id="550" /> +</CONNECTOR> +<CONNECTOR type="110" id="585" > +<cdparam x="561" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="635" y="276" id="313" /> +<P2 x="523" y="370" id="569" /> +</CONNECTOR> +<CONNECTOR type="110" id="586" > +<cdparam x="181" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="181" y="257" id="293" /> +<P2 x="287" y="381" id="551" /> +</CONNECTOR> +<CONNECTOR type="110" id="587" > +<cdparam x="384" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="384" y="381" id="552" /> +<P2 x="635" y="258" id="312" /> +</CONNECTOR> +<COMPONENT type="301" id="711" > +<cdparam x="223" y="42" /> +<sizeparam width="386" height="388" minWidth="50" minHeight="20" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value=" + + + + + + + + + + + + + + + + + + + + + + " /> +<extraparam> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value="" /> +<Line value=" " /> +</extraparam> +</COMPONENT> + + +</UseCaseDiagramPanel> + +<SequenceDiagramPanel name="DataTransfer" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="349" > +<cdparam x="184" y="94" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="Client" /> +<TGConnectingPoint num="0" id="350" /> +<TGConnectingPoint num="1" id="351" /> +<TGConnectingPoint num="2" id="352" /> +<TGConnectingPoint num="3" id="353" /> +<TGConnectingPoint num="4" id="354" /> +<TGConnectingPoint num="5" id="355" /> +<TGConnectingPoint num="6" id="356" /> +<TGConnectingPoint num="7" id="357" /> +<TGConnectingPoint num="8" id="358" /> +<TGConnectingPoint num="9" id="359" /> +<TGConnectingPoint num="10" id="360" /> +<TGConnectingPoint num="11" id="361" /> +<TGConnectingPoint num="12" id="362" /> +<TGConnectingPoint num="13" id="363" /> +<TGConnectingPoint num="14" id="364" /> +<TGConnectingPoint num="15" id="365" /> +<TGConnectingPoint num="16" id="366" /> +<TGConnectingPoint num="17" id="367" /> +<TGConnectingPoint num="18" id="368" /> +<TGConnectingPoint num="19" id="369" /> +<TGConnectingPoint num="20" id="370" /> +<TGConnectingPoint num="21" id="371" /> +<TGConnectingPoint num="22" id="372" /> +<TGConnectingPoint num="23" id="373" /> +<TGConnectingPoint num="24" id="374" /> +<TGConnectingPoint num="25" id="375" /> +<TGConnectingPoint num="26" id="376" /> +<TGConnectingPoint num="27" id="377" /> +<TGConnectingPoint num="28" id="378" /> +<TGConnectingPoint num="29" id="379" /> +<TGConnectingPoint num="30" id="380" /> +<TGConnectingPoint num="31" id="381" /> +<TGConnectingPoint num="32" id="382" /> +<TGConnectingPoint num="33" id="383" /> +<TGConnectingPoint num="34" id="384" /> +<TGConnectingPoint num="35" id="385" /> +<TGConnectingPoint num="36" id="386" /> +<TGConnectingPoint num="37" id="387" /> +<TGConnectingPoint num="38" id="388" /> +<TGConnectingPoint num="39" id="389" /> +<TGConnectingPoint num="40" id="390" /> +<TGConnectingPoint num="41" id="391" /> +<TGConnectingPoint num="42" id="392" /> +<TGConnectingPoint num="43" id="393" /> +<TGConnectingPoint num="44" id="394" /> +<TGConnectingPoint num="45" id="395" /> +<TGConnectingPoint num="46" id="396" /> +<TGConnectingPoint num="47" id="397" /> +<TGConnectingPoint num="48" id="398" /> +</COMPONENT> +<SUBCOMPONENT type="601" id="539" > +<father id="349" num="0" /> +<cdparam x="149" y="354" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="540" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="537" > +<father id="349" num="1" /> +<cdparam x="149" y="164" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="538" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="399" > +<cdparam x="451" y="94" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="Server" /> +<TGConnectingPoint num="0" id="400" /> +<TGConnectingPoint num="1" id="401" /> +<TGConnectingPoint num="2" id="402" /> +<TGConnectingPoint num="3" id="403" /> +<TGConnectingPoint num="4" id="404" /> +<TGConnectingPoint num="5" id="405" /> +<TGConnectingPoint num="6" id="406" /> +<TGConnectingPoint num="7" id="407" /> +<TGConnectingPoint num="8" id="408" /> +<TGConnectingPoint num="9" id="409" /> +<TGConnectingPoint num="10" id="410" /> +<TGConnectingPoint num="11" id="411" /> +<TGConnectingPoint num="12" id="412" /> +<TGConnectingPoint num="13" id="413" /> +<TGConnectingPoint num="14" id="414" /> +<TGConnectingPoint num="15" id="415" /> +<TGConnectingPoint num="16" id="416" /> +<TGConnectingPoint num="17" id="417" /> +<TGConnectingPoint num="18" id="418" /> +<TGConnectingPoint num="19" id="419" /> +<TGConnectingPoint num="20" id="420" /> +<TGConnectingPoint num="21" id="421" /> +<TGConnectingPoint num="22" id="422" /> +<TGConnectingPoint num="23" id="423" /> +<TGConnectingPoint num="24" id="424" /> +<TGConnectingPoint num="25" id="425" /> +<TGConnectingPoint num="26" id="426" /> +<TGConnectingPoint num="27" id="427" /> +<TGConnectingPoint num="28" id="428" /> +<TGConnectingPoint num="29" id="429" /> +<TGConnectingPoint num="30" id="430" /> +<TGConnectingPoint num="31" id="431" /> +<TGConnectingPoint num="32" id="432" /> +<TGConnectingPoint num="33" id="433" /> +<TGConnectingPoint num="34" id="434" /> +<TGConnectingPoint num="35" id="435" /> +<TGConnectingPoint num="36" id="436" /> +<TGConnectingPoint num="37" id="437" /> +<TGConnectingPoint num="38" id="438" /> +<TGConnectingPoint num="39" id="439" /> +<TGConnectingPoint num="40" id="440" /> +<TGConnectingPoint num="41" id="441" /> +<TGConnectingPoint num="42" id="442" /> +<TGConnectingPoint num="43" id="443" /> +<TGConnectingPoint num="44" id="444" /> +<TGConnectingPoint num="45" id="445" /> +<TGConnectingPoint num="46" id="446" /> +<TGConnectingPoint num="47" id="447" /> +<TGConnectingPoint num="48" id="448" /> +</COMPONENT> +<SUBCOMPONENT type="601" id="546" > +<father id="399" num="0" /> +<cdparam x="456" y="244" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="547" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="544" > +<father id="399" num="1" /> +<cdparam x="456" y="354" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="545" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="542" > +<father id="399" num="2" /> +<cdparam x="456" y="244" /> +<sizeparam width="64" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="forgeData" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="534" > +<father id="399" num="3" /> +<cdparam x="456" y="244" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="535" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="532" > +<father id="399" num="4" /> +<cdparam x="456" y="164" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="533" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="449" > +<cdparam x="190" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="dataRequest" /> +<P1 x="189" y="164" id="356" /> +<P2 x="456" y="164" id="406" /> +</CONNECTOR> +<CONNECTOR type="107" id="531" > +<cdparam x="456" y="227" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="dataSending" /> +<P1 x="456" y="354" id="425" /> +<P2 x="189" y="354" id="375" /> +</CONNECTOR> +<CONNECTOR type="109" id="536" > +<cdparam x="466" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{10..15}" /> +<P1 x="466" y="164" id="533" /> +<P2 x="466" y="244" id="535" /> +<extraparam> +<Interval minConstraint="10" maxConstraint="15" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="109" id="541" > +<cdparam x="160" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{0..13}" /> +<P1 x="159" y="164" id="538" /> +<P2 x="159" y="354" id="540" /> +<extraparam> +<Interval minConstraint="0" maxConstraint="13" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="109" id="548" > +<cdparam x="466" y="227" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{0..10}" /> +<P1 x="466" y="244" id="547" /> +<P2 x="466" y="354" id="545" /> +<extraparam> +<Interval minConstraint="0" maxConstraint="10" /> +</extraparam> +</CONNECTOR> + +</SequenceDiagramPanel> + +</Modeling> + + + + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="209" id="3" > +<cdparam x="706" y="195" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tdata" value="Delay" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1" > +<father id="3" num="0" /> +<cdparam x="706" y="226" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ dmin = 10 : Natural; ++ dmax = 15 : Natural; +" /> +<extraparam> +<Attribute access="2" id="dmin" value="10" type="0" typeOther="" /> +<Attribute access="2" id="dmax" value="15" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2" > +<father id="3" num="1" /> +<cdparam x="706" y="272" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass operations" value="" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="24" > +<cdparam x="43" y="93" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Client" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +<TGConnectingPoint num="4" id="23" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="6" > +<father id="24" num="0" /> +<cdparam x="43" y="124" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ pdu : PDU; +" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<extraparam> +<Attribute access="2" id="pdu" value="" type="5" typeOther="PDU" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="9" > +<father id="24" num="1" /> +<cdparam x="43" y="155" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="62" maxY="62" /> +<infoparam name="Tclass gates" value="+ socket : Gate; +" /> +<TGConnectingPoint num="0" id="7" /> +<TGConnectingPoint num="1" id="8" /> +<extraparam> +<Attribute access="2" id="socket" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="12" > +<father id="24" num="2" /> +<cdparam x="43" y="186" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="93" maxY="93" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="10" /> +<TGConnectingPoint num="1" id="11" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="18" > +<father id="24" num="3" /> +<cdparam x="43" y="217" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="124" maxY="124" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="13" /> +<TGConnectingPoint num="1" id="14" /> +<TGConnectingPoint num="2" id="15" /> +<TGConnectingPoint num="3" id="16" /> +<TGConnectingPoint num="4" id="17" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="45" > +<cdparam x="406" y="78" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Server" /> +<TGConnectingPoint num="0" id="40" /> +<TGConnectingPoint num="1" id="41" /> +<TGConnectingPoint num="2" id="42" /> +<TGConnectingPoint num="3" id="43" /> +<TGConnectingPoint num="4" id="44" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="27" > +<father id="45" num="0" /> +<cdparam x="406" y="109" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ pdu : PDU; ++ d : Delay; +" /> +<TGConnectingPoint num="0" id="25" /> +<TGConnectingPoint num="1" id="26" /> +<extraparam> +<Attribute access="2" id="pdu" value="" type="5" typeOther="PDU" /> +<Attribute access="2" id="d" value="" type="5" typeOther="Delay" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="30" > +<father id="45" num="1" /> +<cdparam x="406" y="155" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass gates" value="+ socket : Gate; +" /> +<TGConnectingPoint num="0" id="28" /> +<TGConnectingPoint num="1" id="29" /> +<extraparam> +<Attribute access="2" id="socket" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="33" > +<father id="45" num="2" /> +<cdparam x="406" y="186" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="108" maxY="108" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="31" /> +<TGConnectingPoint num="1" id="32" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="39" > +<father id="45" num="3" /> +<cdparam x="406" y="217" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="139" maxY="139" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="34" /> +<TGConnectingPoint num="1" id="35" /> +<TGConnectingPoint num="2" id="36" /> +<TGConnectingPoint num="3" id="37" /> +<TGConnectingPoint num="4" id="38" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="51" > +<cdparam x="249" y="109" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Client and Server" value="Synchro" /> +<TGConnectingPoint num="0" id="47" /> +<TGConnectingPoint num="1" id="48" /> +<TGConnectingPoint num="2" id="49" /> +<TGConnectingPoint num="3" id="50" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="46" > +<father id="51" num="0" /> +<cdparam x="268" y="189" /> +<sizeparam width="50" height="18" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="24" g1="socket" t2="45" g2="socket" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="209" id="54" > +<cdparam x="705" y="54" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tdata" value="PDU" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="52" > +<father id="54" num="0" /> +<cdparam x="705" y="85" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="+ head = 0 : Natural; ++ data = 0 : Natural; +" /> +<extraparam> +<Attribute access="2" id="head" value="0" type="0" typeOther="" /> +<Attribute access="2" id="data" value="0" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="53" > +<father id="54" num="1" /> +<cdparam x="705" y="131" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="77" maxY="77" /> +<infoparam name="Tclass operations" value="" /> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="56" > +<cdparam x="193" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="55" /> +<P1 x="193" y="170" id="8" /> +<P2 x="406" y="170" id="28" /> +</CONNECTOR> +<CONNECTOR type="103" id="57" > +<cdparam x="279" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="299" y="170" id="55" /> +<P2 x="299" y="134" id="49" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="Client" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="59" > +<cdparam x="332" y="119" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="58" /> +</COMPONENT> + +<COMPONENT type="15" id="62" > +<cdparam x="304" y="208" /> +<sizeparam width="70" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="socket!pdu" /> +<TGConnectingPoint num="0" id="60" /> +<TGConnectingPoint num="1" id="61" /> +</COMPONENT> + +<COMPONENT type="13" id="64" > +<cdparam x="329" y="388" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="63" /> +</COMPONENT> + +<COMPONENT type="15" id="67" > +<cdparam x="259" y="166" /> +<sizeparam width="160" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="pdu.head = 1;pdu.data = 12" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +</COMPONENT> + +<COMPONENT type="16" id="72" > +<cdparam x="302" y="272" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="socket?pdu" /> +<TGConnectingPoint num="0" id="69" /> +<TGConnectingPoint num="1" id="70" /> +<TGConnectingPoint num="2" id="71" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="68" > +<father id="72" num="0" /> +<cdparam x="401" y="287" /> +<sizeparam width="14" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="96" maxX="104" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="13" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="77" > +<cdparam x="324" y="342" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="73" /> +<TGConnectingPoint num="1" id="74" /> +<TGConnectingPoint num="2" id="75" /> +<TGConnectingPoint num="3" id="76" /> +</COMPONENT> + +<CONNECTOR type="101" id="78" > +<cdparam x="339" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="339" y="191" id="66" /> +<P2 x="339" y="203" id="60" /> +</CONNECTOR> +<CONNECTOR type="101" id="79" > +<cdparam x="338" y="101" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="339" y="139" id="58" /> +<P2 x="339" y="161" id="65" /> +</CONNECTOR> +<CONNECTOR type="101" id="80" > +<cdparam x="339" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time-limited offer" value="null" /> +<P1 x="339" y="233" id="61" /> +<P2 x="339" y="247" id="69" /> +</CONNECTOR> +<CONNECTOR type="101" id="81" > +<cdparam x="339" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to junction" value="null" /> +<P1 x="339" y="317" id="70" /> +<P2 x="339" y="342" id="73" /> +</CONNECTOR> +<CONNECTOR type="101" id="82" > +<cdparam x="354" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to junction" value="null" /> +<P1 x="354" y="317" id="71" /> +<P2 x="354" y="357" id="75" /> +</CONNECTOR> +<CONNECTOR type="101" id="83" > +<cdparam x="339" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="339" y="372" id="76" /> +<P2 x="339" y="383" id="63" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Server" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="85" > +<cdparam x="440" y="52" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="84" /> +</COMPONENT> + +<COMPONENT type="15" id="88" > +<cdparam x="409" y="142" /> +<sizeparam width="74" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="socket?pdu" /> +<TGConnectingPoint num="0" id="86" /> +<TGConnectingPoint num="1" id="87" /> +</COMPONENT> + +<COMPONENT type="17" id="93" > +<cdparam x="431" y="87" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="89" /> +<TGConnectingPoint num="1" id="90" /> +<TGConnectingPoint num="2" id="91" /> +<TGConnectingPoint num="3" id="92" /> +</COMPONENT> + +<COMPONENT type="19" id="101" > +<cdparam x="431" y="197" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="97" /> +<TGConnectingPoint num="1" id="98" /> +<TGConnectingPoint num="2" id="99" /> +<TGConnectingPoint num="3" id="100" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="94" > +<father id="101" num="0" /> +<cdparam x="356" y="207" /> +<sizeparam width="113" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[not(pdu.head == 1 )]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="95" > +<father id="101" num="1" /> +<cdparam x="466" y="207" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="96" > +<father id="101" num="2" /> +<cdparam x="451" y="242" /> +<sizeparam width="88" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[pdu.head == 1 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="104" > +<cdparam x="336" y="279" /> +<sizeparam width="220" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="pdu.head = 4 ; pdu.data = pdu.data + 1" /> +<TGConnectingPoint num="0" id="102" /> +<TGConnectingPoint num="1" id="103" /> +</COMPONENT> + +<COMPONENT type="20" id="108" > +<cdparam x="441" y="349" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time interval" value="null" /> +<TGConnectingPoint num="0" id="106" /> +<TGConnectingPoint num="1" id="107" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="105" > +<father id="108" num="0" /> +<cdparam x="456" y="369" /> +<sizeparam width="90" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the time interval" value="[d.dmin, d.dmax]" /> +<extraparam> +<Interval minDelay="d.dmin" maxDelay="d.dmax" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="16" id="113" > +<cdparam x="411" y="414" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="socket!pdu" /> +<TGConnectingPoint num="0" id="110" /> +<TGConnectingPoint num="1" id="111" /> +<TGConnectingPoint num="2" id="112" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="109" > +<father id="113" num="0" /> +<cdparam x="506" y="429" /> +<sizeparam width="38" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="92" maxX="100" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="d.dmin" /> +</SUBCOMPONENT> + +<COMPONENT type="13" id="115" > +<cdparam x="451" y="474" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="114" /> +</COMPONENT> + +<CONNECTOR type="101" id="116" > +<cdparam x="448" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="447" y="72" id="84" /> +<P2 x="446" y="87" id="89" /> +</CONNECTOR> +<CONNECTOR type="101" id="117" > +<cdparam x="446" y="117" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="446" y="117" id="92" /> +<P2 x="446" y="137" id="86" /> +</CONNECTOR> +<CONNECTOR type="101" id="118" > +<cdparam x="446" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to choice" value="null" /> +<P1 x="446" y="167" id="87" /> +<P2 x="446" y="187" id="97" /> +</CONNECTOR> +<CONNECTOR type="101" id="123" > +<cdparam x="406" y="212" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="406" y="212" id="98" /> +<P2 x="431" y="102" id="90" /> +<Point x="406" y="237" /> +<Point x="324" y="237" /> +<Point x="324" y="77" /> +<Point x="431" y="77" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="119" > +<father id="123" num="0" /> +<cdparam x="406" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="120" > +<father id="123" num="1" /> +<cdparam x="324" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="121" > +<father id="123" num="2" /> +<cdparam x="324" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="122" > +<father id="123" num="3" /> +<cdparam x="431" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="124" > +<cdparam x="446" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="446" y="252" id="100" /> +<P2 x="446" y="274" id="102" /> +</CONNECTOR> +<CONNECTOR type="101" id="125" > +<cdparam x="446" y="304" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time interval" value="null" /> +<P1 x="446" y="304" id="103" /> +<P2 x="446" y="344" id="106" /> +</CONNECTOR> +<CONNECTOR type="101" id="126" > +<cdparam x="446" y="384" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time interval to action state" value="null" /> +<P1 x="446" y="384" id="107" /> +<P2 x="446" y="389" id="110" /> +</CONNECTOR> +<CONNECTOR type="101" id="131" > +<cdparam x="446" y="443" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="446" y="459" id="111" /> +<P2 x="461" y="102" id="91" /> +<Point x="446" y="560" /> +<Point x="656" y="560" /> +<Point x="656" y="77" /> +<Point x="461" y="77" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="127" > +<father id="131" num="0" /> +<cdparam x="446" y="560" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="128" > +<father id="131" num="1" /> +<cdparam x="656" y="560" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="129" > +<father id="131" num="2" /> +<cdparam x="656" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="130" > +<father id="131" num="3" /> +<cdparam x="461" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="132" > +<cdparam x="534" y="458" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to stop state" value="null" /> +<P1 x="461" y="459" id="112" /> +<P2 x="461" y="469" id="114" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/COCOME_V50.xml b/preinstallTTool/macos/TTool/modeling/COCOME_V50.xml new file mode 100644 index 0000000000000000000000000000000000000000..1f095b4aa6f706ffc9b599bdc7d5ca141466d691 --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/COCOME_V50.xml @@ -0,0 +1,15974 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.92-beta1"> + +<Modeling type="ProActive Design" nameTab="ProActive Design" > +<ProactiveCSDPanel name="Main Composite Structure Diagram" minX="10" maxX="1900" minY="10" maxY="1400" > +<COMPONENT type="2104" id="13" > +<cdparam x="234" y="363" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +<TGConnectingPoint num="4" id="5" /> +<TGConnectingPoint num="5" id="6" /> +<TGConnectingPoint num="6" id="7" /> +<TGConnectingPoint num="7" id="8" /> +<TGConnectingPoint num="8" id="9" /> +<TGConnectingPoint num="9" id="10" /> +<TGConnectingPoint num="10" id="11" /> +<TGConnectingPoint num="11" id="12" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="27" > +<cdparam x="835" y="75" /> +<sizeparam width="150" height="100" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="Bank" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +<TGConnectingPoint num="4" id="23" /> +<TGConnectingPoint num="5" id="24" /> +<TGConnectingPoint num="6" id="25" /> +<TGConnectingPoint num="7" id="26" /> +<extraparam> +<Attribute access="0" id="transactionId" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="info" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="response" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="creditInfo" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="15" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2106" id="18" > +<father id="27" num="0" /> +<cdparam x="825" y="107" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="In Port" value="bank" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<extraparam> +<PortCode code="Bank1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="40" > +<cdparam x="948" y="223" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="28" /> +<TGConnectingPoint num="1" id="29" /> +<TGConnectingPoint num="2" id="30" /> +<TGConnectingPoint num="3" id="31" /> +<TGConnectingPoint num="4" id="32" /> +<TGConnectingPoint num="5" id="33" /> +<TGConnectingPoint num="6" id="34" /> +<TGConnectingPoint num="7" id="35" /> +<TGConnectingPoint num="8" id="36" /> +<TGConnectingPoint num="9" id="37" /> +<TGConnectingPoint num="10" id="38" /> +<TGConnectingPoint num="11" id="39" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="53" > +<cdparam x="10" y="382" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +<TGConnectingPoint num="4" id="45" /> +<TGConnectingPoint num="5" id="46" /> +<TGConnectingPoint num="6" id="47" /> +<TGConnectingPoint num="7" id="48" /> +<TGConnectingPoint num="8" id="49" /> +<TGConnectingPoint num="9" id="50" /> +<TGConnectingPoint num="10" id="51" /> +<TGConnectingPoint num="11" id="52" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="66" > +<cdparam x="351" y="398" /> +<sizeparam width="188" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +<TGConnectingPoint num="2" id="56" /> +<TGConnectingPoint num="3" id="57" /> +<TGConnectingPoint num="4" id="58" /> +<TGConnectingPoint num="5" id="59" /> +<TGConnectingPoint num="6" id="60" /> +<TGConnectingPoint num="7" id="61" /> +<TGConnectingPoint num="8" id="62" /> +<TGConnectingPoint num="9" id="63" /> +<TGConnectingPoint num="10" id="64" /> +<TGConnectingPoint num="11" id="65" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="123" > +<cdparam x="10" y="10" /> +<sizeparam width="682" height="307" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="TradingSystem" /> +<TGConnectingPoint num="0" id="115" /> +<TGConnectingPoint num="1" id="116" /> +<TGConnectingPoint num="2" id="117" /> +<TGConnectingPoint num="3" id="118" /> +<TGConnectingPoint num="4" id="119" /> +<TGConnectingPoint num="5" id="120" /> +<TGConnectingPoint num="6" id="121" /> +<TGConnectingPoint num="7" id="122" /> +<extraparam> +<ShowAttributes visible="0" /> +<LastPortCode code="17" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2108" id="71" > +<father id="123" num="0" /> +<cdparam x="682" y="104" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="662" minY="0" maxY="287" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="67" /> +<TGConnectingPoint num="1" id="68" /> +<TGConnectingPoint num="2" id="69" /> +<TGConnectingPoint num="3" id="70" /> +<extraparam> +<PortCode code="TradingSystem3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="95" > +<father id="123" num="1" /> +<cdparam x="427" y="72" /> +<sizeparam width="160" height="138" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="522" minY="0" maxY="169" /> +<infoparam name="Component " value="CashDeskLine" /> +<TGConnectingPoint num="0" id="87" /> +<TGConnectingPoint num="1" id="88" /> +<TGConnectingPoint num="2" id="89" /> +<TGConnectingPoint num="3" id="90" /> +<TGConnectingPoint num="4" id="91" /> +<TGConnectingPoint num="5" id="92" /> +<TGConnectingPoint num="6" id="93" /> +<TGConnectingPoint num="7" id="94" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDeskLine"/><LastPortCode code="143" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="76" > +<father id="95" num="0" /> +<cdparam x="417" y="182" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="140" minY="0" maxY="118" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="72" /> +<TGConnectingPoint num="1" id="73" /> +<TGConnectingPoint num="2" id="74" /> +<TGConnectingPoint num="3" id="75" /> +<extraparam> +<PortCode code="CashDeskLineDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="81" > +<father id="95" num="1" /> +<cdparam x="417" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="140" minY="0" maxY="118" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="77" /> +<TGConnectingPoint num="1" id="78" /> +<TGConnectingPoint num="2" id="79" /> +<TGConnectingPoint num="3" id="80" /> +<extraparam> +<PortCode code="CashDeskLineDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="86" > +<father id="95" num="2" /> +<cdparam x="577" y="105" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="140" minY="0" maxY="118" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="82" /> +<TGConnectingPoint num="1" id="83" /> +<TGConnectingPoint num="2" id="84" /> +<TGConnectingPoint num="3" id="85" /> +<extraparam> +<PortCode code="CashDeskLineDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="114" > +<father id="123" num="2" /> +<cdparam x="27" y="62" /> +<sizeparam width="170" height="148" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="512" minY="0" maxY="159" /> +<infoparam name="Component " value="Inventory" /> +<TGConnectingPoint num="0" id="106" /> +<TGConnectingPoint num="1" id="107" /> +<TGConnectingPoint num="2" id="108" /> +<TGConnectingPoint num="3" id="109" /> +<TGConnectingPoint num="4" id="110" /> +<TGConnectingPoint num="5" id="111" /> +<TGConnectingPoint num="6" id="112" /> +<TGConnectingPoint num="7" id="113" /> +<extraparam> +<Attribute access="0" id="barCode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="resp" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="32" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="100" > +<father id="114" num="0" /> +<cdparam x="187" y="104" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="150" minY="0" maxY="128" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="96" /> +<TGConnectingPoint num="1" id="97" /> +<TGConnectingPoint num="2" id="98" /> +<TGConnectingPoint num="3" id="99" /> +<extraparam> +<PortCode code="Inventory1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="105" > +<father id="114" num="1" /> +<cdparam x="187" y="181" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="150" minY="0" maxY="128" /> +<infoparam name="In Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="101" /> +<TGConnectingPoint num="1" id="102" /> +<TGConnectingPoint num="2" id="103" /> +<TGConnectingPoint num="3" id="104" /> +<extraparam> +<PortCode code="Inventory2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="136" > +<cdparam x="844" y="454" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="124" /> +<TGConnectingPoint num="1" id="125" /> +<TGConnectingPoint num="2" id="126" /> +<TGConnectingPoint num="3" id="127" /> +<TGConnectingPoint num="4" id="128" /> +<TGConnectingPoint num="5" id="129" /> +<TGConnectingPoint num="6" id="130" /> +<TGConnectingPoint num="7" id="131" /> +<TGConnectingPoint num="8" id="132" /> +<TGConnectingPoint num="9" id="133" /> +<TGConnectingPoint num="10" id="134" /> +<TGConnectingPoint num="11" id="135" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="149" > +<cdparam x="709" y="370" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="137" /> +<TGConnectingPoint num="1" id="138" /> +<TGConnectingPoint num="2" id="139" /> +<TGConnectingPoint num="3" id="140" /> +<TGConnectingPoint num="4" id="141" /> +<TGConnectingPoint num="5" id="142" /> +<TGConnectingPoint num="6" id="143" /> +<TGConnectingPoint num="7" id="144" /> +<TGConnectingPoint num="8" id="145" /> +<TGConnectingPoint num="9" id="146" /> +<TGConnectingPoint num="10" id="147" /> +<TGConnectingPoint num="11" id="148" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="162" > +<cdparam x="353" y="399" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="150" /> +<TGConnectingPoint num="1" id="151" /> +<TGConnectingPoint num="2" id="152" /> +<TGConnectingPoint num="3" id="153" /> +<TGConnectingPoint num="4" id="154" /> +<TGConnectingPoint num="5" id="155" /> +<TGConnectingPoint num="6" id="156" /> +<TGConnectingPoint num="7" id="157" /> +<TGConnectingPoint num="8" id="158" /> +<TGConnectingPoint num="9" id="159" /> +<TGConnectingPoint num="10" id="160" /> +<TGConnectingPoint num="11" id="161" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="163" > +<cdparam x="473" y="290" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="197" y="104" id="96" /> +<P2 x="284" y="388" id="3" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="165" > +<cdparam x="483" y="238" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="164" /> +<P1 x="417" y="116" id="79" /> +<P2 x="207" y="114" id="99" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="167" > +<cdparam x="483" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="166" /> +<P1 x="417" y="192" id="74" /> +<P2 x="207" y="191" id="104" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="169" > +<cdparam x="842" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="168" /> +<P1 x="597" y="115" id="85" /> +<P2 x="682" y="114" id="69" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="171" > +<cdparam x="935" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="170" /> +<P1 x="702" y="114" id="70" /> +<P2 x="825" y="117" id="16" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="172" > +<cdparam x="1113" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="835" y="127" id="15" /> +<P2 x="998" y="223" id="31" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="173" > +<cdparam x="310" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="197" y="201" id="102" /> +<P2 x="60" y="382" id="44" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="174" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="427" y="182" id="72" /> +<P2 x="351" y="410" id="54" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="175" > +<cdparam x="724" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="692" y="124" id="68" /> +<P2 x="894" y="479" id="126" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="176" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="587" y="105" id="82" /> +<P2 x="709" y="382" id="137" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="177" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="427" y="106" id="77" /> +<P2 x="353" y="411" id="150" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveSMDPanel name="CachDeskApp" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="179" > +<cdparam x="169" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="178" /> +</COMPONENT> + +<COMPONENT type="2010" id="182" > +<cdparam x="160" y="84" /> +<sizeparam width="36" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="init" /> +<TGConnectingPoint num="0" id="180" /> +<TGConnectingPoint num="1" id="181" /> +</COMPONENT> + +<COMPONENT type="2016" id="185" > +<cdparam x="138" y="50" /> +<sizeparam width="77" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="initialState" /> +<TGConnectingPoint num="0" id="183" /> +<TGConnectingPoint num="1" id="184" /> +</COMPONENT> + +<COMPONENT type="2010" id="188" > +<cdparam x="141" y="176" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="serveFIFO" /> +<TGConnectingPoint num="0" id="186" /> +<TGConnectingPoint num="1" id="187" /> +</COMPONENT> + +<COMPONENT type="2006" id="204" > +<cdparam x="168" y="220" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="192" /> +<TGConnectingPoint num="1" id="193" /> +<TGConnectingPoint num="2" id="194" /> +<TGConnectingPoint num="3" id="195" /> +<TGConnectingPoint num="4" id="196" /> +<TGConnectingPoint num="5" id="197" /> +<TGConnectingPoint num="6" id="198" /> +<TGConnectingPoint num="7" id="199" /> +<TGConnectingPoint num="8" id="200" /> +<TGConnectingPoint num="9" id="201" /> +<TGConnectingPoint num="10" id="202" /> +<TGConnectingPoint num="11" id="203" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="189" > +<father id="204" num="0" /> +<cdparam x="93" y="250" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[errorCode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="190" > +<father id="204" num="1" /> +<cdparam x="213" y="238" /> +<sizeparam width="76" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[errorCode>0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="191" > +<father id="204" num="2" /> +<cdparam x="183" y="255" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2016" id="207" > +<cdparam x="28" y="292" /> +<sizeparam width="71" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="initialized" /> +<TGConnectingPoint num="0" id="205" /> +<TGConnectingPoint num="1" id="206" /> +</COMPONENT> + +<COMPONENT type="2016" id="210" > +<cdparam x="143" y="129" /> +<sizeparam width="71" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="initialized" /> +<TGConnectingPoint num="0" id="208" /> +<TGConnectingPoint num="1" id="209" /> +</COMPONENT> + +<COMPONENT type="2002" id="213" > +<cdparam x="224" y="269" /> +<sizeparam width="86" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="log!errorCode" /> +<TGConnectingPoint num="0" id="211" /> +<TGConnectingPoint num="1" id="212" /> +<extraparam> +<Via port="log" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="215" > +<cdparam x="257" y="352" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="214" /> +</COMPONENT> + +<CONNECTOR type="121" id="216" > +<cdparam x="210" y="52" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="176" y="30" id="178" /> +<P2 x="176" y="45" id="183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="217" > +<cdparam x="211" y="288" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to submachine" value="null" /> +<P1 x="178" y="154" id="209" /> +<P2 x="179" y="171" id="186" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="218" > +<cdparam x="211" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to choice" value="null" /> +<P1 x="179" y="201" id="187" /> +<P2 x="178" y="220" id="192" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="219" > +<cdparam x="210" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to submachine" value="null" /> +<P1 x="176" y="75" id="184" /> +<P2 x="178" y="79" id="180" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="220" > +<cdparam x="207" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to state" value="null" /> +<P1 x="143" y="230" id="193" /> +<P2 x="63" y="287" id="205" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="221" > +<cdparam x="211" y="274" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="213" y="230" id="194" /> +<P2 x="267" y="264" id="211" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="222" > +<cdparam x="176" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to state" value="null" /> +<P1 x="178" y="109" id="181" /> +<P2 x="178" y="124" id="208" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="223" > +<cdparam x="362" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="267" y="294" id="212" /> +<P2 x="267" y="347" id="214" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="init" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="225" > +<cdparam x="149" y="26" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="init_start" /> +<TGConnectingPoint num="0" id="224" /> +</COMPONENT> + +<COMPONENT type="2012" id="228" > +<cdparam x="113" y="86" /> +<sizeparam width="89" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashState=0" /> +<TGConnectingPoint num="0" id="226" /> +<TGConnectingPoint num="1" id="227" /> +</COMPONENT> + +<COMPONENT type="2001" id="230" > +<cdparam x="143" y="393" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="init_stop" /> +<TGConnectingPoint num="0" id="229" /> +</COMPONENT> + +<COMPONENT type="2012" id="233" > +<cdparam x="41" y="132" /> +<sizeparam width="233" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="paymentMode=paymentMode_INVALID" /> +<TGConnectingPoint num="0" id="231" /> +<TGConnectingPoint num="1" id="232" /> +</COMPONENT> + +<COMPONENT type="2012" id="236" > +<cdparam x="115" y="226" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="products=0" /> +<TGConnectingPoint num="0" id="234" /> +<TGConnectingPoint num="1" id="235" /> +</COMPONENT> + +<COMPONENT type="301" id="245" > +<cdparam x="315" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="237" /> +<TGConnectingPoint num="1" id="238" /> +<TGConnectingPoint num="2" id="239" /> +<TGConnectingPoint num="3" id="240" /> +<TGConnectingPoint num="4" id="241" /> +<TGConnectingPoint num="5" id="242" /> +<TGConnectingPoint num="6" id="243" /> +<TGConnectingPoint num="7" id="244" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="254" > +<cdparam x="353" y="90" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="246" /> +<TGConnectingPoint num="1" id="247" /> +<TGConnectingPoint num="2" id="248" /> +<TGConnectingPoint num="3" id="249" /> +<TGConnectingPoint num="4" id="250" /> +<TGConnectingPoint num="5" id="251" /> +<TGConnectingPoint num="6" id="252" /> +<TGConnectingPoint num="7" id="253" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="263" > +<cdparam x="10" y="10" /> +<sizeparam width="124" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="INIT SUBMACHINE +" /> +<TGConnectingPoint num="0" id="255" /> +<TGConnectingPoint num="1" id="256" /> +<TGConnectingPoint num="2" id="257" /> +<TGConnectingPoint num="3" id="258" /> +<TGConnectingPoint num="4" id="259" /> +<TGConnectingPoint num="5" id="260" /> +<TGConnectingPoint num="6" id="261" /> +<TGConnectingPoint num="7" id="262" /> +<extraparam> +<Line value="INIT SUBMACHINE" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2012" id="266" > +<cdparam x="113" y="324" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=0" /> +<TGConnectingPoint num="0" id="264" /> +<TGConnectingPoint num="1" id="265" /> +</COMPONENT> + +<COMPONENT type="2012" id="269" > +<cdparam x="102" y="269" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="expressMode=0" /> +<TGConnectingPoint num="0" id="267" /> +<TGConnectingPoint num="1" id="268" /> +</COMPONENT> + +<COMPONENT type="2012" id="272" > +<cdparam x="113" y="178" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="creditInfo=0" /> +<TGConnectingPoint num="0" id="270" /> +<TGConnectingPoint num="1" id="271" /> +</COMPONENT> + +<CONNECTOR type="121" id="273" > +<cdparam x="158" y="54" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="156" y="46" id="224" /> +<P2 x="157" y="81" id="226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="274" > +<cdparam x="157" y="111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="157" y="111" id="227" /> +<P2 x="157" y="127" id="231" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="275" > +<cdparam x="159" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="157" y="157" id="232" /> +<P2 x="155" y="173" id="270" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="276" > +<cdparam x="161" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="155" y="203" id="271" /> +<P2 x="156" y="221" id="234" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="277" > +<cdparam x="311" y="309" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="156" y="251" id="235" /> +<P2 x="156" y="264" id="267" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="278" > +<cdparam x="157" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="158" y="349" id="265" /> +<P2 x="153" y="388" id="229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="279" > +<cdparam x="368" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="156" y="294" id="268" /> +<P2 x="158" y="319" id="264" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="serveFIFO" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="2006" id="295" > +<cdparam x="621" y="328" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="283" /> +<TGConnectingPoint num="1" id="284" /> +<TGConnectingPoint num="2" id="285" /> +<TGConnectingPoint num="3" id="286" /> +<TGConnectingPoint num="4" id="287" /> +<TGConnectingPoint num="5" id="288" /> +<TGConnectingPoint num="6" id="289" /> +<TGConnectingPoint num="7" id="290" /> +<TGConnectingPoint num="8" id="291" /> +<TGConnectingPoint num="9" id="292" /> +<TGConnectingPoint num="10" id="293" /> +<TGConnectingPoint num="11" id="294" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="280" > +<father id="295" num="0" /> +<cdparam x="546" y="333" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="281" > +<father id="295" num="1" /> +<cdparam x="646" y="333" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="282" > +<father id="295" num="2" /> +<cdparam x="636" y="363" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="297" > +<cdparam x="623" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="serveFIFO_start" /> +<TGConnectingPoint num="0" id="296" /> +</COMPONENT> + +<COMPONENT type="2006" id="313" > +<cdparam x="619" y="59" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="301" /> +<TGConnectingPoint num="1" id="302" /> +<TGConnectingPoint num="2" id="303" /> +<TGConnectingPoint num="3" id="304" /> +<TGConnectingPoint num="4" id="305" /> +<TGConnectingPoint num="5" id="306" /> +<TGConnectingPoint num="6" id="307" /> +<TGConnectingPoint num="7" id="308" /> +<TGConnectingPoint num="8" id="309" /> +<TGConnectingPoint num="9" id="310" /> +<TGConnectingPoint num="10" id="311" /> +<TGConnectingPoint num="11" id="312" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="298" > +<father id="313" num="0" /> +<cdparam x="544" y="64" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="299" > +<father id="313" num="1" /> +<cdparam x="644" y="64" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="300" > +<father id="313" num="2" /> +<cdparam x="634" y="94" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="329" > +<cdparam x="951" y="121" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="317" /> +<TGConnectingPoint num="1" id="318" /> +<TGConnectingPoint num="2" id="319" /> +<TGConnectingPoint num="3" id="320" /> +<TGConnectingPoint num="4" id="321" /> +<TGConnectingPoint num="5" id="322" /> +<TGConnectingPoint num="6" id="323" /> +<TGConnectingPoint num="7" id="324" /> +<TGConnectingPoint num="8" id="325" /> +<TGConnectingPoint num="9" id="326" /> +<TGConnectingPoint num="10" id="327" /> +<TGConnectingPoint num="11" id="328" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="314" > +<father id="329" num="0" /> +<cdparam x="876" y="126" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="315" > +<father id="329" num="1" /> +<cdparam x="976" y="126" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="316" > +<father id="329" num="2" /> +<cdparam x="966" y="156" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="345" > +<cdparam x="222" y="145" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="333" /> +<TGConnectingPoint num="1" id="334" /> +<TGConnectingPoint num="2" id="335" /> +<TGConnectingPoint num="3" id="336" /> +<TGConnectingPoint num="4" id="337" /> +<TGConnectingPoint num="5" id="338" /> +<TGConnectingPoint num="6" id="339" /> +<TGConnectingPoint num="7" id="340" /> +<TGConnectingPoint num="8" id="341" /> +<TGConnectingPoint num="9" id="342" /> +<TGConnectingPoint num="10" id="343" /> +<TGConnectingPoint num="11" id="344" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="330" > +<father id="345" num="0" /> +<cdparam x="147" y="150" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="331" > +<father id="345" num="1" /> +<cdparam x="247" y="150" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="332" > +<father id="345" num="2" /> +<cdparam x="237" y="180" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="361" > +<cdparam x="1137" y="195" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="349" /> +<TGConnectingPoint num="1" id="350" /> +<TGConnectingPoint num="2" id="351" /> +<TGConnectingPoint num="3" id="352" /> +<TGConnectingPoint num="4" id="353" /> +<TGConnectingPoint num="5" id="354" /> +<TGConnectingPoint num="6" id="355" /> +<TGConnectingPoint num="7" id="356" /> +<TGConnectingPoint num="8" id="357" /> +<TGConnectingPoint num="9" id="358" /> +<TGConnectingPoint num="10" id="359" /> +<TGConnectingPoint num="11" id="360" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="346" > +<father id="361" num="0" /> +<cdparam x="1062" y="200" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="347" > +<father id="361" num="1" /> +<cdparam x="1162" y="200" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="348" > +<father id="361" num="2" /> +<cdparam x="1152" y="230" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2010" id="364" > +<cdparam x="23" y="353" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="saleStarted" /> +<TGConnectingPoint num="0" id="362" /> +<TGConnectingPoint num="1" id="363" /> +</COMPONENT> + +<COMPONENT type="2010" id="367" > +<cdparam x="139" y="354" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="productBarcodeScanned" /> +<TGConnectingPoint num="0" id="365" /> +<TGConnectingPoint num="1" id="366" /> +</COMPONENT> + +<COMPONENT type="2004" id="370" > +<cdparam x="117" y="264" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="productBarcodeScanned?barCode" /> +<TGConnectingPoint num="0" id="368" /> +<TGConnectingPoint num="1" id="369" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="373" > +<cdparam x="15" y="266" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="371" /> +<TGConnectingPoint num="1" id="372" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="376" > +<cdparam x="348" y="261" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="374" /> +<TGConnectingPoint num="1" id="375" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="379" > +<cdparam x="385" y="502" /> +<sizeparam width="132" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="cashAmountEntered" /> +<TGConnectingPoint num="0" id="377" /> +<TGConnectingPoint num="1" id="378" /> +</COMPONENT> + +<COMPONENT type="2010" id="382" > +<cdparam x="344" y="356" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="saleFinished" /> +<TGConnectingPoint num="0" id="380" /> +<TGConnectingPoint num="1" id="381" /> +</COMPONENT> + +<COMPONENT type="2010" id="385" > +<cdparam x="575" y="505" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="383" /> +<TGConnectingPoint num="1" id="384" /> +</COMPONENT> + +<COMPONENT type="2004" id="388" > +<cdparam x="568" y="423" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="386" /> +<TGConnectingPoint num="1" id="387" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="391" > +<cdparam x="362" y="423" /> +<sizeparam width="181" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered?amount" /> +<TGConnectingPoint num="0" id="389" /> +<TGConnectingPoint num="1" id="390" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="394" > +<cdparam x="699" y="421" /> +<sizeparam width="183" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="creditCardScanned?creditInfo" /> +<TGConnectingPoint num="0" id="392" /> +<TGConnectingPoint num="1" id="393" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="397" > +<cdparam x="735" y="503" /> +<sizeparam width="126" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="creditCardScanned" /> +<TGConnectingPoint num="0" id="395" /> +<TGConnectingPoint num="1" id="396" /> +</COMPONENT> + +<COMPONENT type="2004" id="400" > +<cdparam x="709" y="251" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="pinEntered?pin" /> +<TGConnectingPoint num="0" id="398" /> +<TGConnectingPoint num="1" id="399" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="403" > +<cdparam x="762" y="351" /> +<sizeparam width="80" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="pinEntered" /> +<TGConnectingPoint num="0" id="401" /> +<TGConnectingPoint num="1" id="402" /> +</COMPONENT> + +<COMPONENT type="2004" id="406" > +<cdparam x="866" y="252" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="404" /> +<TGConnectingPoint num="1" id="405" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="409" > +<cdparam x="868" y="324" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="407" /> +<TGConnectingPoint num="1" id="408" /> +</COMPONENT> + +<COMPONENT type="2010" id="412" > +<cdparam x="1036" y="346" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="410" /> +<TGConnectingPoint num="1" id="411" /> +</COMPONENT> + +<COMPONENT type="2004" id="415" > +<cdparam x="1225" y="251" /> +<sizeparam width="181" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="paymentMode?paymentMode" /> +<TGConnectingPoint num="0" id="413" /> +<TGConnectingPoint num="1" id="414" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="418" > +<cdparam x="1024" y="250" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="416" /> +<TGConnectingPoint num="1" id="417" /> +<extraparam> +<Via port="AEH" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="421" > +<cdparam x="1233" y="332" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="paymentMode" /> +<TGConnectingPoint num="0" id="419" /> +<TGConnectingPoint num="1" id="420" /> +</COMPONENT> + +<COMPONENT type="2008" id="434" > +<cdparam x="127" y="534" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="422" /> +<TGConnectingPoint num="1" id="423" /> +<TGConnectingPoint num="2" id="424" /> +<TGConnectingPoint num="3" id="425" /> +<TGConnectingPoint num="4" id="426" /> +<TGConnectingPoint num="5" id="427" /> +<TGConnectingPoint num="6" id="428" /> +<TGConnectingPoint num="7" id="429" /> +<TGConnectingPoint num="8" id="430" /> +<TGConnectingPoint num="9" id="431" /> +<TGConnectingPoint num="10" id="432" /> +<TGConnectingPoint num="11" id="433" /> +</COMPONENT> + +<COMPONENT type="2008" id="447" > +<cdparam x="661" y="587" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="435" /> +<TGConnectingPoint num="1" id="436" /> +<TGConnectingPoint num="2" id="437" /> +<TGConnectingPoint num="3" id="438" /> +<TGConnectingPoint num="4" id="439" /> +<TGConnectingPoint num="5" id="440" /> +<TGConnectingPoint num="6" id="441" /> +<TGConnectingPoint num="7" id="442" /> +<TGConnectingPoint num="8" id="443" /> +<TGConnectingPoint num="9" id="444" /> +<TGConnectingPoint num="10" id="445" /> +<TGConnectingPoint num="11" id="446" /> +</COMPONENT> + +<COMPONENT type="2008" id="460" > +<cdparam x="1153" y="478" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="448" /> +<TGConnectingPoint num="1" id="449" /> +<TGConnectingPoint num="2" id="450" /> +<TGConnectingPoint num="3" id="451" /> +<TGConnectingPoint num="4" id="452" /> +<TGConnectingPoint num="5" id="453" /> +<TGConnectingPoint num="6" id="454" /> +<TGConnectingPoint num="7" id="455" /> +<TGConnectingPoint num="8" id="456" /> +<TGConnectingPoint num="9" id="457" /> +<TGConnectingPoint num="10" id="458" /> +<TGConnectingPoint num="11" id="459" /> +</COMPONENT> + +<COMPONENT type="2008" id="473" > +<cdparam x="1111" y="519" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="461" /> +<TGConnectingPoint num="1" id="462" /> +<TGConnectingPoint num="2" id="463" /> +<TGConnectingPoint num="3" id="464" /> +<TGConnectingPoint num="4" id="465" /> +<TGConnectingPoint num="5" id="466" /> +<TGConnectingPoint num="6" id="467" /> +<TGConnectingPoint num="7" id="468" /> +<TGConnectingPoint num="8" id="469" /> +<TGConnectingPoint num="9" id="470" /> +<TGConnectingPoint num="10" id="471" /> +<TGConnectingPoint num="11" id="472" /> +</COMPONENT> + +<COMPONENT type="2008" id="486" > +<cdparam x="661" y="645" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="474" /> +<TGConnectingPoint num="1" id="475" /> +<TGConnectingPoint num="2" id="476" /> +<TGConnectingPoint num="3" id="477" /> +<TGConnectingPoint num="4" id="478" /> +<TGConnectingPoint num="5" id="479" /> +<TGConnectingPoint num="6" id="480" /> +<TGConnectingPoint num="7" id="481" /> +<TGConnectingPoint num="8" id="482" /> +<TGConnectingPoint num="9" id="483" /> +<TGConnectingPoint num="10" id="484" /> +<TGConnectingPoint num="11" id="485" /> +</COMPONENT> + +<COMPONENT type="2001" id="488" > +<cdparam x="645" y="693" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="serveFIFO_stop" /> +<TGConnectingPoint num="0" id="487" /> +</COMPONENT> + +<COMPONENT type="301" id="497" > +<cdparam x="10" y="10" /> +<sizeparam width="210" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value="CashDesk ServeFIFO SubMachine +" /> +<TGConnectingPoint num="0" id="489" /> +<TGConnectingPoint num="1" id="490" /> +<TGConnectingPoint num="2" id="491" /> +<TGConnectingPoint num="3" id="492" /> +<TGConnectingPoint num="4" id="493" /> +<TGConnectingPoint num="5" id="494" /> +<TGConnectingPoint num="6" id="495" /> +<TGConnectingPoint num="7" id="496" /> +<extraparam> +<Line value="CashDesk ServeFIFO SubMachine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="498" > +<cdparam x="563" y="97" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="594" y="69" id="302" /> +<P2 x="232" y="145" id="333" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="499" > +<cdparam x="633" y="97" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="664" y="69" id="303" /> +<P2 x="961" y="121" id="317" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="500" > +<cdparam x="598" y="132" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="629" y="104" id="304" /> +<P2 x="631" y="328" id="283" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="501" > +<cdparam x="540" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="996" y="131" id="319" /> +<P2 x="1147" y="195" id="349" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="502" > +<cdparam x="450" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="232" y="190" id="336" /> +<P2 x="222" y="259" id="368" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="503" > +<cdparam x="537" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="222" y="289" id="369" /> +<P2 x="217" y="349" id="365" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="504" > +<cdparam x="415" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="197" y="155" id="334" /> +<P2 x="56" y="261" id="371" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="505" > +<cdparam x="485" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="267" y="155" id="335" /> +<P2 x="394" y="256" id="374" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="506" > +<cdparam x="64" y="293" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="56" y="291" id="372" /> +<P2 x="64" y="348" id="362" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="507" > +<cdparam x="478" y="292" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="394" y="286" id="375" /> +<P2 x="390" y="351" id="380" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="508" > +<cdparam x="518" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="596" y="338" id="284" /> +<P2 x="452" y="418" id="389" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="509" > +<cdparam x="519" y="445" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="452" y="448" id="390" /> +<P2 x="451" y="497" id="377" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="510" > +<cdparam x="623" y="375" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="631" y="373" id="286" /> +<P2 x="621" y="418" id="386" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="511" > +<cdparam x="629" y="444" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="621" y="448" id="387" /> +<P2 x="628" y="500" id="383" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="512" > +<cdparam x="666" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="666" y="338" id="285" /> +<P2 x="790" y="416" id="392" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="513" > +<cdparam x="798" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="790" y="446" id="393" /> +<P2 x="798" y="498" id="395" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="514" > +<cdparam x="748" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="926" y="131" id="318" /> +<P2 x="761" y="246" id="398" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="515" > +<cdparam x="830" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="761" y="276" id="399" /> +<P2 x="802" y="346" id="401" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="516" > +<cdparam x="899" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="961" y="166" id="320" /> +<P2 x="936" y="247" id="404" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="517" > +<cdparam x="934" y="291" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="936" y="277" id="405" /> +<P2 x="938" y="319" id="407" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="518" > +<cdparam x="1037" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1112" y="205" id="350" /> +<P2 x="1096" y="245" id="416" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="519" > +<cdparam x="1094" y="291" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="1096" y="275" id="417" /> +<P2 x="1108" y="341" id="410" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="520" > +<cdparam x="1133" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1182" y="205" id="351" /> +<P2 x="1315" y="246" id="413" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="521" > +<cdparam x="1278" y="288" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="1315" y="276" id="414" /> +<P2 x="1281" y="327" id="419" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="522" > +<cdparam x="64" y="388" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="64" y="378" id="363" /> +<P2 x="127" y="539" id="423" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="523" > +<cdparam x="223" y="383" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="217" y="379" id="366" /> +<P2 x="132" y="534" id="424" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="524" > +<cdparam x="394" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="390" y="381" id="381" /> +<P2 x="137" y="539" id="425" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="525" > +<cdparam x="465" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="451" y="527" id="378" /> +<P2 x="661" y="592" id="436" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="526" > +<cdparam x="628" y="538" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="628" y="530" id="384" /> +<P2 x="666" y="587" id="437" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="527" > +<cdparam x="796" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="798" y="528" id="396" /> +<P2 x="671" y="592" id="438" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="528" > +<cdparam x="1281" y="357" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="1281" y="357" id="420" /> +<P2 x="1163" y="483" id="451" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="529" > +<cdparam x="1108" y="371" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="1108" y="371" id="411" /> +<P2 x="1158" y="478" id="450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="530" > +<cdparam x="934" y="375" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="938" y="349" id="408" /> +<P2 x="1153" y="483" id="449" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="531" > +<cdparam x="814" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="802" y="376" id="402" /> +<P2 x="1111" y="524" id="462" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="532" > +<cdparam x="1234" y="482" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1158" y="498" id="448" /> +<P2 x="1121" y="524" id="464" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="533" > +<cdparam x="208" y="736" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="132" y="554" id="422" /> +<P2 x="661" y="650" id="475" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="534" > +<cdparam x="656" y="733" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="666" y="607" id="435" /> +<P2 x="666" y="645" id="476" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="535" > +<cdparam x="1088" y="723" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1116" y="539" id="461" /> +<P2 x="671" y="650" id="477" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="536" > +<cdparam x="650" y="793" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="666" y="665" id="474" /> +<P2 x="655" y="688" id="487" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="537" > +<cdparam x="636" y="34" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="630" y="30" id="296" /> +<P2 x="629" y="59" id="301" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="saleStarted" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="539" > +<cdparam x="132" y="11" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="saleStarted_start" /> +<TGConnectingPoint num="0" id="538" /> +</COMPONENT> + +<COMPONENT type="2012" id="542" > +<cdparam x="12" y="144" /> +<sizeparam width="89" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashState=2" /> +<TGConnectingPoint num="0" id="540" /> +<TGConnectingPoint num="1" id="541" /> +</COMPONENT> + +<COMPONENT type="2012" id="545" > +<cdparam x="177" y="140" /> +<sizeparam width="178" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode= NotIdleException" /> +<TGConnectingPoint num="0" id="543" /> +<TGConnectingPoint num="1" id="544" /> +</COMPONENT> + +<COMPONENT type="2008" id="558" > +<cdparam x="133" y="195" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="546" /> +<TGConnectingPoint num="1" id="547" /> +<TGConnectingPoint num="2" id="548" /> +<TGConnectingPoint num="3" id="549" /> +<TGConnectingPoint num="4" id="550" /> +<TGConnectingPoint num="5" id="551" /> +<TGConnectingPoint num="6" id="552" /> +<TGConnectingPoint num="7" id="553" /> +<TGConnectingPoint num="8" id="554" /> +<TGConnectingPoint num="9" id="555" /> +<TGConnectingPoint num="10" id="556" /> +<TGConnectingPoint num="11" id="557" /> +</COMPONENT> + +<COMPONENT type="2001" id="560" > +<cdparam x="127" y="241" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="saleStarted_stop" /> +<TGConnectingPoint num="0" id="559" /> +</COMPONENT> + +<COMPONENT type="2006" id="576" > +<cdparam x="132" y="77" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="564" /> +<TGConnectingPoint num="1" id="565" /> +<TGConnectingPoint num="2" id="566" /> +<TGConnectingPoint num="3" id="567" /> +<TGConnectingPoint num="4" id="568" /> +<TGConnectingPoint num="5" id="569" /> +<TGConnectingPoint num="6" id="570" /> +<TGConnectingPoint num="7" id="571" /> +<TGConnectingPoint num="8" id="572" /> +<TGConnectingPoint num="9" id="573" /> +<TGConnectingPoint num="10" id="574" /> +<TGConnectingPoint num="11" id="575" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="561" > +<father id="576" num="0" /> +<cdparam x="57" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="562" > +<father id="576" num="1" /> +<cdparam x="157" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="563" > +<father id="576" num="2" /> +<cdparam x="147" y="112" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="585" > +<cdparam x="366" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="577" /> +<TGConnectingPoint num="1" id="578" /> +<TGConnectingPoint num="2" id="579" /> +<TGConnectingPoint num="3" id="580" /> +<TGConnectingPoint num="4" id="581" /> +<TGConnectingPoint num="5" id="582" /> +<TGConnectingPoint num="6" id="583" /> +<TGConnectingPoint num="7" id="584" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="586" > +<cdparam x="125" y="33" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="139" y="31" id="538" /> +<P2 x="142" y="77" id="564" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="587" > +<cdparam x="87" y="89" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="107" y="87" id="565" /> +<P2 x="56" y="139" id="540" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="588" > +<cdparam x="58" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="56" y="169" id="541" /> +<P2 x="133" y="200" id="547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="589" > +<cdparam x="220" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="266" y="165" id="544" /> +<P2 x="143" y="200" id="549" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="590" > +<cdparam x="132" y="281" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="138" y="215" id="546" /> +<P2 x="137" y="236" id="559" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="591" > +<cdparam x="157" y="89" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="177" y="87" id="566" /> +<P2 x="266" y="135" id="543" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="592" > +<cdparam x="122" y="124" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="142" y="122" id="567" /> +<P2 x="138" y="195" id="548" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="productBarcodeScanned" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="608" > +<cdparam x="370" y="283" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="596" /> +<TGConnectingPoint num="1" id="597" /> +<TGConnectingPoint num="2" id="598" /> +<TGConnectingPoint num="3" id="599" /> +<TGConnectingPoint num="4" id="600" /> +<TGConnectingPoint num="5" id="601" /> +<TGConnectingPoint num="6" id="602" /> +<TGConnectingPoint num="7" id="603" /> +<TGConnectingPoint num="8" id="604" /> +<TGConnectingPoint num="9" id="605" /> +<TGConnectingPoint num="10" id="606" /> +<TGConnectingPoint num="11" id="607" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="593" > +<father id="608" num="0" /> +<cdparam x="295" y="313" /> +<sizeparam width="148" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[products<(maxNbProd+1)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="594" > +<father id="608" num="1" /> +<cdparam x="401" y="288" /> +<sizeparam width="126" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[products>maxNbProd]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="595" > +<father id="608" num="2" /> +<cdparam x="385" y="318" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="624" > +<cdparam x="302" y="55" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="612" /> +<TGConnectingPoint num="1" id="613" /> +<TGConnectingPoint num="2" id="614" /> +<TGConnectingPoint num="3" id="615" /> +<TGConnectingPoint num="4" id="616" /> +<TGConnectingPoint num="5" id="617" /> +<TGConnectingPoint num="6" id="618" /> +<TGConnectingPoint num="7" id="619" /> +<TGConnectingPoint num="8" id="620" /> +<TGConnectingPoint num="9" id="621" /> +<TGConnectingPoint num="10" id="622" /> +<TGConnectingPoint num="11" id="623" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="609" > +<father id="624" num="0" /> +<cdparam x="227" y="60" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="610" > +<father id="624" num="1" /> +<cdparam x="327" y="60" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="611" > +<father id="624" num="2" /> +<cdparam x="317" y="90" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="626" > +<cdparam x="303" y="18" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="productBarcodeScanned_start" /> +<TGConnectingPoint num="0" id="625" /> +</COMPONENT> + +<COMPONENT type="301" id="635" > +<cdparam x="701" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="627" /> +<TGConnectingPoint num="1" id="628" /> +<TGConnectingPoint num="2" id="629" /> +<TGConnectingPoint num="3" id="630" /> +<TGConnectingPoint num="4" id="631" /> +<TGConnectingPoint num="5" id="632" /> +<TGConnectingPoint num="6" id="633" /> +<TGConnectingPoint num="7" id="634" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="648" > +<cdparam x="355" y="689" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="636" /> +<TGConnectingPoint num="1" id="637" /> +<TGConnectingPoint num="2" id="638" /> +<TGConnectingPoint num="3" id="639" /> +<TGConnectingPoint num="4" id="640" /> +<TGConnectingPoint num="5" id="641" /> +<TGConnectingPoint num="6" id="642" /> +<TGConnectingPoint num="7" id="643" /> +<TGConnectingPoint num="8" id="644" /> +<TGConnectingPoint num="9" id="645" /> +<TGConnectingPoint num="10" id="646" /> +<TGConnectingPoint num="11" id="647" /> +</COMPONENT> + +<COMPONENT type="2002" id="651" > +<cdparam x="240" y="103" /> +<sizeparam width="143" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="getProductReq!barCode" /> +<TGConnectingPoint num="0" id="649" /> +<TGConnectingPoint num="1" id="650" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="654" > +<cdparam x="242" y="566" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="652" /> +<TGConnectingPoint num="1" id="653" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2012" id="657" > +<cdparam x="207" y="333" /> +<sizeparam width="137" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="products=products+1" /> +<TGConnectingPoint num="0" id="655" /> +<TGConnectingPoint num="1" id="656" /> +</COMPONENT> + +<COMPONENT type="2006" id="673" > +<cdparam x="371" y="452" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="661" /> +<TGConnectingPoint num="1" id="662" /> +<TGConnectingPoint num="2" id="663" /> +<TGConnectingPoint num="3" id="664" /> +<TGConnectingPoint num="4" id="665" /> +<TGConnectingPoint num="5" id="666" /> +<TGConnectingPoint num="6" id="667" /> +<TGConnectingPoint num="7" id="668" /> +<TGConnectingPoint num="8" id="669" /> +<TGConnectingPoint num="9" id="670" /> +<TGConnectingPoint num="10" id="671" /> +<TGConnectingPoint num="11" id="672" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="658" > +<father id="673" num="0" /> +<cdparam x="296" y="482" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[expressMode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="659" > +<father id="673" num="1" /> +<cdparam x="416" y="457" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[expressMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="660" > +<father id="673" num="2" /> +<cdparam x="386" y="487" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="686" > +<cdparam x="304" y="524" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="674" /> +<TGConnectingPoint num="1" id="675" /> +<TGConnectingPoint num="2" id="676" /> +<TGConnectingPoint num="3" id="677" /> +<TGConnectingPoint num="4" id="678" /> +<TGConnectingPoint num="5" id="679" /> +<TGConnectingPoint num="6" id="680" /> +<TGConnectingPoint num="7" id="681" /> +<TGConnectingPoint num="8" id="682" /> +<TGConnectingPoint num="9" id="683" /> +<TGConnectingPoint num="10" id="684" /> +<TGConnectingPoint num="11" id="685" /> +</COMPONENT> + +<COMPONENT type="2008" id="699" > +<cdparam x="356" y="706" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="687" /> +<TGConnectingPoint num="1" id="688" /> +<TGConnectingPoint num="2" id="689" /> +<TGConnectingPoint num="3" id="690" /> +<TGConnectingPoint num="4" id="691" /> +<TGConnectingPoint num="5" id="692" /> +<TGConnectingPoint num="6" id="693" /> +<TGConnectingPoint num="7" id="694" /> +<TGConnectingPoint num="8" id="695" /> +<TGConnectingPoint num="9" id="696" /> +<TGConnectingPoint num="10" id="697" /> +<TGConnectingPoint num="11" id="698" /> +</COMPONENT> + +<COMPONENT type="2001" id="701" > +<cdparam x="351" y="742" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="productBarcodeScanned_stop" /> +<TGConnectingPoint num="0" id="700" /> +</COMPONENT> + +<COMPONENT type="2006" id="717" > +<cdparam x="490" y="507" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="705" /> +<TGConnectingPoint num="1" id="706" /> +<TGConnectingPoint num="2" id="707" /> +<TGConnectingPoint num="3" id="708" /> +<TGConnectingPoint num="4" id="709" /> +<TGConnectingPoint num="5" id="710" /> +<TGConnectingPoint num="6" id="711" /> +<TGConnectingPoint num="7" id="712" /> +<TGConnectingPoint num="8" id="713" /> +<TGConnectingPoint num="9" id="714" /> +<TGConnectingPoint num="10" id="715" /> +<TGConnectingPoint num="11" id="716" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="702" > +<father id="717" num="0" /> +<cdparam x="415" y="537" /> +<sizeparam width="148" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[products<(maxNbProd+1)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="703" > +<father id="717" num="1" /> +<cdparam x="535" y="512" /> +<sizeparam width="126" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[products>maxNbProd]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="704" > +<father id="717" num="2" /> +<cdparam x="505" y="565" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="730" > +<cdparam x="382" y="374" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="718" /> +<TGConnectingPoint num="1" id="719" /> +<TGConnectingPoint num="2" id="720" /> +<TGConnectingPoint num="3" id="721" /> +<TGConnectingPoint num="4" id="722" /> +<TGConnectingPoint num="5" id="723" /> +<TGConnectingPoint num="6" id="724" /> +<TGConnectingPoint num="7" id="725" /> +<TGConnectingPoint num="8" id="726" /> +<TGConnectingPoint num="9" id="727" /> +<TGConnectingPoint num="10" id="728" /> +<TGConnectingPoint num="11" id="729" /> +</COMPONENT> + +<COMPONENT type="2004" id="733" > +<cdparam x="226" y="156" /> +<sizeparam width="172" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="getProductResp?productOk" /> +<TGConnectingPoint num="0" id="731" /> +<TGConnectingPoint num="1" id="732" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="749" > +<cdparam x="299" y="214" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="737" /> +<TGConnectingPoint num="1" id="738" /> +<TGConnectingPoint num="2" id="739" /> +<TGConnectingPoint num="3" id="740" /> +<TGConnectingPoint num="4" id="741" /> +<TGConnectingPoint num="5" id="742" /> +<TGConnectingPoint num="6" id="743" /> +<TGConnectingPoint num="7" id="744" /> +<TGConnectingPoint num="8" id="745" /> +<TGConnectingPoint num="9" id="746" /> +<TGConnectingPoint num="10" id="747" /> +<TGConnectingPoint num="11" id="748" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="734" > +<father id="749" num="0" /> +<cdparam x="224" y="219" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[productOk==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="735" > +<father id="749" num="1" /> +<cdparam x="344" y="244" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[productOk==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="736" > +<father id="749" num="2" /> +<cdparam x="314" y="249" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="752" > +<cdparam x="40" y="264" /> +<sizeparam width="232" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=ProductNotFoundException" /> +<TGConnectingPoint num="0" id="750" /> +<TGConnectingPoint num="1" id="751" /> +</COMPONENT> + +<COMPONENT type="2012" id="755" > +<cdparam x="448" y="613" /> +<sizeparam width="282" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=ExceedNumberOfProductsException" /> +<TGConnectingPoint num="0" id="753" /> +<TGConnectingPoint num="1" id="754" /> +</COMPONENT> + +<CONNECTOR type="121" id="756" > +<cdparam x="314" y="118" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="310" y="38" id="625" /> +<P2 x="312" y="55" id="612" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="759" > +<cdparam x="279" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="277" y="65" id="613" /> +<P2 x="356" y="711" id="688" /> +<Point x="27" y="120" /> +<Point x="21" y="695" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="757" > +<father id="759" num="0" /> +<cdparam x="27" y="120" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="758" > +<father id="759" num="1" /> +<cdparam x="21" y="695" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="762" > +<cdparam x="349" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="347" y="65" id="614" /> +<P2 x="366" y="711" id="690" /> +<Point x="752" y="114" /> +<Point x="759" y="696" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="760" > +<father id="762" num="0" /> +<cdparam x="752" y="114" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="761" > +<father id="762" num="1" /> +<cdparam x="759" y="696" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="763" > +<cdparam x="314" y="202" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="312" y="100" id="615" /> +<P2 x="311" y="98" id="649" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="764" > +<cdparam x="314" y="245" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to action state" value="null" /> +<P1 x="311" y="128" id="650" /> +<P2 x="312" y="151" id="731" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="765" > +<cdparam x="344" y="337" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="346" y="462" id="662" /> +<P2 x="304" y="529" id="675" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="766" > +<cdparam x="390" y="263" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to choice" value="null" /> +<P1 x="275" y="358" id="656" /> +<P2 x="382" y="379" id="719" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="767" > +<cdparam x="382" y="485" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="309" y="544" id="674" /> +<P2 x="307" y="561" id="652" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="768" > +<cdparam x="418" y="325" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="416" y="462" id="663" /> +<P2 x="500" y="507" id="705" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="769" > +<cdparam x="448" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="465" y="517" id="706" /> +<P2 x="314" y="529" id="677" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="770" > +<cdparam x="518" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="535" y="517" id="707" /> +<P2 x="589" y="608" id="753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="771" > +<cdparam x="314" y="680" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="360" y="709" id="636" /> +<P2 x="361" y="706" id="689" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="772" > +<cdparam x="638" y="430" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="589" y="638" id="754" /> +<P2 x="365" y="694" id="639" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="773" > +<cdparam x="314" y="708" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="361" y="726" id="687" /> +<P2 x="361" y="737" id="700" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="774" > +<cdparam x="252" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="307" y="591" id="653" /> +<P2 x="360" y="689" id="638" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="775" > +<cdparam x="549" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="345" y="293" id="597" /> +<P2 x="275" y="328" id="655" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="776" > +<cdparam x="444" y="246" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="387" y="394" id="718" /> +<P2 x="381" y="452" id="661" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="778" > +<cdparam x="425" y="141" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="415" y="293" id="598" /> +<P2 x="392" y="379" id="721" /> +<Point x="515" y="354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="777" > +<father id="778" num="0" /> +<cdparam x="515" y="354" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="779" > +<cdparam x="312" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="312" y="181" id="732" /> +<P2 x="309" y="214" id="737" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="781" > +<cdparam x="344" y="224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="344" y="224" id="739" /> +<P2 x="380" y="283" id="596" /> +<Point x="377" y="226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="780" > +<father id="781" num="0" /> +<cdparam x="377" y="226" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="782" > +<cdparam x="274" y="224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="274" y="224" id="738" /> +<P2 x="156" y="259" id="750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="784" > +<cdparam x="158" y="289" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="156" y="289" id="751" /> +<P2 x="355" y="694" id="637" /> +<Point x="156" y="633" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="783" > +<father id="784" num="0" /> +<cdparam x="156" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="saleFinished" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="800" > +<cdparam x="143" y="66" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="788" /> +<TGConnectingPoint num="1" id="789" /> +<TGConnectingPoint num="2" id="790" /> +<TGConnectingPoint num="3" id="791" /> +<TGConnectingPoint num="4" id="792" /> +<TGConnectingPoint num="5" id="793" /> +<TGConnectingPoint num="6" id="794" /> +<TGConnectingPoint num="7" id="795" /> +<TGConnectingPoint num="8" id="796" /> +<TGConnectingPoint num="9" id="797" /> +<TGConnectingPoint num="10" id="798" /> +<TGConnectingPoint num="11" id="799" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="785" > +<father id="800" num="0" /> +<cdparam x="68" y="71" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==2]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="786" > +<father id="800" num="1" /> +<cdparam x="188" y="71" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="787" > +<father id="800" num="2" /> +<cdparam x="158" y="101" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==0]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="802" > +<cdparam x="147" y="20" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="saleFinished_start" /> +<TGConnectingPoint num="0" id="801" /> +</COMPONENT> + +<COMPONENT type="2012" id="805" > +<cdparam x="25" y="121" /> +<sizeparam width="89" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashState=1" /> +<TGConnectingPoint num="0" id="803" /> +<TGConnectingPoint num="1" id="804" /> +</COMPONENT> + +<COMPONENT type="2012" id="808" > +<cdparam x="127" y="197" /> +<sizeparam width="228" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=SaleNotFinishedException" /> +<TGConnectingPoint num="0" id="806" /> +<TGConnectingPoint num="1" id="807" /> +</COMPONENT> + +<COMPONENT type="2008" id="821" > +<cdparam x="136" y="252" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="809" /> +<TGConnectingPoint num="1" id="810" /> +<TGConnectingPoint num="2" id="811" /> +<TGConnectingPoint num="3" id="812" /> +<TGConnectingPoint num="4" id="813" /> +<TGConnectingPoint num="5" id="814" /> +<TGConnectingPoint num="6" id="815" /> +<TGConnectingPoint num="7" id="816" /> +<TGConnectingPoint num="8" id="817" /> +<TGConnectingPoint num="9" id="818" /> +<TGConnectingPoint num="10" id="819" /> +<TGConnectingPoint num="11" id="820" /> +</COMPONENT> + +<COMPONENT type="2001" id="823" > +<cdparam x="132" y="298" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="saleFinished_stop" /> +<TGConnectingPoint num="0" id="822" /> +</COMPONENT> + +<COMPONENT type="301" id="832" > +<cdparam x="287" y="12" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="824" /> +<TGConnectingPoint num="1" id="825" /> +<TGConnectingPoint num="2" id="826" /> +<TGConnectingPoint num="3" id="827" /> +<TGConnectingPoint num="4" id="828" /> +<TGConnectingPoint num="5" id="829" /> +<TGConnectingPoint num="6" id="830" /> +<TGConnectingPoint num="7" id="831" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="845" > +<cdparam x="239" y="148" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="833" /> +<TGConnectingPoint num="1" id="834" /> +<TGConnectingPoint num="2" id="835" /> +<TGConnectingPoint num="3" id="836" /> +<TGConnectingPoint num="4" id="837" /> +<TGConnectingPoint num="5" id="838" /> +<TGConnectingPoint num="6" id="839" /> +<TGConnectingPoint num="7" id="840" /> +<TGConnectingPoint num="8" id="841" /> +<TGConnectingPoint num="9" id="842" /> +<TGConnectingPoint num="10" id="843" /> +<TGConnectingPoint num="11" id="844" /> +</COMPONENT> + +<CONNECTOR type="121" id="846" > +<cdparam x="156" y="76" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="154" y="40" id="801" /> +<P2 x="153" y="66" id="788" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="847" > +<cdparam x="79" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="69" y="146" id="804" /> +<P2 x="136" y="257" id="810" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="848" > +<cdparam x="241" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="241" y="222" id="807" /> +<P2 x="146" y="257" id="812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="849" > +<cdparam x="153" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="141" y="272" id="809" /> +<P2 x="142" y="293" id="822" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="850" > +<cdparam x="118" y="132" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="118" y="76" id="789" /> +<P2 x="69" y="116" id="803" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="851" > +<cdparam x="153" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="153" y="111" id="791" /> +<P2 x="239" y="153" id="834" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="852" > +<cdparam x="188" y="132" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="188" y="76" id="790" /> +<P2 x="249" y="153" id="836" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="853" > +<cdparam x="202" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="244" y="168" id="833" /> +<P2 x="241" y="192" id="806" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="cashAmountEntered" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="855" > +<cdparam x="403" y="42" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="cashAmountEntered_start" /> +<TGConnectingPoint num="0" id="854" /> +</COMPONENT> + +<COMPONENT type="2002" id="858" > +<cdparam x="4" y="266" /> +<sizeparam width="238" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated!changeAmount" /> +<TGConnectingPoint num="0" id="856" /> +<TGConnectingPoint num="1" id="857" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="860" > +<cdparam x="398" y="365" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="cashAmountEntered_stop" /> +<TGConnectingPoint num="0" id="859" /> +</COMPONENT> + +<COMPONENT type="301" id="869" > +<cdparam x="575" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="861" /> +<TGConnectingPoint num="1" id="862" /> +<TGConnectingPoint num="2" id="863" /> +<TGConnectingPoint num="3" id="864" /> +<TGConnectingPoint num="4" id="865" /> +<TGConnectingPoint num="5" id="866" /> +<TGConnectingPoint num="6" id="867" /> +<TGConnectingPoint num="7" id="868" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="882" > +<cdparam x="405" y="312" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="870" /> +<TGConnectingPoint num="1" id="871" /> +<TGConnectingPoint num="2" id="872" /> +<TGConnectingPoint num="3" id="873" /> +<TGConnectingPoint num="4" id="874" /> +<TGConnectingPoint num="5" id="875" /> +<TGConnectingPoint num="6" id="876" /> +<TGConnectingPoint num="7" id="877" /> +<TGConnectingPoint num="8" id="878" /> +<TGConnectingPoint num="9" id="879" /> +<TGConnectingPoint num="10" id="880" /> +<TGConnectingPoint num="11" id="881" /> +</COMPONENT> + +<COMPONENT type="2006" id="898" > +<cdparam x="397" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="886" /> +<TGConnectingPoint num="1" id="887" /> +<TGConnectingPoint num="2" id="888" /> +<TGConnectingPoint num="3" id="889" /> +<TGConnectingPoint num="4" id="890" /> +<TGConnectingPoint num="5" id="891" /> +<TGConnectingPoint num="6" id="892" /> +<TGConnectingPoint num="7" id="893" /> +<TGConnectingPoint num="8" id="894" /> +<TGConnectingPoint num="9" id="895" /> +<TGConnectingPoint num="10" id="896" /> +<TGConnectingPoint num="11" id="897" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="883" > +<father id="898" num="0" /> +<cdparam x="322" y="115" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="884" > +<father id="898" num="1" /> +<cdparam x="422" y="111" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="885" > +<father id="898" num="2" /> +<cdparam x="412" y="144" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="911" > +<cdparam x="635" y="174" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="899" /> +<TGConnectingPoint num="1" id="900" /> +<TGConnectingPoint num="2" id="901" /> +<TGConnectingPoint num="3" id="902" /> +<TGConnectingPoint num="4" id="903" /> +<TGConnectingPoint num="5" id="904" /> +<TGConnectingPoint num="6" id="905" /> +<TGConnectingPoint num="7" id="906" /> +<TGConnectingPoint num="8" id="907" /> +<TGConnectingPoint num="9" id="908" /> +<TGConnectingPoint num="10" id="909" /> +<TGConnectingPoint num="11" id="910" /> +</COMPONENT> + +<COMPONENT type="2012" id="914" > +<cdparam x="547" y="251" /> +<sizeparam width="192" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotPayingException" /> +<TGConnectingPoint num="0" id="912" /> +<TGConnectingPoint num="1" id="913" /> +</COMPONENT> + +<COMPONENT type="2006" id="930" > +<cdparam x="213" y="168" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="918" /> +<TGConnectingPoint num="1" id="919" /> +<TGConnectingPoint num="2" id="920" /> +<TGConnectingPoint num="3" id="921" /> +<TGConnectingPoint num="4" id="922" /> +<TGConnectingPoint num="5" id="923" /> +<TGConnectingPoint num="6" id="924" /> +<TGConnectingPoint num="7" id="925" /> +<TGConnectingPoint num="8" id="926" /> +<TGConnectingPoint num="9" id="927" /> +<TGConnectingPoint num="10" id="928" /> +<TGConnectingPoint num="11" id="929" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="915" > +<father id="930" num="0" /> +<cdparam x="138" y="191" /> +<sizeparam width="104" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="916" > +<father id="930" num="1" /> +<cdparam x="238" y="173" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="917" > +<father id="930" num="2" /> +<cdparam x="231" y="213" /> +<sizeparam width="129" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[not(paymentMode==1)]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="933" > +<cdparam x="260" y="249" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="931" /> +<TGConnectingPoint num="1" id="932" /> +</COMPONENT> + +<COMPONENT type="301" id="942" > +<cdparam x="10" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="934" /> +<TGConnectingPoint num="1" id="935" /> +<TGConnectingPoint num="2" id="936" /> +<TGConnectingPoint num="3" id="937" /> +<TGConnectingPoint num="4" id="938" /> +<TGConnectingPoint num="5" id="939" /> +<TGConnectingPoint num="6" id="940" /> +<TGConnectingPoint num="7" id="941" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="943" > +<cdparam x="310" y="64" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="410" y="62" id="854" /> +<P2 x="407" y="106" id="886" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="944" > +<cdparam x="304" y="632" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="410" y="332" id="870" /> +<P2 x="408" y="360" id="859" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="945" > +<cdparam x="407" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="407" y="151" id="889" /> +<P2 x="635" y="179" id="900" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="946" > +<cdparam x="442" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="442" y="116" id="888" /> +<P2 x="640" y="174" id="901" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="947" > +<cdparam x="556" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="640" y="194" id="899" /> +<P2 x="643" y="246" id="912" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="948" > +<cdparam x="588" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="643" y="276" id="913" /> +<P2 x="415" y="317" id="873" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="949" > +<cdparam x="372" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="372" y="116" id="887" /> +<P2 x="223" y="168" id="918" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="950" > +<cdparam x="265" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="223" y="213" id="921" /> +<P2 x="385" y="244" id="931" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="951" > +<cdparam x="418" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="385" y="274" id="932" /> +<P2 x="410" y="312" id="872" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="953" > +<cdparam x="230" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="188" y="178" id="919" /> +<P2 x="123" y="261" id="856" /> +<Point x="115" y="176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="952" > +<father id="953" num="0" /> +<cdparam x="115" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="954" > +<cdparam x="165" y="301" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="123" y="291" id="857" /> +<P2 x="405" y="317" id="871" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="cashBoxClosed" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="2006" id="970" > +<cdparam x="246" y="121" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="958" /> +<TGConnectingPoint num="1" id="959" /> +<TGConnectingPoint num="2" id="960" /> +<TGConnectingPoint num="3" id="961" /> +<TGConnectingPoint num="4" id="962" /> +<TGConnectingPoint num="5" id="963" /> +<TGConnectingPoint num="6" id="964" /> +<TGConnectingPoint num="7" id="965" /> +<TGConnectingPoint num="8" id="966" /> +<TGConnectingPoint num="9" id="967" /> +<TGConnectingPoint num="10" id="968" /> +<TGConnectingPoint num="11" id="969" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="955" > +<father id="970" num="0" /> +<cdparam x="171" y="151" /> +<sizeparam width="214" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==paymentMode_CASH]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="956" > +<father id="970" num="1" /> +<cdparam x="271" y="126" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="957" > +<father id="970" num="2" /> +<cdparam x="281" y="181" /> +<sizeparam width="239" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[not(paymentMode==paymentMode_CASH)]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="986" > +<cdparam x="466" y="77" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="974" /> +<TGConnectingPoint num="1" id="975" /> +<TGConnectingPoint num="2" id="976" /> +<TGConnectingPoint num="3" id="977" /> +<TGConnectingPoint num="4" id="978" /> +<TGConnectingPoint num="5" id="979" /> +<TGConnectingPoint num="6" id="980" /> +<TGConnectingPoint num="7" id="981" /> +<TGConnectingPoint num="8" id="982" /> +<TGConnectingPoint num="9" id="983" /> +<TGConnectingPoint num="10" id="984" /> +<TGConnectingPoint num="11" id="985" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="971" > +<father id="986" num="0" /> +<cdparam x="391" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="972" > +<father id="986" num="1" /> +<cdparam x="491" y="82" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[cashState==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="973" > +<father id="986" num="2" /> +<cdparam x="481" y="112" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[cashState==2]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="989" > +<cdparam x="11" y="238" /> +<sizeparam width="182" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode_CASH" /> +<TGConnectingPoint num="0" id="987" /> +<TGConnectingPoint num="1" id="988" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2000" id="991" > +<cdparam x="468" y="13" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="cashBoxClosed_start" /> +<TGConnectingPoint num="0" id="990" /> +</COMPONENT> + +<COMPONENT type="301" id="1000" > +<cdparam x="672" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="992" /> +<TGConnectingPoint num="1" id="993" /> +<TGConnectingPoint num="2" id="994" /> +<TGConnectingPoint num="3" id="995" /> +<TGConnectingPoint num="4" id="996" /> +<TGConnectingPoint num="5" id="997" /> +<TGConnectingPoint num="6" id="998" /> +<TGConnectingPoint num="7" id="999" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="1013" > +<cdparam x="592" y="201" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1001" /> +<TGConnectingPoint num="1" id="1002" /> +<TGConnectingPoint num="2" id="1003" /> +<TGConnectingPoint num="3" id="1004" /> +<TGConnectingPoint num="4" id="1005" /> +<TGConnectingPoint num="5" id="1006" /> +<TGConnectingPoint num="6" id="1007" /> +<TGConnectingPoint num="7" id="1008" /> +<TGConnectingPoint num="8" id="1009" /> +<TGConnectingPoint num="9" id="1010" /> +<TGConnectingPoint num="10" id="1011" /> +<TGConnectingPoint num="11" id="1012" /> +</COMPONENT> + +<COMPONENT type="2012" id="1016" > +<cdparam x="508" y="234" /> +<sizeparam width="192" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotPayingException" /> +<TGConnectingPoint num="0" id="1014" /> +<TGConnectingPoint num="1" id="1015" /> +</COMPONENT> + +<COMPONENT type="2012" id="1019" > +<cdparam x="216" y="233" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="1017" /> +<TGConnectingPoint num="1" id="1018" /> +</COMPONENT> + +<COMPONENT type="301" id="1028" > +<cdparam x="659" y="125" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1020" /> +<TGConnectingPoint num="1" id="1021" /> +<TGConnectingPoint num="2" id="1022" /> +<TGConnectingPoint num="3" id="1023" /> +<TGConnectingPoint num="4" id="1024" /> +<TGConnectingPoint num="5" id="1025" /> +<TGConnectingPoint num="6" id="1026" /> +<TGConnectingPoint num="7" id="1027" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="1030" > +<cdparam x="365" y="374" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="cashBoxClosed_stop" /> +<TGConnectingPoint num="0" id="1029" /> +</COMPONENT> + +<COMPONENT type="2008" id="1043" > +<cdparam x="372" y="323" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1031" /> +<TGConnectingPoint num="1" id="1032" /> +<TGConnectingPoint num="2" id="1033" /> +<TGConnectingPoint num="3" id="1034" /> +<TGConnectingPoint num="4" id="1035" /> +<TGConnectingPoint num="5" id="1036" /> +<TGConnectingPoint num="6" id="1037" /> +<TGConnectingPoint num="7" id="1038" /> +<TGConnectingPoint num="8" id="1039" /> +<TGConnectingPoint num="9" id="1040" /> +<TGConnectingPoint num="10" id="1041" /> +<TGConnectingPoint num="11" id="1042" /> +</COMPONENT> + +<COMPONENT type="2010" id="1046" > +<cdparam x="124" y="308" /> +<sizeparam width="36" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="submachine" value="init" /> +<TGConnectingPoint num="0" id="1044" /> +<TGConnectingPoint num="1" id="1045" /> +</COMPONENT> + +<CONNECTOR type="121" id="1047" > +<cdparam x="590" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="475" y="33" id="990" /> +<P2 x="476" y="77" id="974" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1048" > +<cdparam x="784" y="197" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="476" y="122" id="977" /> +<P2 x="592" y="206" id="1002" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1049" > +<cdparam x="819" y="162" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="511" y="87" id="976" /> +<P2 x="597" y="201" id="1003" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1050" > +<cdparam x="933" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="597" y="221" id="1001" /> +<P2 x="604" y="229" id="1014" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1051" > +<cdparam x="652" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="441" y="87" id="975" /> +<P2 x="256" y="121" id="958" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1052" > +<cdparam x="545" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="256" y="166" id="961" /> +<P2 x="341" y="228" id="1017" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1053" > +<cdparam x="824" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="341" y="258" id="1018" /> +<P2 x="377" y="323" id="1033" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1054" > +<cdparam x="1105" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="604" y="259" id="1015" /> +<P2 x="382" y="328" id="1034" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1055" > +<cdparam x="488" y="569" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="377" y="343" id="1031" /> +<P2 x="375" y="369" id="1029" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1056" > +<cdparam x="317" y="149" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="221" y="131" id="959" /> +<P2 x="102" y="233" id="987" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1057" > +<cdparam x="110" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="102" y="263" id="988" /> +<P2 x="142" y="303" id="1044" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1058" > +<cdparam x="192" y="489" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="142" y="333" id="1045" /> +<P2 x="372" y="328" id="1032" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="creditCardScanned" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1060" > +<cdparam x="232" y="21" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="creditCardScanned_start" /> +<TGConnectingPoint num="0" id="1059" /> +</COMPONENT> + +<COMPONENT type="2006" id="1076" > +<cdparam x="227" y="90" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1064" /> +<TGConnectingPoint num="1" id="1065" /> +<TGConnectingPoint num="2" id="1066" /> +<TGConnectingPoint num="3" id="1067" /> +<TGConnectingPoint num="4" id="1068" /> +<TGConnectingPoint num="5" id="1069" /> +<TGConnectingPoint num="6" id="1070" /> +<TGConnectingPoint num="7" id="1071" /> +<TGConnectingPoint num="8" id="1072" /> +<TGConnectingPoint num="9" id="1073" /> +<TGConnectingPoint num="10" id="1074" /> +<TGConnectingPoint num="11" id="1075" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1061" > +<father id="1076" num="0" /> +<cdparam x="152" y="95" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[expressMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1062" > +<father id="1076" num="1" /> +<cdparam x="252" y="95" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1063" > +<father id="1076" num="2" /> +<cdparam x="246" y="126" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[expressMode==0]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1079" > +<cdparam x="18" y="185" /> +<sizeparam width="268" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotAcceptingCreditCardException" /> +<TGConnectingPoint num="0" id="1077" /> +<TGConnectingPoint num="1" id="1078" /> +</COMPONENT> + +<COMPONENT type="2006" id="1095" > +<cdparam x="466" y="165" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1083" /> +<TGConnectingPoint num="1" id="1084" /> +<TGConnectingPoint num="2" id="1085" /> +<TGConnectingPoint num="3" id="1086" /> +<TGConnectingPoint num="4" id="1087" /> +<TGConnectingPoint num="5" id="1088" /> +<TGConnectingPoint num="6" id="1089" /> +<TGConnectingPoint num="7" id="1090" /> +<TGConnectingPoint num="8" id="1091" /> +<TGConnectingPoint num="9" id="1092" /> +<TGConnectingPoint num="10" id="1093" /> +<TGConnectingPoint num="11" id="1094" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1080" > +<father id="1095" num="0" /> +<cdparam x="397" y="195" /> +<sizeparam width="215" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==paymentMode_CARD]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1081" > +<father id="1095" num="1" /> +<cdparam x="511" y="170" /> +<sizeparam width="240" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[not(paymentMode==paymentMode_CARD)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1082" > +<father id="1095" num="2" /> +<cdparam x="481" y="200" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1104" > +<cdparam x="535" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1096" /> +<TGConnectingPoint num="1" id="1097" /> +<TGConnectingPoint num="2" id="1098" /> +<TGConnectingPoint num="3" id="1099" /> +<TGConnectingPoint num="4" id="1100" /> +<TGConnectingPoint num="5" id="1101" /> +<TGConnectingPoint num="6" id="1102" /> +<TGConnectingPoint num="7" id="1103" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1120" > +<cdparam x="350" y="259" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1108" /> +<TGConnectingPoint num="1" id="1109" /> +<TGConnectingPoint num="2" id="1110" /> +<TGConnectingPoint num="3" id="1111" /> +<TGConnectingPoint num="4" id="1112" /> +<TGConnectingPoint num="5" id="1113" /> +<TGConnectingPoint num="6" id="1114" /> +<TGConnectingPoint num="7" id="1115" /> +<TGConnectingPoint num="8" id="1116" /> +<TGConnectingPoint num="9" id="1117" /> +<TGConnectingPoint num="10" id="1118" /> +<TGConnectingPoint num="11" id="1119" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1105" > +<father id="1120" num="0" /> +<cdparam x="275" y="289" /> +<sizeparam width="82" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[cashState==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1106" > +<father id="1120" num="1" /> +<cdparam x="375" y="264" /> +<sizeparam width="107" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[not(cashState==1)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1107" > +<father id="1120" num="2" /> +<cdparam x="365" y="294" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1129" > +<cdparam x="379" y="10" /> +<sizeparam width="92" height="100" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="cashState: + +0 - IDLE +1 - PAYING +2 - STARTED +" /> +<TGConnectingPoint num="0" id="1121" /> +<TGConnectingPoint num="1" id="1122" /> +<TGConnectingPoint num="2" id="1123" /> +<TGConnectingPoint num="3" id="1124" /> +<TGConnectingPoint num="4" id="1125" /> +<TGConnectingPoint num="5" id="1126" /> +<TGConnectingPoint num="6" id="1127" /> +<TGConnectingPoint num="7" id="1128" /> +<extraparam> +<Line value="cashState: " /> +<Line value="" /> +<Line value="0 - IDLE" /> +<Line value="1 - PAYING" /> +<Line value="2 - STARTED" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="1132" > +<cdparam x="280" y="345" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="scannedOk" /> +<TGConnectingPoint num="0" id="1130" /> +<TGConnectingPoint num="1" id="1131" /> +</COMPONENT> + +<COMPONENT type="2008" id="1145" > +<cdparam x="306" y="429" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1133" /> +<TGConnectingPoint num="1" id="1134" /> +<TGConnectingPoint num="2" id="1135" /> +<TGConnectingPoint num="3" id="1136" /> +<TGConnectingPoint num="4" id="1137" /> +<TGConnectingPoint num="5" id="1138" /> +<TGConnectingPoint num="6" id="1139" /> +<TGConnectingPoint num="7" id="1140" /> +<TGConnectingPoint num="8" id="1141" /> +<TGConnectingPoint num="9" id="1142" /> +<TGConnectingPoint num="10" id="1143" /> +<TGConnectingPoint num="11" id="1144" /> +</COMPONENT> + +<COMPONENT type="2001" id="1147" > +<cdparam x="301" y="465" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="creditCardScanned_stop" /> +<TGConnectingPoint num="0" id="1146" /> +</COMPONENT> + +<COMPONENT type="2008" id="1160" > +<cdparam x="306" y="440" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1148" /> +<TGConnectingPoint num="1" id="1149" /> +<TGConnectingPoint num="2" id="1150" /> +<TGConnectingPoint num="3" id="1151" /> +<TGConnectingPoint num="4" id="1152" /> +<TGConnectingPoint num="5" id="1153" /> +<TGConnectingPoint num="6" id="1154" /> +<TGConnectingPoint num="7" id="1155" /> +<TGConnectingPoint num="8" id="1156" /> +<TGConnectingPoint num="9" id="1157" /> +<TGConnectingPoint num="10" id="1158" /> +<TGConnectingPoint num="11" id="1159" /> +</COMPONENT> + +<COMPONENT type="2012" id="1163" > +<cdparam x="408" y="297" /> +<sizeparam width="192" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=NotPayingException" /> +<TGConnectingPoint num="0" id="1161" /> +<TGConnectingPoint num="1" id="1162" /> +</COMPONENT> + +<COMPONENT type="2012" id="1166" > +<cdparam x="678" y="290" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="1164" /> +<TGConnectingPoint num="1" id="1165" /> +</COMPONENT> + +<CONNECTOR type="121" id="1167" > +<cdparam x="239" y="41" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="239" y="41" id="1059" /> +<P2 x="237" y="90" id="1064" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1168" > +<cdparam x="277" y="168" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="202" y="100" id="1065" /> +<P2 x="152" y="180" id="1077" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1169" > +<cdparam x="312" y="203" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="237" y="135" id="1067" /> +<P2 x="476" y="165" id="1083" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1170" > +<cdparam x="465" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="511" y="175" id="1085" /> +<P2 x="803" y="285" id="1164" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1171" > +<cdparam x="395" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="441" y="175" id="1084" /> +<P2 x="360" y="259" id="1108" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1172" > +<cdparam x="337" y="357" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to state" value="null" /> +<P1 x="325" y="269" id="1109" /> +<P2 x="321" y="340" id="1130" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1173" > +<cdparam x="313" y="607" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="311" y="449" id="1133" /> +<P2 x="311" y="440" id="1150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1174" > +<cdparam x="133" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="152" y="210" id="1078" /> +<P2 x="306" y="434" id="1134" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1175" > +<cdparam x="281" y="476" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to junction" value="null" /> +<P1 x="321" y="370" id="1131" /> +<P2 x="311" y="429" id="1135" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1176" > +<cdparam x="737" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="803" y="315" id="1165" /> +<P2 x="316" y="445" id="1151" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1177" > +<cdparam x="347" y="482" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="311" y="460" id="1148" /> +<P2 x="311" y="460" id="1146" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1178" > +<cdparam x="395" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="395" y="269" id="1110" /> +<P2 x="504" y="292" id="1161" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1179" > +<cdparam x="529" y="346" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="504" y="322" id="1162" /> +<P2 x="316" y="434" id="1136" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="pinEntered" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="1195" > +<cdparam x="116" y="307" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1183" /> +<TGConnectingPoint num="1" id="1184" /> +<TGConnectingPoint num="2" id="1185" /> +<TGConnectingPoint num="3" id="1186" /> +<TGConnectingPoint num="4" id="1187" /> +<TGConnectingPoint num="5" id="1188" /> +<TGConnectingPoint num="6" id="1189" /> +<TGConnectingPoint num="7" id="1190" /> +<TGConnectingPoint num="8" id="1191" /> +<TGConnectingPoint num="9" id="1192" /> +<TGConnectingPoint num="10" id="1193" /> +<TGConnectingPoint num="11" id="1194" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1180" > +<father id="1195" num="0" /> +<cdparam x="41" y="331" /> +<sizeparam width="40" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[info>0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1181" > +<father id="1195" num="1" /> +<cdparam x="141" y="312" /> +<sizeparam width="47" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[info==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1182" > +<father id="1195" num="2" /> +<cdparam x="131" y="342" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="1197" > +<cdparam x="273" y="17" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="pinEntered_start" /> +<TGConnectingPoint num="0" id="1196" /> +</COMPONENT> + +<COMPONENT type="2012" id="1200" > +<cdparam x="255" y="380" /> +<sizeparam width="231" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=InvalidCreditCardException" /> +<TGConnectingPoint num="0" id="1198" /> +<TGConnectingPoint num="1" id="1199" /> +</COMPONENT> + +<COMPONENT type="2002" id="1203" > +<cdparam x="185" y="52" /> +<sizeparam width="175" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardReq!creditInfo!pin" /> +<TGConnectingPoint num="0" id="1201" /> +<TGConnectingPoint num="1" id="1202" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1219" > +<cdparam x="253" y="172" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1207" /> +<TGConnectingPoint num="1" id="1208" /> +<TGConnectingPoint num="2" id="1209" /> +<TGConnectingPoint num="3" id="1210" /> +<TGConnectingPoint num="4" id="1211" /> +<TGConnectingPoint num="5" id="1212" /> +<TGConnectingPoint num="6" id="1213" /> +<TGConnectingPoint num="7" id="1214" /> +<TGConnectingPoint num="8" id="1215" /> +<TGConnectingPoint num="9" id="1216" /> +<TGConnectingPoint num="10" id="1217" /> +<TGConnectingPoint num="11" id="1218" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1204" > +<father id="1219" num="0" /> +<cdparam x="178" y="179" /> +<sizeparam width="91" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[transactionId>0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1205" > +<father id="1219" num="1" /> +<cdparam x="290" y="202" /> +<sizeparam width="98" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[transactionId==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1206" > +<father id="1219" num="2" /> +<cdparam x="268" y="207" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="1232" > +<cdparam x="374" y="307" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1220" /> +<TGConnectingPoint num="1" id="1221" /> +<TGConnectingPoint num="2" id="1222" /> +<TGConnectingPoint num="3" id="1223" /> +<TGConnectingPoint num="4" id="1224" /> +<TGConnectingPoint num="5" id="1225" /> +<TGConnectingPoint num="6" id="1226" /> +<TGConnectingPoint num="7" id="1227" /> +<TGConnectingPoint num="8" id="1228" /> +<TGConnectingPoint num="9" id="1229" /> +<TGConnectingPoint num="10" id="1230" /> +<TGConnectingPoint num="11" id="1231" /> +</COMPONENT> + +<COMPONENT type="2002" id="1235" > +<cdparam x="14" y="212" /> +<sizeparam width="161" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardReq!transactionId" /> +<TGConnectingPoint num="0" id="1233" /> +<TGConnectingPoint num="1" id="1234" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1238" > +<cdparam x="12" y="370" /> +<sizeparam width="183" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode_CARD" /> +<TGConnectingPoint num="0" id="1236" /> +<TGConnectingPoint num="1" id="1237" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2010" id="1241" > +<cdparam x="82" y="440" /> +<sizeparam width="36" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="init" /> +<TGConnectingPoint num="0" id="1239" /> +<TGConnectingPoint num="1" id="1240" /> +</COMPONENT> + +<COMPONENT type="2008" id="1254" > +<cdparam x="180" y="497" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1242" /> +<TGConnectingPoint num="1" id="1243" /> +<TGConnectingPoint num="2" id="1244" /> +<TGConnectingPoint num="3" id="1245" /> +<TGConnectingPoint num="4" id="1246" /> +<TGConnectingPoint num="5" id="1247" /> +<TGConnectingPoint num="6" id="1248" /> +<TGConnectingPoint num="7" id="1249" /> +<TGConnectingPoint num="8" id="1250" /> +<TGConnectingPoint num="9" id="1251" /> +<TGConnectingPoint num="10" id="1252" /> +<TGConnectingPoint num="11" id="1253" /> +</COMPONENT> + +<COMPONENT type="2001" id="1256" > +<cdparam x="182" y="574" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="pinEntered_stop" /> +<TGConnectingPoint num="0" id="1255" /> +</COMPONENT> + +<COMPONENT type="2004" id="1259" > +<cdparam x="183" y="100" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardResp?transactionId" /> +<TGConnectingPoint num="0" id="1257" /> +<TGConnectingPoint num="1" id="1258" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1262" > +<cdparam x="24" y="260" /> +<sizeparam width="131" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardResp?info" /> +<TGConnectingPoint num="0" id="1260" /> +<TGConnectingPoint num="1" id="1261" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="1263" > +<cdparam x="204" y="312" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="298" y="182" id="1209" /> +<P2 x="379" y="307" id="1222" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1264" > +<cdparam x="723" y="310" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="379" y="327" id="1220" /> +<P2 x="370" y="375" id="1198" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1265" > +<cdparam x="134" y="312" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="228" y="182" id="1208" /> +<P2 x="94" y="207" id="1233" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1266" > +<cdparam x="246" y="516" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="161" y="317" id="1185" /> +<P2 x="374" y="312" id="1221" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1267" > +<cdparam x="111" y="639" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to submachine" value="null" /> +<P1 x="103" y="395" id="1237" /> +<P2 x="100" y="435" id="1239" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1268" > +<cdparam x="112" y="696" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="100" y="465" id="1240" /> +<P2 x="180" y="502" id="1243" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1269" > +<cdparam x="497" y="637" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="370" y="405" id="1199" /> +<P2 x="190" y="502" id="1245" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1270" > +<cdparam x="242" y="771" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="185" y="517" id="1242" /> +<P2 x="192" y="569" id="1255" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1271" > +<cdparam x="333" y="53" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="280" y="37" id="1196" /> +<P2 x="272" y="47" id="1201" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1272" > +<cdparam x="106" y="312" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="91" y="317" id="1184" /> +<P2 x="103" y="365" id="1236" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1273" > +<cdparam x="188" y="81" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="272" y="77" id="1202" /> +<P2 x="281" y="95" id="1257" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1274" > +<cdparam x="188" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="281" y="125" id="1258" /> +<P2 x="263" y="172" id="1207" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1275" > +<cdparam x="100" y="265" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="94" y="237" id="1234" /> +<P2 x="89" y="255" id="1260" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1276" > +<cdparam x="95" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="89" y="285" id="1261" /> +<P2 x="126" y="307" id="1183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="expressModeEnabled" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1278" > +<cdparam x="97" y="34" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="expressModeEnabled_start" /> +<TGConnectingPoint num="0" id="1277" /> +</COMPONENT> + +<COMPONENT type="2012" id="1281" > +<cdparam x="52" y="88" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="expressMode=1" /> +<TGConnectingPoint num="0" id="1279" /> +<TGConnectingPoint num="1" id="1280" /> +</COMPONENT> + +<COMPONENT type="2002" id="1284" > +<cdparam x="42" y="136" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1282" /> +<TGConnectingPoint num="1" id="1283" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="1286" > +<cdparam x="97" y="195" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="expressModeEnabled_stop" /> +<TGConnectingPoint num="0" id="1285" /> +</COMPONENT> + +<CONNECTOR type="121" id="1287" > +<cdparam x="106" y="26" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="104" y="54" id="1277" /> +<P2 x="106" y="83" id="1279" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1288" > +<cdparam x="106" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send msg" value="null" /> +<P1 x="106" y="113" id="1280" /> +<P2 x="107" y="131" id="1282" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1289" > +<cdparam x="107" y="161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="107" y="161" id="1283" /> +<P2 x="107" y="190" id="1285" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="expressModeDisabled" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1291" > +<cdparam x="91" y="19" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="expressModeDisabled_start" /> +<TGConnectingPoint num="0" id="1290" /> +</COMPONENT> + +<COMPONENT type="2012" id="1294" > +<cdparam x="44" y="71" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="expressMode=0" /> +<TGConnectingPoint num="0" id="1292" /> +<TGConnectingPoint num="1" id="1293" /> +</COMPONENT> + +<COMPONENT type="2002" id="1297" > +<cdparam x="32" y="125" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1295" /> +<TGConnectingPoint num="1" id="1296" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2001" id="1299" > +<cdparam x="87" y="195" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="expressModeDisabled_stop" /> +<TGConnectingPoint num="0" id="1298" /> +</COMPONENT> + +<CONNECTOR type="121" id="1300" > +<cdparam x="100" y="11" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="98" y="39" id="1290" /> +<P2 x="98" y="66" id="1292" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1301" > +<cdparam x="100" y="78" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send msg" value="null" /> +<P1 x="98" y="96" id="1293" /> +<P2 x="99" y="120" id="1295" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1302" > +<cdparam x="101" y="146" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="99" y="150" id="1296" /> +<P2 x="97" y="190" id="1298" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="paymentMode" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1304" > +<cdparam x="239" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="paymentMode_start" /> +<TGConnectingPoint num="0" id="1303" /> +</COMPONENT> + +<COMPONENT type="301" id="1313" > +<cdparam x="432" y="10" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1305" /> +<TGConnectingPoint num="1" id="1306" /> +<TGConnectingPoint num="2" id="1307" /> +<TGConnectingPoint num="3" id="1308" /> +<TGConnectingPoint num="4" id="1309" /> +<TGConnectingPoint num="5" id="1310" /> +<TGConnectingPoint num="6" id="1311" /> +<TGConnectingPoint num="7" id="1312" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1329" > +<cdparam x="226" y="74" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1317" /> +<TGConnectingPoint num="1" id="1318" /> +<TGConnectingPoint num="2" id="1319" /> +<TGConnectingPoint num="3" id="1320" /> +<TGConnectingPoint num="4" id="1321" /> +<TGConnectingPoint num="5" id="1322" /> +<TGConnectingPoint num="6" id="1323" /> +<TGConnectingPoint num="7" id="1324" /> +<TGConnectingPoint num="8" id="1325" /> +<TGConnectingPoint num="9" id="1326" /> +<TGConnectingPoint num="10" id="1327" /> +<TGConnectingPoint num="11" id="1328" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1314" > +<father id="1329" num="0" /> +<cdparam x="151" y="79" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[expressMode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1315" > +<father id="1329" num="1" /> +<cdparam x="271" y="79" /> +<sizeparam width="101" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[expressMode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1316" > +<father id="1329" num="2" /> +<cdparam x="241" y="109" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1345" > +<cdparam x="282" y="144" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1333" /> +<TGConnectingPoint num="1" id="1334" /> +<TGConnectingPoint num="2" id="1335" /> +<TGConnectingPoint num="3" id="1336" /> +<TGConnectingPoint num="4" id="1337" /> +<TGConnectingPoint num="5" id="1338" /> +<TGConnectingPoint num="6" id="1339" /> +<TGConnectingPoint num="7" id="1340" /> +<TGConnectingPoint num="8" id="1341" /> +<TGConnectingPoint num="9" id="1342" /> +<TGConnectingPoint num="10" id="1343" /> +<TGConnectingPoint num="11" id="1344" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1330" > +<father id="1345" num="0" /> +<cdparam x="207" y="174" /> +<sizeparam width="214" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[paymentMode==paymentMode_CASH]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1331" > +<father id="1345" num="1" /> +<cdparam x="307" y="149" /> +<sizeparam width="215" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[paymentMode==paymentMode_CARD]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1332" > +<father id="1345" num="2" /> +<cdparam x="297" y="179" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1348" > +<cdparam x="266" y="206" /> +<sizeparam width="250" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="errorCode=WrongPaymentModeException" /> +<TGConnectingPoint num="0" id="1346" /> +<TGConnectingPoint num="1" id="1347" /> +</COMPONENT> + +<COMPONENT type="2008" id="1361" > +<cdparam x="123" y="155" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1349" /> +<TGConnectingPoint num="1" id="1350" /> +<TGConnectingPoint num="2" id="1351" /> +<TGConnectingPoint num="3" id="1352" /> +<TGConnectingPoint num="4" id="1353" /> +<TGConnectingPoint num="5" id="1354" /> +<TGConnectingPoint num="6" id="1355" /> +<TGConnectingPoint num="7" id="1356" /> +<TGConnectingPoint num="8" id="1357" /> +<TGConnectingPoint num="9" id="1358" /> +<TGConnectingPoint num="10" id="1359" /> +<TGConnectingPoint num="11" id="1360" /> +</COMPONENT> + +<COMPONENT type="2016" id="1364" > +<cdparam x="53" y="220" /> +<sizeparam width="112" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="paymentModeOk" /> +<TGConnectingPoint num="0" id="1362" /> +<TGConnectingPoint num="1" id="1363" /> +</COMPONENT> + +<COMPONENT type="2008" id="1377" > +<cdparam x="218" y="292" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1365" /> +<TGConnectingPoint num="1" id="1366" /> +<TGConnectingPoint num="2" id="1367" /> +<TGConnectingPoint num="3" id="1368" /> +<TGConnectingPoint num="4" id="1369" /> +<TGConnectingPoint num="5" id="1370" /> +<TGConnectingPoint num="6" id="1371" /> +<TGConnectingPoint num="7" id="1372" /> +<TGConnectingPoint num="8" id="1373" /> +<TGConnectingPoint num="9" id="1374" /> +<TGConnectingPoint num="10" id="1375" /> +<TGConnectingPoint num="11" id="1376" /> +</COMPONENT> + +<COMPONENT type="2001" id="1379" > +<cdparam x="216" y="352" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="paymentMode_stop" /> +<TGConnectingPoint num="0" id="1378" /> +</COMPONENT> + +<CONNECTOR type="121" id="1380" > +<cdparam x="276" y="104" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="246" y="30" id="1303" /> +<P2 x="236" y="74" id="1317" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1381" > +<cdparam x="293" y="201" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="271" y="84" id="1319" /> +<P2 x="292" y="144" id="1333" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1382" > +<cdparam x="440" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="327" y="154" id="1335" /> +<P2 x="391" y="201" id="1346" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1383" > +<cdparam x="258" y="166" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="201" y="84" id="1318" /> +<P2 x="123" y="160" id="1350" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1384" > +<cdparam x="370" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="257" y="154" id="1334" /> +<P2 x="133" y="160" id="1352" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1385" > +<cdparam x="150" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="128" y="175" id="1349" /> +<P2 x="109" y="215" id="1362" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1386" > +<cdparam x="148" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to junction" value="null" /> +<P1 x="109" y="245" id="1363" /> +<P2 x="218" y="297" id="1366" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1387" > +<cdparam x="666" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="391" y="231" id="1347" /> +<P2 x="228" y="297" id="1368" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1388" > +<cdparam x="235" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="223" y="312" id="1365" /> +<P2 x="226" y="347" id="1378" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="ScannerController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1390" > +<cdparam x="120" y="18" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1389" /> +</COMPONENT> + +<COMPONENT type="2006" id="1406" > +<cdparam x="113" y="96" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1394" /> +<TGConnectingPoint num="1" id="1395" /> +<TGConnectingPoint num="2" id="1396" /> +<TGConnectingPoint num="3" id="1397" /> +<TGConnectingPoint num="4" id="1398" /> +<TGConnectingPoint num="5" id="1399" /> +<TGConnectingPoint num="6" id="1400" /> +<TGConnectingPoint num="7" id="1401" /> +<TGConnectingPoint num="8" id="1402" /> +<TGConnectingPoint num="9" id="1403" /> +<TGConnectingPoint num="10" id="1404" /> +<TGConnectingPoint num="11" id="1405" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1391" > +<father id="1406" num="0" /> +<cdparam x="38" y="101" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1392" > +<father id="1406" num="1" /> +<cdparam x="138" y="101" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1393" > +<father id="1406" num="2" /> +<cdparam x="128" y="131" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1409" > +<cdparam x="17" y="142" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="barCode=0" /> +<TGConnectingPoint num="0" id="1407" /> +<TGConnectingPoint num="1" id="1408" /> +</COMPONENT> + +<COMPONENT type="2012" id="1412" > +<cdparam x="142" y="143" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="barCode=1" /> +<TGConnectingPoint num="0" id="1410" /> +<TGConnectingPoint num="1" id="1411" /> +</COMPONENT> + +<COMPONENT type="2008" id="1425" > +<cdparam x="119" y="190" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1413" /> +<TGConnectingPoint num="1" id="1414" /> +<TGConnectingPoint num="2" id="1415" /> +<TGConnectingPoint num="3" id="1416" /> +<TGConnectingPoint num="4" id="1417" /> +<TGConnectingPoint num="5" id="1418" /> +<TGConnectingPoint num="6" id="1419" /> +<TGConnectingPoint num="7" id="1420" /> +<TGConnectingPoint num="8" id="1421" /> +<TGConnectingPoint num="9" id="1422" /> +<TGConnectingPoint num="10" id="1423" /> +<TGConnectingPoint num="11" id="1424" /> +</COMPONENT> + +<COMPONENT type="2002" id="1428" > +<cdparam x="24" y="227" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="productBarcodeScanned!barCode" /> +<TGConnectingPoint num="0" id="1426" /> +<TGConnectingPoint num="1" id="1427" /> +<extraparam> +<Via port="eventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="1431" > +<cdparam x="98" y="288" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1429" /> +<TGConnectingPoint num="1" id="1430" /> +</COMPONENT> + +<COMPONENT type="2016" id="1434" > +<cdparam x="106" y="66" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1432" /> +<TGConnectingPoint num="1" id="1433" /> +</COMPONENT> + +<CONNECTOR type="121" id="1435" > +<cdparam x="207" y="78" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="88" y="106" id="1395" /> +<P2 x="58" y="137" id="1407" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1436" > +<cdparam x="242" y="113" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="158" y="106" id="1396" /> +<P2 x="183" y="138" id="1410" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1437" > +<cdparam x="109" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="58" y="167" id="1408" /> +<P2 x="119" y="195" id="1414" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1438" > +<cdparam x="242" y="174" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="183" y="168" id="1411" /> +<P2 x="129" y="195" id="1416" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1439" > +<cdparam x="231" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="122" y="252" id="1427" /> +<P2 x="118" y="283" id="1429" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1440" > +<cdparam x="249" y="30" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="127" y="38" id="1389" /> +<P2 x="126" y="61" id="1432" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1441" > +<cdparam x="574" y="79" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="126" y="91" id="1433" /> +<P2 x="123" y="96" id="1394" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1442" > +<cdparam x="231" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="124" y="210" id="1413" /> +<P2 x="122" y="222" id="1426" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="PrinterController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="1458" > +<cdparam x="294" y="153" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1446" /> +<TGConnectingPoint num="1" id="1447" /> +<TGConnectingPoint num="2" id="1448" /> +<TGConnectingPoint num="3" id="1449" /> +<TGConnectingPoint num="4" id="1450" /> +<TGConnectingPoint num="5" id="1451" /> +<TGConnectingPoint num="6" id="1452" /> +<TGConnectingPoint num="7" id="1453" /> +<TGConnectingPoint num="8" id="1454" /> +<TGConnectingPoint num="9" id="1455" /> +<TGConnectingPoint num="10" id="1456" /> +<TGConnectingPoint num="11" id="1457" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1443" > +<father id="1458" num="0" /> +<cdparam x="219" y="158" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1444" > +<father id="1458" num="1" /> +<cdparam x="319" y="158" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1445" > +<father id="1458" num="2" /> +<cdparam x="309" y="188" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1474" > +<cdparam x="506" y="109" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1462" /> +<TGConnectingPoint num="1" id="1463" /> +<TGConnectingPoint num="2" id="1464" /> +<TGConnectingPoint num="3" id="1465" /> +<TGConnectingPoint num="4" id="1466" /> +<TGConnectingPoint num="5" id="1467" /> +<TGConnectingPoint num="6" id="1468" /> +<TGConnectingPoint num="7" id="1469" /> +<TGConnectingPoint num="8" id="1470" /> +<TGConnectingPoint num="9" id="1471" /> +<TGConnectingPoint num="10" id="1472" /> +<TGConnectingPoint num="11" id="1473" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1459" > +<father id="1474" num="0" /> +<cdparam x="431" y="114" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1460" > +<father id="1474" num="1" /> +<cdparam x="531" y="114" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1461" > +<father id="1474" num="2" /> +<cdparam x="521" y="144" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="1476" > +<cdparam x="510" y="26" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="serveFIFO_start" /> +<TGConnectingPoint num="0" id="1475" /> +</COMPONENT> + +<COMPONENT type="2004" id="1479" > +<cdparam x="11" y="208" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="1477" /> +<TGConnectingPoint num="1" id="1478" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1482" > +<cdparam x="173" y="209" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered?cashAmount" /> +<TGConnectingPoint num="0" id="1480" /> +<TGConnectingPoint num="1" id="1481" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1485" > +<cdparam x="404" y="206" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="1483" /> +<TGConnectingPoint num="1" id="1484" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1488" > +<cdparam x="752" y="206" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="1486" /> +<TGConnectingPoint num="1" id="1487" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1491" > +<cdparam x="638" y="206" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="1489" /> +<TGConnectingPoint num="1" id="1490" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="1504" > +<cdparam x="502" y="278" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1492" /> +<TGConnectingPoint num="1" id="1493" /> +<TGConnectingPoint num="2" id="1494" /> +<TGConnectingPoint num="3" id="1495" /> +<TGConnectingPoint num="4" id="1496" /> +<TGConnectingPoint num="5" id="1497" /> +<TGConnectingPoint num="6" id="1498" /> +<TGConnectingPoint num="7" id="1499" /> +<TGConnectingPoint num="8" id="1500" /> +<TGConnectingPoint num="9" id="1501" /> +<TGConnectingPoint num="10" id="1502" /> +<TGConnectingPoint num="11" id="1503" /> +</COMPONENT> + +<COMPONENT type="2008" id="1517" > +<cdparam x="502" y="294" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1505" /> +<TGConnectingPoint num="1" id="1506" /> +<TGConnectingPoint num="2" id="1507" /> +<TGConnectingPoint num="3" id="1508" /> +<TGConnectingPoint num="4" id="1509" /> +<TGConnectingPoint num="5" id="1510" /> +<TGConnectingPoint num="6" id="1511" /> +<TGConnectingPoint num="7" id="1512" /> +<TGConnectingPoint num="8" id="1513" /> +<TGConnectingPoint num="9" id="1514" /> +<TGConnectingPoint num="10" id="1515" /> +<TGConnectingPoint num="11" id="1516" /> +</COMPONENT> + +<COMPONENT type="2016" id="1520" > +<cdparam x="489" y="345" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1518" /> +<TGConnectingPoint num="1" id="1519" /> +</COMPONENT> + +<COMPONENT type="2016" id="1523" > +<cdparam x="497" y="65" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1521" /> +<TGConnectingPoint num="1" id="1522" /> +</COMPONENT> + +<COMPONENT type="2004" id="1526" > +<cdparam x="879" y="199" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="1524" /> +<TGConnectingPoint num="1" id="1525" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1542" > +<cdparam x="663" y="139" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1530" /> +<TGConnectingPoint num="1" id="1531" /> +<TGConnectingPoint num="2" id="1532" /> +<TGConnectingPoint num="3" id="1533" /> +<TGConnectingPoint num="4" id="1534" /> +<TGConnectingPoint num="5" id="1535" /> +<TGConnectingPoint num="6" id="1536" /> +<TGConnectingPoint num="7" id="1537" /> +<TGConnectingPoint num="8" id="1538" /> +<TGConnectingPoint num="9" id="1539" /> +<TGConnectingPoint num="10" id="1540" /> +<TGConnectingPoint num="11" id="1541" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1527" > +<father id="1542" num="0" /> +<cdparam x="588" y="144" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1528" > +<father id="1542" num="1" /> +<cdparam x="688" y="144" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1529" > +<father id="1542" num="2" /> +<cdparam x="678" y="174" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="1555" > +<cdparam x="503" y="309" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1543" /> +<TGConnectingPoint num="1" id="1544" /> +<TGConnectingPoint num="2" id="1545" /> +<TGConnectingPoint num="3" id="1546" /> +<TGConnectingPoint num="4" id="1547" /> +<TGConnectingPoint num="5" id="1548" /> +<TGConnectingPoint num="6" id="1549" /> +<TGConnectingPoint num="7" id="1550" /> +<TGConnectingPoint num="8" id="1551" /> +<TGConnectingPoint num="9" id="1552" /> +<TGConnectingPoint num="10" id="1553" /> +<TGConnectingPoint num="11" id="1554" /> +</COMPONENT> + +<CONNECTOR type="121" id="1556" > +<cdparam x="540" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="481" y="119" id="1463" /> +<P2 x="304" y="153" id="1446" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1557" > +<cdparam x="733" y="76" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="517" y="46" id="1475" /> +<P2 x="517" y="60" id="1521" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1558" > +<cdparam x="448" y="125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="269" y="163" id="1447" /> +<P2 x="81" y="203" id="1477" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1559" > +<cdparam x="483" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="304" y="198" id="1449" /> +<P2 x="277" y="204" id="1480" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1560" > +<cdparam x="518" y="125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="339" y="163" id="1448" /> +<P2 x="509" y="201" id="1483" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1561" > +<cdparam x="726" y="152" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="516" y="154" id="1465" /> +<P2 x="679" y="201" id="1489" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1562" > +<cdparam x="761" y="117" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="673" y="184" id="1533" /> +<P2 x="798" y="201" id="1486" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1563" > +<cdparam x="507" y="298" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="507" y="298" id="1492" /> +<P2 x="507" y="294" id="1507" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1564" > +<cdparam x="122" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="81" y="233" id="1478" /> +<P2 x="502" y="299" id="1506" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1565" > +<cdparam x="312" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="277" y="234" id="1481" /> +<P2 x="502" y="283" id="1493" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1566" > +<cdparam x="502" y="233" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="509" y="231" id="1484" /> +<P2 x="507" y="278" id="1494" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1567" > +<cdparam x="719" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="679" y="231" id="1490" /> +<P2 x="512" y="283" id="1495" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1568" > +<cdparam x="875" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="798" y="231" id="1487" /> +<P2 x="512" y="299" id="1508" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1569" > +<cdparam x="507" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to stop state" value="null" /> +<P1 x="507" y="314" id="1505" /> +<P2 x="508" y="309" id="1545" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1570" > +<cdparam x="468" y="59" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="517" y="90" id="1522" /> +<P2 x="516" y="109" id="1462" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1571" > +<cdparam x="561" y="85" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="551" y="119" id="1464" /> +<P2 x="673" y="139" id="1530" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1572" > +<cdparam x="710" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="708" y="149" id="1532" /> +<P2 x="932" y="194" id="1524" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1573" > +<cdparam x="586" y="347" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="508" y="329" id="1543" /> +<P2 x="509" y="340" id="1518" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1574" > +<cdparam x="1064" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="932" y="224" id="1525" /> +<P2 x="513" y="314" id="1546" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CashBoxController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1576" > +<cdparam x="220" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1575" /> +</COMPONENT> + +<COMPONENT type="2002" id="1579" > +<cdparam x="182" y="139" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="1577" /> +<TGConnectingPoint num="1" id="1578" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1582" > +<cdparam x="188" y="84" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="1580" /> +<TGConnectingPoint num="1" id="1581" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1598" > +<cdparam x="207" y="210" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1586" /> +<TGConnectingPoint num="1" id="1587" /> +<TGConnectingPoint num="2" id="1588" /> +<TGConnectingPoint num="3" id="1589" /> +<TGConnectingPoint num="4" id="1590" /> +<TGConnectingPoint num="5" id="1591" /> +<TGConnectingPoint num="6" id="1592" /> +<TGConnectingPoint num="7" id="1593" /> +<TGConnectingPoint num="8" id="1594" /> +<TGConnectingPoint num="9" id="1595" /> +<TGConnectingPoint num="10" id="1596" /> +<TGConnectingPoint num="11" id="1597" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1583" > +<father id="1598" num="0" /> +<cdparam x="132" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1584" > +<father id="1598" num="1" /> +<cdparam x="232" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1585" > +<father id="1598" num="2" /> +<cdparam x="222" y="245" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1607" > +<cdparam x="579" y="95" /> +<sizeparam width="169" height="68" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="paymentMode_INVALID = 0 +paymentMode_CASH = 1 +paymentMode_CARD = 2 +" /> +<TGConnectingPoint num="0" id="1599" /> +<TGConnectingPoint num="1" id="1600" /> +<TGConnectingPoint num="2" id="1601" /> +<TGConnectingPoint num="3" id="1602" /> +<TGConnectingPoint num="4" id="1603" /> +<TGConnectingPoint num="5" id="1604" /> +<TGConnectingPoint num="6" id="1605" /> +<TGConnectingPoint num="7" id="1606" /> +<extraparam> +<Line value="paymentMode_INVALID = 0" /> +<Line value="paymentMode_CASH = 1" /> +<Line value="paymentMode_CARD = 2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1610" > +<cdparam x="355" y="387" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="paymentMode!paymentMode_CARD" /> +<TGConnectingPoint num="0" id="1608" /> +<TGConnectingPoint num="1" id="1609" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1613" > +<cdparam x="36" y="285" /> +<sizeparam width="207" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="paymentMode!paymentMode_CASH" /> +<TGConnectingPoint num="0" id="1611" /> +<TGConnectingPoint num="1" id="1612" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1616" > +<cdparam x="11" y="528" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="1614" /> +<TGConnectingPoint num="1" id="1615" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1619" > +<cdparam x="62" y="581" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="1617" /> +<TGConnectingPoint num="1" id="1618" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="1622" > +<cdparam x="12" y="484" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="1620" /> +<TGConnectingPoint num="1" id="1621" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="1635" > +<cdparam x="214" y="614" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1623" /> +<TGConnectingPoint num="1" id="1624" /> +<TGConnectingPoint num="2" id="1625" /> +<TGConnectingPoint num="3" id="1626" /> +<TGConnectingPoint num="4" id="1627" /> +<TGConnectingPoint num="5" id="1628" /> +<TGConnectingPoint num="6" id="1629" /> +<TGConnectingPoint num="7" id="1630" /> +<TGConnectingPoint num="8" id="1631" /> +<TGConnectingPoint num="9" id="1632" /> +<TGConnectingPoint num="10" id="1633" /> +<TGConnectingPoint num="11" id="1634" /> +</COMPONENT> + +<COMPONENT type="2016" id="1638" > +<cdparam x="194" y="681" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1636" /> +<TGConnectingPoint num="1" id="1637" /> +</COMPONENT> + +<COMPONENT type="2016" id="1641" > +<cdparam x="205" y="38" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1639" /> +<TGConnectingPoint num="1" id="1640" /> +</COMPONENT> + +<COMPONENT type="2006" id="1657" > +<cdparam x="125" y="340" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1645" /> +<TGConnectingPoint num="1" id="1646" /> +<TGConnectingPoint num="2" id="1647" /> +<TGConnectingPoint num="3" id="1648" /> +<TGConnectingPoint num="4" id="1649" /> +<TGConnectingPoint num="5" id="1650" /> +<TGConnectingPoint num="6" id="1651" /> +<TGConnectingPoint num="7" id="1652" /> +<TGConnectingPoint num="8" id="1653" /> +<TGConnectingPoint num="9" id="1654" /> +<TGConnectingPoint num="10" id="1655" /> +<TGConnectingPoint num="11" id="1656" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1642" > +<father id="1657" num="0" /> +<cdparam x="50" y="345" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1643" > +<father id="1657" num="1" /> +<cdparam x="150" y="345" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1644" > +<father id="1657" num="2" /> +<cdparam x="140" y="375" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="1660" > +<cdparam x="13" y="398" /> +<sizeparam width="103" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashAmount=0" /> +<TGConnectingPoint num="0" id="1658" /> +<TGConnectingPoint num="1" id="1659" /> +</COMPONENT> + +<COMPONENT type="2012" id="1663" > +<cdparam x="152" y="398" /> +<sizeparam width="103" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cashAmount=1" /> +<TGConnectingPoint num="0" id="1661" /> +<TGConnectingPoint num="1" id="1662" /> +</COMPONENT> + +<COMPONENT type="2008" id="1676" > +<cdparam x="120" y="444" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1664" /> +<TGConnectingPoint num="1" id="1665" /> +<TGConnectingPoint num="2" id="1666" /> +<TGConnectingPoint num="3" id="1667" /> +<TGConnectingPoint num="4" id="1668" /> +<TGConnectingPoint num="5" id="1669" /> +<TGConnectingPoint num="6" id="1670" /> +<TGConnectingPoint num="7" id="1671" /> +<TGConnectingPoint num="8" id="1672" /> +<TGConnectingPoint num="9" id="1673" /> +<TGConnectingPoint num="10" id="1674" /> +<TGConnectingPoint num="11" id="1675" /> +</COMPONENT> + +<CONNECTOR type="121" id="1677" > +<cdparam x="235" y="74" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="227" y="30" id="1575" /> +<P2 x="225" y="33" id="1639" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1678" > +<cdparam x="235" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="224" y="109" id="1581" /> +<P2 x="223" y="134" id="1577" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1679" > +<cdparam x="411" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="223" y="164" id="1578" /> +<P2 x="217" y="210" id="1586" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1680" > +<cdparam x="375" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="182" y="220" id="1587" /> +<P2 x="139" y="280" id="1611" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1681" > +<cdparam x="445" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="252" y="220" id="1588" /> +<P2 x="459" y="382" id="1608" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1682" > +<cdparam x="256" y="603" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="110" y="606" id="1618" /> +<P2 x="214" y="619" id="1624" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1683" > +<cdparam x="576" y="403" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="459" y="412" id="1609" /> +<P2 x="224" y="619" id="1626" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1684" > +<cdparam x="401" y="667" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="219" y="634" id="1623" /> +<P2 x="214" y="676" id="1636" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1685" > +<cdparam x="18" y="512" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="116" y="553" id="1615" /> +<P2 x="110" y="576" id="1617" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1686" > +<cdparam x="126" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="109" y="509" id="1621" /> +<P2 x="116" y="523" id="1614" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1687" > +<cdparam x="225" y="63" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="225" y="63" id="1640" /> +<P2 x="224" y="79" id="1580" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1688" > +<cdparam x="117" y="310" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="139" y="310" id="1612" /> +<P2 x="135" y="340" id="1645" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1689" > +<cdparam x="100" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="100" y="350" id="1646" /> +<P2 x="64" y="393" id="1658" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1690" > +<cdparam x="170" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="170" y="350" id="1647" /> +<P2 x="203" y="393" id="1661" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1691" > +<cdparam x="64" y="423" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="64" y="423" id="1659" /> +<P2 x="120" y="449" id="1665" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1692" > +<cdparam x="204" y="428" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="203" y="423" id="1662" /> +<P2 x="130" y="449" id="1667" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1693" > +<cdparam x="113" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="125" y="464" id="1664" /> +<P2 x="109" y="479" id="1620" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CashDeskGUI" minX="10" maxX="2400" minY="10" maxY="900" > +<COMPONENT type="2006" id="1709" > +<cdparam x="451" y="179" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1697" /> +<TGConnectingPoint num="1" id="1698" /> +<TGConnectingPoint num="2" id="1699" /> +<TGConnectingPoint num="3" id="1700" /> +<TGConnectingPoint num="4" id="1701" /> +<TGConnectingPoint num="5" id="1702" /> +<TGConnectingPoint num="6" id="1703" /> +<TGConnectingPoint num="7" id="1704" /> +<TGConnectingPoint num="8" id="1705" /> +<TGConnectingPoint num="9" id="1706" /> +<TGConnectingPoint num="10" id="1707" /> +<TGConnectingPoint num="11" id="1708" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1694" > +<father id="1709" num="0" /> +<cdparam x="376" y="184" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1695" > +<father id="1709" num="1" /> +<cdparam x="476" y="184" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1696" > +<father id="1709" num="2" /> +<cdparam x="466" y="214" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1725" > +<cdparam x="1261" y="197" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1713" /> +<TGConnectingPoint num="1" id="1714" /> +<TGConnectingPoint num="2" id="1715" /> +<TGConnectingPoint num="3" id="1716" /> +<TGConnectingPoint num="4" id="1717" /> +<TGConnectingPoint num="5" id="1718" /> +<TGConnectingPoint num="6" id="1719" /> +<TGConnectingPoint num="7" id="1720" /> +<TGConnectingPoint num="8" id="1721" /> +<TGConnectingPoint num="9" id="1722" /> +<TGConnectingPoint num="10" id="1723" /> +<TGConnectingPoint num="11" id="1724" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1710" > +<father id="1725" num="0" /> +<cdparam x="1186" y="202" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1711" > +<father id="1725" num="1" /> +<cdparam x="1286" y="202" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1712" > +<father id="1725" num="2" /> +<cdparam x="1276" y="232" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="1741" > +<cdparam x="812" y="117" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1729" /> +<TGConnectingPoint num="1" id="1730" /> +<TGConnectingPoint num="2" id="1731" /> +<TGConnectingPoint num="3" id="1732" /> +<TGConnectingPoint num="4" id="1733" /> +<TGConnectingPoint num="5" id="1734" /> +<TGConnectingPoint num="6" id="1735" /> +<TGConnectingPoint num="7" id="1736" /> +<TGConnectingPoint num="8" id="1737" /> +<TGConnectingPoint num="9" id="1738" /> +<TGConnectingPoint num="10" id="1739" /> +<TGConnectingPoint num="11" id="1740" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1726" > +<father id="1741" num="0" /> +<cdparam x="737" y="122" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1727" > +<father id="1741" num="1" /> +<cdparam x="837" y="122" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1728" > +<father id="1741" num="2" /> +<cdparam x="827" y="152" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="1743" > +<cdparam x="811" y="19" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1742" /> +</COMPONENT> + +<COMPONENT type="2004" id="1746" > +<cdparam x="11" y="328" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="1744" /> +<TGConnectingPoint num="1" id="1745" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1749" > +<cdparam x="169" y="328" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="cashAmountEntered?cashAmount" /> +<TGConnectingPoint num="0" id="1747" /> +<TGConnectingPoint num="1" id="1748" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1752" > +<cdparam x="397" y="327" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="1750" /> +<TGConnectingPoint num="1" id="1751" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1755" > +<cdparam x="1226" y="324" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="1753" /> +<TGConnectingPoint num="1" id="1754" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1758" > +<cdparam x="1128" y="322" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="1756" /> +<TGConnectingPoint num="1" id="1757" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1761" > +<cdparam x="628" y="325" /> +<sizeparam width="115" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="invalidCreditCard" /> +<TGConnectingPoint num="0" id="1759" /> +<TGConnectingPoint num="1" id="1760" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1764" > +<cdparam x="932" y="319" /> +<sizeparam width="153" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="productBarcodeNotValid" /> +<TGConnectingPoint num="0" id="1762" /> +<TGConnectingPoint num="1" id="1763" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1767" > +<cdparam x="767" y="322" /> +<sizeparam width="139" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="creditCardScanFailed" /> +<TGConnectingPoint num="0" id="1765" /> +<TGConnectingPoint num="1" id="1766" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1783" > +<cdparam x="809" y="190" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1771" /> +<TGConnectingPoint num="1" id="1772" /> +<TGConnectingPoint num="2" id="1773" /> +<TGConnectingPoint num="3" id="1774" /> +<TGConnectingPoint num="4" id="1775" /> +<TGConnectingPoint num="5" id="1776" /> +<TGConnectingPoint num="6" id="1777" /> +<TGConnectingPoint num="7" id="1778" /> +<TGConnectingPoint num="8" id="1779" /> +<TGConnectingPoint num="9" id="1780" /> +<TGConnectingPoint num="10" id="1781" /> +<TGConnectingPoint num="11" id="1782" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1768" > +<father id="1783" num="0" /> +<cdparam x="734" y="195" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1769" > +<father id="1783" num="1" /> +<cdparam x="834" y="195" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1770" > +<father id="1783" num="2" /> +<cdparam x="824" y="225" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="1796" > +<cdparam x="811" y="482" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1784" /> +<TGConnectingPoint num="1" id="1785" /> +<TGConnectingPoint num="2" id="1786" /> +<TGConnectingPoint num="3" id="1787" /> +<TGConnectingPoint num="4" id="1788" /> +<TGConnectingPoint num="5" id="1789" /> +<TGConnectingPoint num="6" id="1790" /> +<TGConnectingPoint num="7" id="1791" /> +<TGConnectingPoint num="8" id="1792" /> +<TGConnectingPoint num="9" id="1793" /> +<TGConnectingPoint num="10" id="1794" /> +<TGConnectingPoint num="11" id="1795" /> +</COMPONENT> + +<COMPONENT type="2008" id="1809" > +<cdparam x="811" y="490" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1797" /> +<TGConnectingPoint num="1" id="1798" /> +<TGConnectingPoint num="2" id="1799" /> +<TGConnectingPoint num="3" id="1800" /> +<TGConnectingPoint num="4" id="1801" /> +<TGConnectingPoint num="5" id="1802" /> +<TGConnectingPoint num="6" id="1803" /> +<TGConnectingPoint num="7" id="1804" /> +<TGConnectingPoint num="8" id="1805" /> +<TGConnectingPoint num="9" id="1806" /> +<TGConnectingPoint num="10" id="1807" /> +<TGConnectingPoint num="11" id="1808" /> +</COMPONENT> + +<COMPONENT type="2008" id="1822" > +<cdparam x="811" y="496" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1810" /> +<TGConnectingPoint num="1" id="1811" /> +<TGConnectingPoint num="2" id="1812" /> +<TGConnectingPoint num="3" id="1813" /> +<TGConnectingPoint num="4" id="1814" /> +<TGConnectingPoint num="5" id="1815" /> +<TGConnectingPoint num="6" id="1816" /> +<TGConnectingPoint num="7" id="1817" /> +<TGConnectingPoint num="8" id="1818" /> +<TGConnectingPoint num="9" id="1819" /> +<TGConnectingPoint num="10" id="1820" /> +<TGConnectingPoint num="11" id="1821" /> +</COMPONENT> + +<COMPONENT type="2008" id="1835" > +<cdparam x="811" y="504" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1823" /> +<TGConnectingPoint num="1" id="1824" /> +<TGConnectingPoint num="2" id="1825" /> +<TGConnectingPoint num="3" id="1826" /> +<TGConnectingPoint num="4" id="1827" /> +<TGConnectingPoint num="5" id="1828" /> +<TGConnectingPoint num="6" id="1829" /> +<TGConnectingPoint num="7" id="1830" /> +<TGConnectingPoint num="8" id="1831" /> +<TGConnectingPoint num="9" id="1832" /> +<TGConnectingPoint num="10" id="1833" /> +<TGConnectingPoint num="11" id="1834" /> +</COMPONENT> + +<COMPONENT type="2016" id="1838" > +<cdparam x="798" y="551" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1836" /> +<TGConnectingPoint num="1" id="1837" /> +</COMPONENT> + +<COMPONENT type="2016" id="1841" > +<cdparam x="799" y="68" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="1839" /> +<TGConnectingPoint num="1" id="1840" /> +</COMPONENT> + +<COMPONENT type="2008" id="1854" > +<cdparam x="813" y="520" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1842" /> +<TGConnectingPoint num="1" id="1843" /> +<TGConnectingPoint num="2" id="1844" /> +<TGConnectingPoint num="3" id="1845" /> +<TGConnectingPoint num="4" id="1846" /> +<TGConnectingPoint num="5" id="1847" /> +<TGConnectingPoint num="6" id="1848" /> +<TGConnectingPoint num="7" id="1849" /> +<TGConnectingPoint num="8" id="1850" /> +<TGConnectingPoint num="9" id="1851" /> +<TGConnectingPoint num="10" id="1852" /> +<TGConnectingPoint num="11" id="1853" /> +</COMPONENT> + +<COMPONENT type="2004" id="1857" > +<cdparam x="1501" y="315" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1855" /> +<TGConnectingPoint num="1" id="1856" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1860" > +<cdparam x="1334" y="322" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1858" /> +<TGConnectingPoint num="1" id="1859" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="1876" > +<cdparam x="1473" y="210" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1864" /> +<TGConnectingPoint num="1" id="1865" /> +<TGConnectingPoint num="2" id="1866" /> +<TGConnectingPoint num="3" id="1867" /> +<TGConnectingPoint num="4" id="1868" /> +<TGConnectingPoint num="5" id="1869" /> +<TGConnectingPoint num="6" id="1870" /> +<TGConnectingPoint num="7" id="1871" /> +<TGConnectingPoint num="8" id="1872" /> +<TGConnectingPoint num="9" id="1873" /> +<TGConnectingPoint num="10" id="1874" /> +<TGConnectingPoint num="11" id="1875" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1861" > +<father id="1876" num="0" /> +<cdparam x="1398" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1862" > +<father id="1876" num="1" /> +<cdparam x="1498" y="215" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1863" > +<father id="1876" num="2" /> +<cdparam x="1488" y="245" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="1877" > +<cdparam x="464" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="787" y="127" id="1730" /> +<P2 x="461" y="179" id="1697" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1878" > +<cdparam x="534" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="857" y="127" id="1731" /> +<P2 x="1271" y="197" id="1713" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1879" > +<cdparam x="297" y="177" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="818" y="39" id="1742" /> +<P2 x="819" y="63" id="1839" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1880" > +<cdparam x="238" y="177" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="426" y="189" id="1698" /> +<P2 x="81" y="323" id="1744" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1881" > +<cdparam x="273" y="212" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="461" y="224" id="1700" /> +<P2 x="273" y="323" id="1747" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1882" > +<cdparam x="308" y="177" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="496" y="189" id="1699" /> +<P2 x="502" y="322" id="1750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1883" > +<cdparam x="532" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="822" y="162" id="1732" /> +<P2 x="819" y="190" id="1771" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1884" > +<cdparam x="606" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="784" y="200" id="1772" /> +<P2 x="685" y="320" id="1759" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1885" > +<cdparam x="641" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="819" y="235" id="1774" /> +<P2 x="836" y="317" id="1765" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1886" > +<cdparam x="676" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="854" y="200" id="1773" /> +<P2 x="1008" y="314" id="1762" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1887" > +<cdparam x="878" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1236" y="207" id="1714" /> +<P2 x="1169" y="317" id="1756" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1888" > +<cdparam x="913" y="164" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1271" y="242" id="1716" /> +<P2 x="1272" y="319" id="1753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1889" > +<cdparam x="814" y="466" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="502" id="1784" /> +<P2 x="816" y="490" id="1799" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1890" > +<cdparam x="816" y="488" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="510" id="1797" /> +<P2 x="816" y="496" id="1812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1891" > +<cdparam x="816" y="516" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="516" id="1810" /> +<P2 x="816" y="504" id="1825" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1892" > +<cdparam x="81" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="81" y="353" id="1745" /> +<P2 x="811" y="509" id="1824" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1893" > +<cdparam x="242" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="273" y="353" id="1748" /> +<P2 x="811" y="501" id="1811" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1894" > +<cdparam x="416" y="381" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="502" y="352" id="1751" /> +<P2 x="811" y="487" id="1785" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1895" > +<cdparam x="584" y="382" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="685" y="350" id="1760" /> +<P2 x="816" y="482" id="1786" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1896" > +<cdparam x="727" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="836" y="347" id="1766" /> +<P2 x="821" y="487" id="1787" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1897" > +<cdparam x="892" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1008" y="344" id="1763" /> +<P2 x="821" y="495" id="1800" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1898" > +<cdparam x="1057" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1169" y="347" id="1757" /> +<P2 x="821" y="501" id="1813" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1899" > +<cdparam x="1237" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1272" y="349" id="1754" /> +<P2 x="821" y="509" id="1826" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1900" > +<cdparam x="816" y="524" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="818" y="540" id="1842" /> +<P2 x="818" y="546" id="1836" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1901" > +<cdparam x="454" y="55" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="819" y="93" id="1840" /> +<P2 x="822" y="117" id="1729" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1902" > +<cdparam x="816" y="524" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="816" y="524" id="1823" /> +<P2 x="818" y="520" id="1844" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1903" > +<cdparam x="1332" y="211" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1306" y="207" id="1715" /> +<P2 x="1483" y="210" id="1864" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1904" > +<cdparam x="1469" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1448" y="220" id="1865" /> +<P2 x="1404" y="317" id="1858" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1905" > +<cdparam x="1504" y="238" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1518" y="220" id="1866" /> +<P2 x="1573" y="310" id="1855" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1906" > +<cdparam x="1475" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1404" y="347" id="1859" /> +<P2 x="813" y="525" id="1843" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1907" > +<cdparam x="1643" y="356" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1573" y="340" id="1856" /> +<P2 x="823" y="525" id="1845" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CardReaderController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="1909" > +<cdparam x="172" y="15" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1908" /> +</COMPONENT> + +<COMPONENT type="2006" id="1925" > +<cdparam x="174" y="95" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1913" /> +<TGConnectingPoint num="1" id="1914" /> +<TGConnectingPoint num="2" id="1915" /> +<TGConnectingPoint num="3" id="1916" /> +<TGConnectingPoint num="4" id="1917" /> +<TGConnectingPoint num="5" id="1918" /> +<TGConnectingPoint num="6" id="1919" /> +<TGConnectingPoint num="7" id="1920" /> +<TGConnectingPoint num="8" id="1921" /> +<TGConnectingPoint num="9" id="1922" /> +<TGConnectingPoint num="10" id="1923" /> +<TGConnectingPoint num="11" id="1924" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1910" > +<father id="1925" num="0" /> +<cdparam x="99" y="100" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1911" > +<father id="1925" num="1" /> +<cdparam x="199" y="100" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1912" > +<father id="1925" num="2" /> +<cdparam x="189" y="130" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2010" id="1928" > +<cdparam x="22" y="155" /> +<sizeparam width="44" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="submachine" value="emit" /> +<TGConnectingPoint num="0" id="1926" /> +<TGConnectingPoint num="1" id="1927" /> +</COMPONENT> + +<COMPONENT type="2008" id="1941" > +<cdparam x="107" y="214" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="1929" /> +<TGConnectingPoint num="1" id="1930" /> +<TGConnectingPoint num="2" id="1931" /> +<TGConnectingPoint num="3" id="1932" /> +<TGConnectingPoint num="4" id="1933" /> +<TGConnectingPoint num="5" id="1934" /> +<TGConnectingPoint num="6" id="1935" /> +<TGConnectingPoint num="7" id="1936" /> +<TGConnectingPoint num="8" id="1937" /> +<TGConnectingPoint num="9" id="1938" /> +<TGConnectingPoint num="10" id="1939" /> +<TGConnectingPoint num="11" id="1940" /> +</COMPONENT> + +<COMPONENT type="2006" id="1957" > +<cdparam x="381" y="263" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1945" /> +<TGConnectingPoint num="1" id="1946" /> +<TGConnectingPoint num="2" id="1947" /> +<TGConnectingPoint num="3" id="1948" /> +<TGConnectingPoint num="4" id="1949" /> +<TGConnectingPoint num="5" id="1950" /> +<TGConnectingPoint num="6" id="1951" /> +<TGConnectingPoint num="7" id="1952" /> +<TGConnectingPoint num="8" id="1953" /> +<TGConnectingPoint num="9" id="1954" /> +<TGConnectingPoint num="10" id="1955" /> +<TGConnectingPoint num="11" id="1956" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1942" > +<father id="1957" num="0" /> +<cdparam x="306" y="268" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1943" > +<father id="1957" num="1" /> +<cdparam x="406" y="268" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1944" > +<father id="1957" num="2" /> +<cdparam x="396" y="298" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2004" id="1960" > +<cdparam x="237" y="313" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1958" /> +<TGConnectingPoint num="1" id="1959" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1963" > +<cdparam x="324" y="144" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="1961" /> +<TGConnectingPoint num="1" id="1962" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1966" > +<cdparam x="440" y="304" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1964" /> +<TGConnectingPoint num="1" id="1965" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="1969" > +<cdparam x="114" y="155" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="1967" /> +<TGConnectingPoint num="1" id="1968" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="1972" > +<cdparam x="244" y="387" /> +<sizeparam width="110" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressEnabled" /> +<TGConnectingPoint num="0" id="1970" /> +<TGConnectingPoint num="1" id="1971" /> +</COMPONENT> + +<COMPONENT type="2016" id="1975" > +<cdparam x="337" y="207" /> +<sizeparam width="110" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressEnabled" /> +<TGConnectingPoint num="0" id="1973" /> +<TGConnectingPoint num="1" id="1974" /> +</COMPONENT> + +<COMPONENT type="2016" id="1978" > +<cdparam x="129" y="52" /> +<sizeparam width="114" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressDisabled" /> +<TGConnectingPoint num="0" id="1976" /> +<TGConnectingPoint num="1" id="1977" /> +</COMPONENT> + +<COMPONENT type="2016" id="1981" > +<cdparam x="467" y="372" /> +<sizeparam width="114" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressDisabled" /> +<TGConnectingPoint num="0" id="1979" /> +<TGConnectingPoint num="1" id="1980" /> +</COMPONENT> + +<COMPONENT type="2016" id="1984" > +<cdparam x="51" y="272" /> +<sizeparam width="114" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="expressDisabled" /> +<TGConnectingPoint num="0" id="1982" /> +<TGConnectingPoint num="1" id="1983" /> +</COMPONENT> + +<CONNECTOR type="121" id="1985" > +<cdparam x="215" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="184" y="140" id="1916" /> +<P2 x="186" y="150" id="1967" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1986" > +<cdparam x="145" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to submachine" value="null" /> +<P1 x="149" y="105" id="1914" /> +<P2 x="44" y="150" id="1926" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1987" > +<cdparam x="337" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="186" y="180" id="1968" /> +<P2 x="117" y="219" id="1932" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1988" > +<cdparam x="78" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from submachine to junction" value="null" /> +<P1 x="44" y="180" id="1927" /> +<P2 x="107" y="219" id="1930" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1989" > +<cdparam x="215" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="219" y="105" id="1915" /> +<P2 x="394" y="139" id="1961" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1990" > +<cdparam x="424" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="356" y="273" id="1946" /> +<P2 x="307" y="308" id="1958" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1991" > +<cdparam x="494" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="426" y="273" id="1947" /> +<P2 x="512" y="299" id="1964" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1992" > +<cdparam x="179" y="35" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="179" y="35" id="1908" /> +<P2 x="186" y="47" id="1976" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1993" > +<cdparam x="130" y="410" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="112" y="234" id="1929" /> +<P2 x="108" y="267" id="1982" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1994" > +<cdparam x="459" y="225" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="394" y="169" id="1962" /> +<P2 x="392" y="202" id="1973" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1995" > +<cdparam x="375" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="307" y="338" id="1959" /> +<P2 x="299" y="382" id="1970" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1996" > +<cdparam x="186" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="186" y="77" id="1977" /> +<P2 x="184" y="95" id="1913" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1997" > +<cdparam x="458" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="392" y="232" id="1974" /> +<P2 x="391" y="263" id="1945" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="1998" > +<cdparam x="689" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="512" y="329" id="1965" /> +<P2 x="524" y="367" id="1979" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="LightDisplayController" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="2000" > +<cdparam x="153" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1999" /> +</COMPONENT> + +<COMPONENT type="2004" id="2003" > +<cdparam x="175" y="141" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2001" /> +<TGConnectingPoint num="1" id="2002" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2006" > +<cdparam x="12" y="145" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2004" /> +<TGConnectingPoint num="1" id="2005" /> +<extraparam> +<Via port="control" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2022" > +<cdparam x="149" y="83" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2010" /> +<TGConnectingPoint num="1" id="2011" /> +<TGConnectingPoint num="2" id="2012" /> +<TGConnectingPoint num="3" id="2013" /> +<TGConnectingPoint num="4" id="2014" /> +<TGConnectingPoint num="5" id="2015" /> +<TGConnectingPoint num="6" id="2016" /> +<TGConnectingPoint num="7" id="2017" /> +<TGConnectingPoint num="8" id="2018" /> +<TGConnectingPoint num="9" id="2019" /> +<TGConnectingPoint num="10" id="2020" /> +<TGConnectingPoint num="11" id="2021" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2007" > +<father id="2022" num="0" /> +<cdparam x="74" y="88" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2008" > +<father id="2022" num="1" /> +<cdparam x="174" y="88" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2009" > +<father id="2022" num="2" /> +<cdparam x="164" y="118" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2016" id="2025" > +<cdparam x="133" y="260" /> +<sizeparam width="50" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="ready" /> +<TGConnectingPoint num="0" id="2023" /> +<TGConnectingPoint num="1" id="2024" /> +</COMPONENT> + +<COMPONENT type="2016" id="2028" > +<cdparam x="135" y="44" /> +<sizeparam width="50" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="ready" /> +<TGConnectingPoint num="0" id="2026" /> +<TGConnectingPoint num="1" id="2027" /> +</COMPONENT> + +<COMPONENT type="2008" id="2041" > +<cdparam x="156" y="216" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2029" /> +<TGConnectingPoint num="1" id="2030" /> +<TGConnectingPoint num="2" id="2031" /> +<TGConnectingPoint num="3" id="2032" /> +<TGConnectingPoint num="4" id="2033" /> +<TGConnectingPoint num="5" id="2034" /> +<TGConnectingPoint num="6" id="2035" /> +<TGConnectingPoint num="7" id="2036" /> +<TGConnectingPoint num="8" id="2037" /> +<TGConnectingPoint num="9" id="2038" /> +<TGConnectingPoint num="10" id="2039" /> +<TGConnectingPoint num="11" id="2040" /> +</COMPONENT> + +<CONNECTOR type="121" id="2042" > +<cdparam x="258" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="124" y="93" id="2011" /> +<P2 x="82" y="140" id="2004" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2043" > +<cdparam x="328" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="194" y="93" id="2012" /> +<P2 x="247" y="136" id="2001" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2044" > +<cdparam x="92" y="39" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="160" y="30" id="1999" /> +<P2 x="160" y="39" id="2026" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2045" > +<cdparam x="289" y="114" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="160" y="69" id="2027" /> +<P2 x="159" y="83" id="2010" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2046" > +<cdparam x="136" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="82" y="170" id="2005" /> +<P2 x="156" y="221" id="2030" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2047" > +<cdparam x="441" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="247" y="166" id="2002" /> +<P2 x="166" y="221" id="2032" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2048" > +<cdparam x="292" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="161" y="236" id="2029" /> +<P2 x="158" y="255" id="2023" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CashDeskChannel" minX="10" maxX="2900" minY="10" maxY="1400" > +<COMPONENT type="2006" id="2064" > +<cdparam x="568" y="177" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2052" /> +<TGConnectingPoint num="1" id="2053" /> +<TGConnectingPoint num="2" id="2054" /> +<TGConnectingPoint num="3" id="2055" /> +<TGConnectingPoint num="4" id="2056" /> +<TGConnectingPoint num="5" id="2057" /> +<TGConnectingPoint num="6" id="2058" /> +<TGConnectingPoint num="7" id="2059" /> +<TGConnectingPoint num="8" id="2060" /> +<TGConnectingPoint num="9" id="2061" /> +<TGConnectingPoint num="10" id="2062" /> +<TGConnectingPoint num="11" id="2063" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2049" > +<father id="2064" num="0" /> +<cdparam x="493" y="182" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2050" > +<father id="2064" num="1" /> +<cdparam x="593" y="182" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2051" > +<father id="2064" num="2" /> +<cdparam x="583" y="212" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2080" > +<cdparam x="567" y="135" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2068" /> +<TGConnectingPoint num="1" id="2069" /> +<TGConnectingPoint num="2" id="2070" /> +<TGConnectingPoint num="3" id="2071" /> +<TGConnectingPoint num="4" id="2072" /> +<TGConnectingPoint num="5" id="2073" /> +<TGConnectingPoint num="6" id="2074" /> +<TGConnectingPoint num="7" id="2075" /> +<TGConnectingPoint num="8" id="2076" /> +<TGConnectingPoint num="9" id="2077" /> +<TGConnectingPoint num="10" id="2078" /> +<TGConnectingPoint num="11" id="2079" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2065" > +<father id="2080" num="0" /> +<cdparam x="492" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2066" > +<father id="2080" num="1" /> +<cdparam x="592" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2067" > +<father id="2080" num="2" /> +<cdparam x="582" y="170" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2096" > +<cdparam x="1004" y="185" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2084" /> +<TGConnectingPoint num="1" id="2085" /> +<TGConnectingPoint num="2" id="2086" /> +<TGConnectingPoint num="3" id="2087" /> +<TGConnectingPoint num="4" id="2088" /> +<TGConnectingPoint num="5" id="2089" /> +<TGConnectingPoint num="6" id="2090" /> +<TGConnectingPoint num="7" id="2091" /> +<TGConnectingPoint num="8" id="2092" /> +<TGConnectingPoint num="9" id="2093" /> +<TGConnectingPoint num="10" id="2094" /> +<TGConnectingPoint num="11" id="2095" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2081" > +<father id="2096" num="0" /> +<cdparam x="929" y="190" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2082" > +<father id="2096" num="1" /> +<cdparam x="1029" y="190" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2083" > +<father id="2096" num="2" /> +<cdparam x="1019" y="220" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2112" > +<cdparam x="206" y="186" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2100" /> +<TGConnectingPoint num="1" id="2101" /> +<TGConnectingPoint num="2" id="2102" /> +<TGConnectingPoint num="3" id="2103" /> +<TGConnectingPoint num="4" id="2104" /> +<TGConnectingPoint num="5" id="2105" /> +<TGConnectingPoint num="6" id="2106" /> +<TGConnectingPoint num="7" id="2107" /> +<TGConnectingPoint num="8" id="2108" /> +<TGConnectingPoint num="9" id="2109" /> +<TGConnectingPoint num="10" id="2110" /> +<TGConnectingPoint num="11" id="2111" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2097" > +<father id="2112" num="0" /> +<cdparam x="131" y="191" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2098" > +<father id="2112" num="1" /> +<cdparam x="231" y="191" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2099" > +<father id="2112" num="2" /> +<cdparam x="221" y="221" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="2114" > +<cdparam x="944" y="17" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2113" /> +</COMPONENT> + +<COMPONENT type="2004" id="2117" > +<cdparam x="183" y="372" /> +<sizeparam width="173" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanned?cardNb" /> +<TGConnectingPoint num="0" id="2115" /> +<TGConnectingPoint num="1" id="2116" /> +<extraparam> +<Via port="cardReaderEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2120" > +<cdparam x="324" y="246" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="pinEntered?pin" /> +<TGConnectingPoint num="0" id="2118" /> +<TGConnectingPoint num="1" id="2119" /> +<extraparam> +<Via port="cardReaderEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2123" > +<cdparam x="190" y="421" /> +<sizeparam width="159" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanned!cardNb" /> +<TGConnectingPoint num="0" id="2121" /> +<TGConnectingPoint num="1" id="2122" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2126" > +<cdparam x="467" y="244" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2124" /> +<TGConnectingPoint num="1" id="2125" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2129" > +<cdparam x="473" y="306" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2127" /> +<TGConnectingPoint num="1" id="2128" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2132" > +<cdparam x="467" y="360" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2130" /> +<TGConnectingPoint num="1" id="2131" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2135" > +<cdparam x="471" y="425" /> +<sizeparam width="73" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleStarted" /> +<TGConnectingPoint num="0" id="2133" /> +<TGConnectingPoint num="1" id="2134" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2148" > +<cdparam x="607" y="730" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2136" /> +<TGConnectingPoint num="1" id="2137" /> +<TGConnectingPoint num="2" id="2138" /> +<TGConnectingPoint num="3" id="2139" /> +<TGConnectingPoint num="4" id="2140" /> +<TGConnectingPoint num="5" id="2141" /> +<TGConnectingPoint num="6" id="2142" /> +<TGConnectingPoint num="7" id="2143" /> +<TGConnectingPoint num="8" id="2144" /> +<TGConnectingPoint num="9" id="2145" /> +<TGConnectingPoint num="10" id="2146" /> +<TGConnectingPoint num="11" id="2147" /> +</COMPONENT> + +<COMPONENT type="2008" id="2161" > +<cdparam x="607" y="746" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2149" /> +<TGConnectingPoint num="1" id="2150" /> +<TGConnectingPoint num="2" id="2151" /> +<TGConnectingPoint num="3" id="2152" /> +<TGConnectingPoint num="4" id="2153" /> +<TGConnectingPoint num="5" id="2154" /> +<TGConnectingPoint num="6" id="2155" /> +<TGConnectingPoint num="7" id="2156" /> +<TGConnectingPoint num="8" id="2157" /> +<TGConnectingPoint num="9" id="2158" /> +<TGConnectingPoint num="10" id="2159" /> +<TGConnectingPoint num="11" id="2160" /> +</COMPONENT> + +<COMPONENT type="2008" id="2174" > +<cdparam x="607" y="754" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2162" /> +<TGConnectingPoint num="1" id="2163" /> +<TGConnectingPoint num="2" id="2164" /> +<TGConnectingPoint num="3" id="2165" /> +<TGConnectingPoint num="4" id="2166" /> +<TGConnectingPoint num="5" id="2167" /> +<TGConnectingPoint num="6" id="2168" /> +<TGConnectingPoint num="7" id="2169" /> +<TGConnectingPoint num="8" id="2170" /> +<TGConnectingPoint num="9" id="2171" /> +<TGConnectingPoint num="10" id="2172" /> +<TGConnectingPoint num="11" id="2173" /> +</COMPONENT> + +<COMPONENT type="2004" id="2177" > +<cdparam x="597" y="247" /> +<sizeparam width="92" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2175" /> +<TGConnectingPoint num="1" id="2176" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2180" > +<cdparam x="600" y="316" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2178" /> +<TGConnectingPoint num="1" id="2179" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2183" > +<cdparam x="602" y="378" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2181" /> +<TGConnectingPoint num="1" id="2182" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2186" > +<cdparam x="598" y="444" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="saleFinished" /> +<TGConnectingPoint num="0" id="2184" /> +<TGConnectingPoint num="1" id="2185" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2189" > +<cdparam x="735" y="251" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered?cashAmount" /> +<TGConnectingPoint num="0" id="2187" /> +<TGConnectingPoint num="1" id="2188" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2192" > +<cdparam x="742" y="328" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="2190" /> +<TGConnectingPoint num="1" id="2191" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2195" > +<cdparam x="742" y="412" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="2193" /> +<TGConnectingPoint num="1" id="2194" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2198" > +<cdparam x="742" y="482" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashAmountEntered!cashAmount" /> +<TGConnectingPoint num="0" id="2196" /> +<TGConnectingPoint num="1" id="2197" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2201" > +<cdparam x="961" y="247" /> +<sizeparam width="107" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="2199" /> +<TGConnectingPoint num="1" id="2200" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2204" > +<cdparam x="968" y="308" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="2202" /> +<TGConnectingPoint num="1" id="2203" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2207" > +<cdparam x="966" y="374" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="cashBoxClosed" /> +<TGConnectingPoint num="0" id="2205" /> +<TGConnectingPoint num="1" id="2206" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2210" > +<cdparam x="1095" y="242" /> +<sizeparam width="122" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="paymentMode?pm" /> +<TGConnectingPoint num="0" id="2208" /> +<TGConnectingPoint num="1" id="2209" /> +<extraparam> +<Via port="cashBoxEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2213" > +<cdparam x="1106" y="326" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="paymentMode!pm" /> +<TGConnectingPoint num="0" id="2211" /> +<TGConnectingPoint num="1" id="2212" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2226" > +<cdparam x="1190" y="635" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2214" /> +<TGConnectingPoint num="1" id="2215" /> +<TGConnectingPoint num="2" id="2216" /> +<TGConnectingPoint num="3" id="2217" /> +<TGConnectingPoint num="4" id="2218" /> +<TGConnectingPoint num="5" id="2219" /> +<TGConnectingPoint num="6" id="2220" /> +<TGConnectingPoint num="7" id="2221" /> +<TGConnectingPoint num="8" id="2222" /> +<TGConnectingPoint num="9" id="2223" /> +<TGConnectingPoint num="10" id="2224" /> +<TGConnectingPoint num="11" id="2225" /> +</COMPONENT> + +<COMPONENT type="2008" id="2239" > +<cdparam x="1190" y="625" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2227" /> +<TGConnectingPoint num="1" id="2228" /> +<TGConnectingPoint num="2" id="2229" /> +<TGConnectingPoint num="3" id="2230" /> +<TGConnectingPoint num="4" id="2231" /> +<TGConnectingPoint num="5" id="2232" /> +<TGConnectingPoint num="6" id="2233" /> +<TGConnectingPoint num="7" id="2234" /> +<TGConnectingPoint num="8" id="2235" /> +<TGConnectingPoint num="9" id="2236" /> +<TGConnectingPoint num="10" id="2237" /> +<TGConnectingPoint num="11" id="2238" /> +</COMPONENT> + +<COMPONENT type="2008" id="2252" > +<cdparam x="1189" y="615" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2240" /> +<TGConnectingPoint num="1" id="2241" /> +<TGConnectingPoint num="2" id="2242" /> +<TGConnectingPoint num="3" id="2243" /> +<TGConnectingPoint num="4" id="2244" /> +<TGConnectingPoint num="5" id="2245" /> +<TGConnectingPoint num="6" id="2246" /> +<TGConnectingPoint num="7" id="2247" /> +<TGConnectingPoint num="8" id="2248" /> +<TGConnectingPoint num="9" id="2249" /> +<TGConnectingPoint num="10" id="2250" /> +<TGConnectingPoint num="11" id="2251" /> +</COMPONENT> + +<COMPONENT type="2004" id="2255" > +<cdparam x="1235" y="244" /> +<sizeparam width="208" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeScanned?barcode" /> +<TGConnectingPoint num="0" id="2253" /> +<TGConnectingPoint num="1" id="2254" /> +<extraparam> +<Via port="scannerEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2258" > +<cdparam x="1247" y="314" /> +<sizeparam width="194" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeScanned!barcode" /> +<TGConnectingPoint num="0" id="2256" /> +<TGConnectingPoint num="1" id="2257" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2261" > +<cdparam x="319" y="315" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="pinEntered!pin" /> +<TGConnectingPoint num="0" id="2259" /> +<TGConnectingPoint num="1" id="2260" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2277" > +<cdparam x="1898" y="136" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2265" /> +<TGConnectingPoint num="1" id="2266" /> +<TGConnectingPoint num="2" id="2267" /> +<TGConnectingPoint num="3" id="2268" /> +<TGConnectingPoint num="4" id="2269" /> +<TGConnectingPoint num="5" id="2270" /> +<TGConnectingPoint num="6" id="2271" /> +<TGConnectingPoint num="7" id="2272" /> +<TGConnectingPoint num="8" id="2273" /> +<TGConnectingPoint num="9" id="2274" /> +<TGConnectingPoint num="10" id="2275" /> +<TGConnectingPoint num="11" id="2276" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2262" > +<father id="2277" num="0" /> +<cdparam x="1823" y="141" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2263" > +<father id="2277" num="1" /> +<cdparam x="1923" y="141" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2264" > +<father id="2277" num="2" /> +<cdparam x="1913" y="171" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2293" > +<cdparam x="1548" y="176" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2281" /> +<TGConnectingPoint num="1" id="2282" /> +<TGConnectingPoint num="2" id="2283" /> +<TGConnectingPoint num="3" id="2284" /> +<TGConnectingPoint num="4" id="2285" /> +<TGConnectingPoint num="5" id="2286" /> +<TGConnectingPoint num="6" id="2287" /> +<TGConnectingPoint num="7" id="2288" /> +<TGConnectingPoint num="8" id="2289" /> +<TGConnectingPoint num="9" id="2290" /> +<TGConnectingPoint num="10" id="2291" /> +<TGConnectingPoint num="11" id="2292" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2278" > +<father id="2293" num="0" /> +<cdparam x="1473" y="181" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2279" > +<father id="2293" num="1" /> +<cdparam x="1573" y="181" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2280" > +<father id="2293" num="2" /> +<cdparam x="1563" y="211" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="2309" > +<cdparam x="941" y="82" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2297" /> +<TGConnectingPoint num="1" id="2298" /> +<TGConnectingPoint num="2" id="2299" /> +<TGConnectingPoint num="3" id="2300" /> +<TGConnectingPoint num="4" id="2301" /> +<TGConnectingPoint num="5" id="2302" /> +<TGConnectingPoint num="6" id="2303" /> +<TGConnectingPoint num="7" id="2304" /> +<TGConnectingPoint num="8" id="2305" /> +<TGConnectingPoint num="9" id="2306" /> +<TGConnectingPoint num="10" id="2307" /> +<TGConnectingPoint num="11" id="2308" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2294" > +<father id="2309" num="0" /> +<cdparam x="866" y="87" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2295" > +<father id="2309" num="1" /> +<cdparam x="966" y="87" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2296" > +<father id="2309" num="2" /> +<cdparam x="956" y="117" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="2312" > +<cdparam x="1460" y="440" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated!amount" /> +<TGConnectingPoint num="0" id="2310" /> +<TGConnectingPoint num="1" id="2311" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2315" > +<cdparam x="1465" y="377" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated!amount" /> +<TGConnectingPoint num="0" id="2313" /> +<TGConnectingPoint num="1" id="2314" /> +<extraparam> +<Via port="cashBoxControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2318" > +<cdparam x="1459" y="238" /> +<sizeparam width="211" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated?amount" /> +<TGConnectingPoint num="0" id="2316" /> +<TGConnectingPoint num="1" id="2317" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2321" > +<cdparam x="1696" y="303" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2319" /> +<TGConnectingPoint num="1" id="2320" /> +<extraparam> +<Via port="lightDisplayControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2324" > +<cdparam x="1461" y="308" /> +<sizeparam width="197" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="changeAmountCalculated!amount" /> +<TGConnectingPoint num="0" id="2322" /> +<TGConnectingPoint num="1" id="2323" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2327" > +<cdparam x="1692" y="435" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2325" /> +<TGConnectingPoint num="1" id="2326" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2330" > +<cdparam x="1691" y="368" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2328" /> +<TGConnectingPoint num="1" id="2329" /> +<extraparam> +<Via port="cardReaderControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2346" > +<cdparam x="2122" y="150" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2334" /> +<TGConnectingPoint num="1" id="2335" /> +<TGConnectingPoint num="2" id="2336" /> +<TGConnectingPoint num="3" id="2337" /> +<TGConnectingPoint num="4" id="2338" /> +<TGConnectingPoint num="5" id="2339" /> +<TGConnectingPoint num="6" id="2340" /> +<TGConnectingPoint num="7" id="2341" /> +<TGConnectingPoint num="8" id="2342" /> +<TGConnectingPoint num="9" id="2343" /> +<TGConnectingPoint num="10" id="2344" /> +<TGConnectingPoint num="11" id="2345" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2331" > +<father id="2346" num="0" /> +<cdparam x="2047" y="155" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2332" > +<father id="2346" num="1" /> +<cdparam x="2147" y="155" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2333" > +<father id="2346" num="2" /> +<cdparam x="2137" y="185" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="2359" > +<cdparam x="1191" y="654" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2347" /> +<TGConnectingPoint num="1" id="2348" /> +<TGConnectingPoint num="2" id="2349" /> +<TGConnectingPoint num="3" id="2350" /> +<TGConnectingPoint num="4" id="2351" /> +<TGConnectingPoint num="5" id="2352" /> +<TGConnectingPoint num="6" id="2353" /> +<TGConnectingPoint num="7" id="2354" /> +<TGConnectingPoint num="8" id="2355" /> +<TGConnectingPoint num="9" id="2356" /> +<TGConnectingPoint num="10" id="2357" /> +<TGConnectingPoint num="11" id="2358" /> +</COMPONENT> + +<COMPONENT type="2002" id="2362" > +<cdparam x="1856" y="292" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2360" /> +<TGConnectingPoint num="1" id="2361" /> +<extraparam> +<Via port="lightDisplayControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2365" > +<cdparam x="1859" y="363" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2363" /> +<TGConnectingPoint num="1" id="2364" /> +<extraparam> +<Via port="cardReaderControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2368" > +<cdparam x="2014" y="366" /> +<sizeparam width="115" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="invalidCreditCard" /> +<TGConnectingPoint num="0" id="2366" /> +<TGConnectingPoint num="1" id="2367" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2371" > +<cdparam x="1852" y="236" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2369" /> +<TGConnectingPoint num="1" id="2370" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2374" > +<cdparam x="2026" y="430" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="invalidCreditCard" /> +<TGConnectingPoint num="0" id="2372" /> +<TGConnectingPoint num="1" id="2373" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2377" > +<cdparam x="1855" y="438" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2375" /> +<TGConnectingPoint num="1" id="2376" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2380" > +<cdparam x="2157" y="368" /> +<sizeparam width="139" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanFailed" /> +<TGConnectingPoint num="0" id="2378" /> +<TGConnectingPoint num="1" id="2379" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2383" > +<cdparam x="2168" y="434" /> +<sizeparam width="129" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="creditCardScanFailed" /> +<TGConnectingPoint num="0" id="2381" /> +<TGConnectingPoint num="1" id="2382" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2386" > +<cdparam x="2351" y="369" /> +<sizeparam width="153" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeNotValid" /> +<TGConnectingPoint num="0" id="2384" /> +<TGConnectingPoint num="1" id="2385" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2389" > +<cdparam x="2343" y="437" /> +<sizeparam width="143" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="productBarcodeNotValid" /> +<TGConnectingPoint num="0" id="2387" /> +<TGConnectingPoint num="1" id="2388" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="2392" > +<cdparam x="586" y="823" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2390" /> +<TGConnectingPoint num="1" id="2391" /> +</COMPONENT> + +<COMPONENT type="2016" id="2395" > +<cdparam x="931" y="41" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2393" /> +<TGConnectingPoint num="1" id="2394" /> +</COMPONENT> + +<COMPONENT type="301" id="2404" > +<cdparam x="10" y="14" /> +<sizeparam width="206" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="CashDeskChannel State Machine +" /> +<TGConnectingPoint num="0" id="2396" /> +<TGConnectingPoint num="1" id="2397" /> +<TGConnectingPoint num="2" id="2398" /> +<TGConnectingPoint num="3" id="2399" /> +<TGConnectingPoint num="4" id="2400" /> +<TGConnectingPoint num="5" id="2401" /> +<TGConnectingPoint num="6" id="2402" /> +<TGConnectingPoint num="7" id="2403" /> +<extraparam> +<Line value="CashDeskChannel State Machine" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2407" > +<cdparam x="11" y="253" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="2405" /> +<TGConnectingPoint num="1" id="2406" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2410" > +<cdparam x="13" y="389" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="2408" /> +<TGConnectingPoint num="1" id="2409" /> +<extraparam> +<Via port="cashDeskGUI" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2413" > +<cdparam x="11" y="308" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="runningTotalChanged" /> +<TGConnectingPoint num="0" id="2411" /> +<TGConnectingPoint num="1" id="2412" /> +<extraparam> +<Via port="printer" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2429" > +<cdparam x="2630" y="242" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2417" /> +<TGConnectingPoint num="1" id="2418" /> +<TGConnectingPoint num="2" id="2419" /> +<TGConnectingPoint num="3" id="2420" /> +<TGConnectingPoint num="4" id="2421" /> +<TGConnectingPoint num="5" id="2422" /> +<TGConnectingPoint num="6" id="2423" /> +<TGConnectingPoint num="7" id="2424" /> +<TGConnectingPoint num="8" id="2425" /> +<TGConnectingPoint num="9" id="2426" /> +<TGConnectingPoint num="10" id="2427" /> +<TGConnectingPoint num="11" id="2428" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2414" > +<father id="2429" num="0" /> +<cdparam x="2555" y="247" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2415" > +<father id="2429" num="1" /> +<cdparam x="2655" y="247" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2416" > +<father id="2429" num="2" /> +<cdparam x="2645" y="277" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2004" id="2432" > +<cdparam x="1688" y="235" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2430" /> +<TGConnectingPoint num="1" id="2431" /> +<extraparam> +<Via port="eventBus" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2435" > +<cdparam x="2748" y="339" /> +<sizeparam width="144" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2433" /> +<TGConnectingPoint num="1" id="2434" /> +<extraparam> +<Via port="expressMode" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="2438" > +<cdparam x="2566" y="342" /> +<sizeparam width="140" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2436" /> +<TGConnectingPoint num="1" id="2437" /> +<extraparam> +<Via port="expressMode" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2441" > +<cdparam x="2747" y="417" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2439" /> +<TGConnectingPoint num="1" id="2440" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2444" > +<cdparam x="2574" y="413" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2442" /> +<TGConnectingPoint num="1" id="2443" /> +<extraparam> +<Via port="appEventHandler" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2457" > +<cdparam x="1203" y="696" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2445" /> +<TGConnectingPoint num="1" id="2446" /> +<TGConnectingPoint num="2" id="2447" /> +<TGConnectingPoint num="3" id="2448" /> +<TGConnectingPoint num="4" id="2449" /> +<TGConnectingPoint num="5" id="2450" /> +<TGConnectingPoint num="6" id="2451" /> +<TGConnectingPoint num="7" id="2452" /> +<TGConnectingPoint num="8" id="2453" /> +<TGConnectingPoint num="9" id="2454" /> +<TGConnectingPoint num="10" id="2455" /> +<TGConnectingPoint num="11" id="2456" /> +</COMPONENT> + +<CONNECTOR type="121" id="2458" > +<cdparam x="379" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="542" y="145" id="2069" /> +<P2 x="216" y="186" id="2100" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2459" > +<cdparam x="449" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="612" y="145" id="2070" /> +<P2 x="1014" y="185" id="2084" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2460" > +<cdparam x="586" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="951" y="37" id="2113" /> +<P2 x="951" y="36" id="2393" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2461" > +<cdparam x="447" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="577" y="180" id="2071" /> +<P2 x="578" y="177" id="2052" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2462" > +<cdparam x="178" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="216" y="231" id="2103" /> +<P2 x="269" y="367" id="2115" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2463" > +<cdparam x="217" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="269" y="397" id="2116" /> +<P2 x="269" y="416" id="2121" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2464" > +<cdparam x="349" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="376" y="271" id="2119" /> +<P2 x="364" y="310" id="2259" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2465" > +<cdparam x="253" y="204" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="251" y="196" id="2102" /> +<P2 x="376" y="241" id="2118" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2466" > +<cdparam x="543" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="543" y="187" id="2053" /> +<P2 x="508" y="239" id="2124" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2467" > +<cdparam x="511" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="508" y="269" id="2125" /> +<P2 x="509" y="301" id="2127" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2468" > +<cdparam x="509" y="357" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="509" y="331" id="2128" /> +<P2 x="503" y="355" id="2130" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2469" > +<cdparam x="509" y="441" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="503" y="385" id="2131" /> +<P2 x="507" y="420" id="2133" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2470" > +<cdparam x="610" y="730" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="612" y="750" id="2136" /> +<P2 x="612" y="746" id="2151" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2471" > +<cdparam x="612" y="766" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="612" y="766" id="2149" /> +<P2 x="612" y="754" id="2164" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2472" > +<cdparam x="215" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="269" y="446" id="2122" /> +<P2 x="607" y="751" id="2150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2473" > +<cdparam x="346" y="360" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="364" y="340" id="2260" /> +<P2 x="607" y="735" id="2137" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2474" > +<cdparam x="509" y="511" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="507" y="450" id="2134" /> +<P2 x="612" y="730" id="2138" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2475" > +<cdparam x="663" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="643" y="272" id="2176" /> +<P2 x="641" y="311" id="2178" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2476" > +<cdparam x="661" y="363" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="641" y="341" id="2179" /> +<P2 x="643" y="373" id="2181" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2477" > +<cdparam x="661" y="447" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="643" y="403" id="2182" /> +<P2 x="639" y="439" id="2184" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2478" > +<cdparam x="613" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="613" y="187" id="2054" /> +<P2 x="643" y="242" id="2175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2479" > +<cdparam x="661" y="517" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="639" y="469" id="2185" /> +<P2 x="617" y="735" id="2139" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2480" > +<cdparam x="839" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="839" y="353" id="2191" /> +<P2 x="839" y="407" id="2193" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2481" > +<cdparam x="839" y="437" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="839" y="437" id="2194" /> +<P2 x="839" y="477" id="2196" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2482" > +<cdparam x="855" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="839" y="276" id="2188" /> +<P2 x="839" y="323" id="2190" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2483" > +<cdparam x="979" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="979" y="195" id="2085" /> +<P2 x="839" y="246" id="2187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2484" > +<cdparam x="839" y="507" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="839" y="507" id="2197" /> +<P2 x="617" y="751" id="2152" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2485" > +<cdparam x="1014" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1016" y="333" id="2203" /> +<P2 x="1014" y="369" id="2205" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2486" > +<cdparam x="1030" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1014" y="272" id="2200" /> +<P2 x="1016" y="303" id="2202" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2487" > +<cdparam x="1014" y="230" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1014" y="230" id="2087" /> +<P2 x="1014" y="242" id="2199" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2488" > +<cdparam x="1049" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1049" y="195" id="2086" /> +<P2 x="1156" y="237" id="2208" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2489" > +<cdparam x="1172" y="267" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1156" y="267" id="2209" /> +<P2 x="1160" y="321" id="2211" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2490" > +<cdparam x="1201" y="621" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1195" y="645" id="2227" /> +<P2 x="1195" y="635" id="2216" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2491" > +<cdparam x="1204" y="609" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1194" y="635" id="2240" /> +<P2 x="1195" y="625" id="2229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2492" > +<cdparam x="1174" y="336" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1160" y="351" id="2212" /> +<P2 x="1190" y="630" id="2228" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2493" > +<cdparam x="1467" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1873" y="146" id="2266" /> +<P2 x="1558" y="176" id="2281" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2494" > +<cdparam x="951" y="66" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="951" y="66" id="2394" /> +<P2 x="951" y="82" id="2297" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2495" > +<cdparam x="916" y="92" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="916" y="92" id="2298" /> +<P2 x="577" y="135" id="2068" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2496" > +<cdparam x="986" y="92" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="986" y="92" id="2299" /> +<P2 x="1908" y="136" id="2265" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2497" > +<cdparam x="1427" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1523" y="186" id="2282" /> +<P2 x="1339" y="239" id="2253" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2498" > +<cdparam x="1366" y="263" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1339" y="269" id="2254" /> +<P2 x="1344" y="309" id="2256" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2499" > +<cdparam x="1358" y="339" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1344" y="339" id="2257" /> +<P2 x="1194" y="615" id="2242" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2500" > +<cdparam x="1672" y="215" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1558" y="221" id="2284" /> +<P2 x="1564" y="233" id="2316" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2501" > +<cdparam x="1630" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1564" y="263" id="2317" /> +<P2 x="1559" y="303" id="2322" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2502" > +<cdparam x="1583" y="331" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1559" y="333" id="2323" /> +<P2 x="1563" y="372" id="2313" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2503" > +<cdparam x="1583" y="400" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1563" y="402" id="2314" /> +<P2 x="1558" y="435" id="2310" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2504" > +<cdparam x="1563" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1558" y="465" id="2311" /> +<P2 x="1199" y="620" id="2243" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2505" > +<cdparam x="1593" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1593" y="186" id="2283" /> +<P2 x="1758" y="230" id="2430" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2506" > +<cdparam x="1762" y="258" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1758" y="260" id="2431" /> +<P2 x="1761" y="298" id="2319" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2507" > +<cdparam x="1762" y="393" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1756" y="393" id="2329" /> +<P2 x="1757" y="430" id="2325" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2508" > +<cdparam x="1760" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1757" y="460" id="2326" /> +<P2 x="1200" y="630" id="2230" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2509" > +<cdparam x="1925" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1943" y="146" id="2267" /> +<P2 x="2132" y="150" id="2334" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2510" > +<cdparam x="1195" y="655" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1195" y="655" id="2214" /> +<P2 x="1196" y="654" id="2349" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2511" > +<cdparam x="1196" y="674" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1208" y="716" id="2445" /> +<P2 x="617" y="759" id="2165" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2512" > +<cdparam x="1924" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1924" y="261" id="2370" /> +<P2 x="1923" y="287" id="2360" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2513" > +<cdparam x="1923" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1923" y="317" id="2361" /> +<P2 x="1926" y="358" id="2363" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2514" > +<cdparam x="1924" y="392" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1926" y="388" id="2364" /> +<P2 x="1922" y="433" id="2375" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2515" > +<cdparam x="1890" y="179" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="1908" y="181" id="2268" /> +<P2 x="1924" y="231" id="2369" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2516" > +<cdparam x="1922" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1922" y="463" id="2376" /> +<P2 x="1189" y="620" id="2241" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2517" > +<cdparam x="2097" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2097" y="160" id="2335" /> +<P2 x="2071" y="361" id="2366" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2518" > +<cdparam x="2091" y="385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2071" y="391" id="2367" /> +<P2 x="2078" y="425" id="2372" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2519" > +<cdparam x="2078" y="455" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2078" y="455" id="2373" /> +<P2 x="1200" y="640" id="2217" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2520" > +<cdparam x="2245" y="389" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2226" y="393" id="2379" /> +<P2 x="2232" y="429" id="2381" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2521" > +<cdparam x="2132" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2132" y="195" id="2337" /> +<P2 x="2226" y="363" id="2378" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2522" > +<cdparam x="2232" y="459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2232" y="459" id="2382" /> +<P2 x="1191" y="659" id="2348" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2523" > +<cdparam x="2431" y="392" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2427" y="394" id="2385" /> +<P2 x="2414" y="432" id="2387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2524" > +<cdparam x="2418" y="462" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2414" y="462" id="2388" /> +<P2 x="1201" y="659" id="2350" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2525" > +<cdparam x="612" y="774" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="612" y="774" id="2162" /> +<P2 x="606" y="818" id="2390" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2526" > +<cdparam x="1761" y="328" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="1761" y="328" id="2320" /> +<P2 x="1756" y="363" id="2328" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2527" > +<cdparam x="1014" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="1014" y="399" id="2206" /> +<P2 x="1190" y="640" id="2215" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2529" > +<cdparam x="181" y="196" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="181" y="196" id="2101" /> +<P2 x="81" y="248" id="2405" /> +<Point x="80" y="216" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2528" > +<father id="2529" num="0" /> +<cdparam x="80" y="216" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="121" id="2530" > +<cdparam x="81" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="81" y="278" id="2406" /> +<P2 x="81" y="303" id="2411" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2531" > +<cdparam x="81" y="333" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="81" y="333" id="2412" /> +<P2 x="83" y="384" id="2408" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2532" > +<cdparam x="83" y="414" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="83" y="414" id="2409" /> +<P2 x="607" y="759" id="2163" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2533" > +<cdparam x="2167" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="2167" y="160" id="2336" /> +<P2 x="2640" y="242" id="2417" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2534" > +<cdparam x="2605" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2605" y="252" id="2418" /> +<P2 x="2427" y="364" id="2384" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2535" > +<cdparam x="2640" y="287" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2640" y="287" id="2420" /> +<P2 x="2636" y="337" id="2436" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2536" > +<cdparam x="2675" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="2675" y="252" id="2419" /> +<P2 x="2820" y="334" id="2433" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2537" > +<cdparam x="2636" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2636" y="367" id="2437" /> +<P2 x="2639" y="408" id="2442" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2538" > +<cdparam x="2820" y="364" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="2820" y="364" id="2434" /> +<P2 x="2814" y="412" id="2439" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2539" > +<cdparam x="2814" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2814" y="442" id="2440" /> +<P2 x="1213" y="701" id="2448" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2540" > +<cdparam x="2621" y="430" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="2639" y="438" id="2443" /> +<P2 x="1208" y="696" id="2447" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2541" > +<cdparam x="1196" y="674" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="1196" y="674" id="2347" /> +<P2 x="1203" y="701" id="2446" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="CommonBus" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="2543" > +<cdparam x="211" y="26" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2542" /> +</COMPONENT> + +<COMPONENT type="2004" id="2546" > +<cdparam x="137" y="114" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="2544" /> +<TGConnectingPoint num="1" id="2545" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2549" > +<cdparam x="146" y="179" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode" /> +<TGConnectingPoint num="0" id="2547" /> +<TGConnectingPoint num="1" id="2548" /> +<extraparam> +<Via port="saleRegisteredEvent" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="2552" > +<cdparam x="193" y="261" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2550" /> +<TGConnectingPoint num="1" id="2551" /> +</COMPONENT> + +<COMPONENT type="2016" id="2555" > +<cdparam x="198" y="66" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2553" /> +<TGConnectingPoint num="1" id="2554" /> +</COMPONENT> + +<COMPONENT type="301" id="2564" > +<cdparam x="10" y="10" /> +<sizeparam width="177" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Common Bus State Machine +" /> +<TGConnectingPoint num="0" id="2556" /> +<TGConnectingPoint num="1" id="2557" /> +<TGConnectingPoint num="2" id="2558" /> +<TGConnectingPoint num="3" id="2559" /> +<TGConnectingPoint num="4" id="2560" /> +<TGConnectingPoint num="5" id="2561" /> +<TGConnectingPoint num="6" id="2562" /> +<TGConnectingPoint num="7" id="2563" /> +<extraparam> +<Line value="Common Bus State Machine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="2565" > +<cdparam x="218" y="46" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="218" y="46" id="2542" /> +<P2 x="218" y="61" id="2553" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2566" > +<cdparam x="224" y="113" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="218" y="91" id="2554" /> +<P2 x="215" y="109" id="2544" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2567" > +<cdparam x="218" y="161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="215" y="139" id="2545" /> +<P2 x="217" y="174" id="2547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2568" > +<cdparam x="219" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="217" y="204" id="2548" /> +<P2 x="213" y="256" id="2550" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="Coordinator" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="2570" > +<cdparam x="200" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2569" /> +</COMPONENT> + +<COMPONENT type="2004" id="2573" > +<cdparam x="127" y="101" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="2571" /> +<TGConnectingPoint num="1" id="2572" /> +<extraparam> +<Via port="saleRegisteredCoord" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="2589" > +<cdparam x="194" y="166" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="2577" /> +<TGConnectingPoint num="1" id="2578" /> +<TGConnectingPoint num="2" id="2579" /> +<TGConnectingPoint num="3" id="2580" /> +<TGConnectingPoint num="4" id="2581" /> +<TGConnectingPoint num="5" id="2582" /> +<TGConnectingPoint num="6" id="2583" /> +<TGConnectingPoint num="7" id="2584" /> +<TGConnectingPoint num="8" id="2585" /> +<TGConnectingPoint num="9" id="2586" /> +<TGConnectingPoint num="10" id="2587" /> +<TGConnectingPoint num="11" id="2588" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2574" > +<father id="2589" num="0" /> +<cdparam x="119" y="171" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2575" > +<father id="2589" num="1" /> +<cdparam x="219" y="171" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2576" > +<father id="2589" num="2" /> +<cdparam x="209" y="201" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="2592" > +<cdparam x="252" y="210" /> +<sizeparam width="134" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeDisabled" /> +<TGConnectingPoint num="0" id="2590" /> +<TGConnectingPoint num="1" id="2591" /> +<extraparam> +<Via port="expressModeControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="2595" > +<cdparam x="37" y="212" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="expressModeEnabled" /> +<TGConnectingPoint num="0" id="2593" /> +<TGConnectingPoint num="1" id="2594" /> +<extraparam> +<Via port="expressModeControl" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="2608" > +<cdparam x="190" y="316" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="2596" /> +<TGConnectingPoint num="1" id="2597" /> +<TGConnectingPoint num="2" id="2598" /> +<TGConnectingPoint num="3" id="2599" /> +<TGConnectingPoint num="4" id="2600" /> +<TGConnectingPoint num="5" id="2601" /> +<TGConnectingPoint num="6" id="2602" /> +<TGConnectingPoint num="7" id="2603" /> +<TGConnectingPoint num="8" id="2604" /> +<TGConnectingPoint num="9" id="2605" /> +<TGConnectingPoint num="10" id="2606" /> +<TGConnectingPoint num="11" id="2607" /> +</COMPONENT> + +<COMPONENT type="2016" id="2611" > +<cdparam x="175" y="374" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2609" /> +<TGConnectingPoint num="1" id="2610" /> +</COMPONENT> + +<COMPONENT type="2016" id="2614" > +<cdparam x="187" y="56" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="2612" /> +<TGConnectingPoint num="1" id="2613" /> +</COMPONENT> + +<COMPONENT type="301" id="2623" > +<cdparam x="10" y="10" /> +<sizeparam width="165" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Coordinator State Machine +" /> +<TGConnectingPoint num="0" id="2615" /> +<TGConnectingPoint num="1" id="2616" /> +<TGConnectingPoint num="2" id="2617" /> +<TGConnectingPoint num="3" id="2618" /> +<TGConnectingPoint num="4" id="2619" /> +<TGConnectingPoint num="5" id="2620" /> +<TGConnectingPoint num="6" id="2621" /> +<TGConnectingPoint num="7" id="2622" /> +<extraparam> +<Line value="Coordinator State Machine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="2624" > +<cdparam x="197" y="51" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="207" y="30" id="2569" /> +<P2 x="207" y="51" id="2612" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2625" > +<cdparam x="203" y="111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="205" y="126" id="2572" /> +<P2 x="204" y="166" id="2577" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2626" > +<cdparam x="169" y="196" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="169" y="176" id="2578" /> +<P2 x="102" y="207" id="2593" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2627" > +<cdparam x="239" y="196" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="239" y="176" id="2579" /> +<P2 x="319" y="205" id="2590" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2628" > +<cdparam x="109" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="102" y="237" id="2594" /> +<P2 x="190" y="321" id="2597" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2629" > +<cdparam x="208" y="195" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="204" y="211" id="2580" /> +<P2 x="195" y="316" id="2598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2630" > +<cdparam x="324" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="319" y="235" id="2591" /> +<P2 x="200" y="321" id="2599" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2631" > +<cdparam x="275" y="73" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="207" y="81" id="2613" /> +<P2 x="205" y="96" id="2571" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="2632" > +<cdparam x="215" y="334" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="195" y="336" id="2596" /> +<P2 x="195" y="369" id="2609" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveCSDPanel name="CashDeskLine" minX="10" maxX="1900" minY="10" maxY="1400" > +<COMPONENT type="2104" id="2645" > +<cdparam x="167" y="629" /> +<sizeparam width="100" height="29" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="bankIf" /> +<TGConnectingPoint num="0" id="2633" /> +<TGConnectingPoint num="1" id="2634" /> +<TGConnectingPoint num="2" id="2635" /> +<TGConnectingPoint num="3" id="2636" /> +<TGConnectingPoint num="4" id="2637" /> +<TGConnectingPoint num="5" id="2638" /> +<TGConnectingPoint num="6" id="2639" /> +<TGConnectingPoint num="7" id="2640" /> +<TGConnectingPoint num="8" id="2641" /> +<TGConnectingPoint num="9" id="2642" /> +<TGConnectingPoint num="10" id="2643" /> +<TGConnectingPoint num="11" id="2644" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2658" > +<cdparam x="904" y="66" /> +<sizeparam width="230" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="2646" /> +<TGConnectingPoint num="1" id="2647" /> +<TGConnectingPoint num="2" id="2648" /> +<TGConnectingPoint num="3" id="2649" /> +<TGConnectingPoint num="4" id="2650" /> +<TGConnectingPoint num="5" id="2651" /> +<TGConnectingPoint num="6" id="2652" /> +<TGConnectingPoint num="7" id="2653" /> +<TGConnectingPoint num="8" id="2654" /> +<TGConnectingPoint num="9" id="2655" /> +<TGConnectingPoint num="10" id="2656" /> +<TGConnectingPoint num="11" id="2657" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2671" > +<cdparam x="846" y="490" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="EventBusIf" /> +<TGConnectingPoint num="0" id="2659" /> +<TGConnectingPoint num="1" id="2660" /> +<TGConnectingPoint num="2" id="2661" /> +<TGConnectingPoint num="3" id="2662" /> +<TGConnectingPoint num="4" id="2663" /> +<TGConnectingPoint num="5" id="2664" /> +<TGConnectingPoint num="6" id="2665" /> +<TGConnectingPoint num="7" id="2666" /> +<TGConnectingPoint num="8" id="2667" /> +<TGConnectingPoint num="9" id="2668" /> +<TGConnectingPoint num="10" id="2669" /> +<TGConnectingPoint num="11" id="2670" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2684" > +<cdparam x="1262" y="199" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="PrinterIf" /> +<TGConnectingPoint num="0" id="2672" /> +<TGConnectingPoint num="1" id="2673" /> +<TGConnectingPoint num="2" id="2674" /> +<TGConnectingPoint num="3" id="2675" /> +<TGConnectingPoint num="4" id="2676" /> +<TGConnectingPoint num="5" id="2677" /> +<TGConnectingPoint num="6" id="2678" /> +<TGConnectingPoint num="7" id="2679" /> +<TGConnectingPoint num="8" id="2680" /> +<TGConnectingPoint num="9" id="2681" /> +<TGConnectingPoint num="10" id="2682" /> +<TGConnectingPoint num="11" id="2683" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2697" > +<cdparam x="395" y="351" /> +<sizeparam width="231" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="2685" /> +<TGConnectingPoint num="1" id="2686" /> +<TGConnectingPoint num="2" id="2687" /> +<TGConnectingPoint num="3" id="2688" /> +<TGConnectingPoint num="4" id="2689" /> +<TGConnectingPoint num="5" id="2690" /> +<TGConnectingPoint num="6" id="2691" /> +<TGConnectingPoint num="7" id="2692" /> +<TGConnectingPoint num="8" id="2693" /> +<TGConnectingPoint num="9" id="2694" /> +<TGConnectingPoint num="10" id="2695" /> +<TGConnectingPoint num="11" id="2696" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2710" > +<cdparam x="10" y="202" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="2698" /> +<TGConnectingPoint num="1" id="2699" /> +<TGConnectingPoint num="2" id="2700" /> +<TGConnectingPoint num="3" id="2701" /> +<TGConnectingPoint num="4" id="2702" /> +<TGConnectingPoint num="5" id="2703" /> +<TGConnectingPoint num="6" id="2704" /> +<TGConnectingPoint num="7" id="2705" /> +<TGConnectingPoint num="8" id="2706" /> +<TGConnectingPoint num="9" id="2707" /> +<TGConnectingPoint num="10" id="2708" /> +<TGConnectingPoint num="11" id="2709" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2723" > +<cdparam x="1037" y="254" /> +<sizeparam width="129" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="2711" /> +<TGConnectingPoint num="1" id="2712" /> +<TGConnectingPoint num="2" id="2713" /> +<TGConnectingPoint num="3" id="2714" /> +<TGConnectingPoint num="4" id="2715" /> +<TGConnectingPoint num="5" id="2716" /> +<TGConnectingPoint num="6" id="2717" /> +<TGConnectingPoint num="7" id="2718" /> +<TGConnectingPoint num="8" id="2719" /> +<TGConnectingPoint num="9" id="2720" /> +<TGConnectingPoint num="10" id="2721" /> +<TGConnectingPoint num="11" id="2722" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2736" > +<cdparam x="14" y="224" /> +<sizeparam width="149" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="2724" /> +<TGConnectingPoint num="1" id="2725" /> +<TGConnectingPoint num="2" id="2726" /> +<TGConnectingPoint num="3" id="2727" /> +<TGConnectingPoint num="4" id="2728" /> +<TGConnectingPoint num="5" id="2729" /> +<TGConnectingPoint num="6" id="2730" /> +<TGConnectingPoint num="7" id="2731" /> +<TGConnectingPoint num="8" id="2732" /> +<TGConnectingPoint num="9" id="2733" /> +<TGConnectingPoint num="10" id="2734" /> +<TGConnectingPoint num="11" id="2735" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2749" > +<cdparam x="1091" y="257" /> +<sizeparam width="143" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="2737" /> +<TGConnectingPoint num="1" id="2738" /> +<TGConnectingPoint num="2" id="2739" /> +<TGConnectingPoint num="3" id="2740" /> +<TGConnectingPoint num="4" id="2741" /> +<TGConnectingPoint num="5" id="2742" /> +<TGConnectingPoint num="6" id="2743" /> +<TGConnectingPoint num="7" id="2744" /> +<TGConnectingPoint num="8" id="2745" /> +<TGConnectingPoint num="9" id="2746" /> +<TGConnectingPoint num="10" id="2747" /> +<TGConnectingPoint num="11" id="2748" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2762" > +<cdparam x="1100" y="14" /> +<sizeparam width="162" height="24" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="2750" /> +<TGConnectingPoint num="1" id="2751" /> +<TGConnectingPoint num="2" id="2752" /> +<TGConnectingPoint num="3" id="2753" /> +<TGConnectingPoint num="4" id="2754" /> +<TGConnectingPoint num="5" id="2755" /> +<TGConnectingPoint num="6" id="2756" /> +<TGConnectingPoint num="7" id="2757" /> +<TGConnectingPoint num="8" id="2758" /> +<TGConnectingPoint num="9" id="2759" /> +<TGConnectingPoint num="10" id="2760" /> +<TGConnectingPoint num="11" id="2761" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2775" > +<cdparam x="790" y="978" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ExpressmodeControlIf" /> +<TGConnectingPoint num="0" id="2763" /> +<TGConnectingPoint num="1" id="2764" /> +<TGConnectingPoint num="2" id="2765" /> +<TGConnectingPoint num="3" id="2766" /> +<TGConnectingPoint num="4" id="2767" /> +<TGConnectingPoint num="5" id="2768" /> +<TGConnectingPoint num="6" id="2769" /> +<TGConnectingPoint num="7" id="2770" /> +<TGConnectingPoint num="8" id="2771" /> +<TGConnectingPoint num="9" id="2772" /> +<TGConnectingPoint num="10" id="2773" /> +<TGConnectingPoint num="11" id="2774" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2788" > +<cdparam x="491" y="517" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="ExpressModelIf" /> +<TGConnectingPoint num="0" id="2776" /> +<TGConnectingPoint num="1" id="2777" /> +<TGConnectingPoint num="2" id="2778" /> +<TGConnectingPoint num="3" id="2779" /> +<TGConnectingPoint num="4" id="2780" /> +<TGConnectingPoint num="5" id="2781" /> +<TGConnectingPoint num="6" id="2782" /> +<TGConnectingPoint num="7" id="2783" /> +<TGConnectingPoint num="8" id="2784" /> +<TGConnectingPoint num="9" id="2785" /> +<TGConnectingPoint num="10" id="2786" /> +<TGConnectingPoint num="11" id="2787" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2801" > +<cdparam x="10" y="390" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="2789" /> +<TGConnectingPoint num="1" id="2790" /> +<TGConnectingPoint num="2" id="2791" /> +<TGConnectingPoint num="3" id="2792" /> +<TGConnectingPoint num="4" id="2793" /> +<TGConnectingPoint num="5" id="2794" /> +<TGConnectingPoint num="6" id="2795" /> +<TGConnectingPoint num="7" id="2796" /> +<TGConnectingPoint num="8" id="2797" /> +<TGConnectingPoint num="9" id="2798" /> +<TGConnectingPoint num="10" id="2799" /> +<TGConnectingPoint num="11" id="2800" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2814" > +<cdparam x="10" y="529" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="2802" /> +<TGConnectingPoint num="1" id="2803" /> +<TGConnectingPoint num="2" id="2804" /> +<TGConnectingPoint num="3" id="2805" /> +<TGConnectingPoint num="4" id="2806" /> +<TGConnectingPoint num="5" id="2807" /> +<TGConnectingPoint num="6" id="2808" /> +<TGConnectingPoint num="7" id="2809" /> +<TGConnectingPoint num="8" id="2810" /> +<TGConnectingPoint num="9" id="2811" /> +<TGConnectingPoint num="10" id="2812" /> +<TGConnectingPoint num="11" id="2813" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2827" > +<cdparam x="10" y="590" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="2815" /> +<TGConnectingPoint num="1" id="2816" /> +<TGConnectingPoint num="2" id="2817" /> +<TGConnectingPoint num="3" id="2818" /> +<TGConnectingPoint num="4" id="2819" /> +<TGConnectingPoint num="5" id="2820" /> +<TGConnectingPoint num="6" id="2821" /> +<TGConnectingPoint num="7" id="2822" /> +<TGConnectingPoint num="8" id="2823" /> +<TGConnectingPoint num="9" id="2824" /> +<TGConnectingPoint num="10" id="2825" /> +<TGConnectingPoint num="11" id="2826" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2840" > +<cdparam x="570" y="10" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="2828" /> +<TGConnectingPoint num="1" id="2829" /> +<TGConnectingPoint num="2" id="2830" /> +<TGConnectingPoint num="3" id="2831" /> +<TGConnectingPoint num="4" id="2832" /> +<TGConnectingPoint num="5" id="2833" /> +<TGConnectingPoint num="6" id="2834" /> +<TGConnectingPoint num="7" id="2835" /> +<TGConnectingPoint num="8" id="2836" /> +<TGConnectingPoint num="9" id="2837" /> +<TGConnectingPoint num="10" id="2838" /> +<TGConnectingPoint num="11" id="2839" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2853" > +<cdparam x="614" y="346" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="EventBusIf" /> +<TGConnectingPoint num="0" id="2841" /> +<TGConnectingPoint num="1" id="2842" /> +<TGConnectingPoint num="2" id="2843" /> +<TGConnectingPoint num="3" id="2844" /> +<TGConnectingPoint num="4" id="2845" /> +<TGConnectingPoint num="5" id="2846" /> +<TGConnectingPoint num="6" id="2847" /> +<TGConnectingPoint num="7" id="2848" /> +<TGConnectingPoint num="8" id="2849" /> +<TGConnectingPoint num="9" id="2850" /> +<TGConnectingPoint num="10" id="2851" /> +<TGConnectingPoint num="11" id="2852" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="2866" > +<cdparam x="454" y="10" /> +<sizeparam width="188" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="2854" /> +<TGConnectingPoint num="1" id="2855" /> +<TGConnectingPoint num="2" id="2856" /> +<TGConnectingPoint num="3" id="2857" /> +<TGConnectingPoint num="4" id="2858" /> +<TGConnectingPoint num="5" id="2859" /> +<TGConnectingPoint num="6" id="2860" /> +<TGConnectingPoint num="7" id="2861" /> +<TGConnectingPoint num="8" id="2862" /> +<TGConnectingPoint num="9" id="2863" /> +<TGConnectingPoint num="10" id="2864" /> +<TGConnectingPoint num="11" id="2865" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="3081" > +<cdparam x="33" y="24" /> +<sizeparam width="1487" height="628" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="CashDeskLine" /> +<TGConnectingPoint num="0" id="3073" /> +<TGConnectingPoint num="1" id="3074" /> +<TGConnectingPoint num="2" id="3075" /> +<TGConnectingPoint num="3" id="3076" /> +<TGConnectingPoint num="4" id="3077" /> +<TGConnectingPoint num="5" id="3078" /> +<TGConnectingPoint num="6" id="3079" /> +<TGConnectingPoint num="7" id="3080" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDeskLine"/><LastPortCode code="141" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2108" id="2871" > +<father id="3081" num="0" /> +<cdparam x="53" y="14" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1467" minY="0" maxY="608" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="2867" /> +<TGConnectingPoint num="1" id="2868" /> +<TGConnectingPoint num="2" id="2869" /> +<TGConnectingPoint num="3" id="2870" /> +<extraparam> +<PortCode code="CashDeskLineDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2876" > +<father id="3081" num="1" /> +<cdparam x="23" y="487" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1467" minY="0" maxY="608" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="2872" /> +<TGConnectingPoint num="1" id="2873" /> +<TGConnectingPoint num="2" id="2874" /> +<TGConnectingPoint num="3" id="2875" /> +<extraparam> +<PortCode code="CashDeskLineDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2881" > +<father id="3081" num="2" /> +<cdparam x="278" y="14" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1467" minY="0" maxY="608" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="2877" /> +<TGConnectingPoint num="1" id="2878" /> +<TGConnectingPoint num="2" id="2879" /> +<TGConnectingPoint num="3" id="2880" /> +<extraparam> +<PortCode code="CashDeskLineDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="2955" > +<father id="3081" num="3" /> +<cdparam x="83" y="100" /> +<sizeparam width="1358" height="68" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="129" minY="0" maxY="560" /> +<infoparam name="Component " value="CashDesk" /> +<TGConnectingPoint num="0" id="2947" /> +<TGConnectingPoint num="1" id="2948" /> +<TGConnectingPoint num="2" id="2949" /> +<TGConnectingPoint num="3" id="2950" /> +<TGConnectingPoint num="4" id="2951" /> +<TGConnectingPoint num="5" id="2952" /> +<TGConnectingPoint num="6" id="2953" /> +<TGConnectingPoint num="7" id="2954" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDesk"/><LastPortCode code="300" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2886" > +<father id="2955" num="0" /> +<cdparam x="716" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="AppEventHandler" /> +<TGConnectingPoint num="0" id="2882" /> +<TGConnectingPoint num="1" id="2883" /> +<TGConnectingPoint num="2" id="2884" /> +<TGConnectingPoint num="3" id="2885" /> +<extraparam> +<PortCode code="CashDeskDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2891" > +<father id="2955" num="1" /> +<cdparam x="73" y="90" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="2887" /> +<TGConnectingPoint num="1" id="2888" /> +<TGConnectingPoint num="2" id="2889" /> +<TGConnectingPoint num="3" id="2890" /> +<extraparam> +<PortCode code="CashDeskDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2896" > +<father id="2955" num="2" /> +<cdparam x="73" y="154" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="eventBus" /> +<TGConnectingPoint num="0" id="2892" /> +<TGConnectingPoint num="1" id="2893" /> +<TGConnectingPoint num="2" id="2894" /> +<TGConnectingPoint num="3" id="2895" /> +<extraparam> +<PortCode code="CashDeskDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2901" > +<father id="2955" num="3" /> +<cdparam x="187" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="2897" /> +<TGConnectingPoint num="1" id="2898" /> +<TGConnectingPoint num="2" id="2899" /> +<TGConnectingPoint num="3" id="2900" /> +<extraparam> +<PortCode code="CashDeskDesign4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2906" > +<father id="2955" num="4" /> +<cdparam x="301" y="90" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="2902" /> +<TGConnectingPoint num="1" id="2903" /> +<TGConnectingPoint num="2" id="2904" /> +<TGConnectingPoint num="3" id="2905" /> +<extraparam> +<PortCode code="CashDeskDesign5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2911" > +<father id="2955" num="5" /> +<cdparam x="863" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="2907" /> +<TGConnectingPoint num="1" id="2908" /> +<TGConnectingPoint num="2" id="2909" /> +<TGConnectingPoint num="3" id="2910" /> +<extraparam> +<PortCode code="CashDeskDesign6" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2916" > +<father id="2955" num="6" /> +<cdparam x="1017" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="cashDeskGUIControl" /> +<TGConnectingPoint num="0" id="2912" /> +<TGConnectingPoint num="1" id="2913" /> +<TGConnectingPoint num="2" id="2914" /> +<TGConnectingPoint num="3" id="2915" /> +<extraparam> +<PortCode code="CashDeskDesign7" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2921" > +<father id="2955" num="7" /> +<cdparam x="335" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="2917" /> +<TGConnectingPoint num="1" id="2918" /> +<TGConnectingPoint num="2" id="2919" /> +<TGConnectingPoint num="3" id="2920" /> +<extraparam> +<PortCode code="CashDeskDesign8" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2926" > +<father id="2955" num="8" /> +<cdparam x="1167" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="2922" /> +<TGConnectingPoint num="1" id="2923" /> +<TGConnectingPoint num="2" id="2924" /> +<TGConnectingPoint num="3" id="2925" /> +<extraparam> +<PortCode code="CashDeskDesign9" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2931" > +<father id="2955" num="9" /> +<cdparam x="569" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="cashBoxEvent" /> +<TGConnectingPoint num="0" id="2927" /> +<TGConnectingPoint num="1" id="2928" /> +<TGConnectingPoint num="2" id="2929" /> +<TGConnectingPoint num="3" id="2930" /> +<extraparam> +<PortCode code="CashDeskDesign10" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2936" > +<father id="2955" num="10" /> +<cdparam x="1312" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="2932" /> +<TGConnectingPoint num="1" id="2933" /> +<TGConnectingPoint num="2" id="2934" /> +<TGConnectingPoint num="3" id="2935" /> +<extraparam> +<PortCode code="CashDeskDesign11" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2941" > +<father id="2955" num="11" /> +<cdparam x="452" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="Out Port" value="scanner" /> +<TGConnectingPoint num="0" id="2937" /> +<TGConnectingPoint num="1" id="2938" /> +<TGConnectingPoint num="2" id="2939" /> +<TGConnectingPoint num="3" id="2940" /> +<extraparam> +<PortCode code="CashDeskDesign12" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2946" > +<father id="2955" num="12" /> +<cdparam x="1431" y="158" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1338" minY="0" maxY="48" /> +<infoparam name="In Port" value="printer" /> +<TGConnectingPoint num="0" id="2942" /> +<TGConnectingPoint num="1" id="2943" /> +<TGConnectingPoint num="2" id="2944" /> +<TGConnectingPoint num="3" id="2945" /> +<extraparam> +<PortCode code="CashDeskDesign13" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3029" > +<father id="3081" num="4" /> +<cdparam x="86" y="292" /> +<sizeparam width="1357" height="78" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="130" minY="0" maxY="550" /> +<infoparam name="Component " value="EventBus" /> +<TGConnectingPoint num="0" id="3021" /> +<TGConnectingPoint num="1" id="3022" /> +<TGConnectingPoint num="2" id="3023" /> +<TGConnectingPoint num="3" id="3024" /> +<TGConnectingPoint num="4" id="3025" /> +<TGConnectingPoint num="5" id="3026" /> +<TGConnectingPoint num="6" id="3027" /> +<TGConnectingPoint num="7" id="3028" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="EventBus"/><LastPortCode code="335" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2960" > +<father id="3029" num="0" /> +<cdparam x="263" y="360" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="saleRegisteredEvent" /> +<TGConnectingPoint num="0" id="2956" /> +<TGConnectingPoint num="1" id="2957" /> +<TGConnectingPoint num="2" id="2958" /> +<TGConnectingPoint num="3" id="2959" /> +<extraparam> +<PortCode code="EventBusDesign97" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2965" > +<father id="3029" num="1" /> +<cdparam x="76" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="eventBus" /> +<TGConnectingPoint num="0" id="2961" /> +<TGConnectingPoint num="1" id="2962" /> +<TGConnectingPoint num="2" id="2963" /> +<TGConnectingPoint num="3" id="2964" /> +<extraparam> +<PortCode code="EventBusDesign77" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2970" > +<father id="3029" num="2" /> +<cdparam x="444" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="scanner" /> +<TGConnectingPoint num="0" id="2966" /> +<TGConnectingPoint num="1" id="2967" /> +<TGConnectingPoint num="2" id="2968" /> +<TGConnectingPoint num="3" id="2969" /> +<extraparam> +<PortCode code="EventBusDesign76" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2975" > +<father id="3029" num="3" /> +<cdparam x="558" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="cashBoxEnevt" /> +<TGConnectingPoint num="0" id="2971" /> +<TGConnectingPoint num="1" id="2972" /> +<TGConnectingPoint num="2" id="2973" /> +<TGConnectingPoint num="3" id="2974" /> +<extraparam> +<PortCode code="EventBusDesign75" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2980" > +<father id="3029" num="4" /> +<cdparam x="319" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="2976" /> +<TGConnectingPoint num="1" id="2977" /> +<TGConnectingPoint num="2" id="2978" /> +<TGConnectingPoint num="3" id="2979" /> +<extraparam> +<PortCode code="EventBusDesign74" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="2985" > +<father id="3029" num="5" /> +<cdparam x="186" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="2981" /> +<TGConnectingPoint num="1" id="2982" /> +<TGConnectingPoint num="2" id="2983" /> +<TGConnectingPoint num="3" id="2984" /> +<extraparam> +<PortCode code="EventBusDesign73" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2990" > +<father id="3029" num="6" /> +<cdparam x="1433" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="printer" /> +<TGConnectingPoint num="0" id="2986" /> +<TGConnectingPoint num="1" id="2987" /> +<TGConnectingPoint num="2" id="2988" /> +<TGConnectingPoint num="3" id="2989" /> +<extraparam> +<PortCode code="EventBusDesign83" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="2995" > +<father id="3029" num="7" /> +<cdparam x="1172" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="2991" /> +<TGConnectingPoint num="1" id="2992" /> +<TGConnectingPoint num="2" id="2993" /> +<TGConnectingPoint num="3" id="2994" /> +<extraparam> +<PortCode code="EventBusDesign82" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3000" > +<father id="3029" num="8" /> +<cdparam x="1015" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="cashDeskGui" /> +<TGConnectingPoint num="0" id="2996" /> +<TGConnectingPoint num="1" id="2997" /> +<TGConnectingPoint num="2" id="2998" /> +<TGConnectingPoint num="3" id="2999" /> +<extraparam> +<PortCode code="EventBusDesign81" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3005" > +<father id="3029" num="9" /> +<cdparam x="857" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3001" /> +<TGConnectingPoint num="1" id="3002" /> +<TGConnectingPoint num="2" id="3003" /> +<TGConnectingPoint num="3" id="3004" /> +<extraparam> +<PortCode code="EventBusDesign80" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3010" > +<father id="3029" num="10" /> +<cdparam x="710" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="appEventHandler" /> +<TGConnectingPoint num="0" id="3006" /> +<TGConnectingPoint num="1" id="3007" /> +<TGConnectingPoint num="2" id="3008" /> +<TGConnectingPoint num="3" id="3009" /> +<extraparam> +<PortCode code="EventBusDesign79" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3015" > +<father id="3029" num="11" /> +<cdparam x="1315" y="282" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="Out Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3011" /> +<TGConnectingPoint num="1" id="3012" /> +<TGConnectingPoint num="2" id="3013" /> +<TGConnectingPoint num="3" id="3014" /> +<extraparam> +<PortCode code="EventBusDesign78" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3020" > +<father id="3029" num="12" /> +<cdparam x="735" y="360" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1337" minY="0" maxY="58" /> +<infoparam name="In Port" value="expressMode" /> +<TGConnectingPoint num="0" id="3016" /> +<TGConnectingPoint num="1" id="3017" /> +<TGConnectingPoint num="2" id="3018" /> +<TGConnectingPoint num="3" id="3019" /> +<extraparam> +<PortCode code="EventBusDesign84" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3048" > +<father id="3081" num="5" /> +<cdparam x="137" y="533" /> +<sizeparam width="973" height="51" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="514" minY="0" maxY="577" /> +<infoparam name="Component " value="Coordinator" /> +<TGConnectingPoint num="0" id="3040" /> +<TGConnectingPoint num="1" id="3041" /> +<TGConnectingPoint num="2" id="3042" /> +<TGConnectingPoint num="3" id="3043" /> +<TGConnectingPoint num="4" id="3044" /> +<TGConnectingPoint num="5" id="3045" /> +<TGConnectingPoint num="6" id="3046" /> +<TGConnectingPoint num="7" id="3047" /> +<extraparam> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="40" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3034" > +<father id="3048" num="0" /> +<cdparam x="127" y="548" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="31" /> +<infoparam name="In Port" value="saleRegisteredCoord" /> +<TGConnectingPoint num="0" id="3030" /> +<TGConnectingPoint num="1" id="3031" /> +<TGConnectingPoint num="2" id="3032" /> +<TGConnectingPoint num="3" id="3033" /> +<extraparam> +<PortCode code="Coordinator1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3039" > +<father id="3048" num="1" /> +<cdparam x="688" y="523" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="31" /> +<infoparam name="Out Port" value="expressModeControl" /> +<TGConnectingPoint num="0" id="3035" /> +<TGConnectingPoint num="1" id="3036" /> +<TGConnectingPoint num="2" id="3037" /> +<TGConnectingPoint num="3" id="3038" /> +<extraparam> +<PortCode code="Coordinator2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3072" > +<father id="3081" num="6" /> +<cdparam x="79" y="415" /> +<sizeparam width="47" height="45" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1440" minY="0" maxY="583" /> +<infoparam name="Component " value="ds" /> +<TGConnectingPoint num="0" id="3064" /> +<TGConnectingPoint num="1" id="3065" /> +<TGConnectingPoint num="2" id="3066" /> +<TGConnectingPoint num="3" id="3067" /> +<TGConnectingPoint num="4" id="3068" /> +<TGConnectingPoint num="5" id="3069" /> +<TGConnectingPoint num="6" id="3070" /> +<TGConnectingPoint num="7" id="3071" /> +<extraparam> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="64" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3053" > +<father id="3072" num="0" /> +<cdparam x="69" y="450" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="27" minY="0" maxY="25" /> +<infoparam name="Out Port" value="pOut2" /> +<TGConnectingPoint num="0" id="3049" /> +<TGConnectingPoint num="1" id="3050" /> +<TGConnectingPoint num="2" id="3051" /> +<TGConnectingPoint num="3" id="3052" /> +<extraparam> +<PortCode code="ds3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3058" > +<father id="3072" num="1" /> +<cdparam x="116" y="450" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="27" minY="0" maxY="25" /> +<infoparam name="Out Port" value="pOut1" /> +<TGConnectingPoint num="0" id="3054" /> +<TGConnectingPoint num="1" id="3055" /> +<TGConnectingPoint num="2" id="3056" /> +<TGConnectingPoint num="3" id="3057" /> +<extraparam> +<PortCode code="ds2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3063" > +<father id="3072" num="2" /> +<cdparam x="94" y="405" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="27" minY="0" maxY="25" /> +<infoparam name="In Port" value="pIn" /> +<TGConnectingPoint num="0" id="3059" /> +<TGConnectingPoint num="1" id="3060" /> +<TGConnectingPoint num="2" id="3061" /> +<TGConnectingPoint num="3" id="3062" /> +<extraparam> +<PortCode code="ds1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="3094" > +<cdparam x="156" y="10" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="3082" /> +<TGConnectingPoint num="1" id="3083" /> +<TGConnectingPoint num="2" id="3084" /> +<TGConnectingPoint num="3" id="3085" /> +<TGConnectingPoint num="4" id="3086" /> +<TGConnectingPoint num="5" id="3087" /> +<TGConnectingPoint num="6" id="3088" /> +<TGConnectingPoint num="7" id="3089" /> +<TGConnectingPoint num="8" id="3090" /> +<TGConnectingPoint num="9" id="3091" /> +<TGConnectingPoint num="10" id="3092" /> +<TGConnectingPoint num="11" id="3093" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3107" > +<cdparam x="10" y="135" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="3095" /> +<TGConnectingPoint num="1" id="3096" /> +<TGConnectingPoint num="2" id="3097" /> +<TGConnectingPoint num="3" id="3098" /> +<TGConnectingPoint num="4" id="3099" /> +<TGConnectingPoint num="5" id="3100" /> +<TGConnectingPoint num="6" id="3101" /> +<TGConnectingPoint num="7" id="3102" /> +<TGConnectingPoint num="8" id="3103" /> +<TGConnectingPoint num="9" id="3104" /> +<TGConnectingPoint num="10" id="3105" /> +<TGConnectingPoint num="11" id="3106" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3120" > +<cdparam x="23" y="728" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3108" /> +<TGConnectingPoint num="1" id="3109" /> +<TGConnectingPoint num="2" id="3110" /> +<TGConnectingPoint num="3" id="3111" /> +<TGConnectingPoint num="4" id="3112" /> +<TGConnectingPoint num="5" id="3113" /> +<TGConnectingPoint num="6" id="3114" /> +<TGConnectingPoint num="7" id="3115" /> +<TGConnectingPoint num="8" id="3116" /> +<TGConnectingPoint num="9" id="3117" /> +<TGConnectingPoint num="10" id="3118" /> +<TGConnectingPoint num="11" id="3119" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3133" > +<cdparam x="197" y="794" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3121" /> +<TGConnectingPoint num="1" id="3122" /> +<TGConnectingPoint num="2" id="3123" /> +<TGConnectingPoint num="3" id="3124" /> +<TGConnectingPoint num="4" id="3125" /> +<TGConnectingPoint num="5" id="3126" /> +<TGConnectingPoint num="6" id="3127" /> +<TGConnectingPoint num="7" id="3128" /> +<TGConnectingPoint num="8" id="3129" /> +<TGConnectingPoint num="9" id="3130" /> +<TGConnectingPoint num="10" id="3131" /> +<TGConnectingPoint num="11" id="3132" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3146" > +<cdparam x="95" y="737" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3134" /> +<TGConnectingPoint num="1" id="3135" /> +<TGConnectingPoint num="2" id="3136" /> +<TGConnectingPoint num="3" id="3137" /> +<TGConnectingPoint num="4" id="3138" /> +<TGConnectingPoint num="5" id="3139" /> +<TGConnectingPoint num="6" id="3140" /> +<TGConnectingPoint num="7" id="3141" /> +<TGConnectingPoint num="8" id="3142" /> +<TGConnectingPoint num="9" id="3143" /> +<TGConnectingPoint num="10" id="3144" /> +<TGConnectingPoint num="11" id="3145" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3159" > +<cdparam x="367" y="709" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3147" /> +<TGConnectingPoint num="1" id="3148" /> +<TGConnectingPoint num="2" id="3149" /> +<TGConnectingPoint num="3" id="3150" /> +<TGConnectingPoint num="4" id="3151" /> +<TGConnectingPoint num="5" id="3152" /> +<TGConnectingPoint num="6" id="3153" /> +<TGConnectingPoint num="7" id="3154" /> +<TGConnectingPoint num="8" id="3155" /> +<TGConnectingPoint num="9" id="3156" /> +<TGConnectingPoint num="10" id="3157" /> +<TGConnectingPoint num="11" id="3158" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3172" > +<cdparam x="205" y="707" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3160" /> +<TGConnectingPoint num="1" id="3161" /> +<TGConnectingPoint num="2" id="3162" /> +<TGConnectingPoint num="3" id="3163" /> +<TGConnectingPoint num="4" id="3164" /> +<TGConnectingPoint num="5" id="3165" /> +<TGConnectingPoint num="6" id="3166" /> +<TGConnectingPoint num="7" id="3167" /> +<TGConnectingPoint num="8" id="3168" /> +<TGConnectingPoint num="9" id="3169" /> +<TGConnectingPoint num="10" id="3170" /> +<TGConnectingPoint num="11" id="3171" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="3173" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="726" y="158" id="2882" /> +<P2 x="904" y="78" id="2646" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3174" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="83" y="154" id="2892" /> +<P2 x="846" y="502" id="2659" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3175" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="197" y="158" id="2897" /> +<P2 x="10" y="402" id="2789" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3176" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="311" y="90" id="2902" /> +<P2 x="570" y="22" id="2828" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3178" > +<cdparam x="561" y="238" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3177" /> +<P1 x="73" y="100" id="2889" /> +<P2 x="73" y="24" id="2870" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3180" > +<cdparam x="561" y="194" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3179" /> +<P1 x="301" y="100" id="2904" /> +<P2 x="298" y="24" id="2880" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3181" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="1441" y="158" id="2942" /> +<P2 x="1262" y="211" id="2672" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3182" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="462" y="158" id="2937" /> +<P2 x="395" y="363" id="2685" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3183" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="1322" y="158" id="2932" /> +<P2 x="10" y="214" id="2698" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3184" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="579" y="158" id="2927" /> +<P2 x="1037" y="266" id="2711" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3185" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="1177" y="158" id="2922" /> +<P2 x="14" y="236" id="2724" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3186" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="345" y="158" id="2917" /> +<P2 x="1091" y="269" id="2737" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3187" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="873" y="158" id="2907" /> +<P2 x="1100" y="26" id="2750" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3189" > +<cdparam x="261" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3188" /> +<P1 x="83" y="174" id="2893" /> +<P2 x="86" y="282" id="2961" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3191" > +<cdparam x="476" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3190" /> +<P1 x="345" y="178" id="2918" /> +<P2 x="329" y="282" id="2976" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3193" > +<cdparam x="784" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3192" /> +<P1 x="579" y="178" id="2928" /> +<P2 x="568" y="282" id="2971" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3195" > +<cdparam x="607" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3194" /> +<P1 x="462" y="178" id="2938" /> +<P2 x="454" y="282" id="2966" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3197" > +<cdparam x="886" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3196" /> +<P1 x="720" y="282" id="3006" /> +<P2 x="726" y="178" id="2883" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3199" > +<cdparam x="1031" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3198" /> +<P1 x="867" y="282" id="3001" /> +<P2 x="873" y="178" id="2908" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3201" > +<cdparam x="1089" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3200" /> +<P1 x="1025" y="282" id="2996" /> +<P2 x="1027" y="178" id="2913" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3203" > +<cdparam x="1248" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3202" /> +<P1 x="1182" y="282" id="2991" /> +<P2 x="1177" y="178" id="2923" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3205" > +<cdparam x="1384" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3204" /> +<P1 x="1325" y="282" id="3011" /> +<P2 x="1322" y="178" id="2933" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3207" > +<cdparam x="1518" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3206" /> +<P1 x="1443" y="282" id="2986" /> +<P2 x="1441" y="178" id="2943" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3209" > +<cdparam x="877" y="565" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3208" /> +<P1 x="698" y="523" id="3035" /> +<P2 x="745" y="380" id="3017" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3210" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="745" y="360" id="3016" /> +<P2 x="491" y="529" id="2776" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3211" > +<cdparam x="765" y="613" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="708" y="533" id="3038" /> +<P2 x="790" y="990" id="2763" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3213" > +<cdparam x="264" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3212" /> +<P1 x="197" y="178" id="2898" /> +<P2 x="196" y="282" id="2981" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3215" > +<cdparam x="359" y="608" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3214" /> +<P1 x="273" y="380" id="2957" /> +<P2 x="104" y="405" id="3059" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3217" > +<cdparam x="258" y="721" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3216" /> +<P1 x="79" y="470" id="3050" /> +<P2 x="43" y="497" id="2875" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3218" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="86" y="282" id="2961" /> +<P2 x="614" y="358" id="2841" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3219" > +<cdparam x="0" y="0" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="83" y="90" id="2887" /> +<P2 x="454" y="22" id="2854" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3221" > +<cdparam x="178" y="515" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3220" /> +<P1 x="126" y="470" id="3055" /> +<P2 x="137" y="548" id="3030" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3222" > +<cdparam x="326" y="32" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="288" y="14" id="2877" /> +<P2 x="156" y="22" id="3082" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3223" > +<cdparam x="101" y="52" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="63" y="34" id="2868" /> +<P2 x="60" y="135" id="3098" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3224" > +<cdparam x="71" y="505" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="33" y="487" id="2872" /> +<P2 x="23" y="740" id="3108" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3225" > +<cdparam x="129" y="474" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="79" y="450" id="3049" /> +<P2 x="197" y="806" id="3121" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3226" > +<cdparam x="166" y="484" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="116" y="460" id="3056" /> +<P2 x="95" y="749" id="3134" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3227" > +<cdparam x="144" y="439" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="94" y="415" id="3061" /> +<P2 x="367" y="721" id="3147" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3228" > +<cdparam x="207" y="598" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="137" y="568" id="3031" /> +<P2 x="205" y="719" id="3160" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveCSDPanel name="EventBus" minX="10" maxX="1900" minY="10" maxY="1900" > +<COMPONENT type="2104" id="3241" > +<cdparam x="10" y="10" /> +<sizeparam width="153" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="209" minDesiredHeight="68" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="3229" /> +<TGConnectingPoint num="1" id="3230" /> +<TGConnectingPoint num="2" id="3231" /> +<TGConnectingPoint num="3" id="3232" /> +<TGConnectingPoint num="4" id="3233" /> +<TGConnectingPoint num="5" id="3234" /> +<TGConnectingPoint num="6" id="3235" /> +<TGConnectingPoint num="7" id="3236" /> +<TGConnectingPoint num="8" id="3237" /> +<TGConnectingPoint num="9" id="3238" /> +<TGConnectingPoint num="10" id="3239" /> +<TGConnectingPoint num="11" id="3240" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3254" > +<cdparam x="756" y="10" /> +<sizeparam width="133" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="3242" /> +<TGConnectingPoint num="1" id="3243" /> +<TGConnectingPoint num="2" id="3244" /> +<TGConnectingPoint num="3" id="3245" /> +<TGConnectingPoint num="4" id="3246" /> +<TGConnectingPoint num="5" id="3247" /> +<TGConnectingPoint num="6" id="3248" /> +<TGConnectingPoint num="7" id="3249" /> +<TGConnectingPoint num="8" id="3250" /> +<TGConnectingPoint num="9" id="3251" /> +<TGConnectingPoint num="10" id="3252" /> +<TGConnectingPoint num="11" id="3253" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3267" > +<cdparam x="1252" y="820" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="3255" /> +<TGConnectingPoint num="1" id="3256" /> +<TGConnectingPoint num="2" id="3257" /> +<TGConnectingPoint num="3" id="3258" /> +<TGConnectingPoint num="4" id="3259" /> +<TGConnectingPoint num="5" id="3260" /> +<TGConnectingPoint num="6" id="3261" /> +<TGConnectingPoint num="7" id="3262" /> +<TGConnectingPoint num="8" id="3263" /> +<TGConnectingPoint num="9" id="3264" /> +<TGConnectingPoint num="10" id="3265" /> +<TGConnectingPoint num="11" id="3266" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3280" > +<cdparam x="1232" y="178" /> +<sizeparam width="198" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="3268" /> +<TGConnectingPoint num="1" id="3269" /> +<TGConnectingPoint num="2" id="3270" /> +<TGConnectingPoint num="3" id="3271" /> +<TGConnectingPoint num="4" id="3272" /> +<TGConnectingPoint num="5" id="3273" /> +<TGConnectingPoint num="6" id="3274" /> +<TGConnectingPoint num="7" id="3275" /> +<TGConnectingPoint num="8" id="3276" /> +<TGConnectingPoint num="9" id="3277" /> +<TGConnectingPoint num="10" id="3278" /> +<TGConnectingPoint num="11" id="3279" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3293" > +<cdparam x="1500" y="253" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3281" /> +<TGConnectingPoint num="1" id="3282" /> +<TGConnectingPoint num="2" id="3283" /> +<TGConnectingPoint num="3" id="3284" /> +<TGConnectingPoint num="4" id="3285" /> +<TGConnectingPoint num="5" id="3286" /> +<TGConnectingPoint num="6" id="3287" /> +<TGConnectingPoint num="7" id="3288" /> +<TGConnectingPoint num="8" id="3289" /> +<TGConnectingPoint num="9" id="3290" /> +<TGConnectingPoint num="10" id="3291" /> +<TGConnectingPoint num="11" id="3292" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3306" > +<cdparam x="1286" y="506" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="3294" /> +<TGConnectingPoint num="1" id="3295" /> +<TGConnectingPoint num="2" id="3296" /> +<TGConnectingPoint num="3" id="3297" /> +<TGConnectingPoint num="4" id="3298" /> +<TGConnectingPoint num="5" id="3299" /> +<TGConnectingPoint num="6" id="3300" /> +<TGConnectingPoint num="7" id="3301" /> +<TGConnectingPoint num="8" id="3302" /> +<TGConnectingPoint num="9" id="3303" /> +<TGConnectingPoint num="10" id="3304" /> +<TGConnectingPoint num="11" id="3305" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3319" > +<cdparam x="1230" y="17" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="3307" /> +<TGConnectingPoint num="1" id="3308" /> +<TGConnectingPoint num="2" id="3309" /> +<TGConnectingPoint num="3" id="3310" /> +<TGConnectingPoint num="4" id="3311" /> +<TGConnectingPoint num="5" id="3312" /> +<TGConnectingPoint num="6" id="3313" /> +<TGConnectingPoint num="7" id="3314" /> +<TGConnectingPoint num="8" id="3315" /> +<TGConnectingPoint num="9" id="3316" /> +<TGConnectingPoint num="10" id="3317" /> +<TGConnectingPoint num="11" id="3318" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3332" > +<cdparam x="1175" y="10" /> +<sizeparam width="143" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3320" /> +<TGConnectingPoint num="1" id="3321" /> +<TGConnectingPoint num="2" id="3322" /> +<TGConnectingPoint num="3" id="3323" /> +<TGConnectingPoint num="4" id="3324" /> +<TGConnectingPoint num="5" id="3325" /> +<TGConnectingPoint num="6" id="3326" /> +<TGConnectingPoint num="7" id="3327" /> +<TGConnectingPoint num="8" id="3328" /> +<TGConnectingPoint num="9" id="3329" /> +<TGConnectingPoint num="10" id="3330" /> +<TGConnectingPoint num="11" id="3331" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3345" > +<cdparam x="48" y="181" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3333" /> +<TGConnectingPoint num="1" id="3334" /> +<TGConnectingPoint num="2" id="3335" /> +<TGConnectingPoint num="3" id="3336" /> +<TGConnectingPoint num="4" id="3337" /> +<TGConnectingPoint num="5" id="3338" /> +<TGConnectingPoint num="6" id="3339" /> +<TGConnectingPoint num="7" id="3340" /> +<TGConnectingPoint num="8" id="3341" /> +<TGConnectingPoint num="9" id="3342" /> +<TGConnectingPoint num="10" id="3343" /> +<TGConnectingPoint num="11" id="3344" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3358" > +<cdparam x="10" y="529" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3346" /> +<TGConnectingPoint num="1" id="3347" /> +<TGConnectingPoint num="2" id="3348" /> +<TGConnectingPoint num="3" id="3349" /> +<TGConnectingPoint num="4" id="3350" /> +<TGConnectingPoint num="5" id="3351" /> +<TGConnectingPoint num="6" id="3352" /> +<TGConnectingPoint num="7" id="3353" /> +<TGConnectingPoint num="8" id="3354" /> +<TGConnectingPoint num="9" id="3355" /> +<TGConnectingPoint num="10" id="3356" /> +<TGConnectingPoint num="11" id="3357" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="3515" > +<cdparam x="72" y="26" /> +<sizeparam width="973" height="558" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="Component " value="EventBus" /> +<TGConnectingPoint num="0" id="3507" /> +<TGConnectingPoint num="1" id="3508" /> +<TGConnectingPoint num="2" id="3509" /> +<TGConnectingPoint num="3" id="3510" /> +<TGConnectingPoint num="4" id="3511" /> +<TGConnectingPoint num="5" id="3512" /> +<TGConnectingPoint num="6" id="3513" /> +<TGConnectingPoint num="7" id="3514" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="EventBus"/><LastPortCode code="331" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2108" id="3363" > +<father id="3515" num="0" /> +<cdparam x="1035" y="469" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="saleRegisteredEvent" /> +<TGConnectingPoint num="0" id="3359" /> +<TGConnectingPoint num="1" id="3360" /> +<TGConnectingPoint num="2" id="3361" /> +<TGConnectingPoint num="3" id="3362" /> +<extraparam> +<PortCode code="EventBusDesign97" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3382" > +<father id="3515" num="1" /> +<cdparam x="246" y="414" /> +<sizeparam width="394" height="84" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="579" minY="0" maxY="474" /> +<infoparam name="Component " value="CommonBus" /> +<TGConnectingPoint num="0" id="3374" /> +<TGConnectingPoint num="1" id="3375" /> +<TGConnectingPoint num="2" id="3376" /> +<TGConnectingPoint num="3" id="3377" /> +<TGConnectingPoint num="4" id="3378" /> +<TGConnectingPoint num="5" id="3379" /> +<TGConnectingPoint num="6" id="3380" /> +<TGConnectingPoint num="7" id="3381" /> +<extraparam> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="40" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3368" > +<father id="3382" num="0" /> +<cdparam x="236" y="444" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="374" minY="0" maxY="64" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3364" /> +<TGConnectingPoint num="1" id="3365" /> +<TGConnectingPoint num="2" id="3366" /> +<TGConnectingPoint num="3" id="3367" /> +<extraparam> +<PortCode code="CommonBus1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3373" > +<father id="3382" num="1" /> +<cdparam x="630" y="456" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="374" minY="0" maxY="64" /> +<infoparam name="Out Port" value="saleRegisteredEvent" /> +<TGConnectingPoint num="0" id="3369" /> +<TGConnectingPoint num="1" id="3370" /> +<TGConnectingPoint num="2" id="3371" /> +<TGConnectingPoint num="3" id="3372" /> +<extraparam> +<PortCode code="CommonBus2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3446" > +<father id="3515" num="2" /> +<cdparam x="242" y="116" /> +<sizeparam width="543" height="252" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="430" minY="0" maxY="306" /> +<infoparam name="Component " value="CashDeskChannel" /> +<TGConnectingPoint num="0" id="3438" /> +<TGConnectingPoint num="1" id="3439" /> +<TGConnectingPoint num="2" id="3440" /> +<TGConnectingPoint num="3" id="3441" /> +<TGConnectingPoint num="4" id="3442" /> +<TGConnectingPoint num="5" id="3443" /> +<TGConnectingPoint num="6" id="3444" /> +<TGConnectingPoint num="7" id="3445" /> +<extraparam> +<Attribute access="0" id="pm" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="barcode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="cardNb" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="244" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3387" > +<father id="3446" num="0" /> +<cdparam x="775" y="342" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="3383" /> +<TGConnectingPoint num="1" id="3384" /> +<TGConnectingPoint num="2" id="3385" /> +<TGConnectingPoint num="3" id="3386" /> +<extraparam> +<PortCode code="CashDeskChannel11" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3392" > +<father id="3446" num="1" /> +<cdparam x="775" y="312" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="cashDeskGUI" /> +<TGConnectingPoint num="0" id="3388" /> +<TGConnectingPoint num="1" id="3389" /> +<TGConnectingPoint num="2" id="3390" /> +<TGConnectingPoint num="3" id="3391" /> +<extraparam> +<PortCode code="CashDeskChannel10" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3397" > +<father id="3446" num="2" /> +<cdparam x="775" y="277" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3393" /> +<TGConnectingPoint num="1" id="3394" /> +<TGConnectingPoint num="2" id="3395" /> +<TGConnectingPoint num="3" id="3396" /> +<extraparam> +<PortCode code="CashDeskChannel9" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3402" > +<father id="3446" num="3" /> +<cdparam x="775" y="237" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="printer" /> +<TGConnectingPoint num="0" id="3398" /> +<TGConnectingPoint num="1" id="3399" /> +<TGConnectingPoint num="2" id="3400" /> +<TGConnectingPoint num="3" id="3401" /> +<extraparam> +<PortCode code="CashDeskChannel8" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3407" > +<father id="3446" num="4" /> +<cdparam x="775" y="202" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="appEventHandler" /> +<TGConnectingPoint num="0" id="3403" /> +<TGConnectingPoint num="1" id="3404" /> +<TGConnectingPoint num="2" id="3405" /> +<TGConnectingPoint num="3" id="3406" /> +<extraparam> +<PortCode code="CashDeskChannel7" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3412" > +<father id="3446" num="5" /> +<cdparam x="775" y="146" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="Out Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3408" /> +<TGConnectingPoint num="1" id="3409" /> +<TGConnectingPoint num="2" id="3410" /> +<TGConnectingPoint num="3" id="3411" /> +<extraparam> +<PortCode code="CashDeskChannel6" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3417" > +<father id="3446" num="6" /> +<cdparam x="775" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3413" /> +<TGConnectingPoint num="1" id="3414" /> +<TGConnectingPoint num="2" id="3415" /> +<TGConnectingPoint num="3" id="3416" /> +<extraparam> +<PortCode code="CashDeskChannel5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3422" > +<father id="3446" num="7" /> +<cdparam x="623" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="scannerEvent" /> +<TGConnectingPoint num="0" id="3418" /> +<TGConnectingPoint num="1" id="3419" /> +<TGConnectingPoint num="2" id="3420" /> +<TGConnectingPoint num="3" id="3421" /> +<extraparam> +<PortCode code="CashDeskChannel4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3427" > +<father id="3446" num="8" /> +<cdparam x="255" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="cashBoxEvent" /> +<TGConnectingPoint num="0" id="3423" /> +<TGConnectingPoint num="1" id="3424" /> +<TGConnectingPoint num="2" id="3425" /> +<TGConnectingPoint num="3" id="3426" /> +<extraparam> +<PortCode code="CashDeskChannel3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3432" > +<father id="3446" num="9" /> +<cdparam x="410" y="106" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="3428" /> +<TGConnectingPoint num="1" id="3429" /> +<TGConnectingPoint num="2" id="3430" /> +<TGConnectingPoint num="3" id="3431" /> +<extraparam> +<PortCode code="CashDeskChannel2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3437" > +<father id="3446" num="10" /> +<cdparam x="232" y="192" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="523" minY="0" maxY="232" /> +<infoparam name="In Port" value="expressMode" /> +<TGConnectingPoint num="0" id="3433" /> +<TGConnectingPoint num="1" id="3434" /> +<TGConnectingPoint num="2" id="3435" /> +<TGConnectingPoint num="3" id="3436" /> +<extraparam> +<PortCode code="CashDeskChannel23" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3451" > +<father id="3515" num="3" /> +<cdparam x="62" y="408" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3447" /> +<TGConnectingPoint num="1" id="3448" /> +<TGConnectingPoint num="2" id="3449" /> +<TGConnectingPoint num="3" id="3450" /> +<extraparam> +<PortCode code="EventBusDesign73" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3456" > +<father id="3515" num="4" /> +<cdparam x="423" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="3452" /> +<TGConnectingPoint num="1" id="3453" /> +<TGConnectingPoint num="2" id="3454" /> +<TGConnectingPoint num="3" id="3455" /> +<extraparam> +<PortCode code="EventBusDesign74" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3461" > +<father id="3515" num="5" /> +<cdparam x="263" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="cashBoxEnevt" /> +<TGConnectingPoint num="0" id="3457" /> +<TGConnectingPoint num="1" id="3458" /> +<TGConnectingPoint num="2" id="3459" /> +<TGConnectingPoint num="3" id="3460" /> +<extraparam> +<PortCode code="EventBusDesign75" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3466" > +<father id="3515" num="6" /> +<cdparam x="621" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="scanner" /> +<TGConnectingPoint num="0" id="3462" /> +<TGConnectingPoint num="1" id="3463" /> +<TGConnectingPoint num="2" id="3464" /> +<TGConnectingPoint num="3" id="3465" /> +<extraparam> +<PortCode code="EventBusDesign76" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3471" > +<father id="3515" num="7" /> +<cdparam x="822" y="16" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3467" /> +<TGConnectingPoint num="1" id="3468" /> +<TGConnectingPoint num="2" id="3469" /> +<TGConnectingPoint num="3" id="3470" /> +<extraparam> +<PortCode code="EventBusDesign77" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3476" > +<father id="3515" num="8" /> +<cdparam x="1035" y="129" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3472" /> +<TGConnectingPoint num="1" id="3473" /> +<TGConnectingPoint num="2" id="3474" /> +<TGConnectingPoint num="3" id="3475" /> +<extraparam> +<PortCode code="EventBusDesign78" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3481" > +<father id="3515" num="9" /> +<cdparam x="1035" y="180" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="appEventHandler" /> +<TGConnectingPoint num="0" id="3477" /> +<TGConnectingPoint num="1" id="3478" /> +<TGConnectingPoint num="2" id="3479" /> +<TGConnectingPoint num="3" id="3480" /> +<extraparam> +<PortCode code="EventBusDesign79" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3486" > +<father id="3515" num="10" /> +<cdparam x="1035" y="255" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3482" /> +<TGConnectingPoint num="1" id="3483" /> +<TGConnectingPoint num="2" id="3484" /> +<TGConnectingPoint num="3" id="3485" /> +<extraparam> +<PortCode code="EventBusDesign80" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3491" > +<father id="3515" num="11" /> +<cdparam x="1035" y="287" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="cashDeskGui" /> +<TGConnectingPoint num="0" id="3487" /> +<TGConnectingPoint num="1" id="3488" /> +<TGConnectingPoint num="2" id="3489" /> +<TGConnectingPoint num="3" id="3490" /> +<extraparam> +<PortCode code="EventBusDesign81" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3496" > +<father id="3515" num="12" /> +<cdparam x="1035" y="320" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="3492" /> +<TGConnectingPoint num="1" id="3493" /> +<TGConnectingPoint num="2" id="3494" /> +<TGConnectingPoint num="3" id="3495" /> +<extraparam> +<PortCode code="EventBusDesign82" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3501" > +<father id="3515" num="13" /> +<cdparam x="1035" y="222" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="Out Port" value="printer" /> +<TGConnectingPoint num="0" id="3497" /> +<TGConnectingPoint num="1" id="3498" /> +<TGConnectingPoint num="2" id="3499" /> +<TGConnectingPoint num="3" id="3500" /> +<extraparam> +<PortCode code="EventBusDesign83" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3506" > +<father id="3515" num="14" /> +<cdparam x="62" y="135" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="953" minY="0" maxY="538" /> +<infoparam name="In Port" value="expressMode" /> +<TGConnectingPoint num="0" id="3502" /> +<TGConnectingPoint num="1" id="3503" /> +<TGConnectingPoint num="2" id="3504" /> +<TGConnectingPoint num="3" id="3505" /> +<extraparam> +<PortCode code="EventBusDesign84" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="3528" > +<cdparam x="10" y="503" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3516" /> +<TGConnectingPoint num="1" id="3517" /> +<TGConnectingPoint num="2" id="3518" /> +<TGConnectingPoint num="3" id="3519" /> +<TGConnectingPoint num="4" id="3520" /> +<TGConnectingPoint num="5" id="3521" /> +<TGConnectingPoint num="6" id="3522" /> +<TGConnectingPoint num="7" id="3523" /> +<TGConnectingPoint num="8" id="3524" /> +<TGConnectingPoint num="9" id="3525" /> +<TGConnectingPoint num="10" id="3526" /> +<TGConnectingPoint num="11" id="3527" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3541" > +<cdparam x="18" y="670" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3529" /> +<TGConnectingPoint num="1" id="3530" /> +<TGConnectingPoint num="2" id="3531" /> +<TGConnectingPoint num="3" id="3532" /> +<TGConnectingPoint num="4" id="3533" /> +<TGConnectingPoint num="5" id="3534" /> +<TGConnectingPoint num="6" id="3535" /> +<TGConnectingPoint num="7" id="3536" /> +<TGConnectingPoint num="8" id="3537" /> +<TGConnectingPoint num="9" id="3538" /> +<TGConnectingPoint num="10" id="3539" /> +<TGConnectingPoint num="11" id="3540" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3554" > +<cdparam x="1" y="156" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3542" /> +<TGConnectingPoint num="1" id="3543" /> +<TGConnectingPoint num="2" id="3544" /> +<TGConnectingPoint num="3" id="3545" /> +<TGConnectingPoint num="4" id="3546" /> +<TGConnectingPoint num="5" id="3547" /> +<TGConnectingPoint num="6" id="3548" /> +<TGConnectingPoint num="7" id="3549" /> +<TGConnectingPoint num="8" id="3550" /> +<TGConnectingPoint num="9" id="3551" /> +<TGConnectingPoint num="10" id="3552" /> +<TGConnectingPoint num="11" id="3553" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3567" > +<cdparam x="10" y="49" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="ExpressModelIf" /> +<TGConnectingPoint num="0" id="3555" /> +<TGConnectingPoint num="1" id="3556" /> +<TGConnectingPoint num="2" id="3557" /> +<TGConnectingPoint num="3" id="3558" /> +<TGConnectingPoint num="4" id="3559" /> +<TGConnectingPoint num="5" id="3560" /> +<TGConnectingPoint num="6" id="3561" /> +<TGConnectingPoint num="7" id="3562" /> +<TGConnectingPoint num="8" id="3563" /> +<TGConnectingPoint num="9" id="3564" /> +<TGConnectingPoint num="10" id="3565" /> +<TGConnectingPoint num="11" id="3566" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3580" > +<cdparam x="103" y="654" /> +<sizeparam width="166" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="ExpressModelIf" /> +<TGConnectingPoint num="0" id="3568" /> +<TGConnectingPoint num="1" id="3569" /> +<TGConnectingPoint num="2" id="3570" /> +<TGConnectingPoint num="3" id="3571" /> +<TGConnectingPoint num="4" id="3572" /> +<TGConnectingPoint num="5" id="3573" /> +<TGConnectingPoint num="6" id="3574" /> +<TGConnectingPoint num="7" id="3575" /> +<TGConnectingPoint num="8" id="3576" /> +<TGConnectingPoint num="9" id="3577" /> +<TGConnectingPoint num="10" id="3578" /> +<TGConnectingPoint num="11" id="3579" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3593" > +<cdparam x="1253" y="40" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="3581" /> +<TGConnectingPoint num="1" id="3582" /> +<TGConnectingPoint num="2" id="3583" /> +<TGConnectingPoint num="3" id="3584" /> +<TGConnectingPoint num="4" id="3585" /> +<TGConnectingPoint num="5" id="3586" /> +<TGConnectingPoint num="6" id="3587" /> +<TGConnectingPoint num="7" id="3588" /> +<TGConnectingPoint num="8" id="3589" /> +<TGConnectingPoint num="9" id="3590" /> +<TGConnectingPoint num="10" id="3591" /> +<TGConnectingPoint num="11" id="3592" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3606" > +<cdparam x="1319" y="34" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="3594" /> +<TGConnectingPoint num="1" id="3595" /> +<TGConnectingPoint num="2" id="3596" /> +<TGConnectingPoint num="3" id="3597" /> +<TGConnectingPoint num="4" id="3598" /> +<TGConnectingPoint num="5" id="3599" /> +<TGConnectingPoint num="6" id="3600" /> +<TGConnectingPoint num="7" id="3601" /> +<TGConnectingPoint num="8" id="3602" /> +<TGConnectingPoint num="9" id="3603" /> +<TGConnectingPoint num="10" id="3604" /> +<TGConnectingPoint num="11" id="3605" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3619" > +<cdparam x="1361" y="429" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3607" /> +<TGConnectingPoint num="1" id="3608" /> +<TGConnectingPoint num="2" id="3609" /> +<TGConnectingPoint num="3" id="3610" /> +<TGConnectingPoint num="4" id="3611" /> +<TGConnectingPoint num="5" id="3612" /> +<TGConnectingPoint num="6" id="3613" /> +<TGConnectingPoint num="7" id="3614" /> +<TGConnectingPoint num="8" id="3615" /> +<TGConnectingPoint num="9" id="3616" /> +<TGConnectingPoint num="10" id="3617" /> +<TGConnectingPoint num="11" id="3618" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3632" > +<cdparam x="1336" y="185" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="85" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="PrinterIf" /> +<TGConnectingPoint num="0" id="3620" /> +<TGConnectingPoint num="1" id="3621" /> +<TGConnectingPoint num="2" id="3622" /> +<TGConnectingPoint num="3" id="3623" /> +<TGConnectingPoint num="4" id="3624" /> +<TGConnectingPoint num="5" id="3625" /> +<TGConnectingPoint num="6" id="3626" /> +<TGConnectingPoint num="7" id="3627" /> +<TGConnectingPoint num="8" id="3628" /> +<TGConnectingPoint num="9" id="3629" /> +<TGConnectingPoint num="10" id="3630" /> +<TGConnectingPoint num="11" id="3631" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3645" > +<cdparam x="1318" y="393" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3633" /> +<TGConnectingPoint num="1" id="3634" /> +<TGConnectingPoint num="2" id="3635" /> +<TGConnectingPoint num="3" id="3636" /> +<TGConnectingPoint num="4" id="3637" /> +<TGConnectingPoint num="5" id="3638" /> +<TGConnectingPoint num="6" id="3639" /> +<TGConnectingPoint num="7" id="3640" /> +<TGConnectingPoint num="8" id="3641" /> +<TGConnectingPoint num="9" id="3642" /> +<TGConnectingPoint num="10" id="3643" /> +<TGConnectingPoint num="11" id="3644" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3658" > +<cdparam x="1237" y="430" /> +<sizeparam width="120" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="ProCSDInterface" value="cashDeskGUIIf" /> +<TGConnectingPoint num="0" id="3646" /> +<TGConnectingPoint num="1" id="3647" /> +<TGConnectingPoint num="2" id="3648" /> +<TGConnectingPoint num="3" id="3649" /> +<TGConnectingPoint num="4" id="3650" /> +<TGConnectingPoint num="5" id="3651" /> +<TGConnectingPoint num="6" id="3652" /> +<TGConnectingPoint num="7" id="3653" /> +<TGConnectingPoint num="8" id="3654" /> +<TGConnectingPoint num="9" id="3655" /> +<TGConnectingPoint num="10" id="3656" /> +<TGConnectingPoint num="11" id="3657" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3671" > +<cdparam x="186" y="628" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3659" /> +<TGConnectingPoint num="1" id="3660" /> +<TGConnectingPoint num="2" id="3661" /> +<TGConnectingPoint num="3" id="3662" /> +<TGConnectingPoint num="4" id="3663" /> +<TGConnectingPoint num="5" id="3664" /> +<TGConnectingPoint num="6" id="3665" /> +<TGConnectingPoint num="7" id="3666" /> +<TGConnectingPoint num="8" id="3667" /> +<TGConnectingPoint num="9" id="3668" /> +<TGConnectingPoint num="10" id="3669" /> +<TGConnectingPoint num="11" id="3670" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3684" > +<cdparam x="691" y="634" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1900" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3672" /> +<TGConnectingPoint num="1" id="3673" /> +<TGConnectingPoint num="2" id="3674" /> +<TGConnectingPoint num="3" id="3675" /> +<TGConnectingPoint num="4" id="3676" /> +<TGConnectingPoint num="5" id="3677" /> +<TGConnectingPoint num="6" id="3678" /> +<TGConnectingPoint num="7" id="3679" /> +<TGConnectingPoint num="8" id="3680" /> +<TGConnectingPoint num="9" id="3681" /> +<TGConnectingPoint num="10" id="3682" /> +<TGConnectingPoint num="11" id="3683" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="3685" > +<cdparam x="511" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="265" y="126" id="3424" /> +<P2 x="60" y="10" id="3232" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3686" > +<cdparam x="633" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="633" y="106" id="3418" /> +<P2 x="806" y="35" id="3244" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3687" > +<cdparam x="856" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="795" y="212" id="3406" /> +<P2 x="1232" y="190" id="3268" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3688" > +<cdparam x="490" y="230" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="410" y="116" id="3430" /> +<P2 x="1225" y="35" id="3322" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3690" > +<cdparam x="553" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3689" /> +<P1 x="433" y="36" id="3453" /> +<P2 x="420" y="106" id="3428" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3692" > +<cdparam x="344" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3691" /> +<P1 x="273" y="36" id="3458" /> +<P2 x="265" y="106" id="3423" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3694" > +<cdparam x="788" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3693" /> +<P1 x="631" y="36" id="3463" /> +<P2 x="623" y="116" id="3420" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3696" > +<cdparam x="950" y="220" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3695" /> +<P1 x="832" y="36" id="3468" /> +<P2 x="785" y="106" id="3413" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3697" > +<cdparam x="972" y="266" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="146" id="3408" /> +<P2 x="1230" y="29" id="3307" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3699" > +<cdparam x="982" y="276" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3698" /> +<P1 x="795" y="156" id="3411" /> +<P2 x="1035" y="139" id="3474" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3701" > +<cdparam x="972" y="336" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3700" /> +<P1 x="785" y="222" id="3404" /> +<P2 x="1035" y="190" id="3479" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3703" > +<cdparam x="982" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3702" /> +<P1 x="795" y="247" id="3401" /> +<P2 x="1035" y="232" id="3499" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3705" > +<cdparam x="972" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3704" /> +<P1 x="795" y="287" id="3396" /> +<P2 x="1035" y="265" id="3484" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3706" > +<cdparam x="970" y="408" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="297" id="3394" /> +<P2 x="1286" y="518" id="3294" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3708" > +<cdparam x="980" y="433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3707" /> +<P1 x="795" y="322" id="3391" /> +<P2 x="1035" y="297" id="3489" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3709" > +<cdparam x="970" y="477" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="362" id="3384" /> +<P2 x="1252" y="832" id="3255" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3711" > +<cdparam x="980" y="467" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3710" /> +<P1 x="795" y="352" id="3386" /> +<P2 x="1035" y="330" id="3494" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3713" > +<cdparam x="145" y="307" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3712" /> +<P1 x="82" y="145" id="3505" /> +<P2 x="232" y="202" id="3435" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="3715" > +<cdparam x="899" y="639" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="3714" /> +<P1 x="650" y="466" id="3372" /> +<P2 x="1035" y="479" id="3361" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3716" > +<cdparam x="338" y="311" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="242" y="212" id="3434" /> +<P2 x="103" y="666" id="3568" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3717" > +<cdparam x="97" y="227" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="62" y="145" id="3504" /> +<P2 x="10" y="61" id="3555" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3718" > +<cdparam x="824" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="795" y="116" id="3416" /> +<P2 x="1253" y="52" id="3581" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3719" > +<cdparam x="867" y="98" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="832" y="16" id="3467" /> +<P2 x="1319" y="46" id="3594" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3720" > +<cdparam x="820" y="323" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="237" id="3398" /> +<P2 x="1336" y="197" id="3620" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3721" > +<cdparam x="820" y="418" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="785" y="332" id="3389" /> +<P2 x="1237" y="442" id="3646" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="3723" > +<cdparam x="82" y="418" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="3722" /> +<P1 x="82" y="418" id="3450" /> +<P2 x="246" y="444" id="3364" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="3724" > +<cdparam x="246" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to TGComponent" value="null" /> +<P1 x="246" y="464" id="3365" /> +<P2 x="186" y="640" id="3659" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="3725" > +<cdparam x="640" y="476" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="640" y="476" id="3370" /> +<P2 x="741" y="634" id="3675" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveCSDPanel name="CashDesk" minX="10" maxX="1900" minY="10" maxY="1400" > +<COMPONENT type="2104" id="3738" > +<cdparam x="515" y="46" /> +<sizeparam width="230" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="255" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="3726" /> +<TGConnectingPoint num="1" id="3727" /> +<TGConnectingPoint num="2" id="3728" /> +<TGConnectingPoint num="3" id="3729" /> +<TGConnectingPoint num="4" id="3730" /> +<TGConnectingPoint num="5" id="3731" /> +<TGConnectingPoint num="6" id="3732" /> +<TGConnectingPoint num="7" id="3733" /> +<TGConnectingPoint num="8" id="3734" /> +<TGConnectingPoint num="9" id="3735" /> +<TGConnectingPoint num="10" id="3736" /> +<TGConnectingPoint num="11" id="3737" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3751" > +<cdparam x="406" y="453" /> +<sizeparam width="230" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="255" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ApplicationEventHandlerIf" /> +<TGConnectingPoint num="0" id="3739" /> +<TGConnectingPoint num="1" id="3740" /> +<TGConnectingPoint num="2" id="3741" /> +<TGConnectingPoint num="3" id="3742" /> +<TGConnectingPoint num="4" id="3743" /> +<TGConnectingPoint num="5" id="3744" /> +<TGConnectingPoint num="6" id="3745" /> +<TGConnectingPoint num="7" id="3746" /> +<TGConnectingPoint num="8" id="3747" /> +<TGConnectingPoint num="9" id="3748" /> +<TGConnectingPoint num="10" id="3749" /> +<TGConnectingPoint num="11" id="3750" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardPaymentEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2100" id="3972" > +<cdparam x="28" y="208" /> +<sizeparam width="1331" height="272" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Component " value="CashDesk" /> +<TGConnectingPoint num="0" id="3964" /> +<TGConnectingPoint num="1" id="3965" /> +<TGConnectingPoint num="2" id="3966" /> +<TGConnectingPoint num="3" id="3967" /> +<TGConnectingPoint num="4" id="3968" /> +<TGConnectingPoint num="5" id="3969" /> +<TGConnectingPoint num="6" id="3970" /> +<TGConnectingPoint num="7" id="3971" /> +<extraparam> +<ShowAttributes visible="0" /> +<DesignPanel name="CashDesk"/><LastPortCode code="299" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="2106" id="3756" > +<father id="3972" num="0" /> +<cdparam x="1259" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="printer" /> +<TGConnectingPoint num="0" id="3752" /> +<TGConnectingPoint num="1" id="3753" /> +<TGConnectingPoint num="2" id="3754" /> +<TGConnectingPoint num="3" id="3755" /> +<extraparam> +<PortCode code="CashDeskDesign13" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3761" > +<father id="3972" num="1" /> +<cdparam x="1106" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="scanner" /> +<TGConnectingPoint num="0" id="3757" /> +<TGConnectingPoint num="1" id="3758" /> +<TGConnectingPoint num="2" id="3759" /> +<TGConnectingPoint num="3" id="3760" /> +<extraparam> +<PortCode code="CashDeskDesign12" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3766" > +<father id="3972" num="2" /> +<cdparam x="428" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="lightDisplayControl" /> +<TGConnectingPoint num="0" id="3762" /> +<TGConnectingPoint num="1" id="3763" /> +<TGConnectingPoint num="2" id="3764" /> +<TGConnectingPoint num="3" id="3765" /> +<extraparam> +<PortCode code="CashDeskDesign11" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3771" > +<father id="3972" num="3" /> +<cdparam x="938" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="cashBoxEvent" /> +<TGConnectingPoint num="0" id="3767" /> +<TGConnectingPoint num="1" id="3768" /> +<TGConnectingPoint num="2" id="3769" /> +<TGConnectingPoint num="3" id="3770" /> +<extraparam> +<PortCode code="CashDeskDesign10" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3776" > +<father id="3972" num="4" /> +<cdparam x="992" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="cashBoxControl" /> +<TGConnectingPoint num="0" id="3772" /> +<TGConnectingPoint num="1" id="3773" /> +<TGConnectingPoint num="2" id="3774" /> +<TGConnectingPoint num="3" id="3775" /> +<extraparam> +<PortCode code="CashDeskDesign9" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3781" > +<father id="3972" num="5" /> +<cdparam x="581" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="cardReaderEvent" /> +<TGConnectingPoint num="0" id="3777" /> +<TGConnectingPoint num="1" id="3778" /> +<TGConnectingPoint num="2" id="3779" /> +<TGConnectingPoint num="3" id="3780" /> +<extraparam> +<PortCode code="CashDeskDesign8" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3786" > +<father id="3972" num="6" /> +<cdparam x="798" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="cashDeskGUIControl" /> +<TGConnectingPoint num="0" id="3782" /> +<TGConnectingPoint num="1" id="3783" /> +<TGConnectingPoint num="2" id="3784" /> +<TGConnectingPoint num="3" id="3785" /> +<extraparam> +<PortCode code="CashDeskDesign7" /> +<Show value="0" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3791" > +<father id="3972" num="7" /> +<cdparam x="604" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="cardReaderControl" /> +<TGConnectingPoint num="0" id="3787" /> +<TGConnectingPoint num="1" id="3788" /> +<TGConnectingPoint num="2" id="3789" /> +<TGConnectingPoint num="3" id="3790" /> +<extraparam> +<PortCode code="CashDeskDesign6" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3796" > +<father id="3972" num="8" /> +<cdparam x="199" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="3792" /> +<TGConnectingPoint num="1" id="3793" /> +<TGConnectingPoint num="2" id="3794" /> +<TGConnectingPoint num="3" id="3795" /> +<extraparam> +<PortCode code="CashDeskDesign5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3801" > +<father id="3972" num="9" /> +<cdparam x="92" y="470" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3797" /> +<TGConnectingPoint num="1" id="3798" /> +<TGConnectingPoint num="2" id="3799" /> +<TGConnectingPoint num="3" id="3800" /> +<extraparam> +<PortCode code="CashDeskDesign4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3806" > +<father id="3972" num="10" /> +<cdparam x="18" y="343" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3802" /> +<TGConnectingPoint num="1" id="3803" /> +<TGConnectingPoint num="2" id="3804" /> +<TGConnectingPoint num="3" id="3805" /> +<extraparam> +<PortCode code="CashDeskDesign3" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3811" > +<father id="3972" num="11" /> +<cdparam x="48" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="3807" /> +<TGConnectingPoint num="1" id="3808" /> +<TGConnectingPoint num="2" id="3809" /> +<TGConnectingPoint num="3" id="3810" /> +<extraparam> +<PortCode code="CashDeskDesign2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3816" > +<father id="3972" num="12" /> +<cdparam x="333" y="198" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1311" minY="0" maxY="252" /> +<infoparam name="In Port" value="AppEventHandler" /> +<TGConnectingPoint num="0" id="3812" /> +<TGConnectingPoint num="1" id="3813" /> +<TGConnectingPoint num="2" id="3814" /> +<TGConnectingPoint num="3" id="3815" /> +<extraparam> +<PortCode code="CashDeskDesign1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3830" > +<father id="3972" num="13" /> +<cdparam x="328" y="264" /> +<sizeparam width="212" height="60" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1119" minY="0" maxY="212" /> +<infoparam name="Component " value="LightDisplayController" /> +<TGConnectingPoint num="0" id="3822" /> +<TGConnectingPoint num="1" id="3823" /> +<TGConnectingPoint num="2" id="3824" /> +<TGConnectingPoint num="3" id="3825" /> +<TGConnectingPoint num="4" id="3826" /> +<TGConnectingPoint num="5" id="3827" /> +<TGConnectingPoint num="6" id="3828" /> +<TGConnectingPoint num="7" id="3829" /> +<extraparam> +<ShowAttributes visible="0" /> +<LastPortCode code="37" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3821" > +<father id="3830" num="0" /> +<cdparam x="445" y="314" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="192" minY="0" maxY="40" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3817" /> +<TGConnectingPoint num="1" id="3818" /> +<TGConnectingPoint num="2" id="3819" /> +<TGConnectingPoint num="3" id="3820" /> +<extraparam> +<PortCode code="LightDisplayController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3849" > +<father id="3972" num="14" /> +<cdparam x="556" y="265" /> +<sizeparam width="148" height="62" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1183" minY="0" maxY="210" /> +<infoparam name="Component " value="CardReaderController" /> +<TGConnectingPoint num="0" id="3841" /> +<TGConnectingPoint num="1" id="3842" /> +<TGConnectingPoint num="2" id="3843" /> +<TGConnectingPoint num="3" id="3844" /> +<TGConnectingPoint num="4" id="3845" /> +<TGConnectingPoint num="5" id="3846" /> +<TGConnectingPoint num="6" id="3847" /> +<TGConnectingPoint num="7" id="3848" /> +<extraparam> +<Attribute access="0" id="cardNb" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="74" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3835" > +<father id="3849" num="0" /> +<cdparam x="613" y="255" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="128" minY="0" maxY="42" /> +<infoparam name="Out Port" value="event" /> +<TGConnectingPoint num="0" id="3831" /> +<TGConnectingPoint num="1" id="3832" /> +<TGConnectingPoint num="2" id="3833" /> +<TGConnectingPoint num="3" id="3834" /> +<extraparam> +<PortCode code="CardReaderController2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3840" > +<father id="3849" num="1" /> +<cdparam x="619" y="317" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="128" minY="0" maxY="42" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3836" /> +<TGConnectingPoint num="1" id="3837" /> +<TGConnectingPoint num="2" id="3838" /> +<TGConnectingPoint num="3" id="3839" /> +<extraparam> +<PortCode code="CardReaderController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3863" > +<father id="3972" num="15" /> +<cdparam x="722" y="263" /> +<sizeparam width="141" height="71" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1190" minY="0" maxY="201" /> +<infoparam name="Component " value="CashDeskGUI" /> +<TGConnectingPoint num="0" id="3855" /> +<TGConnectingPoint num="1" id="3856" /> +<TGConnectingPoint num="2" id="3857" /> +<TGConnectingPoint num="3" id="3858" /> +<TGConnectingPoint num="4" id="3859" /> +<TGConnectingPoint num="5" id="3860" /> +<TGConnectingPoint num="6" id="3861" /> +<TGConnectingPoint num="7" id="3862" /> +<extraparam> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="26" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3854" > +<father id="3863" num="0" /> +<cdparam x="794" y="324" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="121" minY="0" maxY="51" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3850" /> +<TGConnectingPoint num="1" id="3851" /> +<TGConnectingPoint num="2" id="3852" /> +<TGConnectingPoint num="3" id="3853" /> +<extraparam> +<PortCode code="CashDeskGUI1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3882" > +<father id="3972" num="16" /> +<cdparam x="889" y="275" /> +<sizeparam width="136" height="66" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1195" minY="0" maxY="206" /> +<infoparam name="Component " value="CashBoxController" /> +<TGConnectingPoint num="0" id="3874" /> +<TGConnectingPoint num="1" id="3875" /> +<TGConnectingPoint num="2" id="3876" /> +<TGConnectingPoint num="3" id="3877" /> +<TGConnectingPoint num="4" id="3878" /> +<TGConnectingPoint num="5" id="3879" /> +<TGConnectingPoint num="6" id="3880" /> +<TGConnectingPoint num="7" id="3881" /> +<extraparam> +<Attribute access="0" id="paymentMode_CARD" type="0" initialValue="2" typeOther="" /> +<Attribute access="0" id="paymentMode_CASH" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="50" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3868" > +<father id="3882" num="0" /> +<cdparam x="926" y="265" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="116" minY="0" maxY="46" /> +<infoparam name="Out Port" value="event" /> +<TGConnectingPoint num="0" id="3864" /> +<TGConnectingPoint num="1" id="3865" /> +<TGConnectingPoint num="2" id="3866" /> +<TGConnectingPoint num="3" id="3867" /> +<extraparam> +<PortCode code="CashBoxController2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3873" > +<father id="3882" num="1" /> +<cdparam x="984" y="331" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="116" minY="0" maxY="46" /> +<infoparam name="In Port" value="control" /> +<TGConnectingPoint num="0" id="3869" /> +<TGConnectingPoint num="1" id="3870" /> +<TGConnectingPoint num="2" id="3871" /> +<TGConnectingPoint num="3" id="3872" /> +<extraparam> +<PortCode code="CashBoxController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3896" > +<father id="3972" num="17" /> +<cdparam x="1228" y="273" /> +<sizeparam width="128" height="64" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1203" minY="0" maxY="208" /> +<infoparam name="Component " value="PrinterController" /> +<TGConnectingPoint num="0" id="3888" /> +<TGConnectingPoint num="1" id="3889" /> +<TGConnectingPoint num="2" id="3890" /> +<TGConnectingPoint num="3" id="3891" /> +<TGConnectingPoint num="4" id="3892" /> +<TGConnectingPoint num="5" id="3893" /> +<TGConnectingPoint num="6" id="3894" /> +<TGConnectingPoint num="7" id="3895" /> +<extraparam> +<Attribute access="0" id="cashAmount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="50" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3887" > +<father id="3896" num="0" /> +<cdparam x="1270" y="327" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="In Port" value="printer" /> +<TGConnectingPoint num="0" id="3883" /> +<TGConnectingPoint num="1" id="3884" /> +<TGConnectingPoint num="2" id="3885" /> +<TGConnectingPoint num="3" id="3886" /> +<extraparam> +<PortCode code="PrinterController1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3910" > +<father id="3972" num="18" /> +<cdparam x="1064" y="280" /> +<sizeparam width="134" height="64" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1197" minY="0" maxY="208" /> +<infoparam name="Component " value="ScannerController" /> +<TGConnectingPoint num="0" id="3902" /> +<TGConnectingPoint num="1" id="3903" /> +<TGConnectingPoint num="2" id="3904" /> +<TGConnectingPoint num="3" id="3905" /> +<TGConnectingPoint num="4" id="3906" /> +<TGConnectingPoint num="5" id="3907" /> +<TGConnectingPoint num="6" id="3908" /> +<TGConnectingPoint num="7" id="3909" /> +<extraparam> +<Attribute access="0" id="barCode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="52" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3901" > +<father id="3910" num="0" /> +<cdparam x="1111" y="270" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Out Port" value="eventHandler" /> +<TGConnectingPoint num="0" id="3897" /> +<TGConnectingPoint num="1" id="3898" /> +<TGConnectingPoint num="2" id="3899" /> +<TGConnectingPoint num="3" id="3900" /> +<extraparam> +<PortCode code="ScannerController2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3949" > +<father id="3972" num="19" /> +<cdparam x="111" y="281" /> +<sizeparam width="163" height="158" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1168" minY="0" maxY="114" /> +<infoparam name="Component " value="CachDeskApp" /> +<TGConnectingPoint num="0" id="3941" /> +<TGConnectingPoint num="1" id="3942" /> +<TGConnectingPoint num="2" id="3943" /> +<TGConnectingPoint num="3" id="3944" /> +<TGConnectingPoint num="4" id="3945" /> +<TGConnectingPoint num="5" id="3946" /> +<TGConnectingPoint num="6" id="3947" /> +<TGConnectingPoint num="7" id="3948" /> +<extraparam> +<Attribute access="0" id="products" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="cashState" type="0" initialValue="0" typeOther="" /> +<Attribute access="0" id="paymentMode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="creditInfo" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="product" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="amount" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="expressMode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="ExceedNumberOfProductsException" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="SaleNotFinishedException" type="0" initialValue="2" typeOther="" /> +<Attribute access="0" id="WrongPaymentModeException" type="0" initialValue="3" typeOther="" /> +<Attribute access="0" id="NotPayingException" type="0" initialValue="4" typeOther="" /> +<Attribute access="0" id="NotAcceptingCreditCardException" type="0" initialValue="5" typeOther="" /> +<Attribute access="0" id="InvalidCreditCardException" type="0" initialValue="5" typeOther="" /> +<Attribute access="0" id="NotIdleException" type="0" initialValue="6" typeOther="" /> +<Attribute access="0" id="errorCode" type="0" initialValue="0" typeOther="" /> +<Attribute access="0" id="paymentMode_INVALID" type="0" initialValue="0" typeOther="" /> +<Attribute access="0" id="paymentMode_CARD" type="0" initialValue="2" typeOther="" /> +<Attribute access="0" id="paymentMode_CASH" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="transactionId" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="info" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="barCode" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="maxNbProd" type="0" initialValue="1" typeOther="" /> +<Attribute access="0" id="pin" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="productOk" type="0" initialValue="" typeOther="" /> +<Attribute access="0" id="ProductNotFoundException" type="0" initialValue="7" typeOther="" /> +<Attribute access="0" id="changeAmount" type="0" initialValue="1" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="327" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3915" > +<father id="3949" num="0" /> +<cdparam x="101" y="403" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="Out Port" value="saleRegistered" /> +<TGConnectingPoint num="0" id="3911" /> +<TGConnectingPoint num="1" id="3912" /> +<TGConnectingPoint num="2" id="3913" /> +<TGConnectingPoint num="3" id="3914" /> +<extraparam> +<PortCode code="CachDeskApp5" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3920" > +<father id="3949" num="1" /> +<cdparam x="101" y="370" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="Out Port" value="eventBus" /> +<TGConnectingPoint num="0" id="3916" /> +<TGConnectingPoint num="1" id="3917" /> +<TGConnectingPoint num="2" id="3918" /> +<TGConnectingPoint num="3" id="3919" /> +<extraparam> +<PortCode code="CachDeskApp4" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3925" > +<father id="3949" num="2" /> +<cdparam x="101" y="315" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="Out Port" value="cashDeskConnector" /> +<TGConnectingPoint num="0" id="3921" /> +<TGConnectingPoint num="1" id="3922" /> +<TGConnectingPoint num="2" id="3923" /> +<TGConnectingPoint num="3" id="3924" /> +<extraparam> +<PortCode code="CachDeskApp2" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3930" > +<father id="3949" num="3" /> +<cdparam x="264" y="341" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="143" minY="0" maxY="138" /> +<infoparam name="In Port" value="AEH" /> +<TGConnectingPoint num="0" id="3926" /> +<TGConnectingPoint num="1" id="3927" /> +<TGConnectingPoint num="2" id="3928" /> +<TGConnectingPoint num="3" id="3929" /> +<extraparam> +<PortCode code="CachDeskApp1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3935" > +<father id="3949" num="4" /> +<cdparam x="264" y="386" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Out Port" value="log" /> +<TGConnectingPoint num="0" id="3931" /> +<TGConnectingPoint num="1" id="3932" /> +<TGConnectingPoint num="2" id="3933" /> +<TGConnectingPoint num="3" id="3934" /> +<extraparam> +<PortCode code="CachDeskApp272" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2108" id="3940" > +<father id="3949" num="5" /> +<cdparam x="173" y="271" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="Out Port" value="bank" /> +<TGConnectingPoint num="0" id="3936" /> +<TGConnectingPoint num="1" id="3937" /> +<TGConnectingPoint num="2" id="3938" /> +<TGConnectingPoint num="3" id="3939" /> +<extraparam> +<PortCode code="CachDeskApp285" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2100" id="3963" > +<father id="3972" num="20" /> +<cdparam x="333" y="378" /> +<sizeparam width="68" height="51" minWidth="30" minHeight="30" maxWidth="10000" maxHeight="20000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="1263" minY="0" maxY="221" /> +<infoparam name="Component " value="logger" /> +<TGConnectingPoint num="0" id="3955" /> +<TGConnectingPoint num="1" id="3956" /> +<TGConnectingPoint num="2" id="3957" /> +<TGConnectingPoint num="3" id="3958" /> +<TGConnectingPoint num="4" id="3959" /> +<TGConnectingPoint num="5" id="3960" /> +<TGConnectingPoint num="6" id="3961" /> +<TGConnectingPoint num="7" id="3962" /> +<extraparam> +<Attribute access="0" id="errorCode" type="0" initialValue="" typeOther="" /> +<ShowAttributes visible="0" /> +<LastPortCode code="10" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="2106" id="3954" > +<father id="3963" num="0" /> +<cdparam x="323" y="394" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="5" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="In Port" value="l" /> +<TGConnectingPoint num="0" id="3950" /> +<TGConnectingPoint num="1" id="3951" /> +<TGConnectingPoint num="2" id="3952" /> +<TGConnectingPoint num="3" id="3953" /> +<extraparam> +<PortCode code="logger1" /> +<Show value="1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="2104" id="3985" > +<cdparam x="369" y="795" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="34" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="3973" /> +<TGConnectingPoint num="1" id="3974" /> +<TGConnectingPoint num="2" id="3975" /> +<TGConnectingPoint num="3" id="3976" /> +<TGConnectingPoint num="4" id="3977" /> +<TGConnectingPoint num="5" id="3978" /> +<TGConnectingPoint num="6" id="3979" /> +<TGConnectingPoint num="7" id="3980" /> +<TGConnectingPoint num="8" id="3981" /> +<TGConnectingPoint num="9" id="3982" /> +<TGConnectingPoint num="10" id="3983" /> +<TGConnectingPoint num="11" id="3984" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="3998" > +<cdparam x="578" y="15" /> +<sizeparam width="143" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3986" /> +<TGConnectingPoint num="1" id="3987" /> +<TGConnectingPoint num="2" id="3988" /> +<TGConnectingPoint num="3" id="3989" /> +<TGConnectingPoint num="4" id="3990" /> +<TGConnectingPoint num="5" id="3991" /> +<TGConnectingPoint num="6" id="3992" /> +<TGConnectingPoint num="7" id="3993" /> +<TGConnectingPoint num="8" id="3994" /> +<TGConnectingPoint num="9" id="3995" /> +<TGConnectingPoint num="10" id="3996" /> +<TGConnectingPoint num="11" id="3997" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4011" > +<cdparam x="718" y="497" /> +<sizeparam width="143" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="200" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CardReaderEvent" /> +<TGConnectingPoint num="0" id="3999" /> +<TGConnectingPoint num="1" id="4000" /> +<TGConnectingPoint num="2" id="4001" /> +<TGConnectingPoint num="3" id="4002" /> +<TGConnectingPoint num="4" id="4003" /> +<TGConnectingPoint num="5" id="4004" /> +<TGConnectingPoint num="6" id="4005" /> +<TGConnectingPoint num="7" id="4006" /> +<TGConnectingPoint num="8" id="4007" /> +<TGConnectingPoint num="9" id="4008" /> +<TGConnectingPoint num="10" id="4009" /> +<TGConnectingPoint num="11" id="4010" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="creditCardScanned" type="5" typeOther="void" /> +<Attribute access="2" id="pinEntered" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4024" > +<cdparam x="746" y="47" /> +<sizeparam width="129" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="209" minDesiredHeight="68" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="4012" /> +<TGConnectingPoint num="1" id="4013" /> +<TGConnectingPoint num="2" id="4014" /> +<TGConnectingPoint num="3" id="4015" /> +<TGConnectingPoint num="4" id="4016" /> +<TGConnectingPoint num="5" id="4017" /> +<TGConnectingPoint num="6" id="4018" /> +<TGConnectingPoint num="7" id="4019" /> +<TGConnectingPoint num="8" id="4020" /> +<TGConnectingPoint num="9" id="4021" /> +<TGConnectingPoint num="10" id="4022" /> +<TGConnectingPoint num="11" id="4023" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4037" > +<cdparam x="980" y="106" /> +<sizeparam width="129" height="23" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="209" minDesiredHeight="68" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxEventIf" /> +<TGConnectingPoint num="0" id="4025" /> +<TGConnectingPoint num="1" id="4026" /> +<TGConnectingPoint num="2" id="4027" /> +<TGConnectingPoint num="3" id="4028" /> +<TGConnectingPoint num="4" id="4029" /> +<TGConnectingPoint num="5" id="4030" /> +<TGConnectingPoint num="6" id="4031" /> +<TGConnectingPoint num="7" id="4032" /> +<TGConnectingPoint num="8" id="4033" /> +<TGConnectingPoint num="9" id="4034" /> +<TGConnectingPoint num="10" id="4035" /> +<TGConnectingPoint num="11" id="4036" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="paymentMode" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4050" > +<cdparam x="1053" y="611" /> +<sizeparam width="149" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="4038" /> +<TGConnectingPoint num="1" id="4039" /> +<TGConnectingPoint num="2" id="4040" /> +<TGConnectingPoint num="3" id="4041" /> +<TGConnectingPoint num="4" id="4042" /> +<TGConnectingPoint num="5" id="4043" /> +<TGConnectingPoint num="6" id="4044" /> +<TGConnectingPoint num="7" id="4045" /> +<TGConnectingPoint num="8" id="4046" /> +<TGConnectingPoint num="9" id="4047" /> +<TGConnectingPoint num="10" id="4048" /> +<TGConnectingPoint num="11" id="4049" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4063" > +<cdparam x="1069" y="588" /> +<sizeparam width="149" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="CashBoxControlIf" /> +<TGConnectingPoint num="0" id="4051" /> +<TGConnectingPoint num="1" id="4052" /> +<TGConnectingPoint num="2" id="4053" /> +<TGConnectingPoint num="3" id="4054" /> +<TGConnectingPoint num="4" id="4055" /> +<TGConnectingPoint num="5" id="4056" /> +<TGConnectingPoint num="6" id="4057" /> +<TGConnectingPoint num="7" id="4058" /> +<TGConnectingPoint num="8" id="4059" /> +<TGConnectingPoint num="9" id="4060" /> +<TGConnectingPoint num="10" id="4061" /> +<TGConnectingPoint num="11" id="4062" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4076" > +<cdparam x="328" y="603" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="4064" /> +<TGConnectingPoint num="1" id="4065" /> +<TGConnectingPoint num="2" id="4066" /> +<TGConnectingPoint num="3" id="4067" /> +<TGConnectingPoint num="4" id="4068" /> +<TGConnectingPoint num="5" id="4069" /> +<TGConnectingPoint num="6" id="4070" /> +<TGConnectingPoint num="7" id="4071" /> +<TGConnectingPoint num="8" id="4072" /> +<TGConnectingPoint num="9" id="4073" /> +<TGConnectingPoint num="10" id="4074" /> +<TGConnectingPoint num="11" id="4075" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4089" > +<cdparam x="403" y="609" /> +<sizeparam width="162" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LightDisplayControlIf" /> +<TGConnectingPoint num="0" id="4077" /> +<TGConnectingPoint num="1" id="4078" /> +<TGConnectingPoint num="2" id="4079" /> +<TGConnectingPoint num="3" id="4080" /> +<TGConnectingPoint num="4" id="4081" /> +<TGConnectingPoint num="5" id="4082" /> +<TGConnectingPoint num="6" id="4083" /> +<TGConnectingPoint num="7" id="4084" /> +<TGConnectingPoint num="8" id="4085" /> +<TGConnectingPoint num="9" id="4086" /> +<TGConnectingPoint num="10" id="4087" /> +<TGConnectingPoint num="11" id="4088" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4102" > +<cdparam x="1096" y="25" /> +<sizeparam width="231" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="4090" /> +<TGConnectingPoint num="1" id="4091" /> +<TGConnectingPoint num="2" id="4092" /> +<TGConnectingPoint num="3" id="4093" /> +<TGConnectingPoint num="4" id="4094" /> +<TGConnectingPoint num="5" id="4095" /> +<TGConnectingPoint num="6" id="4096" /> +<TGConnectingPoint num="7" id="4097" /> +<TGConnectingPoint num="8" id="4098" /> +<TGConnectingPoint num="9" id="4099" /> +<TGConnectingPoint num="10" id="4100" /> +<TGConnectingPoint num="11" id="4101" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4115" > +<cdparam x="993" y="12" /> +<sizeparam width="231" height="26" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="237" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="ScannerEventIf" /> +<TGConnectingPoint num="0" id="4103" /> +<TGConnectingPoint num="1" id="4104" /> +<TGConnectingPoint num="2" id="4105" /> +<TGConnectingPoint num="3" id="4106" /> +<TGConnectingPoint num="4" id="4107" /> +<TGConnectingPoint num="5" id="4108" /> +<TGConnectingPoint num="6" id="4109" /> +<TGConnectingPoint num="7" id="4110" /> +<TGConnectingPoint num="8" id="4111" /> +<TGConnectingPoint num="9" id="4112" /> +<TGConnectingPoint num="10" id="4113" /> +<TGConnectingPoint num="11" id="4114" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="productBarcodeScanned" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4128" > +<cdparam x="620" y="606" /> +<sizeparam width="162" height="24" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="4116" /> +<TGConnectingPoint num="1" id="4117" /> +<TGConnectingPoint num="2" id="4118" /> +<TGConnectingPoint num="3" id="4119" /> +<TGConnectingPoint num="4" id="4120" /> +<TGConnectingPoint num="5" id="4121" /> +<TGConnectingPoint num="6" id="4122" /> +<TGConnectingPoint num="7" id="4123" /> +<TGConnectingPoint num="8" id="4124" /> +<TGConnectingPoint num="9" id="4125" /> +<TGConnectingPoint num="10" id="4126" /> +<TGConnectingPoint num="11" id="4127" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4141" > +<cdparam x="579" y="594" /> +<sizeparam width="162" height="24" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="221" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="cardReaderControlIf" /> +<TGConnectingPoint num="0" id="4129" /> +<TGConnectingPoint num="1" id="4130" /> +<TGConnectingPoint num="2" id="4131" /> +<TGConnectingPoint num="3" id="4132" /> +<TGConnectingPoint num="4" id="4133" /> +<TGConnectingPoint num="5" id="4134" /> +<TGConnectingPoint num="6" id="4135" /> +<TGConnectingPoint num="7" id="4136" /> +<TGConnectingPoint num="8" id="4137" /> +<TGConnectingPoint num="9" id="4138" /> +<TGConnectingPoint num="10" id="4139" /> +<TGConnectingPoint num="11" id="4140" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4154" > +<cdparam x="10" y="388" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="4142" /> +<TGConnectingPoint num="1" id="4143" /> +<TGConnectingPoint num="2" id="4144" /> +<TGConnectingPoint num="3" id="4145" /> +<TGConnectingPoint num="4" id="4146" /> +<TGConnectingPoint num="5" id="4147" /> +<TGConnectingPoint num="6" id="4148" /> +<TGConnectingPoint num="7" id="4149" /> +<TGConnectingPoint num="8" id="4150" /> +<TGConnectingPoint num="9" id="4151" /> +<TGConnectingPoint num="10" id="4152" /> +<TGConnectingPoint num="11" id="4153" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4167" > +<cdparam x="10" y="464" /> +<sizeparam width="100" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="153" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="EventBusIf" /> +<TGConnectingPoint num="0" id="4155" /> +<TGConnectingPoint num="1" id="4156" /> +<TGConnectingPoint num="2" id="4157" /> +<TGConnectingPoint num="3" id="4158" /> +<TGConnectingPoint num="4" id="4159" /> +<TGConnectingPoint num="5" id="4160" /> +<TGConnectingPoint num="6" id="4161" /> +<TGConnectingPoint num="7" id="4162" /> +<TGConnectingPoint num="8" id="4163" /> +<TGConnectingPoint num="9" id="4164" /> +<TGConnectingPoint num="10" id="4165" /> +<TGConnectingPoint num="11" id="4166" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4180" > +<cdparam x="1332" y="584" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="85" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="PrinterIf" /> +<TGConnectingPoint num="0" id="4168" /> +<TGConnectingPoint num="1" id="4169" /> +<TGConnectingPoint num="2" id="4170" /> +<TGConnectingPoint num="3" id="4171" /> +<TGConnectingPoint num="4" id="4172" /> +<TGConnectingPoint num="5" id="4173" /> +<TGConnectingPoint num="6" id="4174" /> +<TGConnectingPoint num="7" id="4175" /> +<TGConnectingPoint num="8" id="4176" /> +<TGConnectingPoint num="9" id="4177" /> +<TGConnectingPoint num="10" id="4178" /> +<TGConnectingPoint num="11" id="4179" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4193" > +<cdparam x="1331" y="732" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="4181" /> +<TGConnectingPoint num="1" id="4182" /> +<TGConnectingPoint num="2" id="4183" /> +<TGConnectingPoint num="3" id="4184" /> +<TGConnectingPoint num="4" id="4185" /> +<TGConnectingPoint num="5" id="4186" /> +<TGConnectingPoint num="6" id="4187" /> +<TGConnectingPoint num="7" id="4188" /> +<TGConnectingPoint num="8" id="4189" /> +<TGConnectingPoint num="9" id="4190" /> +<TGConnectingPoint num="10" id="4191" /> +<TGConnectingPoint num="11" id="4192" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4206" > +<cdparam x="1566" y="552" /> +<sizeparam width="96" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="85" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="PrinterIf" /> +<TGConnectingPoint num="0" id="4194" /> +<TGConnectingPoint num="1" id="4195" /> +<TGConnectingPoint num="2" id="4196" /> +<TGConnectingPoint num="3" id="4197" /> +<TGConnectingPoint num="4" id="4198" /> +<TGConnectingPoint num="5" id="4199" /> +<TGConnectingPoint num="6" id="4200" /> +<TGConnectingPoint num="7" id="4201" /> +<TGConnectingPoint num="8" id="4202" /> +<TGConnectingPoint num="9" id="4203" /> +<TGConnectingPoint num="10" id="4204" /> +<TGConnectingPoint num="11" id="4205" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4219" > +<cdparam x="1653" y="722" /> +<sizeparam width="138" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="4207" /> +<TGConnectingPoint num="1" id="4208" /> +<TGConnectingPoint num="2" id="4209" /> +<TGConnectingPoint num="3" id="4210" /> +<TGConnectingPoint num="4" id="4211" /> +<TGConnectingPoint num="5" id="4212" /> +<TGConnectingPoint num="6" id="4213" /> +<TGConnectingPoint num="7" id="4214" /> +<TGConnectingPoint num="8" id="4215" /> +<TGConnectingPoint num="9" id="4216" /> +<TGConnectingPoint num="10" id="4217" /> +<TGConnectingPoint num="11" id="4218" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getNumberOfItems" type="5" typeOther="void" /> +<Attribute access="2" id="getPaymentMode" type="5" typeOther="void" /> +<Attribute access="2" id="registerSale" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4232" > +<cdparam x="943" y="526" /> +<sizeparam width="120" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="247" minDesiredHeight="170" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="cashDeskGUIIf" /> +<TGConnectingPoint num="0" id="4220" /> +<TGConnectingPoint num="1" id="4221" /> +<TGConnectingPoint num="2" id="4222" /> +<TGConnectingPoint num="3" id="4223" /> +<TGConnectingPoint num="4" id="4224" /> +<TGConnectingPoint num="5" id="4225" /> +<TGConnectingPoint num="6" id="4226" /> +<TGConnectingPoint num="7" id="4227" /> +<TGConnectingPoint num="8" id="4228" /> +<TGConnectingPoint num="9" id="4229" /> +<TGConnectingPoint num="10" id="4230" /> +<TGConnectingPoint num="11" id="4231" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="runningTotalChanged" type="5" typeOther="void" /> +<Attribute access="2" id="cashAmountEntered" type="5" typeOther="void" /> +<Attribute access="2" id="changeAmountCalculated" type="5" typeOther="void" /> +<Attribute access="2" id="saleStarted" type="5" typeOther="void" /> +<Attribute access="2" id="saleFinished" type="5" typeOther="void" /> +<Attribute access="2" id="invalidCreditCard" type="5" typeOther="void" /> +<Attribute access="2" id="creditCardScanFailed" type="5" typeOther="void" /> +<Attribute access="2" id="productBarcodeNotValid" type="5" typeOther="void" /> +<Attribute access="2" id="cashBoxClosed" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeEnabled" type="5" typeOther="void" /> +<Attribute access="2" id="expressModeDisabled" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4245" > +<cdparam x="202" y="412" /> +<sizeparam width="85" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LogIf" /> +<TGConnectingPoint num="0" id="4233" /> +<TGConnectingPoint num="1" id="4234" /> +<TGConnectingPoint num="2" id="4235" /> +<TGConnectingPoint num="3" id="4236" /> +<TGConnectingPoint num="4" id="4237" /> +<TGConnectingPoint num="5" id="4238" /> +<TGConnectingPoint num="6" id="4239" /> +<TGConnectingPoint num="7" id="4240" /> +<TGConnectingPoint num="8" id="4241" /> +<TGConnectingPoint num="9" id="4242" /> +<TGConnectingPoint num="10" id="4243" /> +<TGConnectingPoint num="11" id="4244" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="log" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4258" > +<cdparam x="340" y="412" /> +<sizeparam width="85" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="ProCSDInterface" value="LogIf" /> +<TGConnectingPoint num="0" id="4246" /> +<TGConnectingPoint num="1" id="4247" /> +<TGConnectingPoint num="2" id="4248" /> +<TGConnectingPoint num="3" id="4249" /> +<TGConnectingPoint num="4" id="4250" /> +<TGConnectingPoint num="5" id="4251" /> +<TGConnectingPoint num="6" id="4252" /> +<TGConnectingPoint num="7" id="4253" /> +<TGConnectingPoint num="8" id="4254" /> +<TGConnectingPoint num="9" id="4255" /> +<TGConnectingPoint num="10" id="4256" /> +<TGConnectingPoint num="11" id="4257" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="log" type="5" typeOther="void" /> +<ShowMessages visible="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4271" > +<cdparam x="430" y="10" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="4259" /> +<TGConnectingPoint num="1" id="4260" /> +<TGConnectingPoint num="2" id="4261" /> +<TGConnectingPoint num="3" id="4262" /> +<TGConnectingPoint num="4" id="4263" /> +<TGConnectingPoint num="5" id="4264" /> +<TGConnectingPoint num="6" id="4265" /> +<TGConnectingPoint num="7" id="4266" /> +<TGConnectingPoint num="8" id="4267" /> +<TGConnectingPoint num="9" id="4268" /> +<TGConnectingPoint num="10" id="4269" /> +<TGConnectingPoint num="11" id="4270" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4284" > +<cdparam x="274" y="12" /> +<sizeparam width="117" height="27" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="189" minDesiredHeight="51" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BankIf" /> +<TGConnectingPoint num="0" id="4272" /> +<TGConnectingPoint num="1" id="4273" /> +<TGConnectingPoint num="2" id="4274" /> +<TGConnectingPoint num="3" id="4275" /> +<TGConnectingPoint num="4" id="4276" /> +<TGConnectingPoint num="5" id="4277" /> +<TGConnectingPoint num="6" id="4278" /> +<TGConnectingPoint num="7" id="4279" /> +<TGConnectingPoint num="8" id="4280" /> +<TGConnectingPoint num="9" id="4281" /> +<TGConnectingPoint num="10" id="4282" /> +<TGConnectingPoint num="11" id="4283" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="validateCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="validateCardResp" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardReq" type="5" typeOther="void" /> +<Attribute access="2" id="debitCardResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4297" > +<cdparam x="151" y="10" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="4285" /> +<TGConnectingPoint num="1" id="4286" /> +<TGConnectingPoint num="2" id="4287" /> +<TGConnectingPoint num="3" id="4288" /> +<TGConnectingPoint num="4" id="4289" /> +<TGConnectingPoint num="5" id="4290" /> +<TGConnectingPoint num="6" id="4291" /> +<TGConnectingPoint num="7" id="4292" /> +<TGConnectingPoint num="8" id="4293" /> +<TGConnectingPoint num="9" id="4294" /> +<TGConnectingPoint num="10" id="4295" /> +<TGConnectingPoint num="11" id="4296" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4310" > +<cdparam x="81" y="10" /> +<sizeparam width="186" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="178" minDesiredHeight="17" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="CachDeskConnectorIf" /> +<TGConnectingPoint num="0" id="4298" /> +<TGConnectingPoint num="1" id="4299" /> +<TGConnectingPoint num="2" id="4300" /> +<TGConnectingPoint num="3" id="4301" /> +<TGConnectingPoint num="4" id="4302" /> +<TGConnectingPoint num="5" id="4303" /> +<TGConnectingPoint num="6" id="4304" /> +<TGConnectingPoint num="7" id="4305" /> +<TGConnectingPoint num="8" id="4306" /> +<TGConnectingPoint num="9" id="4307" /> +<TGConnectingPoint num="10" id="4308" /> +<TGConnectingPoint num="11" id="4309" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="getProductReq" type="5" typeOther="void" /> +<Attribute access="2" id="getProductResp" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2104" id="4323" > +<cdparam x="209" y="447" /> +<sizeparam width="156" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="SaleRegisteredIf" /> +<TGConnectingPoint num="0" id="4311" /> +<TGConnectingPoint num="1" id="4312" /> +<TGConnectingPoint num="2" id="4313" /> +<TGConnectingPoint num="3" id="4314" /> +<TGConnectingPoint num="4" id="4315" /> +<TGConnectingPoint num="5" id="4316" /> +<TGConnectingPoint num="6" id="4317" /> +<TGConnectingPoint num="7" id="4318" /> +<TGConnectingPoint num="8" id="4319" /> +<TGConnectingPoint num="9" id="4320" /> +<TGConnectingPoint num="10" id="4321" /> +<TGConnectingPoint num="11" id="4322" /> +<extraparam> +<Mandatory value="0" /> +<Show value="0" /> +<Attribute access="2" id="bookSale" type="5" typeOther="void" /> +<ShowMessages visible="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="124" id="4324" > +<cdparam x="927" y="422" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="274" y="341" id="3926" /> +<P2 x="406" y="465" id="3739" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4325" > +<cdparam x="1220" y="424" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="1121" y="290" id="3898" /> +<P2 x="993" y="24" id="4103" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4326" > +<cdparam x="627" y="256" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="623" y="275" id="3832" /> +<P2 x="768" y="497" id="4002" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4327" > +<cdparam x="915" y="370" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="994" y="351" id="3870" /> +<P2 x="1119" y="588" id="4054" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4328" > +<cdparam x="828" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="936" y="285" id="3865" /> +<P2 x="980" y="118" id="4025" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4329" > +<cdparam x="345" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="343" y="198" id="3812" /> +<P2 x="515" y="58" id="3726" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4331" > +<cdparam x="244" y="352" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4330" /> +<P1 x="333" y="208" id="3814" /> +<P2 x="284" y="351" id="3929" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4333" > +<cdparam x="173" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4332" /> +<P1 x="101" y="325" id="3923" /> +<P2 x="68" y="208" id="3810" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4335" > +<cdparam x="183" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4334" /> +<P1 x="111" y="370" id="3916" /> +<P2 x="38" y="353" id="3805" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4337" > +<cdparam x="173" y="412" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4336" /> +<P1 x="101" y="413" id="3913" /> +<P2 x="102" y="470" id="3797" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4338" > +<cdparam x="92" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="102" y="490" id="3798" /> +<P2 x="419" y="795" id="3976" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4340" > +<cdparam x="547" y="448" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4339" /> +<P1 x="614" y="470" id="3787" /> +<P2 x="619" y="327" id="3838" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4342" > +<cdparam x="625" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4341" /> +<P1 x="623" y="255" id="3831" /> +<P2 x="591" y="218" id="3778" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4344" > +<cdparam x="805" y="320" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4343" /> +<P1 x="808" y="470" id="3782" /> +<P2 x="804" y="344" id="3851" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4346" > +<cdparam x="945" y="448" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4345" /> +<P1 x="1002" y="470" id="3772" /> +<P2 x="984" y="341" id="3871" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4348" > +<cdparam x="925" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4347" /> +<P1 x="936" y="265" id="3864" /> +<P2 x="948" y="218" id="3768" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4350" > +<cdparam x="410" y="316" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4349" /> +<P1 x="438" y="470" id="3762" /> +<P2 x="445" y="324" id="3819" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4352" > +<cdparam x="1095" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4351" /> +<P1 x="1121" y="270" id="3897" /> +<P2 x="1116" y="218" id="3758" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="122" id="4354" > +<cdparam x="1303" y="309" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4353" /> +<P1 x="1269" y="470" id="3752" /> +<P2 x="1290" y="337" id="3886" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4355" > +<cdparam x="416" y="258" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="455" y="334" id="3818" /> +<P2 x="453" y="609" id="4080" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4356" > +<cdparam x="556" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="591" y="198" id="3777" /> +<P2 x="628" y="40" id="3988" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4357" > +<cdparam x="887" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="948" y="198" id="3767" /> +<P2 x="796" y="72" id="4014" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4358" > +<cdparam x="947" y="575" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="1002" y="490" id="3773" /> +<P2 x="1053" y="623" id="4038" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4359" > +<cdparam x="274" y="575" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="438" y="490" id="3763" /> +<P2 x="378" y="603" id="4067" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4360" > +<cdparam x="1116" y="259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="1116" y="198" id="3757" /> +<P2 x="1096" y="37" id="4090" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4361" > +<cdparam x="635" y="436" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="639" y="327" id="3839" /> +<P2 x="670" y="606" id="4119" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4362" > +<cdparam x="617" y="551" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="614" y="490" id="3788" /> +<P2 x="629" y="594" id="4132" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4363" > +<cdparam x="128" y="374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="18" y="353" id="3804" /> +<P2 x="60" y="388" id="4145" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4364" > +<cdparam x="251" y="390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="101" y="380" id="3918" /> +<P2 x="60" y="464" id="4158" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4365" > +<cdparam x="1379" y="511" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="1269" y="490" id="3753" /> +<P2 x="1382" y="584" id="4171" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4366" > +<cdparam x="1371" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="1280" y="347" id="3884" /> +<P2 x="1616" y="552" id="4197" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4367" > +<cdparam x="880" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="794" y="334" id="3852" /> +<P2 x="943" y="538" id="4220" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4369" > +<cdparam x="304" y="216" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to In Port" value="null" /> +<TGConnectingPoint num="0" id="4368" /> +<P1 x="284" y="396" id="3934" /> +<P2 x="323" y="404" id="3952" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4370" > +<cdparam x="339" y="258" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from In Port to ProCSDInterface" value="null" /> +<P1 x="333" y="414" id="3951" /> +<P2 x="390" y="412" id="4249" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4371" > +<cdparam x="294" y="226" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to ProCSDInterface" value="null" /> +<P1 x="274" y="406" id="3932" /> +<P2 x="252" y="412" id="4236" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4372" > +<cdparam x="239" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="219" y="208" id="3795" /> +<P2 x="480" y="35" id="4261" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="122" id="4374" > +<cdparam x="236" y="126" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to Out Port" value="null" /> +<TGConnectingPoint num="0" id="4373" /> +<P1 x="183" y="271" id="3936" /> +<P2 x="209" y="218" id="3793" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="124" id="4375" > +<cdparam x="220" y="189" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="193" y="281" id="3939" /> +<P2 x="274" y="24" id="4272" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4376" > +<cdparam x="85" y="106" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="58" y="198" id="3807" /> +<P2 x="151" y="22" id="4285" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4377" > +<cdparam x="138" y="223" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="111" y="315" id="3921" /> +<P2 x="81" y="22" id="4298" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="124" id="4378" > +<cdparam x="148" y="323" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Out Port to TGComponent" value="null" /> +<P1 x="121" y="413" id="3914" /> +<P2 x="209" y="459" id="4311" /> +<AutomaticDrawing data="true" /> +<extraparam> +<Show value="0" /> +</extraparam> +</CONNECTOR> + +</ProactiveCSDPanel> + +<ProactiveSMDPanel name="ds" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="4380" > +<cdparam x="81" y="58" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4379" /> +</COMPONENT> + +<COMPONENT type="2004" id="4383" > +<cdparam x="13" y="149" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="4381" /> +<TGConnectingPoint num="1" id="4382" /> +<extraparam> +<Via port="pIn" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="4386" > +<cdparam x="21" y="200" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode" /> +<TGConnectingPoint num="0" id="4384" /> +<TGConnectingPoint num="1" id="4385" /> +<extraparam> +<Via port="pOut1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="4389" > +<cdparam x="17" y="265" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="bookSale!paymentMode" /> +<TGConnectingPoint num="0" id="4387" /> +<TGConnectingPoint num="1" id="4388" /> +<extraparam> +<Via port="pOut2" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4392" > +<cdparam x="68" y="346" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4390" /> +<TGConnectingPoint num="1" id="4391" /> +</COMPONENT> + +<COMPONENT type="2016" id="4395" > +<cdparam x="69" y="97" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4393" /> +<TGConnectingPoint num="1" id="4394" /> +</COMPONENT> + +<COMPONENT type="301" id="4404" > +<cdparam x="20" y="10" /> +<sizeparam width="188" height="36" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="DS (Dispatcher) State Machine +" /> +<TGConnectingPoint num="0" id="4396" /> +<TGConnectingPoint num="1" id="4397" /> +<TGConnectingPoint num="2" id="4398" /> +<TGConnectingPoint num="3" id="4399" /> +<TGConnectingPoint num="4" id="4400" /> +<TGConnectingPoint num="5" id="4401" /> +<TGConnectingPoint num="6" id="4402" /> +<TGConnectingPoint num="7" id="4403" /> +<extraparam> +<Line value="DS (Dispatcher) State Machine" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="4405" > +<cdparam x="97" y="134" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="88" y="78" id="4379" /> +<P2 x="89" y="92" id="4393" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4406" > +<cdparam x="97" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="91" y="174" id="4382" /> +<P2 x="92" y="195" id="4384" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4407" > +<cdparam x="97" y="251" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to send msg" value="null" /> +<P1 x="92" y="225" id="4385" /> +<P2 x="88" y="260" id="4387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4408" > +<cdparam x="106" y="126" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="89" y="122" id="4394" /> +<P2 x="91" y="144" id="4381" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4409" > +<cdparam x="110" y="326" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="88" y="290" id="4388" /> +<P2 x="88" y="341" id="4390" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="Inventory" minX="10" maxX="2400" minY="10" maxY="1400" > +<COMPONENT type="2006" id="4425" > +<cdparam x="212" y="105" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4413" /> +<TGConnectingPoint num="1" id="4414" /> +<TGConnectingPoint num="2" id="4415" /> +<TGConnectingPoint num="3" id="4416" /> +<TGConnectingPoint num="4" id="4417" /> +<TGConnectingPoint num="5" id="4418" /> +<TGConnectingPoint num="6" id="4419" /> +<TGConnectingPoint num="7" id="4420" /> +<TGConnectingPoint num="8" id="4421" /> +<TGConnectingPoint num="9" id="4422" /> +<TGConnectingPoint num="10" id="4423" /> +<TGConnectingPoint num="11" id="4424" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4410" > +<father id="4425" num="0" /> +<cdparam x="137" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4411" > +<father id="4425" num="1" /> +<cdparam x="237" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4412" > +<father id="4425" num="2" /> +<cdparam x="227" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="4427" > +<cdparam x="213" y="12" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4426" /> +</COMPONENT> + +<COMPONENT type="2004" id="4430" > +<cdparam x="40" y="157" /> +<sizeparam width="157" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="send msg" value="getProductReq?barCode" /> +<TGConnectingPoint num="0" id="4428" /> +<TGConnectingPoint num="1" id="4429" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="4433" > +<cdparam x="261" y="162" /> +<sizeparam width="156" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="send msg" value="bookSale?paymentMode" /> +<TGConnectingPoint num="0" id="4431" /> +<TGConnectingPoint num="1" id="4432" /> +<extraparam> +<Via port="saleRegistered" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="4446" > +<cdparam x="199" y="465" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4434" /> +<TGConnectingPoint num="1" id="4435" /> +<TGConnectingPoint num="2" id="4436" /> +<TGConnectingPoint num="3" id="4437" /> +<TGConnectingPoint num="4" id="4438" /> +<TGConnectingPoint num="5" id="4439" /> +<TGConnectingPoint num="6" id="4440" /> +<TGConnectingPoint num="7" id="4441" /> +<TGConnectingPoint num="8" id="4442" /> +<TGConnectingPoint num="9" id="4443" /> +<TGConnectingPoint num="10" id="4444" /> +<TGConnectingPoint num="11" id="4445" /> +</COMPONENT> + +<COMPONENT type="2016" id="4449" > +<cdparam x="185" y="533" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4447" /> +<TGConnectingPoint num="1" id="4448" /> +</COMPONENT> + +<COMPONENT type="2016" id="4452" > +<cdparam x="201" y="60" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4450" /> +<TGConnectingPoint num="1" id="4451" /> +</COMPONENT> + +<COMPONENT type="2006" id="4468" > +<cdparam x="105" y="232" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4456" /> +<TGConnectingPoint num="1" id="4457" /> +<TGConnectingPoint num="2" id="4458" /> +<TGConnectingPoint num="3" id="4459" /> +<TGConnectingPoint num="4" id="4460" /> +<TGConnectingPoint num="5" id="4461" /> +<TGConnectingPoint num="6" id="4462" /> +<TGConnectingPoint num="7" id="4463" /> +<TGConnectingPoint num="8" id="4464" /> +<TGConnectingPoint num="9" id="4465" /> +<TGConnectingPoint num="10" id="4466" /> +<TGConnectingPoint num="11" id="4467" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4453" > +<father id="4468" num="0" /> +<cdparam x="30" y="245" /> +<sizeparam width="75" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[barCode==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4454" > +<father id="4468" num="1" /> +<cdparam x="130" y="237" /> +<sizeparam width="75" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[barCode==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4455" > +<father id="4468" num="2" /> +<cdparam x="120" y="267" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="4471" > +<cdparam x="144" y="299" /> +<sizeparam width="59" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="action state" value="resp=1" /> +<TGConnectingPoint num="0" id="4469" /> +<TGConnectingPoint num="1" id="4470" /> +</COMPONENT> + +<COMPONENT type="2012" id="4474" > +<cdparam x="13" y="288" /> +<sizeparam width="59" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="action state" value="resp=0" /> +<TGConnectingPoint num="0" id="4472" /> +<TGConnectingPoint num="1" id="4473" /> +</COMPONENT> + +<COMPONENT type="2002" id="4477" > +<cdparam x="31" y="376" /> +<sizeparam width="127" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="send msg" value="getProductResp!resp" /> +<TGConnectingPoint num="0" id="4475" /> +<TGConnectingPoint num="1" id="4476" /> +<extraparam> +<Via port="cashDeskConnector" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2008" id="4490" > +<cdparam x="89" y="344" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1400" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4478" /> +<TGConnectingPoint num="1" id="4479" /> +<TGConnectingPoint num="2" id="4480" /> +<TGConnectingPoint num="3" id="4481" /> +<TGConnectingPoint num="4" id="4482" /> +<TGConnectingPoint num="5" id="4483" /> +<TGConnectingPoint num="6" id="4484" /> +<TGConnectingPoint num="7" id="4485" /> +<TGConnectingPoint num="8" id="4486" /> +<TGConnectingPoint num="9" id="4487" /> +<TGConnectingPoint num="10" id="4488" /> +<TGConnectingPoint num="11" id="4489" /> +</COMPONENT> + +<CONNECTOR type="121" id="4491" > +<cdparam x="254" y="50" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send msg" value="null" /> +<P1 x="220" y="32" id="4426" /> +<P2 x="221" y="55" id="4450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4492" > +<cdparam x="254" y="103" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="221" y="85" id="4451" /> +<P2 x="222" y="105" id="4413" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4493" > +<cdparam x="221" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="187" y="115" id="4414" /> +<P2 x="118" y="152" id="4428" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4494" > +<cdparam x="291" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="257" y="115" id="4415" /> +<P2 x="339" y="157" id="4431" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4495" > +<cdparam x="467" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="339" y="187" id="4432" /> +<P2 x="209" y="470" id="4437" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4496" > +<cdparam x="166" y="272" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="204" y="485" id="4434" /> +<P2 x="205" y="528" id="4447" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4497" > +<cdparam x="96" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="118" y="182" id="4429" /> +<P2 x="115" y="232" id="4456" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4498" > +<cdparam x="80" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="80" y="242" id="4457" /> +<P2 x="42" y="283" id="4472" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4499" > +<cdparam x="150" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="150" y="242" id="4458" /> +<P2 x="173" y="294" id="4469" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4500" > +<cdparam x="42" y="321" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="42" y="313" id="4473" /> +<P2 x="89" y="349" id="4479" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4501" > +<cdparam x="190" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="173" y="324" id="4470" /> +<P2 x="99" y="349" id="4481" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4502" > +<cdparam x="94" y="364" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="94" y="364" id="4478" /> +<P2 x="94" y="371" id="4475" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4503" > +<cdparam x="90" y="409" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="94" y="401" id="4476" /> +<P2 x="199" y="470" id="4435" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="Bank" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="4519" > +<cdparam x="439" y="220" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4507" /> +<TGConnectingPoint num="1" id="4508" /> +<TGConnectingPoint num="2" id="4509" /> +<TGConnectingPoint num="3" id="4510" /> +<TGConnectingPoint num="4" id="4511" /> +<TGConnectingPoint num="5" id="4512" /> +<TGConnectingPoint num="6" id="4513" /> +<TGConnectingPoint num="7" id="4514" /> +<TGConnectingPoint num="8" id="4515" /> +<TGConnectingPoint num="9" id="4516" /> +<TGConnectingPoint num="10" id="4517" /> +<TGConnectingPoint num="11" id="4518" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4504" > +<father id="4519" num="0" /> +<cdparam x="364" y="233" /> +<sizeparam width="98" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[transactionId==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4505" > +<father id="4519" num="1" /> +<cdparam x="484" y="245" /> +<sizeparam width="98" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[transactionId==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4506" > +<father id="4519" num="2" /> +<cdparam x="454" y="255" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2000" id="4521" > +<cdparam x="305" y="10" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4520" /> +</COMPONENT> + +<COMPONENT type="2006" id="4537" > +<cdparam x="303" y="105" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4525" /> +<TGConnectingPoint num="1" id="4526" /> +<TGConnectingPoint num="2" id="4527" /> +<TGConnectingPoint num="3" id="4528" /> +<TGConnectingPoint num="4" id="4529" /> +<TGConnectingPoint num="5" id="4530" /> +<TGConnectingPoint num="6" id="4531" /> +<TGConnectingPoint num="7" id="4532" /> +<TGConnectingPoint num="8" id="4533" /> +<TGConnectingPoint num="9" id="4534" /> +<TGConnectingPoint num="10" id="4535" /> +<TGConnectingPoint num="11" id="4536" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4522" > +<father id="4537" num="0" /> +<cdparam x="228" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4523" > +<father id="4537" num="1" /> +<cdparam x="328" y="110" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4524" > +<father id="4537" num="2" /> +<cdparam x="318" y="140" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2004" id="4540" > +<cdparam x="68" y="160" /> +<sizeparam width="193" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardReq?creditInfo?pin" /> +<TGConnectingPoint num="0" id="4538" /> +<TGConnectingPoint num="1" id="4539" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2004" id="4543" > +<cdparam x="367" y="155" /> +<sizeparam width="175" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardReq?transactionId" /> +<TGConnectingPoint num="0" id="4541" /> +<TGConnectingPoint num="1" id="4542" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4546" > +<cdparam x="263" y="668" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4544" /> +<TGConnectingPoint num="1" id="4545" /> +</COMPONENT> + +<COMPONENT type="2016" id="4549" > +<cdparam x="295" y="51" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4547" /> +<TGConnectingPoint num="1" id="4548" /> +</COMPONENT> + +<COMPONENT type="2008" id="4562" > +<cdparam x="280" y="586" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4550" /> +<TGConnectingPoint num="1" id="4551" /> +<TGConnectingPoint num="2" id="4552" /> +<TGConnectingPoint num="3" id="4553" /> +<TGConnectingPoint num="4" id="4554" /> +<TGConnectingPoint num="5" id="4555" /> +<TGConnectingPoint num="6" id="4556" /> +<TGConnectingPoint num="7" id="4557" /> +<TGConnectingPoint num="8" id="4558" /> +<TGConnectingPoint num="9" id="4559" /> +<TGConnectingPoint num="10" id="4560" /> +<TGConnectingPoint num="11" id="4561" /> +</COMPONENT> + +<COMPONENT type="2012" id="4565" > +<cdparam x="14" y="380" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="transactionId=1" /> +<TGConnectingPoint num="0" id="4563" /> +<TGConnectingPoint num="1" id="4564" /> +</COMPONENT> + +<COMPONENT type="2012" id="4568" > +<cdparam x="176" y="377" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="transactionId=0" /> +<TGConnectingPoint num="0" id="4566" /> +<TGConnectingPoint num="1" id="4567" /> +</COMPONENT> + +<COMPONENT type="2008" id="4581" > +<cdparam x="222" y="311" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4569" /> +<TGConnectingPoint num="1" id="4570" /> +<TGConnectingPoint num="2" id="4571" /> +<TGConnectingPoint num="3" id="4572" /> +<TGConnectingPoint num="4" id="4573" /> +<TGConnectingPoint num="5" id="4574" /> +<TGConnectingPoint num="6" id="4575" /> +<TGConnectingPoint num="7" id="4576" /> +<TGConnectingPoint num="8" id="4577" /> +<TGConnectingPoint num="9" id="4578" /> +<TGConnectingPoint num="10" id="4579" /> +<TGConnectingPoint num="11" id="4580" /> +</COMPONENT> + +<COMPONENT type="2006" id="4597" > +<cdparam x="103" y="305" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4585" /> +<TGConnectingPoint num="1" id="4586" /> +<TGConnectingPoint num="2" id="4587" /> +<TGConnectingPoint num="3" id="4588" /> +<TGConnectingPoint num="4" id="4589" /> +<TGConnectingPoint num="5" id="4590" /> +<TGConnectingPoint num="6" id="4591" /> +<TGConnectingPoint num="7" id="4592" /> +<TGConnectingPoint num="8" id="4593" /> +<TGConnectingPoint num="9" id="4594" /> +<TGConnectingPoint num="10" id="4595" /> +<TGConnectingPoint num="11" id="4596" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4582" > +<father id="4597" num="0" /> +<cdparam x="28" y="310" /> +<sizeparam width="44" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[pin==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4583" > +<father id="4597" num="1" /> +<cdparam x="128" y="310" /> +<sizeparam width="44" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[pin==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4584" > +<father id="4597" num="2" /> +<cdparam x="118" y="340" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="4610" > +<cdparam x="138" y="435" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4598" /> +<TGConnectingPoint num="1" id="4599" /> +<TGConnectingPoint num="2" id="4600" /> +<TGConnectingPoint num="3" id="4601" /> +<TGConnectingPoint num="4" id="4602" /> +<TGConnectingPoint num="5" id="4603" /> +<TGConnectingPoint num="6" id="4604" /> +<TGConnectingPoint num="7" id="4605" /> +<TGConnectingPoint num="8" id="4606" /> +<TGConnectingPoint num="9" id="4607" /> +<TGConnectingPoint num="10" id="4608" /> +<TGConnectingPoint num="11" id="4609" /> +</COMPONENT> + +<COMPONENT type="2002" id="4613" > +<cdparam x="45" y="481" /> +<sizeparam width="183" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="validateCardResp!transactionId" /> +<TGConnectingPoint num="0" id="4611" /> +<TGConnectingPoint num="1" id="4612" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2006" id="4629" > +<cdparam x="159" y="228" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4617" /> +<TGConnectingPoint num="1" id="4618" /> +<TGConnectingPoint num="2" id="4619" /> +<TGConnectingPoint num="3" id="4620" /> +<TGConnectingPoint num="4" id="4621" /> +<TGConnectingPoint num="5" id="4622" /> +<TGConnectingPoint num="6" id="4623" /> +<TGConnectingPoint num="7" id="4624" /> +<TGConnectingPoint num="8" id="4625" /> +<TGConnectingPoint num="9" id="4626" /> +<TGConnectingPoint num="10" id="4627" /> +<TGConnectingPoint num="11" id="4628" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4614" > +<father id="4629" num="0" /> +<cdparam x="84" y="256" /> +<sizeparam width="77" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[creditInfo==1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4615" > +<father id="4629" num="1" /> +<cdparam x="204" y="253" /> +<sizeparam width="77" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[creditInfo==0]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4616" > +<father id="4629" num="2" /> +<cdparam x="174" y="263" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2008" id="4642" > +<cdparam x="530" y="312" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4630" /> +<TGConnectingPoint num="1" id="4631" /> +<TGConnectingPoint num="2" id="4632" /> +<TGConnectingPoint num="3" id="4633" /> +<TGConnectingPoint num="4" id="4634" /> +<TGConnectingPoint num="5" id="4635" /> +<TGConnectingPoint num="6" id="4636" /> +<TGConnectingPoint num="7" id="4637" /> +<TGConnectingPoint num="8" id="4638" /> +<TGConnectingPoint num="9" id="4639" /> +<TGConnectingPoint num="10" id="4640" /> +<TGConnectingPoint num="11" id="4641" /> +</COMPONENT> + +<COMPONENT type="2006" id="4658" > +<cdparam x="394" y="304" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4646" /> +<TGConnectingPoint num="1" id="4647" /> +<TGConnectingPoint num="2" id="4648" /> +<TGConnectingPoint num="3" id="4649" /> +<TGConnectingPoint num="4" id="4650" /> +<TGConnectingPoint num="5" id="4651" /> +<TGConnectingPoint num="6" id="4652" /> +<TGConnectingPoint num="7" id="4653" /> +<TGConnectingPoint num="8" id="4654" /> +<TGConnectingPoint num="9" id="4655" /> +<TGConnectingPoint num="10" id="4656" /> +<TGConnectingPoint num="11" id="4657" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4643" > +<father id="4658" num="0" /> +<cdparam x="319" y="309" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4644" > +<father id="4658" num="1" /> +<cdparam x="419" y="309" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4645" > +<father id="4658" num="2" /> +<cdparam x="409" y="339" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2012" id="4661" > +<cdparam x="332" y="388" /> +<sizeparam width="87" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="response=1" /> +<TGConnectingPoint num="0" id="4659" /> +<TGConnectingPoint num="1" id="4660" /> +</COMPONENT> + +<COMPONENT type="2012" id="4664" > +<cdparam x="496" y="373" /> +<sizeparam width="87" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="response=0" /> +<TGConnectingPoint num="0" id="4662" /> +<TGConnectingPoint num="1" id="4663" /> +</COMPONENT> + +<COMPONENT type="2008" id="4677" > +<cdparam x="446" y="444" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4665" /> +<TGConnectingPoint num="1" id="4666" /> +<TGConnectingPoint num="2" id="4667" /> +<TGConnectingPoint num="3" id="4668" /> +<TGConnectingPoint num="4" id="4669" /> +<TGConnectingPoint num="5" id="4670" /> +<TGConnectingPoint num="6" id="4671" /> +<TGConnectingPoint num="7" id="4672" /> +<TGConnectingPoint num="8" id="4673" /> +<TGConnectingPoint num="9" id="4674" /> +<TGConnectingPoint num="10" id="4675" /> +<TGConnectingPoint num="11" id="4676" /> +</COMPONENT> + +<COMPONENT type="2002" id="4680" > +<cdparam x="375" y="498" /> +<sizeparam width="150" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="debitCardResp!response" /> +<TGConnectingPoint num="0" id="4678" /> +<TGConnectingPoint num="1" id="4679" /> +<extraparam> +<Via port="bank" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="121" id="4681" > +<cdparam x="324" y="30" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="312" y="30" id="4520" /> +<P2 x="315" y="46" id="4547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4682" > +<cdparam x="324" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to choice" value="null" /> +<P1 x="315" y="76" id="4548" /> +<P2 x="313" y="105" id="4525" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4683" > +<cdparam x="550" y="392" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to state" value="null" /> +<P1 x="285" y="606" id="4550" /> +<P2 x="283" y="663" id="4544" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4684" > +<cdparam x="400" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="278" y="115" id="4526" /> +<P2 x="164" y="155" id="4538" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4685" > +<cdparam x="285" y="210" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="164" y="185" id="4539" /> +<P2 x="169" y="228" id="4617" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4686" > +<cdparam x="470" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send msg" value="null" /> +<P1 x="348" y="115" id="4527" /> +<P2 x="454" y="150" id="4541" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4687" > +<cdparam x="445" y="389" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="227" y="331" id="4569" /> +<P2 x="228" y="372" id="4566" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4688" > +<cdparam x="302" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="204" y="238" id="4619" /> +<P2 x="227" y="311" id="4571" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4689" > +<cdparam x="232" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="134" y="238" id="4618" /> +<P2 x="113" y="305" id="4585" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4690" > +<cdparam x="131" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="78" y="315" id="4586" /> +<P2 x="66" y="375" id="4563" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4691" > +<cdparam x="201" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="148" y="315" id="4587" /> +<P2 x="222" y="316" id="4570" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4692" > +<cdparam x="124" y="468" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="66" y="405" id="4564" /> +<P2 x="138" y="440" id="4599" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4693" > +<cdparam x="444" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="228" y="402" id="4567" /> +<P2 x="148" y="440" id="4601" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4694" > +<cdparam x="285" y="553" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="143" y="455" id="4598" /> +<P2 x="136" y="476" id="4611" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4695" > +<cdparam x="284" y="620" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="136" y="506" id="4612" /> +<P2 x="280" y="591" id="4551" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4696" > +<cdparam x="700" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="454" y="180" id="4542" /> +<P2 x="449" y="220" id="4507" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4697" > +<cdparam x="773" y="390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="535" y="332" id="4630" /> +<P2 x="539" y="368" id="4662" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4698" > +<cdparam x="542" y="274" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="484" y="230" id="4509" /> +<P2 x="535" y="312" id="4632" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4699" > +<cdparam x="472" y="274" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="414" y="230" id="4508" /> +<P2 x="404" y="304" id="4646" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4700" > +<cdparam x="523" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="439" y="314" id="4648" /> +<P2 x="530" y="317" id="4631" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4701" > +<cdparam x="453" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="369" y="314" id="4647" /> +<P2 x="375" y="383" id="4659" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4702" > +<cdparam x="433" y="493" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="375" y="413" id="4660" /> +<P2 x="446" y="449" id="4666" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4703" > +<cdparam x="631" y="504" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="539" y="398" id="4663" /> +<P2 x="456" y="449" id="4668" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4704" > +<cdparam x="721" y="607" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="451" y="464" id="4665" /> +<P2 x="450" y="493" id="4678" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4705" > +<cdparam x="717" y="689" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to junction" value="null" /> +<P1 x="450" y="523" id="4679" /> +<P2 x="290" y="591" id="4553" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="logger" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="4707" > +<cdparam x="211" y="29" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4706" /> +</COMPONENT> + +<COMPONENT type="2004" id="4710" > +<cdparam x="168" y="122" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="log?errorCode" /> +<TGConnectingPoint num="0" id="4708" /> +<TGConnectingPoint num="1" id="4709" /> +<extraparam> +<Via port="l" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4713" > +<cdparam x="191" y="231" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4711" /> +<TGConnectingPoint num="1" id="4712" /> +</COMPONENT> + +<COMPONENT type="2016" id="4716" > +<cdparam x="196" y="65" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="idle" /> +<TGConnectingPoint num="0" id="4714" /> +<TGConnectingPoint num="1" id="4715" /> +</COMPONENT> + +<CONNECTOR type="121" id="4717" > +<cdparam x="218" y="49" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="218" y="49" id="4706" /> +<P2 x="216" y="60" id="4714" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4718" > +<cdparam x="216" y="90" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="216" y="90" id="4715" /> +<P2 x="218" y="117" id="4708" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4719" > +<cdparam x="218" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="218" y="147" id="4709" /> +<P2 x="211" y="226" id="4711" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="someLogger" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2000" id="4721" > +<cdparam x="245" y="18" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4720" /> +</COMPONENT> + +<COMPONENT type="2004" id="4724" > +<cdparam x="238" y="116" /> +<sizeparam width="44" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="log1" /> +<TGConnectingPoint num="0" id="4722" /> +<TGConnectingPoint num="1" id="4723" /> +<extraparam> +<Via port="p" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2016" id="4727" > +<cdparam x="239" y="176" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="state" /> +<TGConnectingPoint num="0" id="4725" /> +<TGConnectingPoint num="1" id="4726" /> +</COMPONENT> + +<COMPONENT type="2016" id="4730" > +<cdparam x="232" y="58" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state" value="state" /> +<TGConnectingPoint num="0" id="4728" /> +<TGConnectingPoint num="1" id="4729" /> +</COMPONENT> + +<CONNECTOR type="121" id="4731" > +<cdparam x="238" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state" value="null" /> +<P1 x="252" y="38" id="4720" /> +<P2 x="255" y="53" id="4728" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4732" > +<cdparam x="255" y="83" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state to send msg" value="null" /> +<P1 x="255" y="83" id="4729" /> +<P2 x="260" y="111" id="4722" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4733" > +<cdparam x="260" y="141" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to state" value="null" /> +<P1 x="260" y="141" id="4723" /> +<P2 x="262" y="171" id="4725" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +<ProactiveSMDPanel name="emit" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="2006" id="4749" > +<cdparam x="147" y="57" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4737" /> +<TGConnectingPoint num="1" id="4738" /> +<TGConnectingPoint num="2" id="4739" /> +<TGConnectingPoint num="3" id="4740" /> +<TGConnectingPoint num="4" id="4741" /> +<TGConnectingPoint num="5" id="4742" /> +<TGConnectingPoint num="6" id="4743" /> +<TGConnectingPoint num="7" id="4744" /> +<TGConnectingPoint num="8" id="4745" /> +<TGConnectingPoint num="9" id="4746" /> +<TGConnectingPoint num="10" id="4747" /> +<TGConnectingPoint num="11" id="4748" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4734" > +<father id="4749" num="0" /> +<cdparam x="72" y="62" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4735" > +<father id="4749" num="1" /> +<cdparam x="172" y="62" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4736" > +<father id="4749" num="2" /> +<cdparam x="162" y="92" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2006" id="4765" > +<cdparam x="140" y="225" /> +<sizeparam width="20" height="20" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4753" /> +<TGConnectingPoint num="1" id="4754" /> +<TGConnectingPoint num="2" id="4755" /> +<TGConnectingPoint num="3" id="4756" /> +<TGConnectingPoint num="4" id="4757" /> +<TGConnectingPoint num="5" id="4758" /> +<TGConnectingPoint num="6" id="4759" /> +<TGConnectingPoint num="7" id="4760" /> +<TGConnectingPoint num="8" id="4761" /> +<TGConnectingPoint num="9" id="4762" /> +<TGConnectingPoint num="10" id="4763" /> +<TGConnectingPoint num="11" id="4764" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="4750" > +<father id="4765" num="0" /> +<cdparam x="65" y="230" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="5" maxY="30" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4751" > +<father id="4765" num="1" /> +<cdparam x="165" y="230" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="25" maxX="45" minY="5" maxY="30" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4752" > +<father id="4765" num="2" /> +<cdparam x="155" y="260" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="15" maxX="35" minY="35" maxY="60" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="2002" id="4768" > +<cdparam x="72" y="182" /> +<sizeparam width="159" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="creditCardScanned!cardNb" /> +<TGConnectingPoint num="0" id="4766" /> +<TGConnectingPoint num="1" id="4767" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2002" id="4771" > +<cdparam x="95" y="329" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send msg" value="pinEntered!pin" /> +<TGConnectingPoint num="0" id="4769" /> +<TGConnectingPoint num="1" id="4770" /> +<extraparam> +<Via port="event" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="2012" id="4774" > +<cdparam x="173" y="107" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cardNb=1" /> +<TGConnectingPoint num="0" id="4772" /> +<TGConnectingPoint num="1" id="4773" /> +</COMPONENT> + +<COMPONENT type="2012" id="4777" > +<cdparam x="66" y="100" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="cardNb=0" /> +<TGConnectingPoint num="0" id="4775" /> +<TGConnectingPoint num="1" id="4776" /> +</COMPONENT> + +<COMPONENT type="2008" id="4790" > +<cdparam x="146" y="148" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4778" /> +<TGConnectingPoint num="1" id="4779" /> +<TGConnectingPoint num="2" id="4780" /> +<TGConnectingPoint num="3" id="4781" /> +<TGConnectingPoint num="4" id="4782" /> +<TGConnectingPoint num="5" id="4783" /> +<TGConnectingPoint num="6" id="4784" /> +<TGConnectingPoint num="7" id="4785" /> +<TGConnectingPoint num="8" id="4786" /> +<TGConnectingPoint num="9" id="4787" /> +<TGConnectingPoint num="10" id="4788" /> +<TGConnectingPoint num="11" id="4789" /> +</COMPONENT> + +<COMPONENT type="2012" id="4793" > +<cdparam x="185" y="269" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="pin=1" /> +<TGConnectingPoint num="0" id="4791" /> +<TGConnectingPoint num="1" id="4792" /> +</COMPONENT> + +<COMPONENT type="2012" id="4796" > +<cdparam x="62" y="264" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="action state" value="pin=0" /> +<TGConnectingPoint num="0" id="4794" /> +<TGConnectingPoint num="1" id="4795" /> +</COMPONENT> + +<COMPONENT type="2008" id="4809" > +<cdparam x="136" y="289" /> +<sizeparam width="10" height="10" minWidth="5" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="null" /> +<TGConnectingPoint num="0" id="4797" /> +<TGConnectingPoint num="1" id="4798" /> +<TGConnectingPoint num="2" id="4799" /> +<TGConnectingPoint num="3" id="4800" /> +<TGConnectingPoint num="4" id="4801" /> +<TGConnectingPoint num="5" id="4802" /> +<TGConnectingPoint num="6" id="4803" /> +<TGConnectingPoint num="7" id="4804" /> +<TGConnectingPoint num="8" id="4805" /> +<TGConnectingPoint num="9" id="4806" /> +<TGConnectingPoint num="10" id="4807" /> +<TGConnectingPoint num="11" id="4808" /> +</COMPONENT> + +<COMPONENT type="2000" id="4811" > +<cdparam x="152" y="12" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="emit_start" /> +<TGConnectingPoint num="0" id="4810" /> +</COMPONENT> + +<COMPONENT type="2001" id="4813" > +<cdparam x="130" y="392" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="emit_stop" /> +<TGConnectingPoint num="0" id="4812" /> +</COMPONENT> + +<CONNECTOR type="121" id="4814" > +<cdparam x="134" y="10" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="122" y="67" id="4738" /> +<P2 x="103" y="95" id="4775" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4815" > +<cdparam x="204" y="10" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="192" y="67" id="4739" /> +<P2 x="210" y="102" id="4772" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4816" > +<cdparam x="99" y="185" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="103" y="125" id="4776" /> +<P2 x="146" y="153" id="4779" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4817" > +<cdparam x="226" y="192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="210" y="132" id="4773" /> +<P2 x="156" y="153" id="4781" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4818" > +<cdparam x="153" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="151" y="168" id="4778" /> +<P2 x="151" y="177" id="4766" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4819" > +<cdparam x="127" y="233" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="115" y="235" id="4754" /> +<P2 x="87" y="259" id="4794" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4820" > +<cdparam x="197" y="233" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="185" y="235" id="4755" /> +<P2 x="210" y="264" id="4791" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4821" > +<cdparam x="92" y="409" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="87" y="289" id="4795" /> +<P2 x="136" y="294" id="4798" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4822" > +<cdparam x="219" y="416" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="210" y="294" id="4792" /> +<P2 x="146" y="294" id="4800" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4823" > +<cdparam x="151" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to choice" value="null" /> +<P1 x="151" y="207" id="4767" /> +<P2 x="150" y="225" id="4753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4824" > +<cdparam x="113" y="493" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to send msg" value="null" /> +<P1 x="141" y="309" id="4797" /> +<P2 x="140" y="324" id="4769" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4825" > +<cdparam x="165" y="57" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="159" y="32" id="4810" /> +<P2 x="157" y="57" id="4737" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="121" id="4826" > +<cdparam x="136" y="579" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send msg to stop state" value="null" /> +<P1 x="140" y="354" id="4770" /> +<P2 x="140" y="387" id="4812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</ProactiveSMDPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/CoffeeMachine_Avatar.xml b/preinstallTTool/macos/TTool/modeling/CoffeeMachine_Avatar.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5806191f354c6140f8ab8f7ffbfbf624d26d74c --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/CoffeeMachine_Avatar.xml @@ -0,0 +1,3136 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta1"> + +<Modeling type="Avatar Requirement" nameTab="AVATAR Requirements" > +<AvatarRDPanel name="AVATAR RD" minX="10" maxX="1900" minY="10" maxY="900" zoom="1.0" > +<COMPONENT type="5200" id="32" > +<cdparam x="661" y="17" /> +<sizeparam width="278" height="120" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="59" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req00" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +<TGConnectingPoint num="4" id="5" /> +<TGConnectingPoint num="5" id="6" /> +<TGConnectingPoint num="6" id="7" /> +<TGConnectingPoint num="7" id="8" /> +<TGConnectingPoint num="8" id="9" /> +<TGConnectingPoint num="9" id="10" /> +<TGConnectingPoint num="10" id="11" /> +<TGConnectingPoint num="11" id="12" /> +<TGConnectingPoint num="12" id="13" /> +<TGConnectingPoint num="13" id="14" /> +<TGConnectingPoint num="14" id="15" /> +<TGConnectingPoint num="15" id="16" /> +<TGConnectingPoint num="16" id="17" /> +<TGConnectingPoint num="17" id="18" /> +<TGConnectingPoint num="18" id="19" /> +<TGConnectingPoint num="19" id="20" /> +<TGConnectingPoint num="20" id="21" /> +<TGConnectingPoint num="21" id="22" /> +<TGConnectingPoint num="22" id="23" /> +<TGConnectingPoint num="23" id="24" /> +<TGConnectingPoint num="24" id="25" /> +<TGConnectingPoint num="25" id="26" /> +<TGConnectingPoint num="26" id="27" /> +<TGConnectingPoint num="27" id="28" /> +<TGConnectingPoint num="28" id="29" /> +<TGConnectingPoint num="29" id="30" /> +<TGConnectingPoint num="30" id="31" /> +<extraparam> +<textline data="A coin not used within 50 seconds " /> +<textline data="must be ejected" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="64" > +<cdparam x="47" y="457" /> +<sizeparam width="301" height="120" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="113" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="Req_Availability" /> +<TGConnectingPoint num="0" id="33" /> +<TGConnectingPoint num="1" id="34" /> +<TGConnectingPoint num="2" id="35" /> +<TGConnectingPoint num="3" id="36" /> +<TGConnectingPoint num="4" id="37" /> +<TGConnectingPoint num="5" id="38" /> +<TGConnectingPoint num="6" id="39" /> +<TGConnectingPoint num="7" id="40" /> +<TGConnectingPoint num="8" id="41" /> +<TGConnectingPoint num="9" id="42" /> +<TGConnectingPoint num="10" id="43" /> +<TGConnectingPoint num="11" id="44" /> +<TGConnectingPoint num="12" id="45" /> +<TGConnectingPoint num="13" id="46" /> +<TGConnectingPoint num="14" id="47" /> +<TGConnectingPoint num="15" id="48" /> +<TGConnectingPoint num="16" id="49" /> +<TGConnectingPoint num="17" id="50" /> +<TGConnectingPoint num="18" id="51" /> +<TGConnectingPoint num="19" id="52" /> +<TGConnectingPoint num="20" id="53" /> +<TGConnectingPoint num="21" id="54" /> +<TGConnectingPoint num="22" id="55" /> +<TGConnectingPoint num="23" id="56" /> +<TGConnectingPoint num="24" id="57" /> +<TGConnectingPoint num="25" id="58" /> +<TGConnectingPoint num="26" id="59" /> +<TGConnectingPoint num="27" id="60" /> +<TGConnectingPoint num="28" id="61" /> +<TGConnectingPoint num="29" id="62" /> +<TGConnectingPoint num="30" id="63" /> +<extraparam> +<textline data="The availability of the machine shall be" /> +<textline data="no less than 99.99%" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="96" > +<cdparam x="10" y="182" /> +<sizeparam width="150" height="120" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="136" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="Req_CoffeeMachine" /> +<TGConnectingPoint num="0" id="65" /> +<TGConnectingPoint num="1" id="66" /> +<TGConnectingPoint num="2" id="67" /> +<TGConnectingPoint num="3" id="68" /> +<TGConnectingPoint num="4" id="69" /> +<TGConnectingPoint num="5" id="70" /> +<TGConnectingPoint num="6" id="71" /> +<TGConnectingPoint num="7" id="72" /> +<TGConnectingPoint num="8" id="73" /> +<TGConnectingPoint num="9" id="74" /> +<TGConnectingPoint num="10" id="75" /> +<TGConnectingPoint num="11" id="76" /> +<TGConnectingPoint num="12" id="77" /> +<TGConnectingPoint num="13" id="78" /> +<TGConnectingPoint num="14" id="79" /> +<TGConnectingPoint num="15" id="80" /> +<TGConnectingPoint num="16" id="81" /> +<TGConnectingPoint num="17" id="82" /> +<TGConnectingPoint num="18" id="83" /> +<TGConnectingPoint num="19" id="84" /> +<TGConnectingPoint num="20" id="85" /> +<TGConnectingPoint num="21" id="86" /> +<TGConnectingPoint num="22" id="87" /> +<TGConnectingPoint num="23" id="88" /> +<TGConnectingPoint num="24" id="89" /> +<TGConnectingPoint num="25" id="90" /> +<TGConnectingPoint num="26" id="91" /> +<TGConnectingPoint num="27" id="92" /> +<TGConnectingPoint num="28" id="93" /> +<TGConnectingPoint num="29" id="94" /> +<TGConnectingPoint num="30" id="95" /> +<extraparam> +<textline data="Requirements of the coffee machine" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5201" id="112" > +<cdparam x="627" y="376" /> +<sizeparam width="171" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="158" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="AvatarProperty" value="BeverageDeliverProperty" /> +<TGConnectingPoint num="0" id="97" /> +<TGConnectingPoint num="1" id="98" /> +<TGConnectingPoint num="2" id="99" /> +<TGConnectingPoint num="3" id="100" /> +<TGConnectingPoint num="4" id="101" /> +<TGConnectingPoint num="5" id="102" /> +<TGConnectingPoint num="6" id="103" /> +<TGConnectingPoint num="7" id="104" /> +<TGConnectingPoint num="8" id="105" /> +<TGConnectingPoint num="9" id="106" /> +<TGConnectingPoint num="10" id="107" /> +<TGConnectingPoint num="11" id="108" /> +<TGConnectingPoint num="12" id="109" /> +<TGConnectingPoint num="13" id="110" /> +<TGConnectingPoint num="14" id="111" /> +</COMPONENT> + +<COMPONENT type="5201" id="128" > +<cdparam x="580" y="246" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="128" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="AvatarProperty" value="WalletCoinProperty" /> +<TGConnectingPoint num="0" id="113" /> +<TGConnectingPoint num="1" id="114" /> +<TGConnectingPoint num="2" id="115" /> +<TGConnectingPoint num="3" id="116" /> +<TGConnectingPoint num="4" id="117" /> +<TGConnectingPoint num="5" id="118" /> +<TGConnectingPoint num="6" id="119" /> +<TGConnectingPoint num="7" id="120" /> +<TGConnectingPoint num="8" id="121" /> +<TGConnectingPoint num="9" id="122" /> +<TGConnectingPoint num="10" id="123" /> +<TGConnectingPoint num="11" id="124" /> +<TGConnectingPoint num="12" id="125" /> +<TGConnectingPoint num="13" id="126" /> +<TGConnectingPoint num="14" id="127" /> +</COMPONENT> + +<COMPONENT type="5200" id="160" > +<cdparam x="234" y="147" /> +<sizeparam width="271" height="104" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req1" /> +<TGConnectingPoint num="0" id="129" /> +<TGConnectingPoint num="1" id="130" /> +<TGConnectingPoint num="2" id="131" /> +<TGConnectingPoint num="3" id="132" /> +<TGConnectingPoint num="4" id="133" /> +<TGConnectingPoint num="5" id="134" /> +<TGConnectingPoint num="6" id="135" /> +<TGConnectingPoint num="7" id="136" /> +<TGConnectingPoint num="8" id="137" /> +<TGConnectingPoint num="9" id="138" /> +<TGConnectingPoint num="10" id="139" /> +<TGConnectingPoint num="11" id="140" /> +<TGConnectingPoint num="12" id="141" /> +<TGConnectingPoint num="13" id="142" /> +<TGConnectingPoint num="14" id="143" /> +<TGConnectingPoint num="15" id="144" /> +<TGConnectingPoint num="16" id="145" /> +<TGConnectingPoint num="17" id="146" /> +<TGConnectingPoint num="18" id="147" /> +<TGConnectingPoint num="19" id="148" /> +<TGConnectingPoint num="20" id="149" /> +<TGConnectingPoint num="21" id="150" /> +<TGConnectingPoint num="22" id="151" /> +<TGConnectingPoint num="23" id="152" /> +<TGConnectingPoint num="24" id="153" /> +<TGConnectingPoint num="25" id="154" /> +<TGConnectingPoint num="26" id="155" /> +<TGConnectingPoint num="27" id="156" /> +<TGConnectingPoint num="28" id="157" /> +<TGConnectingPoint num="29" id="158" /> +<TGConnectingPoint num="30" id="159" /> +<extraparam> +<textline data="A wallet must never contain a " /> +<textline data="negative number of coins" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5201" id="176" > +<cdparam x="582" y="155" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="117" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="AvatarProperty" value="OneCoinProperty" /> +<TGConnectingPoint num="0" id="161" /> +<TGConnectingPoint num="1" id="162" /> +<TGConnectingPoint num="2" id="163" /> +<TGConnectingPoint num="3" id="164" /> +<TGConnectingPoint num="4" id="165" /> +<TGConnectingPoint num="5" id="166" /> +<TGConnectingPoint num="6" id="167" /> +<TGConnectingPoint num="7" id="168" /> +<TGConnectingPoint num="8" id="169" /> +<TGConnectingPoint num="9" id="170" /> +<TGConnectingPoint num="10" id="171" /> +<TGConnectingPoint num="11" id="172" /> +<TGConnectingPoint num="12" id="173" /> +<TGConnectingPoint num="13" id="174" /> +<TGConnectingPoint num="14" id="175" /> +</COMPONENT> + +<COMPONENT type="5200" id="208" > +<cdparam x="192" y="16" /> +<sizeparam width="304" height="110" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req0" /> +<TGConnectingPoint num="0" id="177" /> +<TGConnectingPoint num="1" id="178" /> +<TGConnectingPoint num="2" id="179" /> +<TGConnectingPoint num="3" id="180" /> +<TGConnectingPoint num="4" id="181" /> +<TGConnectingPoint num="5" id="182" /> +<TGConnectingPoint num="6" id="183" /> +<TGConnectingPoint num="7" id="184" /> +<TGConnectingPoint num="8" id="185" /> +<TGConnectingPoint num="9" id="186" /> +<TGConnectingPoint num="10" id="187" /> +<TGConnectingPoint num="11" id="188" /> +<TGConnectingPoint num="12" id="189" /> +<TGConnectingPoint num="13" id="190" /> +<TGConnectingPoint num="14" id="191" /> +<TGConnectingPoint num="15" id="192" /> +<TGConnectingPoint num="16" id="193" /> +<TGConnectingPoint num="17" id="194" /> +<TGConnectingPoint num="18" id="195" /> +<TGConnectingPoint num="19" id="196" /> +<TGConnectingPoint num="20" id="197" /> +<TGConnectingPoint num="21" id="198" /> +<TGConnectingPoint num="22" id="199" /> +<TGConnectingPoint num="23" id="200" /> +<TGConnectingPoint num="24" id="201" /> +<TGConnectingPoint num="25" id="202" /> +<TGConnectingPoint num="26" id="203" /> +<TGConnectingPoint num="27" id="204" /> +<TGConnectingPoint num="28" id="205" /> +<TGConnectingPoint num="29" id="206" /> +<TGConnectingPoint num="30" id="207" /> +<extraparam> +<textline data="The coffee machine never has one coin " /> +<textline data=" inserted more than 50 units of time" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="123" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="240" > +<cdparam x="206" y="294" /> +<sizeparam width="357" height="135" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="48" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Requirement" value="req2" /> +<TGConnectingPoint num="0" id="209" /> +<TGConnectingPoint num="1" id="210" /> +<TGConnectingPoint num="2" id="211" /> +<TGConnectingPoint num="3" id="212" /> +<TGConnectingPoint num="4" id="213" /> +<TGConnectingPoint num="5" id="214" /> +<TGConnectingPoint num="6" id="215" /> +<TGConnectingPoint num="7" id="216" /> +<TGConnectingPoint num="8" id="217" /> +<TGConnectingPoint num="9" id="218" /> +<TGConnectingPoint num="10" id="219" /> +<TGConnectingPoint num="11" id="220" /> +<TGConnectingPoint num="12" id="221" /> +<TGConnectingPoint num="13" id="222" /> +<TGConnectingPoint num="14" id="223" /> +<TGConnectingPoint num="15" id="224" /> +<TGConnectingPoint num="16" id="225" /> +<TGConnectingPoint num="17" id="226" /> +<TGConnectingPoint num="18" id="227" /> +<TGConnectingPoint num="19" id="228" /> +<TGConnectingPoint num="20" id="229" /> +<TGConnectingPoint num="21" id="230" /> +<TGConnectingPoint num="22" id="231" /> +<TGConnectingPoint num="23" id="232" /> +<TGConnectingPoint num="24" id="233" /> +<TGConnectingPoint num="25" id="234" /> +<TGConnectingPoint num="26" id="235" /> +<TGConnectingPoint num="27" id="236" /> +<TGConnectingPoint num="28" id="237" /> +<TGConnectingPoint num="29" id="238" /> +<TGConnectingPoint num="30" id="239" /> +<extraparam> +<textline data="When the application starts, if the wallet contains " /> +<textline data="at least 2 coins, then a beverage may be delivered. " /> +<textline data="On the contrary, if the wallet contains less than 2" /> +<textline data="coins, no beverage will be delivered by the" /> +<textline data="machine." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="5202" id="242" > +<cdparam x="659" y="79" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="241" /> +<P1 x="661" y="47" id="1" /> +<P2 x="496" y="43" id="180" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="244" > +<cdparam x="124" y="457" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="243" /> +<P1 x="122" y="457" id="39" /> +<P2 x="122" y="302" id="76" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="246" > +<cdparam x="244" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="245" /> +<P1 x="206" y="327" id="209" /> +<P2 x="160" y="272" id="70" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="248" > +<cdparam x="249" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="247" /> +<P1 x="234" y="199" id="130" /> +<P2 x="160" y="212" id="68" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="250" > +<cdparam x="237" y="98" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="249" /> +<P1 x="192" y="98" id="179" /> +<P2 x="122" y="182" id="73" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="252" > +<cdparam x="538" y="537" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="251" /> +<P1 x="627" y="391" id="98" /> +<P2 x="563" y="361" id="225" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="254" > +<cdparam x="545" y="329" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="253" /> +<P1 x="580" y="261" id="114" /> +<P2 x="505" y="199" id="145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="256" > +<cdparam x="563" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="255" /> +<P1 x="582" y="170" id="162" /> +<P2 x="496" y="98" id="194" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</AvatarRDPanel> + +<AvatarPDPanel name="AVATAR PD" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0000000000000004" > +<CONNECTOR type="5312" id="258" > +<cdparam x="582" y="248" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="257" /> +<P1 x="502" y="258" id="383" /> +<P2 x="502" y="334" id="271" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="264" > +<cdparam x="247" y="616" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="261" /> +<TGConnectingPoint num="1" id="262" /> +<TGConnectingPoint num="2" id="263" /> +<P1 x="492" y="126" id="346" /> +<P2 x="492" y="209" id="387" /> +<Point x="467" y="147" /> +<Point x="467" y="192" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="259" > +<father id="264" num="0" /> +<cdparam x="467" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="260" > +<father id="264" num="1" /> +<cdparam x="467" y="192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5311" id="266" > +<cdparam x="280" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="265" /> +<P1 x="313" y="261" id="309" /> +<P2 x="361" y="261" id="284" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="268" > +<cdparam x="473" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="267" /> +<P1 x="390" y="286" id="282" /> +<P2 x="390" y="331" id="276" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="270" > +<cdparam x="276" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="269" /> +<P1 x="309" y="211" id="296" /> +<P2 x="361" y="211" id="283" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="275" > +<cdparam x="446" y="334" /> +<sizeparam width="112" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="WalletCoinProperty" /> +<TGConnectingPoint num="0" id="271" /> +<TGConnectingPoint num="1" id="272" /> +<TGConnectingPoint num="2" id="273" /> +<TGConnectingPoint num="3" id="274" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5308" id="280" > +<cdparam x="340" y="331" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="oneCoinProperty" /> +<TGConnectingPoint num="0" id="276" /> +<TGConnectingPoint num="1" id="277" /> +<TGConnectingPoint num="2" id="278" /> +<TGConnectingPoint num="3" id="279" /> +<extraparam> +<liveness data="1" /> +<not data="true" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="293" > +<cdparam x="361" y="187" /> +<sizeparam width="59" height="99" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value=">50" /> +<TGConnectingPoint num="0" id="281" /> +<TGConnectingPoint num="1" id="282" /> +<TGConnectingPoint num="2" id="283" /> +<TGConnectingPoint num="3" id="284" /> +<TGConnectingPoint num="4" id="285" /> +<TGConnectingPoint num="5" id="286" /> +<TGConnectingPoint num="6" id="287" /> +<TGConnectingPoint num="7" id="288" /> +<TGConnectingPoint num="8" id="289" /> +<TGConnectingPoint num="9" id="290" /> +<TGConnectingPoint num="10" id="291" /> +<TGConnectingPoint num="11" id="292" /> +</COMPONENT> + +<COMPONENT type="5300" id="344" > +<cdparam x="150" y="142" /> +<sizeparam width="168" height="154" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="320" /> +<TGConnectingPoint num="1" id="321" /> +<TGConnectingPoint num="2" id="322" /> +<TGConnectingPoint num="3" id="323" /> +<TGConnectingPoint num="4" id="324" /> +<TGConnectingPoint num="5" id="325" /> +<TGConnectingPoint num="6" id="326" /> +<TGConnectingPoint num="7" id="327" /> +<TGConnectingPoint num="8" id="328" /> +<TGConnectingPoint num="9" id="329" /> +<TGConnectingPoint num="10" id="330" /> +<TGConnectingPoint num="11" id="331" /> +<TGConnectingPoint num="12" id="332" /> +<TGConnectingPoint num="13" id="333" /> +<TGConnectingPoint num="14" id="334" /> +<TGConnectingPoint num="15" id="335" /> +<TGConnectingPoint num="16" id="336" /> +<TGConnectingPoint num="17" id="337" /> +<TGConnectingPoint num="18" id="338" /> +<TGConnectingPoint num="19" id="339" /> +<TGConnectingPoint num="20" id="340" /> +<TGConnectingPoint num="21" id="341" /> +<TGConnectingPoint num="22" id="342" /> +<TGConnectingPoint num="23" id="343" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="306" > +<father id="344" num="0" /> +<cdparam x="170" y="191" /> +<sizeparam width="139" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="29" minY="0" maxY="114" /> +<infoparam name="TGComponent" value="WaitingForFirstCoin_exit" /> +<TGConnectingPoint num="0" id="294" /> +<TGConnectingPoint num="1" id="295" /> +<TGConnectingPoint num="2" id="296" /> +<TGConnectingPoint num="3" id="297" /> +<TGConnectingPoint num="4" id="298" /> +<TGConnectingPoint num="5" id="299" /> +<TGConnectingPoint num="6" id="300" /> +<TGConnectingPoint num="7" id="301" /> +<TGConnectingPoint num="8" id="302" /> +<TGConnectingPoint num="9" id="303" /> +<TGConnectingPoint num="10" id="304" /> +<TGConnectingPoint num="11" id="305" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="319" > +<father id="344" num="1" /> +<cdparam x="165" y="241" /> +<sizeparam width="148" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="20" minY="0" maxY="114" /> +<infoparam name="TGComponent" value="WaitingForFirstCoin_enter" /> +<TGConnectingPoint num="0" id="307" /> +<TGConnectingPoint num="1" id="308" /> +<TGConnectingPoint num="2" id="309" /> +<TGConnectingPoint num="3" id="310" /> +<TGConnectingPoint num="4" id="311" /> +<TGConnectingPoint num="5" id="312" /> +<TGConnectingPoint num="6" id="313" /> +<TGConnectingPoint num="7" id="314" /> +<TGConnectingPoint num="8" id="315" /> +<TGConnectingPoint num="9" id="316" /> +<TGConnectingPoint num="10" id="317" /> +<TGConnectingPoint num="11" id="318" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="382" > +<cdparam x="459" y="61" /> +<sizeparam width="150" height="116" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Wallet" /> +<TGConnectingPoint num="0" id="358" /> +<TGConnectingPoint num="1" id="359" /> +<TGConnectingPoint num="2" id="360" /> +<TGConnectingPoint num="3" id="361" /> +<TGConnectingPoint num="4" id="362" /> +<TGConnectingPoint num="5" id="363" /> +<TGConnectingPoint num="6" id="364" /> +<TGConnectingPoint num="7" id="365" /> +<TGConnectingPoint num="8" id="366" /> +<TGConnectingPoint num="9" id="367" /> +<TGConnectingPoint num="10" id="368" /> +<TGConnectingPoint num="11" id="369" /> +<TGConnectingPoint num="12" id="370" /> +<TGConnectingPoint num="13" id="371" /> +<TGConnectingPoint num="14" id="372" /> +<TGConnectingPoint num="15" id="373" /> +<TGConnectingPoint num="16" id="374" /> +<TGConnectingPoint num="17" id="375" /> +<TGConnectingPoint num="18" id="376" /> +<TGConnectingPoint num="19" id="377" /> +<TGConnectingPoint num="20" id="378" /> +<TGConnectingPoint num="21" id="379" /> +<TGConnectingPoint num="22" id="380" /> +<TGConnectingPoint num="23" id="381" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="357" > +<father id="382" num="0" /> +<cdparam x="492" y="102" /> +<sizeparam width="100" height="49" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="50" minY="0" maxY="67" /> +<infoparam name="TGComponent" value="nbOfCoins" /> +<TGConnectingPoint num="0" id="345" /> +<TGConnectingPoint num="1" id="346" /> +<TGConnectingPoint num="2" id="347" /> +<TGConnectingPoint num="3" id="348" /> +<TGConnectingPoint num="4" id="349" /> +<TGConnectingPoint num="5" id="350" /> +<TGConnectingPoint num="6" id="351" /> +<TGConnectingPoint num="7" id="352" /> +<TGConnectingPoint num="8" id="353" /> +<TGConnectingPoint num="9" id="354" /> +<TGConnectingPoint num="10" id="355" /> +<TGConnectingPoint num="11" id="356" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="394" > +<cdparam x="467" y="209" /> +<sizeparam width="100" height="49" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="nbOfCoins >= 0" /> +<TGConnectingPoint num="0" id="383" /> +<TGConnectingPoint num="1" id="384" /> +<TGConnectingPoint num="2" id="385" /> +<TGConnectingPoint num="3" id="386" /> +<TGConnectingPoint num="4" id="387" /> +<TGConnectingPoint num="5" id="388" /> +<TGConnectingPoint num="6" id="389" /> +<TGConnectingPoint num="7" id="390" /> +<TGConnectingPoint num="8" id="391" /> +<TGConnectingPoint num="9" id="392" /> +<TGConnectingPoint num="10" id="393" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="AVATAR PD" minX="10" maxX="1400" minY="10" maxY="1400" zoom="1.0" > +<CONNECTOR type="5312" id="396" > +<cdparam x="580" y="547" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="395" /> +<P1 x="634" y="495" id="571" /> +<P2 x="635" y="562" id="428" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="398" > +<cdparam x="506" y="493" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="397" /> +<P1 x="577" y="471" id="582" /> +<P2 x="654" y="495" id="572" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="400" > +<cdparam x="694" y="460" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="399" /> +<P1 x="694" y="472" id="424" /> +<P2 x="674" y="505" id="573" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="406" > +<cdparam x="581" y="133" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="403" /> +<TGConnectingPoint num="1" id="404" /> +<TGConnectingPoint num="2" id="405" /> +<P1 x="581" y="154" id="479" /> +<P2 x="546" y="305" id="549" /> +<Point x="518" y="154" /> +<Point x="518" y="305" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="401" > +<father id="406" num="0" /> +<cdparam x="518" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="402" > +<father id="406" num="1" /> +<cdparam x="518" y="305" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5311" id="410" > +<cdparam x="631" y="143" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="408" /> +<TGConnectingPoint num="1" id="409" /> +<P1 x="631" y="164" id="474" /> +<P2 x="667" y="310" id="536" /> +<Point x="631" y="310" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="407" > +<father id="410" num="0" /> +<cdparam x="631" y="310" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5312" id="412" > +<cdparam x="695" y="396" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="411" /> +<P1 x="696" y="385" id="535" /> +<P2 x="694" y="417" id="423" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="416" > +<cdparam x="877" y="168" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="414" /> +<TGConnectingPoint num="1" id="415" /> +<P1 x="721" y="158" id="485" /> +<P2 x="700" y="204" id="526" /> +<Point x="700" y="158" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="413" > +<father id="416" num="0" /> +<cdparam x="700" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5312" id="418" > +<cdparam x="915" y="307" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="417" /> +<P1 x="710" y="254" id="522" /> +<P2 x="711" y="285" id="534" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="420" > +<cdparam x="993" y="581" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="419" /> +<P1 x="576" y="385" id="548" /> +<P2 x="577" y="416" id="581" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="422" > +<cdparam x="426" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="421" /> +<P1 x="491" y="345" id="435" /> +<P2 x="546" y="345" id="553" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="427" > +<cdparam x="644" y="417" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="prop01" /> +<TGConnectingPoint num="0" id="423" /> +<TGConnectingPoint num="1" id="424" /> +<TGConnectingPoint num="2" id="425" /> +<TGConnectingPoint num="3" id="426" /> +<extraparam> +<liveness data="1" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5308" id="432" > +<cdparam x="562" y="562" /> +<sizeparam width="146" height="54" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="BeverageDeliverProperty" /> +<TGConnectingPoint num="0" id="428" /> +<TGConnectingPoint num="1" id="429" /> +<TGConnectingPoint num="2" id="430" /> +<TGConnectingPoint num="3" id="431" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5300" id="470" > +<cdparam x="372" y="227" /> +<sizeparam width="132" height="153" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="446" /> +<TGConnectingPoint num="1" id="447" /> +<TGConnectingPoint num="2" id="448" /> +<TGConnectingPoint num="3" id="449" /> +<TGConnectingPoint num="4" id="450" /> +<TGConnectingPoint num="5" id="451" /> +<TGConnectingPoint num="6" id="452" /> +<TGConnectingPoint num="7" id="453" /> +<TGConnectingPoint num="8" id="454" /> +<TGConnectingPoint num="9" id="455" /> +<TGConnectingPoint num="10" id="456" /> +<TGConnectingPoint num="11" id="457" /> +<TGConnectingPoint num="12" id="458" /> +<TGConnectingPoint num="13" id="459" /> +<TGConnectingPoint num="14" id="460" /> +<TGConnectingPoint num="15" id="461" /> +<TGConnectingPoint num="16" id="462" /> +<TGConnectingPoint num="17" id="463" /> +<TGConnectingPoint num="18" id="464" /> +<TGConnectingPoint num="19" id="465" /> +<TGConnectingPoint num="20" id="466" /> +<TGConnectingPoint num="21" id="467" /> +<TGConnectingPoint num="22" id="468" /> +<TGConnectingPoint num="23" id="469" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="445" > +<father id="470" num="0" /> +<cdparam x="391" y="326" /> +<sizeparam width="100" height="39" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="32" minY="0" maxY="114" /> +<infoparam name="TGComponent" value="beverageReady" /> +<TGConnectingPoint num="0" id="433" /> +<TGConnectingPoint num="1" id="434" /> +<TGConnectingPoint num="2" id="435" /> +<TGConnectingPoint num="3" id="436" /> +<TGConnectingPoint num="4" id="437" /> +<TGConnectingPoint num="5" id="438" /> +<TGConnectingPoint num="6" id="439" /> +<TGConnectingPoint num="7" id="440" /> +<TGConnectingPoint num="8" id="441" /> +<TGConnectingPoint num="9" id="442" /> +<TGConnectingPoint num="10" id="443" /> +<TGConnectingPoint num="11" id="444" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="521" > +<cdparam x="563" y="78" /> +<sizeparam width="268" height="115" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="Wallet" /> +<TGConnectingPoint num="0" id="497" /> +<TGConnectingPoint num="1" id="498" /> +<TGConnectingPoint num="2" id="499" /> +<TGConnectingPoint num="3" id="500" /> +<TGConnectingPoint num="4" id="501" /> +<TGConnectingPoint num="5" id="502" /> +<TGConnectingPoint num="6" id="503" /> +<TGConnectingPoint num="7" id="504" /> +<TGConnectingPoint num="8" id="505" /> +<TGConnectingPoint num="9" id="506" /> +<TGConnectingPoint num="10" id="507" /> +<TGConnectingPoint num="11" id="508" /> +<TGConnectingPoint num="12" id="509" /> +<TGConnectingPoint num="13" id="510" /> +<TGConnectingPoint num="14" id="511" /> +<TGConnectingPoint num="15" id="512" /> +<TGConnectingPoint num="16" id="513" /> +<TGConnectingPoint num="17" id="514" /> +<TGConnectingPoint num="18" id="515" /> +<TGConnectingPoint num="19" id="516" /> +<TGConnectingPoint num="20" id="517" /> +<TGConnectingPoint num="21" id="518" /> +<TGConnectingPoint num="22" id="519" /> +<TGConnectingPoint num="23" id="520" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="483" > +<father id="521" num="0" /> +<cdparam x="581" y="125" /> +<sizeparam width="100" height="39" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="168" minY="0" maxY="76" /> +<infoparam name="TGComponent" value="Start" /> +<TGConnectingPoint num="0" id="471" /> +<TGConnectingPoint num="1" id="472" /> +<TGConnectingPoint num="2" id="473" /> +<TGConnectingPoint num="3" id="474" /> +<TGConnectingPoint num="4" id="475" /> +<TGConnectingPoint num="5" id="476" /> +<TGConnectingPoint num="6" id="477" /> +<TGConnectingPoint num="7" id="478" /> +<TGConnectingPoint num="8" id="479" /> +<TGConnectingPoint num="9" id="480" /> +<TGConnectingPoint num="10" id="481" /> +<TGConnectingPoint num="11" id="482" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5303" id="496" > +<father id="521" num="1" /> +<cdparam x="721" y="133" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="168" minY="0" maxY="65" /> +<infoparam name="TGComponent" value="nbOfCoins" /> +<TGConnectingPoint num="0" id="484" /> +<TGConnectingPoint num="1" id="485" /> +<TGConnectingPoint num="2" id="486" /> +<TGConnectingPoint num="3" id="487" /> +<TGConnectingPoint num="4" id="488" /> +<TGConnectingPoint num="5" id="489" /> +<TGConnectingPoint num="6" id="490" /> +<TGConnectingPoint num="7" id="491" /> +<TGConnectingPoint num="8" id="492" /> +<TGConnectingPoint num="9" id="493" /> +<TGConnectingPoint num="10" id="494" /> +<TGConnectingPoint num="11" id="495" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="533" > +<cdparam x="675" y="204" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="nbOfCoins > 1" /> +<TGConnectingPoint num="0" id="522" /> +<TGConnectingPoint num="1" id="523" /> +<TGConnectingPoint num="2" id="524" /> +<TGConnectingPoint num="3" id="525" /> +<TGConnectingPoint num="4" id="526" /> +<TGConnectingPoint num="5" id="527" /> +<TGConnectingPoint num="6" id="528" /> +<TGConnectingPoint num="7" id="529" /> +<TGConnectingPoint num="8" id="530" /> +<TGConnectingPoint num="9" id="531" /> +<TGConnectingPoint num="10" id="532" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="546" > +<cdparam x="667" y="285" /> +<sizeparam width="59" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="=0" /> +<TGConnectingPoint num="0" id="534" /> +<TGConnectingPoint num="1" id="535" /> +<TGConnectingPoint num="2" id="536" /> +<TGConnectingPoint num="3" id="537" /> +<TGConnectingPoint num="4" id="538" /> +<TGConnectingPoint num="5" id="539" /> +<TGConnectingPoint num="6" id="540" /> +<TGConnectingPoint num="7" id="541" /> +<TGConnectingPoint num="8" id="542" /> +<TGConnectingPoint num="9" id="543" /> +<TGConnectingPoint num="10" id="544" /> +<TGConnectingPoint num="11" id="545" /> +</COMPONENT> + +<COMPONENT type="5301" id="567" > +<cdparam x="546" y="285" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<LS>>" /> +<TGConnectingPoint num="0" id="547" /> +<TGConnectingPoint num="1" id="548" /> +<TGConnectingPoint num="2" id="549" /> +<TGConnectingPoint num="3" id="550" /> +<TGConnectingPoint num="4" id="551" /> +<TGConnectingPoint num="5" id="552" /> +<TGConnectingPoint num="6" id="553" /> +<TGConnectingPoint num="7" id="554" /> +<TGConnectingPoint num="8" id="555" /> +<TGConnectingPoint num="9" id="556" /> +<TGConnectingPoint num="10" id="557" /> +<TGConnectingPoint num="11" id="558" /> +<TGConnectingPoint num="12" id="559" /> +<TGConnectingPoint num="13" id="560" /> +<TGConnectingPoint num="14" id="561" /> +<TGConnectingPoint num="15" id="562" /> +<TGConnectingPoint num="16" id="563" /> +<TGConnectingPoint num="17" id="564" /> +<TGConnectingPoint num="18" id="565" /> +<TGConnectingPoint num="19" id="566" /> +</COMPONENT> + +<COMPONENT type="5309" id="580" > +<cdparam x="594" y="495" /> +<sizeparam width="80" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<=>" /> +<TGConnectingPoint num="0" id="568" /> +<TGConnectingPoint num="1" id="569" /> +<TGConnectingPoint num="2" id="570" /> +<TGConnectingPoint num="3" id="571" /> +<TGConnectingPoint num="4" id="572" /> +<TGConnectingPoint num="5" id="573" /> +<TGConnectingPoint num="6" id="574" /> +<TGConnectingPoint num="7" id="575" /> +<TGConnectingPoint num="8" id="576" /> +<TGConnectingPoint num="9" id="577" /> +<TGConnectingPoint num="10" id="578" /> +<TGConnectingPoint num="11" id="579" /> +</COMPONENT> + +<COMPONENT type="5308" id="585" > +<cdparam x="527" y="416" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="prop02" /> +<TGConnectingPoint num="0" id="581" /> +<TGConnectingPoint num="1" id="582" /> +<TGConnectingPoint num="2" id="583" /> +<TGConnectingPoint num="3" id="584" /> +<extraparam> +<liveness data="1" /> +<not data="false" /> +</extraparam> +</COMPONENT> + + +</AvatarPDPanel> + +</Modeling> + + + + +<Modeling type="AVATAR Design" nameTab="AVATAR Design" > +<AVATARBlockDiagramPanel name="AVATAR Block Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<MainCode value="void __user_init() {"/> +<MainCode value="}"/> +<Optimized value="true" /> +<Validated value="Wallet;CoffeeMachine;CoffeeButton;TeaButton;" /> +<Ignored value="" /> + +<CONNECTOR type="5002" id="587" > +<cdparam x="321" y="567" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block1 to Block0" value="" /> +<TGConnectingPoint num="0" id="586" /> +<P1 x="559" y="330" id="648" /> +<P2 x="560" y="377" id="681" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in pushCoffeeButton()" /> +<oso value="out push()" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="589" > +<cdparam x="275" y="114" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="588" /> +<P1 x="306" y="109" id="603" /> +<P2 x="445" y="108" id="677" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in getCoin(int nbOfCoins)" /> +<osd value="out ejectCoin(int nbOfCoins)" /> +<isd value="in getCoin(int nbOfCoins)" /> +<oso value="out putCoin(int nbOfCoins)" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="591" > +<cdparam x="623" y="565" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block1 to Block0" value="" /> +<TGConnectingPoint num="0" id="590" /> +<P1 x="789" y="326" id="623" /> +<P2 x="790" y="377" id="682" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in pushTeaButton()" /> +<oso value="out push()" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<COMPONENT type="5000" id="616" > +<cdparam x="106" y="55" /> +<sizeparam width="200" height="218" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Wallet" /> +<TGConnectingPoint num="0" id="592" /> +<TGConnectingPoint num="1" id="593" /> +<TGConnectingPoint num="2" id="594" /> +<TGConnectingPoint num="3" id="595" /> +<TGConnectingPoint num="4" id="596" /> +<TGConnectingPoint num="5" id="597" /> +<TGConnectingPoint num="6" id="598" /> +<TGConnectingPoint num="7" id="599" /> +<TGConnectingPoint num="8" id="600" /> +<TGConnectingPoint num="9" id="601" /> +<TGConnectingPoint num="10" id="602" /> +<TGConnectingPoint num="11" id="603" /> +<TGConnectingPoint num="12" id="604" /> +<TGConnectingPoint num="13" id="605" /> +<TGConnectingPoint num="14" id="606" /> +<TGConnectingPoint num="15" id="607" /> +<TGConnectingPoint num="16" id="608" /> +<TGConnectingPoint num="17" id="609" /> +<TGConnectingPoint num="18" id="610" /> +<TGConnectingPoint num="19" id="611" /> +<TGConnectingPoint num="20" id="612" /> +<TGConnectingPoint num="21" id="613" /> +<TGConnectingPoint num="22" id="614" /> +<TGConnectingPoint num="23" id="615" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="nbOfCoins" value="2" type="8" typeOther="" /> +<Attribute access="0" id="x" value="1" type="8" typeOther="" /> +<Attribute access="0" id="minUserDelay" value="50" type="8" typeOther="" /> +<Attribute access="0" id="maxUserDelay" value="70" type="8" typeOther="" /> +<Method value="contentOfWallet(int nbOfCoins)" /> +<Signal value="in getCoin(int nbOfCoins)" /> +<Signal value="out putCoin(int nbOfCoins)" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="691" > +<cdparam x="445" y="19" /> +<sizeparam width="461" height="358" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="667" /> +<TGConnectingPoint num="1" id="668" /> +<TGConnectingPoint num="2" id="669" /> +<TGConnectingPoint num="3" id="670" /> +<TGConnectingPoint num="4" id="671" /> +<TGConnectingPoint num="5" id="672" /> +<TGConnectingPoint num="6" id="673" /> +<TGConnectingPoint num="7" id="674" /> +<TGConnectingPoint num="8" id="675" /> +<TGConnectingPoint num="9" id="676" /> +<TGConnectingPoint num="10" id="677" /> +<TGConnectingPoint num="11" id="678" /> +<TGConnectingPoint num="12" id="679" /> +<TGConnectingPoint num="13" id="680" /> +<TGConnectingPoint num="14" id="681" /> +<TGConnectingPoint num="15" id="682" /> +<TGConnectingPoint num="16" id="683" /> +<TGConnectingPoint num="17" id="684" /> +<TGConnectingPoint num="18" id="685" /> +<TGConnectingPoint num="19" id="686" /> +<TGConnectingPoint num="20" id="687" /> +<TGConnectingPoint num="21" id="688" /> +<TGConnectingPoint num="22" id="689" /> +<TGConnectingPoint num="23" id="690" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="teaMinDelay" value="3" type="8" typeOther="" /> +<Attribute access="0" id="teaMaxDelay" value="8" type="8" typeOther="" /> +<Attribute access="0" id="coffeeMinDelay" value="5" type="8" typeOther="" /> +<Attribute access="0" id="coffeeMaxDelay" value="10" type="8" typeOther="" /> +<Attribute access="0" id="coinDelay" value="50" type="8" typeOther="" /> +<Attribute access="0" id="x" value="0" type="8" typeOther="" /> +<Attribute access="0" id="nbOfCoins" value="0" type="8" typeOther="" /> +<Method value="beverageReady()" /> +<Signal value="in pushCoffeeButton()" /> +<Signal value="in pushTeaButton()" /> +<Signal value="in getCoin(int nbOfCoins)" /> +<Signal value="out ejectCoin(int nbOfCoins)" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5000" id="641" > +<father id="691" num="0" /> +<cdparam x="695" y="224" /> +<sizeparam width="189" height="102" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="272" minY="0" maxY="256" /> +<infoparam name="Block1" value="TeaButton" /> +<TGConnectingPoint num="0" id="617" /> +<TGConnectingPoint num="1" id="618" /> +<TGConnectingPoint num="2" id="619" /> +<TGConnectingPoint num="3" id="620" /> +<TGConnectingPoint num="4" id="621" /> +<TGConnectingPoint num="5" id="622" /> +<TGConnectingPoint num="6" id="623" /> +<TGConnectingPoint num="7" id="624" /> +<TGConnectingPoint num="8" id="625" /> +<TGConnectingPoint num="9" id="626" /> +<TGConnectingPoint num="10" id="627" /> +<TGConnectingPoint num="11" id="628" /> +<TGConnectingPoint num="12" id="629" /> +<TGConnectingPoint num="13" id="630" /> +<TGConnectingPoint num="14" id="631" /> +<TGConnectingPoint num="15" id="632" /> +<TGConnectingPoint num="16" id="633" /> +<TGConnectingPoint num="17" id="634" /> +<TGConnectingPoint num="18" id="635" /> +<TGConnectingPoint num="19" id="636" /> +<TGConnectingPoint num="20" id="637" /> +<TGConnectingPoint num="21" id="638" /> +<TGConnectingPoint num="22" id="639" /> +<TGConnectingPoint num="23" id="640" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="mechanicalDelay" value="10" type="8" typeOther="" /> +<Signal value="out push()" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="666" > +<father id="691" num="1" /> +<cdparam x="464" y="228" /> +<sizeparam width="190" height="102" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="271" minY="0" maxY="256" /> +<infoparam name="Block1" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="642" /> +<TGConnectingPoint num="1" id="643" /> +<TGConnectingPoint num="2" id="644" /> +<TGConnectingPoint num="3" id="645" /> +<TGConnectingPoint num="4" id="646" /> +<TGConnectingPoint num="5" id="647" /> +<TGConnectingPoint num="6" id="648" /> +<TGConnectingPoint num="7" id="649" /> +<TGConnectingPoint num="8" id="650" /> +<TGConnectingPoint num="9" id="651" /> +<TGConnectingPoint num="10" id="652" /> +<TGConnectingPoint num="11" id="653" /> +<TGConnectingPoint num="12" id="654" /> +<TGConnectingPoint num="13" id="655" /> +<TGConnectingPoint num="14" id="656" /> +<TGConnectingPoint num="15" id="657" /> +<TGConnectingPoint num="16" id="658" /> +<TGConnectingPoint num="17" id="659" /> +<TGConnectingPoint num="18" id="660" /> +<TGConnectingPoint num="19" id="661" /> +<TGConnectingPoint num="20" id="662" /> +<TGConnectingPoint num="21" id="663" /> +<TGConnectingPoint num="22" id="664" /> +<TGConnectingPoint num="23" id="665" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="mechanicalDelay" value="10" type="8" typeOther="" /> +<Signal value="out push()" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARBlockDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Wallet" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="698" > +<cdparam x="516" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="697" /> +<P1 x="485" y="219" id="739" /> +<P2 x="485" y="274" id="750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="696" > +<father id="698" num="0" /> +<cdparam x="493" y="251" /> +<sizeparam width="161" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="692" /> +<TGConnectingPoint num="1" id="693" /> +<TGConnectingPoint num="2" id="694" /> +<TGConnectingPoint num="3" id="695" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = nbOfCoins + x" /> +<actions value="contentOfWallet(nbOfCoins)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="705" > +<cdparam x="382" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="704" /> +<P1 x="382" y="165" id="846" /> +<P2 x="485" y="189" id="738" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="703" > +<father id="705" num="0" /> +<cdparam x="382" y="205" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="699" /> +<TGConnectingPoint num="1" id="700" /> +<TGConnectingPoint num="2" id="701" /> +<TGConnectingPoint num="3" id="702" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="712" > +<cdparam x="223" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="711" /> +<P1 x="251" y="231" id="728" /> +<P2 x="252" y="300" id="791" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="710" > +<father id="712" num="0" /> +<cdparam x="175" y="246" /> +<sizeparam width="205" height="45" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="706" /> +<TGConnectingPoint num="1" id="707" /> +<TGConnectingPoint num="2" id="708" /> +<TGConnectingPoint num="3" id="709" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="minUserDelay" /> +<afterMax value="maxUserDelay" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = nbOfCoins - x" /> +<actions value="contentOfWallet(nbOfCoins)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="719" > +<cdparam x="357" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="718" /> +<P1 x="357" y="165" id="845" /> +<P2 x="251" y="201" id="727" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="717" > +<father id="719" num="0" /> +<cdparam x="220" y="174" /> +<sizeparam width="93" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="713" /> +<TGConnectingPoint num="1" id="714" /> +<TGConnectingPoint num="2" id="715" /> +<TGConnectingPoint num="3" id="716" /> +<extraparam> +<guard value="[nbOfCoins > 0]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="726" > +<cdparam x="369" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="725" /> +<P1 x="370" y="64" id="872" /> +<P2 x="370" y="135" id="832" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="724" > +<father id="726" num="0" /> +<cdparam x="376" y="105" /> +<sizeparam width="156" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="720" /> +<TGConnectingPoint num="1" id="721" /> +<TGConnectingPoint num="2" id="722" /> +<TGConnectingPoint num="3" id="723" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="contentOfWallet(nbOfCoins)" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="737" > +<cdparam x="217" y="206" /> +<sizeparam width="69" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="putCoin(x)" /> +<TGConnectingPoint num="0" id="727" /> +<TGConnectingPoint num="1" id="728" /> +<TGConnectingPoint num="2" id="729" /> +<TGConnectingPoint num="3" id="730" /> +<TGConnectingPoint num="4" id="731" /> +<TGConnectingPoint num="5" id="732" /> +<TGConnectingPoint num="6" id="733" /> +<TGConnectingPoint num="7" id="734" /> +<TGConnectingPoint num="8" id="735" /> +<TGConnectingPoint num="9" id="736" /> +</COMPONENT> + +<COMPONENT type="5104" id="748" > +<cdparam x="447" y="194" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="getCoin(x)" /> +<TGConnectingPoint num="0" id="738" /> +<TGConnectingPoint num="1" id="739" /> +<TGConnectingPoint num="2" id="740" /> +<TGConnectingPoint num="3" id="741" /> +<TGConnectingPoint num="4" id="742" /> +<TGConnectingPoint num="5" id="743" /> +<TGConnectingPoint num="6" id="744" /> +<TGConnectingPoint num="7" id="745" /> +<TGConnectingPoint num="8" id="746" /> +<TGConnectingPoint num="9" id="747" /> +</COMPONENT> + +<COMPONENT type="5106" id="789" > +<cdparam x="460" y="274" /> +<sizeparam width="50" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="749" /> +<TGConnectingPoint num="1" id="750" /> +<TGConnectingPoint num="2" id="751" /> +<TGConnectingPoint num="3" id="752" /> +<TGConnectingPoint num="4" id="753" /> +<TGConnectingPoint num="5" id="754" /> +<TGConnectingPoint num="6" id="755" /> +<TGConnectingPoint num="7" id="756" /> +<TGConnectingPoint num="8" id="757" /> +<TGConnectingPoint num="9" id="758" /> +<TGConnectingPoint num="10" id="759" /> +<TGConnectingPoint num="11" id="760" /> +<TGConnectingPoint num="12" id="761" /> +<TGConnectingPoint num="13" id="762" /> +<TGConnectingPoint num="14" id="763" /> +<TGConnectingPoint num="15" id="764" /> +<TGConnectingPoint num="16" id="765" /> +<TGConnectingPoint num="17" id="766" /> +<TGConnectingPoint num="18" id="767" /> +<TGConnectingPoint num="19" id="768" /> +<TGConnectingPoint num="20" id="769" /> +<TGConnectingPoint num="21" id="770" /> +<TGConnectingPoint num="22" id="771" /> +<TGConnectingPoint num="23" id="772" /> +<TGConnectingPoint num="24" id="773" /> +<TGConnectingPoint num="25" id="774" /> +<TGConnectingPoint num="26" id="775" /> +<TGConnectingPoint num="27" id="776" /> +<TGConnectingPoint num="28" id="777" /> +<TGConnectingPoint num="29" id="778" /> +<TGConnectingPoint num="30" id="779" /> +<TGConnectingPoint num="31" id="780" /> +<TGConnectingPoint num="32" id="781" /> +<TGConnectingPoint num="33" id="782" /> +<TGConnectingPoint num="34" id="783" /> +<TGConnectingPoint num="35" id="784" /> +<TGConnectingPoint num="36" id="785" /> +<TGConnectingPoint num="37" id="786" /> +<TGConnectingPoint num="38" id="787" /> +<TGConnectingPoint num="39" id="788" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="830" > +<cdparam x="227" y="300" /> +<sizeparam width="50" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="790" /> +<TGConnectingPoint num="1" id="791" /> +<TGConnectingPoint num="2" id="792" /> +<TGConnectingPoint num="3" id="793" /> +<TGConnectingPoint num="4" id="794" /> +<TGConnectingPoint num="5" id="795" /> +<TGConnectingPoint num="6" id="796" /> +<TGConnectingPoint num="7" id="797" /> +<TGConnectingPoint num="8" id="798" /> +<TGConnectingPoint num="9" id="799" /> +<TGConnectingPoint num="10" id="800" /> +<TGConnectingPoint num="11" id="801" /> +<TGConnectingPoint num="12" id="802" /> +<TGConnectingPoint num="13" id="803" /> +<TGConnectingPoint num="14" id="804" /> +<TGConnectingPoint num="15" id="805" /> +<TGConnectingPoint num="16" id="806" /> +<TGConnectingPoint num="17" id="807" /> +<TGConnectingPoint num="18" id="808" /> +<TGConnectingPoint num="19" id="809" /> +<TGConnectingPoint num="20" id="810" /> +<TGConnectingPoint num="21" id="811" /> +<TGConnectingPoint num="22" id="812" /> +<TGConnectingPoint num="23" id="813" /> +<TGConnectingPoint num="24" id="814" /> +<TGConnectingPoint num="25" id="815" /> +<TGConnectingPoint num="26" id="816" /> +<TGConnectingPoint num="27" id="817" /> +<TGConnectingPoint num="28" id="818" /> +<TGConnectingPoint num="29" id="819" /> +<TGConnectingPoint num="30" id="820" /> +<TGConnectingPoint num="31" id="821" /> +<TGConnectingPoint num="32" id="822" /> +<TGConnectingPoint num="33" id="823" /> +<TGConnectingPoint num="34" id="824" /> +<TGConnectingPoint num="35" id="825" /> +<TGConnectingPoint num="36" id="826" /> +<TGConnectingPoint num="37" id="827" /> +<TGConnectingPoint num="38" id="828" /> +<TGConnectingPoint num="39" id="829" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="871" > +<cdparam x="345" y="135" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="831" /> +<TGConnectingPoint num="1" id="832" /> +<TGConnectingPoint num="2" id="833" /> +<TGConnectingPoint num="3" id="834" /> +<TGConnectingPoint num="4" id="835" /> +<TGConnectingPoint num="5" id="836" /> +<TGConnectingPoint num="6" id="837" /> +<TGConnectingPoint num="7" id="838" /> +<TGConnectingPoint num="8" id="839" /> +<TGConnectingPoint num="9" id="840" /> +<TGConnectingPoint num="10" id="841" /> +<TGConnectingPoint num="11" id="842" /> +<TGConnectingPoint num="12" id="843" /> +<TGConnectingPoint num="13" id="844" /> +<TGConnectingPoint num="14" id="845" /> +<TGConnectingPoint num="15" id="846" /> +<TGConnectingPoint num="16" id="847" /> +<TGConnectingPoint num="17" id="848" /> +<TGConnectingPoint num="18" id="849" /> +<TGConnectingPoint num="19" id="850" /> +<TGConnectingPoint num="20" id="851" /> +<TGConnectingPoint num="21" id="852" /> +<TGConnectingPoint num="22" id="853" /> +<TGConnectingPoint num="23" id="854" /> +<TGConnectingPoint num="24" id="855" /> +<TGConnectingPoint num="25" id="856" /> +<TGConnectingPoint num="26" id="857" /> +<TGConnectingPoint num="27" id="858" /> +<TGConnectingPoint num="28" id="859" /> +<TGConnectingPoint num="29" id="860" /> +<TGConnectingPoint num="30" id="861" /> +<TGConnectingPoint num="31" id="862" /> +<TGConnectingPoint num="32" id="863" /> +<TGConnectingPoint num="33" id="864" /> +<TGConnectingPoint num="34" id="865" /> +<TGConnectingPoint num="35" id="866" /> +<TGConnectingPoint num="36" id="867" /> +<TGConnectingPoint num="37" id="868" /> +<TGConnectingPoint num="38" id="869" /> +<TGConnectingPoint num="39" id="870" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="873" > +<cdparam x="363" y="44" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="872" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="CoffeeMachine" minX="10" maxX="1400" minY="10" maxY="1400" > +<CONNECTOR type="5102" id="880" > +<cdparam x="691" y="288" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="879" /> +<P1 x="699" y="289" id="1018" /> +<P2 x="699" y="316" id="990" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="878" > +<father id="880" num="0" /> +<cdparam x="691" y="328" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="874" /> +<TGConnectingPoint num="1" id="875" /> +<TGConnectingPoint num="2" id="876" /> +<TGConnectingPoint num="3" id="877" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="887" > +<cdparam x="481" y="501" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="886" /> +<P1 x="437" y="525" id="1220" /> +<P2 x="323" y="748" id="1146" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="885" > +<father id="887" num="0" /> +<cdparam x="420" y="552" /> +<sizeparam width="85" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="881" /> +<TGConnectingPoint num="1" id="882" /> +<TGConnectingPoint num="2" id="883" /> +<TGConnectingPoint num="3" id="884" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = 0" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="894" > +<cdparam x="555" y="559" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="893" /> +<P1 x="321" y="455" id="1247" /> +<P2 x="437" y="495" id="1219" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="892" > +<father id="894" num="0" /> +<cdparam x="395" y="448" /> +<sizeparam width="94" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="888" /> +<TGConnectingPoint num="1" id="889" /> +<TGConnectingPoint num="2" id="890" /> +<TGConnectingPoint num="3" id="891" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="coinDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="901" > +<cdparam x="355" y="545" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="900" /> +<P1 x="293" y="552" id="1285" /> +<P2 x="289" y="748" id="1138" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="899" > +<father id="901" num="0" /> +<cdparam x="284" y="594" /> +<sizeparam width="228" height="45" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="895" /> +<TGConnectingPoint num="1" id="896" /> +<TGConnectingPoint num="2" id="897" /> +<TGConnectingPoint num="3" id="898" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="teaMinDelay" /> +<computeMax value="teaMaxDelay" /> +<actions value="nbOfCoins = 0" /> +<actions value="beverageReady()" /> +<filesToIncludeLine value="" /> +<codeToIncludeLine value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="908" > +<cdparam x="295" y="465" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="907" /> +<P1 x="288" y="475" id="1258" /> +<P2 x="293" y="522" id="1284" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="906" > +<father id="908" num="0" /> +<cdparam x="295" y="505" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="902" /> +<TGConnectingPoint num="1" id="903" /> +<TGConnectingPoint num="2" id="904" /> +<TGConnectingPoint num="3" id="905" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="915" > +<cdparam x="148" y="549" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="914" /> +<P1 x="121" y="552" id="1231" /> +<P2 x="255" y="748" id="1145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="913" > +<father id="915" num="0" /> +<cdparam x="32" y="587" /> +<sizeparam width="262" height="45" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="909" /> +<TGConnectingPoint num="1" id="910" /> +<TGConnectingPoint num="2" id="911" /> +<TGConnectingPoint num="3" id="912" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="coffeeMinDelay" /> +<computeMax value="coffeeMaxDelay" /> +<actions value="nbOfCoins = 0" /> +<actions value="beverageReady()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="922" > +<cdparam x="229" y="465" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="921" /> +<P1 x="222" y="475" id="1257" /> +<P2 x="121" y="522" id="1230" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="920" > +<father id="922" num="0" /> +<cdparam x="229" y="505" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="916" /> +<TGConnectingPoint num="1" id="917" /> +<TGConnectingPoint num="2" id="918" /> +<TGConnectingPoint num="3" id="919" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="929" > +<cdparam x="280" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="928" /> +<P1 x="256" y="419" id="1241" /> +<P2 x="255" y="435" id="1244" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="927" > +<father id="929" num="0" /> +<cdparam x="280" y="460" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="923" /> +<TGConnectingPoint num="1" id="924" /> +<TGConnectingPoint num="2" id="925" /> +<TGConnectingPoint num="3" id="926" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="936" > +<cdparam x="667" y="346" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="935" /> +<P1 x="699" y="346" id="991" /> +<P2 x="699" y="381" id="1179" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="934" > +<father id="936" num="0" /> +<cdparam x="707" y="368" /> +<sizeparam width="85" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="930" /> +<TGConnectingPoint num="1" id="931" /> +<TGConnectingPoint num="2" id="932" /> +<TGConnectingPoint num="3" id="933" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = 0" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="943" > +<cdparam x="348" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="942" /> +<P1 x="388" y="208" id="1057" /> +<P2 x="649" y="264" id="1015" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="941" > +<father id="943" num="0" /> +<cdparam x="411" y="206" /> +<sizeparam width="94" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="937" /> +<TGConnectingPoint num="1" id="938" /> +<TGConnectingPoint num="2" id="939" /> +<TGConnectingPoint num="3" id="940" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="coinDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="950" > +<cdparam x="243" y="319" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="949" /> +<P1 x="277" y="305" id="1002" /> +<P2 x="306" y="370" id="1296" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="948" > +<father id="950" num="0" /> +<cdparam x="243" y="359" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="944" /> +<TGConnectingPoint num="1" id="945" /> +<TGConnectingPoint num="2" id="946" /> +<TGConnectingPoint num="3" id="947" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="957" > +<cdparam x="270" y="224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="956" /> +<P1 x="270" y="228" id="1067" /> +<P2 x="277" y="275" id="1001" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="955" > +<father id="957" num="0" /> +<cdparam x="270" y="264" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="951" /> +<TGConnectingPoint num="1" id="952" /> +<TGConnectingPoint num="2" id="953" /> +<TGConnectingPoint num="3" id="954" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="964" > +<cdparam x="309" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="963" /> +<P1 x="306" y="166" id="980" /> +<P2 x="309" y="188" id="1054" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="962" > +<father id="964" num="0" /> +<cdparam x="328" y="178" /> +<sizeparam width="165" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="958" /> +<TGConnectingPoint num="1" id="959" /> +<TGConnectingPoint num="2" id="960" /> +<TGConnectingPoint num="3" id="961" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="nbOfCoins = nbOfCoins + x" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="971" > +<cdparam x="303" y="103" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="970" /> +<P1 x="303" y="103" id="1102" /> +<P2 x="306" y="136" id="979" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="969" > +<father id="971" num="0" /> +<cdparam x="303" y="143" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="965" /> +<TGConnectingPoint num="1" id="966" /> +<TGConnectingPoint num="2" id="967" /> +<TGConnectingPoint num="3" id="968" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="978" > +<cdparam x="303" y="40" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="977" /> +<P1 x="303" y="40" id="1094" /> +<P2 x="303" y="63" id="1097" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="976" > +<father id="978" num="0" /> +<cdparam x="303" y="80" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="972" /> +<TGConnectingPoint num="1" id="973" /> +<TGConnectingPoint num="2" id="974" /> +<TGConnectingPoint num="3" id="975" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5104" id="989" > +<cdparam x="268" y="141" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Receive signal" value="getCoin(x)" /> +<TGConnectingPoint num="0" id="979" /> +<TGConnectingPoint num="1" id="980" /> +<TGConnectingPoint num="2" id="981" /> +<TGConnectingPoint num="3" id="982" /> +<TGConnectingPoint num="4" id="983" /> +<TGConnectingPoint num="5" id="984" /> +<TGConnectingPoint num="6" id="985" /> +<TGConnectingPoint num="7" id="986" /> +<TGConnectingPoint num="8" id="987" /> +<TGConnectingPoint num="9" id="988" /> +</COMPONENT> + +<COMPONENT type="5103" id="1000" > +<cdparam x="634" y="321" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Send signal" value="ejectCoin(nbOfCoins)" /> +<TGConnectingPoint num="0" id="990" /> +<TGConnectingPoint num="1" id="991" /> +<TGConnectingPoint num="2" id="992" /> +<TGConnectingPoint num="3" id="993" /> +<TGConnectingPoint num="4" id="994" /> +<TGConnectingPoint num="5" id="995" /> +<TGConnectingPoint num="6" id="996" /> +<TGConnectingPoint num="7" id="997" /> +<TGConnectingPoint num="8" id="998" /> +<TGConnectingPoint num="9" id="999" /> +</COMPONENT> + +<COMPONENT type="5104" id="1011" > +<cdparam x="239" y="280" /> +<sizeparam width="76" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Receive signal" value="getCoin(x)" /> +<TGConnectingPoint num="0" id="1001" /> +<TGConnectingPoint num="1" id="1002" /> +<TGConnectingPoint num="2" id="1003" /> +<TGConnectingPoint num="3" id="1004" /> +<TGConnectingPoint num="4" id="1005" /> +<TGConnectingPoint num="5" id="1006" /> +<TGConnectingPoint num="6" id="1007" /> +<TGConnectingPoint num="7" id="1008" /> +<TGConnectingPoint num="8" id="1009" /> +<TGConnectingPoint num="9" id="1010" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="5106" id="1052" > +<cdparam x="649" y="239" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="ejectState" /> +<TGConnectingPoint num="0" id="1012" /> +<TGConnectingPoint num="1" id="1013" /> +<TGConnectingPoint num="2" id="1014" /> +<TGConnectingPoint num="3" id="1015" /> +<TGConnectingPoint num="4" id="1016" /> +<TGConnectingPoint num="5" id="1017" /> +<TGConnectingPoint num="6" id="1018" /> +<TGConnectingPoint num="7" id="1019" /> +<TGConnectingPoint num="8" id="1020" /> +<TGConnectingPoint num="9" id="1021" /> +<TGConnectingPoint num="10" id="1022" /> +<TGConnectingPoint num="11" id="1023" /> +<TGConnectingPoint num="12" id="1024" /> +<TGConnectingPoint num="13" id="1025" /> +<TGConnectingPoint num="14" id="1026" /> +<TGConnectingPoint num="15" id="1027" /> +<TGConnectingPoint num="16" id="1028" /> +<TGConnectingPoint num="17" id="1029" /> +<TGConnectingPoint num="18" id="1030" /> +<TGConnectingPoint num="19" id="1031" /> +<TGConnectingPoint num="20" id="1032" /> +<TGConnectingPoint num="21" id="1033" /> +<TGConnectingPoint num="22" id="1034" /> +<TGConnectingPoint num="23" id="1035" /> +<TGConnectingPoint num="24" id="1036" /> +<TGConnectingPoint num="25" id="1037" /> +<TGConnectingPoint num="26" id="1038" /> +<TGConnectingPoint num="27" id="1039" /> +<TGConnectingPoint num="28" id="1040" /> +<TGConnectingPoint num="29" id="1041" /> +<TGConnectingPoint num="30" id="1042" /> +<TGConnectingPoint num="31" id="1043" /> +<TGConnectingPoint num="32" id="1044" /> +<TGConnectingPoint num="33" id="1045" /> +<TGConnectingPoint num="34" id="1046" /> +<TGConnectingPoint num="35" id="1047" /> +<TGConnectingPoint num="36" id="1048" /> +<TGConnectingPoint num="37" id="1049" /> +<TGConnectingPoint num="38" id="1050" /> +<TGConnectingPoint num="39" id="1051" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1093" > +<cdparam x="231" y="188" /> +<sizeparam width="157" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForSecondCoin" /> +<TGConnectingPoint num="0" id="1053" /> +<TGConnectingPoint num="1" id="1054" /> +<TGConnectingPoint num="2" id="1055" /> +<TGConnectingPoint num="3" id="1056" /> +<TGConnectingPoint num="4" id="1057" /> +<TGConnectingPoint num="5" id="1058" /> +<TGConnectingPoint num="6" id="1059" /> +<TGConnectingPoint num="7" id="1060" /> +<TGConnectingPoint num="8" id="1061" /> +<TGConnectingPoint num="9" id="1062" /> +<TGConnectingPoint num="10" id="1063" /> +<TGConnectingPoint num="11" id="1064" /> +<TGConnectingPoint num="12" id="1065" /> +<TGConnectingPoint num="13" id="1066" /> +<TGConnectingPoint num="14" id="1067" /> +<TGConnectingPoint num="15" id="1068" /> +<TGConnectingPoint num="16" id="1069" /> +<TGConnectingPoint num="17" id="1070" /> +<TGConnectingPoint num="18" id="1071" /> +<TGConnectingPoint num="19" id="1072" /> +<TGConnectingPoint num="20" id="1073" /> +<TGConnectingPoint num="21" id="1074" /> +<TGConnectingPoint num="22" id="1075" /> +<TGConnectingPoint num="23" id="1076" /> +<TGConnectingPoint num="24" id="1077" /> +<TGConnectingPoint num="25" id="1078" /> +<TGConnectingPoint num="26" id="1079" /> +<TGConnectingPoint num="27" id="1080" /> +<TGConnectingPoint num="28" id="1081" /> +<TGConnectingPoint num="29" id="1082" /> +<TGConnectingPoint num="30" id="1083" /> +<TGConnectingPoint num="31" id="1084" /> +<TGConnectingPoint num="32" id="1085" /> +<TGConnectingPoint num="33" id="1086" /> +<TGConnectingPoint num="34" id="1087" /> +<TGConnectingPoint num="35" id="1088" /> +<TGConnectingPoint num="36" id="1089" /> +<TGConnectingPoint num="37" id="1090" /> +<TGConnectingPoint num="38" id="1091" /> +<TGConnectingPoint num="39" id="1092" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="1095" > +<cdparam x="296" y="20" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1094" /> +</COMPONENT> + +<COMPONENT type="5106" id="1136" > +<cdparam x="235" y="63" /> +<sizeparam width="137" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForFirstCoin" /> +<TGConnectingPoint num="0" id="1096" /> +<TGConnectingPoint num="1" id="1097" /> +<TGConnectingPoint num="2" id="1098" /> +<TGConnectingPoint num="3" id="1099" /> +<TGConnectingPoint num="4" id="1100" /> +<TGConnectingPoint num="5" id="1101" /> +<TGConnectingPoint num="6" id="1102" /> +<TGConnectingPoint num="7" id="1103" /> +<TGConnectingPoint num="8" id="1104" /> +<TGConnectingPoint num="9" id="1105" /> +<TGConnectingPoint num="10" id="1106" /> +<TGConnectingPoint num="11" id="1107" /> +<TGConnectingPoint num="12" id="1108" /> +<TGConnectingPoint num="13" id="1109" /> +<TGConnectingPoint num="14" id="1110" /> +<TGConnectingPoint num="15" id="1111" /> +<TGConnectingPoint num="16" id="1112" /> +<TGConnectingPoint num="17" id="1113" /> +<TGConnectingPoint num="18" id="1114" /> +<TGConnectingPoint num="19" id="1115" /> +<TGConnectingPoint num="20" id="1116" /> +<TGConnectingPoint num="21" id="1117" /> +<TGConnectingPoint num="22" id="1118" /> +<TGConnectingPoint num="23" id="1119" /> +<TGConnectingPoint num="24" id="1120" /> +<TGConnectingPoint num="25" id="1121" /> +<TGConnectingPoint num="26" id="1122" /> +<TGConnectingPoint num="27" id="1123" /> +<TGConnectingPoint num="28" id="1124" /> +<TGConnectingPoint num="29" id="1125" /> +<TGConnectingPoint num="30" id="1126" /> +<TGConnectingPoint num="31" id="1127" /> +<TGConnectingPoint num="32" id="1128" /> +<TGConnectingPoint num="33" id="1129" /> +<TGConnectingPoint num="34" id="1130" /> +<TGConnectingPoint num="35" id="1131" /> +<TGConnectingPoint num="36" id="1132" /> +<TGConnectingPoint num="37" id="1133" /> +<TGConnectingPoint num="38" id="1134" /> +<TGConnectingPoint num="39" id="1135" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1177" > +<cdparam x="221" y="748" /> +<sizeparam width="137" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForFirstCoin" /> +<TGConnectingPoint num="0" id="1137" /> +<TGConnectingPoint num="1" id="1138" /> +<TGConnectingPoint num="2" id="1139" /> +<TGConnectingPoint num="3" id="1140" /> +<TGConnectingPoint num="4" id="1141" /> +<TGConnectingPoint num="5" id="1142" /> +<TGConnectingPoint num="6" id="1143" /> +<TGConnectingPoint num="7" id="1144" /> +<TGConnectingPoint num="8" id="1145" /> +<TGConnectingPoint num="9" id="1146" /> +<TGConnectingPoint num="10" id="1147" /> +<TGConnectingPoint num="11" id="1148" /> +<TGConnectingPoint num="12" id="1149" /> +<TGConnectingPoint num="13" id="1150" /> +<TGConnectingPoint num="14" id="1151" /> +<TGConnectingPoint num="15" id="1152" /> +<TGConnectingPoint num="16" id="1153" /> +<TGConnectingPoint num="17" id="1154" /> +<TGConnectingPoint num="18" id="1155" /> +<TGConnectingPoint num="19" id="1156" /> +<TGConnectingPoint num="20" id="1157" /> +<TGConnectingPoint num="21" id="1158" /> +<TGConnectingPoint num="22" id="1159" /> +<TGConnectingPoint num="23" id="1160" /> +<TGConnectingPoint num="24" id="1161" /> +<TGConnectingPoint num="25" id="1162" /> +<TGConnectingPoint num="26" id="1163" /> +<TGConnectingPoint num="27" id="1164" /> +<TGConnectingPoint num="28" id="1165" /> +<TGConnectingPoint num="29" id="1166" /> +<TGConnectingPoint num="30" id="1167" /> +<TGConnectingPoint num="31" id="1168" /> +<TGConnectingPoint num="32" id="1169" /> +<TGConnectingPoint num="33" id="1170" /> +<TGConnectingPoint num="34" id="1171" /> +<TGConnectingPoint num="35" id="1172" /> +<TGConnectingPoint num="36" id="1173" /> +<TGConnectingPoint num="37" id="1174" /> +<TGConnectingPoint num="38" id="1175" /> +<TGConnectingPoint num="39" id="1176" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1218" > +<cdparam x="631" y="381" /> +<sizeparam width="137" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="WaitingForFirstCoin" /> +<TGConnectingPoint num="0" id="1178" /> +<TGConnectingPoint num="1" id="1179" /> +<TGConnectingPoint num="2" id="1180" /> +<TGConnectingPoint num="3" id="1181" /> +<TGConnectingPoint num="4" id="1182" /> +<TGConnectingPoint num="5" id="1183" /> +<TGConnectingPoint num="6" id="1184" /> +<TGConnectingPoint num="7" id="1185" /> +<TGConnectingPoint num="8" id="1186" /> +<TGConnectingPoint num="9" id="1187" /> +<TGConnectingPoint num="10" id="1188" /> +<TGConnectingPoint num="11" id="1189" /> +<TGConnectingPoint num="12" id="1190" /> +<TGConnectingPoint num="13" id="1191" /> +<TGConnectingPoint num="14" id="1192" /> +<TGConnectingPoint num="15" id="1193" /> +<TGConnectingPoint num="16" id="1194" /> +<TGConnectingPoint num="17" id="1195" /> +<TGConnectingPoint num="18" id="1196" /> +<TGConnectingPoint num="19" id="1197" /> +<TGConnectingPoint num="20" id="1198" /> +<TGConnectingPoint num="21" id="1199" /> +<TGConnectingPoint num="22" id="1200" /> +<TGConnectingPoint num="23" id="1201" /> +<TGConnectingPoint num="24" id="1202" /> +<TGConnectingPoint num="25" id="1203" /> +<TGConnectingPoint num="26" id="1204" /> +<TGConnectingPoint num="27" id="1205" /> +<TGConnectingPoint num="28" id="1206" /> +<TGConnectingPoint num="29" id="1207" /> +<TGConnectingPoint num="30" id="1208" /> +<TGConnectingPoint num="31" id="1209" /> +<TGConnectingPoint num="32" id="1210" /> +<TGConnectingPoint num="33" id="1211" /> +<TGConnectingPoint num="34" id="1212" /> +<TGConnectingPoint num="35" id="1213" /> +<TGConnectingPoint num="36" id="1214" /> +<TGConnectingPoint num="37" id="1215" /> +<TGConnectingPoint num="38" id="1216" /> +<TGConnectingPoint num="39" id="1217" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1335" > +<cdparam x="18" y="370" /> +<sizeparam width="577" height="354" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="state0" value="Beverage" /> +<TGConnectingPoint num="0" id="1295" /> +<TGConnectingPoint num="1" id="1296" /> +<TGConnectingPoint num="2" id="1297" /> +<TGConnectingPoint num="3" id="1298" /> +<TGConnectingPoint num="4" id="1299" /> +<TGConnectingPoint num="5" id="1300" /> +<TGConnectingPoint num="6" id="1301" /> +<TGConnectingPoint num="7" id="1302" /> +<TGConnectingPoint num="8" id="1303" /> +<TGConnectingPoint num="9" id="1304" /> +<TGConnectingPoint num="10" id="1305" /> +<TGConnectingPoint num="11" id="1306" /> +<TGConnectingPoint num="12" id="1307" /> +<TGConnectingPoint num="13" id="1308" /> +<TGConnectingPoint num="14" id="1309" /> +<TGConnectingPoint num="15" id="1310" /> +<TGConnectingPoint num="16" id="1311" /> +<TGConnectingPoint num="17" id="1312" /> +<TGConnectingPoint num="18" id="1313" /> +<TGConnectingPoint num="19" id="1314" /> +<TGConnectingPoint num="20" id="1315" /> +<TGConnectingPoint num="21" id="1316" /> +<TGConnectingPoint num="22" id="1317" /> +<TGConnectingPoint num="23" id="1318" /> +<TGConnectingPoint num="24" id="1319" /> +<TGConnectingPoint num="25" id="1320" /> +<TGConnectingPoint num="26" id="1321" /> +<TGConnectingPoint num="27" id="1322" /> +<TGConnectingPoint num="28" id="1323" /> +<TGConnectingPoint num="29" id="1324" /> +<TGConnectingPoint num="30" id="1325" /> +<TGConnectingPoint num="31" id="1326" /> +<TGConnectingPoint num="32" id="1327" /> +<TGConnectingPoint num="33" id="1328" /> +<TGConnectingPoint num="34" id="1329" /> +<TGConnectingPoint num="35" id="1330" /> +<TGConnectingPoint num="36" id="1331" /> +<TGConnectingPoint num="37" id="1332" /> +<TGConnectingPoint num="38" id="1333" /> +<TGConnectingPoint num="39" id="1334" /> +<extraparam> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5103" id="1229" > +<father id="1335" num="0" /> +<cdparam x="372" y="500" /> +<sizeparam width="130" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="447" minY="0" maxY="334" /> +<infoparam name="Send signal" value="ejectCoin(nbOfCoins)" /> +<TGConnectingPoint num="0" id="1219" /> +<TGConnectingPoint num="1" id="1220" /> +<TGConnectingPoint num="2" id="1221" /> +<TGConnectingPoint num="3" id="1222" /> +<TGConnectingPoint num="4" id="1223" /> +<TGConnectingPoint num="5" id="1224" /> +<TGConnectingPoint num="6" id="1225" /> +<TGConnectingPoint num="7" id="1226" /> +<TGConnectingPoint num="8" id="1227" /> +<TGConnectingPoint num="9" id="1228" /> +<accessibility /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5104" id="1240" > +<father id="1335" num="1" /> +<cdparam x="58" y="527" /> +<sizeparam width="127" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="450" minY="0" maxY="334" /> +<infoparam name="Send signal" value="pushCoffeeButton()" /> +<TGConnectingPoint num="0" id="1230" /> +<TGConnectingPoint num="1" id="1231" /> +<TGConnectingPoint num="2" id="1232" /> +<TGConnectingPoint num="3" id="1233" /> +<TGConnectingPoint num="4" id="1234" /> +<TGConnectingPoint num="5" id="1235" /> +<TGConnectingPoint num="6" id="1236" /> +<TGConnectingPoint num="7" id="1237" /> +<TGConnectingPoint num="8" id="1238" /> +<TGConnectingPoint num="9" id="1239" /> +<accessibility /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5100" id="1242" > +<father id="1335" num="2" /> +<cdparam x="249" y="399" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="562" minY="0" maxY="339" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1241" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5106" id="1283" > +<father id="1335" num="3" /> +<cdparam x="189" y="435" /> +<sizeparam width="132" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="445" minY="0" maxY="314" /> +<infoparam name="state0" value="WaitingForSelection" /> +<TGConnectingPoint num="0" id="1243" /> +<TGConnectingPoint num="1" id="1244" /> +<TGConnectingPoint num="2" id="1245" /> +<TGConnectingPoint num="3" id="1246" /> +<TGConnectingPoint num="4" id="1247" /> +<TGConnectingPoint num="5" id="1248" /> +<TGConnectingPoint num="6" id="1249" /> +<TGConnectingPoint num="7" id="1250" /> +<TGConnectingPoint num="8" id="1251" /> +<TGConnectingPoint num="9" id="1252" /> +<TGConnectingPoint num="10" id="1253" /> +<TGConnectingPoint num="11" id="1254" /> +<TGConnectingPoint num="12" id="1255" /> +<TGConnectingPoint num="13" id="1256" /> +<TGConnectingPoint num="14" id="1257" /> +<TGConnectingPoint num="15" id="1258" /> +<TGConnectingPoint num="16" id="1259" /> +<TGConnectingPoint num="17" id="1260" /> +<TGConnectingPoint num="18" id="1261" /> +<TGConnectingPoint num="19" id="1262" /> +<TGConnectingPoint num="20" id="1263" /> +<TGConnectingPoint num="21" id="1264" /> +<TGConnectingPoint num="22" id="1265" /> +<TGConnectingPoint num="23" id="1266" /> +<TGConnectingPoint num="24" id="1267" /> +<TGConnectingPoint num="25" id="1268" /> +<TGConnectingPoint num="26" id="1269" /> +<TGConnectingPoint num="27" id="1270" /> +<TGConnectingPoint num="28" id="1271" /> +<TGConnectingPoint num="29" id="1272" /> +<TGConnectingPoint num="30" id="1273" /> +<TGConnectingPoint num="31" id="1274" /> +<TGConnectingPoint num="32" id="1275" /> +<TGConnectingPoint num="33" id="1276" /> +<TGConnectingPoint num="34" id="1277" /> +<TGConnectingPoint num="35" id="1278" /> +<TGConnectingPoint num="36" id="1279" /> +<TGConnectingPoint num="37" id="1280" /> +<TGConnectingPoint num="38" id="1281" /> +<TGConnectingPoint num="39" id="1282" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5104" id="1294" > +<father id="1335" num="4" /> +<cdparam x="237" y="527" /> +<sizeparam width="112" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="465" minY="0" maxY="334" /> +<infoparam name="Send signal" value="pushTeaButton()" /> +<TGConnectingPoint num="0" id="1284" /> +<TGConnectingPoint num="1" id="1285" /> +<TGConnectingPoint num="2" id="1286" /> +<TGConnectingPoint num="3" id="1287" /> +<TGConnectingPoint num="4" id="1288" /> +<TGConnectingPoint num="5" id="1289" /> +<TGConnectingPoint num="6" id="1290" /> +<TGConnectingPoint num="7" id="1291" /> +<TGConnectingPoint num="8" id="1292" /> +<TGConnectingPoint num="9" id="1293" /> +<accessibility /> +</SUBCOMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="CoffeeButton" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="1342" > +<cdparam x="177" y="199" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Send signal" value="null" /> +<TGConnectingPoint num="0" id="1341" /> +<P1 x="340" y="233" id="1448" /> +<P2 x="353" y="252" id="1450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1340" > +<father id="1342" num="0" /> +<cdparam x="177" y="239" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1336" /> +<TGConnectingPoint num="1" id="1337" /> +<TGConnectingPoint num="2" id="1338" /> +<TGConnectingPoint num="3" id="1339" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1349" > +<cdparam x="322" y="69" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="1348" /> +<P1 x="322" y="69" id="1446" /> +<P2 x="323" y="88" id="1406" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1347" > +<father id="1349" num="0" /> +<cdparam x="322" y="109" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1343" /> +<TGConnectingPoint num="1" id="1344" /> +<TGConnectingPoint num="2" id="1345" /> +<TGConnectingPoint num="3" id="1346" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1356" > +<cdparam x="377" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="1355" /> +<P1 x="323" y="118" id="1411" /> +<P2 x="356" y="174" id="1462" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1354" > +<father id="1356" num="0" /> +<cdparam x="377" y="184" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1350" /> +<TGConnectingPoint num="1" id="1351" /> +<TGConnectingPoint num="2" id="1352" /> +<TGConnectingPoint num="3" id="1353" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1363" > +<cdparam x="377" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="1362" /> +<P1 x="353" y="282" id="1451" /> +<P2 x="399" y="352" id="1365" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1361" > +<father id="1363" num="0" /> +<cdparam x="417" y="335" /> +<sizeparam width="135" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1357" /> +<TGConnectingPoint num="1" id="1358" /> +<TGConnectingPoint num="2" id="1359" /> +<TGConnectingPoint num="3" id="1360" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="mechanicalDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="1404" > +<cdparam x="374" y="352" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1364" /> +<TGConnectingPoint num="1" id="1365" /> +<TGConnectingPoint num="2" id="1366" /> +<TGConnectingPoint num="3" id="1367" /> +<TGConnectingPoint num="4" id="1368" /> +<TGConnectingPoint num="5" id="1369" /> +<TGConnectingPoint num="6" id="1370" /> +<TGConnectingPoint num="7" id="1371" /> +<TGConnectingPoint num="8" id="1372" /> +<TGConnectingPoint num="9" id="1373" /> +<TGConnectingPoint num="10" id="1374" /> +<TGConnectingPoint num="11" id="1375" /> +<TGConnectingPoint num="12" id="1376" /> +<TGConnectingPoint num="13" id="1377" /> +<TGConnectingPoint num="14" id="1378" /> +<TGConnectingPoint num="15" id="1379" /> +<TGConnectingPoint num="16" id="1380" /> +<TGConnectingPoint num="17" id="1381" /> +<TGConnectingPoint num="18" id="1382" /> +<TGConnectingPoint num="19" id="1383" /> +<TGConnectingPoint num="20" id="1384" /> +<TGConnectingPoint num="21" id="1385" /> +<TGConnectingPoint num="22" id="1386" /> +<TGConnectingPoint num="23" id="1387" /> +<TGConnectingPoint num="24" id="1388" /> +<TGConnectingPoint num="25" id="1389" /> +<TGConnectingPoint num="26" id="1390" /> +<TGConnectingPoint num="27" id="1391" /> +<TGConnectingPoint num="28" id="1392" /> +<TGConnectingPoint num="29" id="1393" /> +<TGConnectingPoint num="30" id="1394" /> +<TGConnectingPoint num="31" id="1395" /> +<TGConnectingPoint num="32" id="1396" /> +<TGConnectingPoint num="33" id="1397" /> +<TGConnectingPoint num="34" id="1398" /> +<TGConnectingPoint num="35" id="1399" /> +<TGConnectingPoint num="36" id="1400" /> +<TGConnectingPoint num="37" id="1401" /> +<TGConnectingPoint num="38" id="1402" /> +<TGConnectingPoint num="39" id="1403" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1445" > +<cdparam x="298" y="88" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1405" /> +<TGConnectingPoint num="1" id="1406" /> +<TGConnectingPoint num="2" id="1407" /> +<TGConnectingPoint num="3" id="1408" /> +<TGConnectingPoint num="4" id="1409" /> +<TGConnectingPoint num="5" id="1410" /> +<TGConnectingPoint num="6" id="1411" /> +<TGConnectingPoint num="7" id="1412" /> +<TGConnectingPoint num="8" id="1413" /> +<TGConnectingPoint num="9" id="1414" /> +<TGConnectingPoint num="10" id="1415" /> +<TGConnectingPoint num="11" id="1416" /> +<TGConnectingPoint num="12" id="1417" /> +<TGConnectingPoint num="13" id="1418" /> +<TGConnectingPoint num="14" id="1419" /> +<TGConnectingPoint num="15" id="1420" /> +<TGConnectingPoint num="16" id="1421" /> +<TGConnectingPoint num="17" id="1422" /> +<TGConnectingPoint num="18" id="1423" /> +<TGConnectingPoint num="19" id="1424" /> +<TGConnectingPoint num="20" id="1425" /> +<TGConnectingPoint num="21" id="1426" /> +<TGConnectingPoint num="22" id="1427" /> +<TGConnectingPoint num="23" id="1428" /> +<TGConnectingPoint num="24" id="1429" /> +<TGConnectingPoint num="25" id="1430" /> +<TGConnectingPoint num="26" id="1431" /> +<TGConnectingPoint num="27" id="1432" /> +<TGConnectingPoint num="28" id="1433" /> +<TGConnectingPoint num="29" id="1434" /> +<TGConnectingPoint num="30" id="1435" /> +<TGConnectingPoint num="31" id="1436" /> +<TGConnectingPoint num="32" id="1437" /> +<TGConnectingPoint num="33" id="1438" /> +<TGConnectingPoint num="34" id="1439" /> +<TGConnectingPoint num="35" id="1440" /> +<TGConnectingPoint num="36" id="1441" /> +<TGConnectingPoint num="37" id="1442" /> +<TGConnectingPoint num="38" id="1443" /> +<TGConnectingPoint num="39" id="1444" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="1447" > +<cdparam x="315" y="49" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1446" /> +</COMPONENT> + +<COMPONENT type="5106" id="1501" > +<cdparam x="264" y="174" /> +<sizeparam width="184" height="130" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="state0" /> +<TGConnectingPoint num="0" id="1461" /> +<TGConnectingPoint num="1" id="1462" /> +<TGConnectingPoint num="2" id="1463" /> +<TGConnectingPoint num="3" id="1464" /> +<TGConnectingPoint num="4" id="1465" /> +<TGConnectingPoint num="5" id="1466" /> +<TGConnectingPoint num="6" id="1467" /> +<TGConnectingPoint num="7" id="1468" /> +<TGConnectingPoint num="8" id="1469" /> +<TGConnectingPoint num="9" id="1470" /> +<TGConnectingPoint num="10" id="1471" /> +<TGConnectingPoint num="11" id="1472" /> +<TGConnectingPoint num="12" id="1473" /> +<TGConnectingPoint num="13" id="1474" /> +<TGConnectingPoint num="14" id="1475" /> +<TGConnectingPoint num="15" id="1476" /> +<TGConnectingPoint num="16" id="1477" /> +<TGConnectingPoint num="17" id="1478" /> +<TGConnectingPoint num="18" id="1479" /> +<TGConnectingPoint num="19" id="1480" /> +<TGConnectingPoint num="20" id="1481" /> +<TGConnectingPoint num="21" id="1482" /> +<TGConnectingPoint num="22" id="1483" /> +<TGConnectingPoint num="23" id="1484" /> +<TGConnectingPoint num="24" id="1485" /> +<TGConnectingPoint num="25" id="1486" /> +<TGConnectingPoint num="26" id="1487" /> +<TGConnectingPoint num="27" id="1488" /> +<TGConnectingPoint num="28" id="1489" /> +<TGConnectingPoint num="29" id="1490" /> +<TGConnectingPoint num="30" id="1491" /> +<TGConnectingPoint num="31" id="1492" /> +<TGConnectingPoint num="32" id="1493" /> +<TGConnectingPoint num="33" id="1494" /> +<TGConnectingPoint num="34" id="1495" /> +<TGConnectingPoint num="35" id="1496" /> +<TGConnectingPoint num="36" id="1497" /> +<TGConnectingPoint num="37" id="1498" /> +<TGConnectingPoint num="38" id="1499" /> +<TGConnectingPoint num="39" id="1500" /> +<extraparam> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5100" id="1449" > +<father id="1501" num="0" /> +<cdparam x="333" y="213" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="169" minY="0" maxY="115" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1448" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5103" id="1460" > +<father id="1501" num="1" /> +<cdparam x="330" y="257" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="138" minY="0" maxY="110" /> +<infoparam name="Send signal" value="push()" /> +<TGConnectingPoint num="0" id="1450" /> +<TGConnectingPoint num="1" id="1451" /> +<TGConnectingPoint num="2" id="1452" /> +<TGConnectingPoint num="3" id="1453" /> +<TGConnectingPoint num="4" id="1454" /> +<TGConnectingPoint num="5" id="1455" /> +<TGConnectingPoint num="6" id="1456" /> +<TGConnectingPoint num="7" id="1457" /> +<TGConnectingPoint num="8" id="1458" /> +<TGConnectingPoint num="9" id="1459" /> +</SUBCOMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="TeaButton" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="1508" > +<cdparam x="363" y="193" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="1507" /> +<P1 x="363" y="204" id="1524" /> +<P2 x="362" y="257" id="1535" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1506" > +<father id="1508" num="0" /> +<cdparam x="380" y="228" /> +<sizeparam width="135" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1502" /> +<TGConnectingPoint num="1" id="1503" /> +<TGConnectingPoint num="2" id="1504" /> +<TGConnectingPoint num="3" id="1505" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="mechanicalDelay" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1515" > +<cdparam x="363" y="150" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="1514" /> +<P1 x="363" y="150" id="1581" /> +<P2 x="363" y="174" id="1523" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1513" > +<father id="1515" num="0" /> +<cdparam x="363" y="190" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1509" /> +<TGConnectingPoint num="1" id="1510" /> +<TGConnectingPoint num="2" id="1511" /> +<TGConnectingPoint num="3" id="1512" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="1522" > +<cdparam x="362" y="101" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="1521" /> +<P1 x="362" y="101" id="1616" /> +<P2 x="363" y="120" id="1576" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1520" > +<father id="1522" num="0" /> +<cdparam x="362" y="141" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="1516" /> +<TGConnectingPoint num="1" id="1517" /> +<TGConnectingPoint num="2" id="1518" /> +<TGConnectingPoint num="3" id="1519" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="1533" > +<cdparam x="340" y="179" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="push()" /> +<TGConnectingPoint num="0" id="1523" /> +<TGConnectingPoint num="1" id="1524" /> +<TGConnectingPoint num="2" id="1525" /> +<TGConnectingPoint num="3" id="1526" /> +<TGConnectingPoint num="4" id="1527" /> +<TGConnectingPoint num="5" id="1528" /> +<TGConnectingPoint num="6" id="1529" /> +<TGConnectingPoint num="7" id="1530" /> +<TGConnectingPoint num="8" id="1531" /> +<TGConnectingPoint num="9" id="1532" /> +</COMPONENT> + +<COMPONENT type="5106" id="1574" > +<cdparam x="337" y="257" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1534" /> +<TGConnectingPoint num="1" id="1535" /> +<TGConnectingPoint num="2" id="1536" /> +<TGConnectingPoint num="3" id="1537" /> +<TGConnectingPoint num="4" id="1538" /> +<TGConnectingPoint num="5" id="1539" /> +<TGConnectingPoint num="6" id="1540" /> +<TGConnectingPoint num="7" id="1541" /> +<TGConnectingPoint num="8" id="1542" /> +<TGConnectingPoint num="9" id="1543" /> +<TGConnectingPoint num="10" id="1544" /> +<TGConnectingPoint num="11" id="1545" /> +<TGConnectingPoint num="12" id="1546" /> +<TGConnectingPoint num="13" id="1547" /> +<TGConnectingPoint num="14" id="1548" /> +<TGConnectingPoint num="15" id="1549" /> +<TGConnectingPoint num="16" id="1550" /> +<TGConnectingPoint num="17" id="1551" /> +<TGConnectingPoint num="18" id="1552" /> +<TGConnectingPoint num="19" id="1553" /> +<TGConnectingPoint num="20" id="1554" /> +<TGConnectingPoint num="21" id="1555" /> +<TGConnectingPoint num="22" id="1556" /> +<TGConnectingPoint num="23" id="1557" /> +<TGConnectingPoint num="24" id="1558" /> +<TGConnectingPoint num="25" id="1559" /> +<TGConnectingPoint num="26" id="1560" /> +<TGConnectingPoint num="27" id="1561" /> +<TGConnectingPoint num="28" id="1562" /> +<TGConnectingPoint num="29" id="1563" /> +<TGConnectingPoint num="30" id="1564" /> +<TGConnectingPoint num="31" id="1565" /> +<TGConnectingPoint num="32" id="1566" /> +<TGConnectingPoint num="33" id="1567" /> +<TGConnectingPoint num="34" id="1568" /> +<TGConnectingPoint num="35" id="1569" /> +<TGConnectingPoint num="36" id="1570" /> +<TGConnectingPoint num="37" id="1571" /> +<TGConnectingPoint num="38" id="1572" /> +<TGConnectingPoint num="39" id="1573" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="1615" > +<cdparam x="338" y="120" /> +<sizeparam width="50" height="30" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="main" /> +<TGConnectingPoint num="0" id="1575" /> +<TGConnectingPoint num="1" id="1576" /> +<TGConnectingPoint num="2" id="1577" /> +<TGConnectingPoint num="3" id="1578" /> +<TGConnectingPoint num="4" id="1579" /> +<TGConnectingPoint num="5" id="1580" /> +<TGConnectingPoint num="6" id="1581" /> +<TGConnectingPoint num="7" id="1582" /> +<TGConnectingPoint num="8" id="1583" /> +<TGConnectingPoint num="9" id="1584" /> +<TGConnectingPoint num="10" id="1585" /> +<TGConnectingPoint num="11" id="1586" /> +<TGConnectingPoint num="12" id="1587" /> +<TGConnectingPoint num="13" id="1588" /> +<TGConnectingPoint num="14" id="1589" /> +<TGConnectingPoint num="15" id="1590" /> +<TGConnectingPoint num="16" id="1591" /> +<TGConnectingPoint num="17" id="1592" /> +<TGConnectingPoint num="18" id="1593" /> +<TGConnectingPoint num="19" id="1594" /> +<TGConnectingPoint num="20" id="1595" /> +<TGConnectingPoint num="21" id="1596" /> +<TGConnectingPoint num="22" id="1597" /> +<TGConnectingPoint num="23" id="1598" /> +<TGConnectingPoint num="24" id="1599" /> +<TGConnectingPoint num="25" id="1600" /> +<TGConnectingPoint num="26" id="1601" /> +<TGConnectingPoint num="27" id="1602" /> +<TGConnectingPoint num="28" id="1603" /> +<TGConnectingPoint num="29" id="1604" /> +<TGConnectingPoint num="30" id="1605" /> +<TGConnectingPoint num="31" id="1606" /> +<TGConnectingPoint num="32" id="1607" /> +<TGConnectingPoint num="33" id="1608" /> +<TGConnectingPoint num="34" id="1609" /> +<TGConnectingPoint num="35" id="1610" /> +<TGConnectingPoint num="36" id="1611" /> +<TGConnectingPoint num="37" id="1612" /> +<TGConnectingPoint num="38" id="1613" /> +<TGConnectingPoint num="39" id="1614" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="1617" > +<cdparam x="355" y="81" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1616" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/DrinkMachineV10.xml b/preinstallTTool/macos/TTool/modeling/DrinkMachineV10.xml new file mode 100644 index 0000000000000000000000000000000000000000..d515aafcda1e97c1d25f5272c5e30694edbe4417 --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/DrinkMachineV10.xml @@ -0,0 +1,4368 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.91-beta6"> + +<Modeling type="Analysis" nameTab="Analysis" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="502" id="2" > +<cdparam x="341" y="46" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1" /> +</COMPONENT> + +<COMPONENT type="506" id="13" > +<cdparam x="308" y="77" /> +<sizeparam width="80" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="initInstances" /> +<TGConnectingPoint num="0" id="3" /> +<TGConnectingPoint num="1" id="4" /> +<TGConnectingPoint num="2" id="5" /> +<TGConnectingPoint num="3" id="6" /> +<TGConnectingPoint num="4" id="7" /> +<TGConnectingPoint num="5" id="8" /> +<TGConnectingPoint num="6" id="9" /> +<TGConnectingPoint num="7" id="10" /> +<TGConnectingPoint num="8" id="11" /> +<TGConnectingPoint num="9" id="12" /> +</COMPONENT> + +<COMPONENT type="504" id="18" > +<cdparam x="241" y="192" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +</COMPONENT> + +<COMPONENT type="508" id="29" > +<cdparam x="202" y="233" /> +<sizeparam width="108" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="CoinManagement" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +<TGConnectingPoint num="4" id="23" /> +<TGConnectingPoint num="5" id="24" /> +<TGConnectingPoint num="6" id="25" /> +<TGConnectingPoint num="7" id="26" /> +<TGConnectingPoint num="8" id="27" /> +<TGConnectingPoint num="9" id="28" /> +</COMPONENT> + +<COMPONENT type="508" id="40" > +<cdparam x="189" y="290" /> +<sizeparam width="134" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="BeverageManagement" /> +<TGConnectingPoint num="0" id="30" /> +<TGConnectingPoint num="1" id="31" /> +<TGConnectingPoint num="2" id="32" /> +<TGConnectingPoint num="3" id="33" /> +<TGConnectingPoint num="4" id="34" /> +<TGConnectingPoint num="5" id="35" /> +<TGConnectingPoint num="6" id="36" /> +<TGConnectingPoint num="7" id="37" /> +<TGConnectingPoint num="8" id="38" /> +<TGConnectingPoint num="9" id="39" /> +</COMPONENT> + +<COMPONENT type="506" id="51" > +<cdparam x="410" y="224" /> +<sizeparam width="80" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="Maintenance" /> +<TGConnectingPoint num="0" id="41" /> +<TGConnectingPoint num="1" id="42" /> +<TGConnectingPoint num="2" id="43" /> +<TGConnectingPoint num="3" id="44" /> +<TGConnectingPoint num="4" id="45" /> +<TGConnectingPoint num="5" id="46" /> +<TGConnectingPoint num="6" id="47" /> +<TGConnectingPoint num="7" id="48" /> +<TGConnectingPoint num="8" id="49" /> +<TGConnectingPoint num="9" id="50" /> +</COMPONENT> + +<COMPONENT type="503" id="53" > +<cdparam x="440" y="285" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="52" /> +</COMPONENT> + +<COMPONENT type="507" id="68" > +<cdparam x="273" y="151" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="54" /> +<TGConnectingPoint num="1" id="55" /> +<TGConnectingPoint num="2" id="56" /> +<TGConnectingPoint num="3" id="57" /> +<TGConnectingPoint num="4" id="58" /> +<TGConnectingPoint num="5" id="59" /> +<TGConnectingPoint num="6" id="60" /> +<TGConnectingPoint num="7" id="61" /> +<TGConnectingPoint num="8" id="62" /> +<TGConnectingPoint num="9" id="63" /> +<TGConnectingPoint num="10" id="64" /> +<TGConnectingPoint num="11" id="65" /> +<TGConnectingPoint num="12" id="66" /> +<TGConnectingPoint num="13" id="67" /> +</COMPONENT> + +<CONNECTOR type="105" id="69" > +<cdparam x="348" y="66" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Reference to a SD" value="null" /> +<P1 x="348" y="66" id="1" /> +<P2 x="348" y="72" id="3" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="70" > +<cdparam x="348" y="117" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to junction" value="null" /> +<P1 x="348" y="117" id="4" /> +<P2 x="348" y="151" id="54" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="71" > +<cdparam x="256" y="222" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to Reference to a SD" value="null" /> +<P1 x="256" y="222" id="17" /> +<P2 x="256" y="228" id="19" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="72" > +<cdparam x="261" y="273" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to Reference to an IOD" value="null" /> +<P1 x="256" y="273" id="20" /> +<P2 x="256" y="285" id="30" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="77" > +<cdparam x="256" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="256" y="330" id="31" /> +<P2 x="241" y="207" id="15" /> +<Point x="256" y="350" /> +<Point x="150" y="350" /> +<Point x="150" y="187" /> +<Point x="241" y="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="73" > +<father id="77" num="0" /> +<cdparam x="256" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="74" > +<father id="77" num="1" /> +<cdparam x="150" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="75" > +<father id="77" num="2" /> +<cdparam x="150" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="76" > +<father id="77" num="3" /> +<cdparam x="241" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="78" > +<cdparam x="397" y="155" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from sequence to Reference to a SD" value="null" /> +<P1 x="397" y="156" id="59" /> +<P2 x="450" y="219" id="41" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="79" > +<cdparam x="450" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="450" y="264" id="42" /> +<P2 x="450" y="280" id="52" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="80" > +<cdparam x="298" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="298" y="156" id="55" /> +<P2 x="256" y="192" id="14" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<InteractionOverviewDiagramPanel name="BeverageManagement" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="501" id="96" > +<cdparam x="335" y="100" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="84" /> +<TGConnectingPoint num="1" id="85" /> +<TGConnectingPoint num="2" id="86" /> +<TGConnectingPoint num="3" id="87" /> +<TGConnectingPoint num="4" id="88" /> +<TGConnectingPoint num="5" id="89" /> +<TGConnectingPoint num="6" id="90" /> +<TGConnectingPoint num="7" id="91" /> +<TGConnectingPoint num="8" id="92" /> +<TGConnectingPoint num="9" id="93" /> +<TGConnectingPoint num="10" id="94" /> +<TGConnectingPoint num="11" id="95" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="81" > +<father id="96" num="0" /> +<cdparam x="260" y="130" /> +<sizeparam width="122" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[Machine/nbCoin == 2]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="82" > +<father id="96" num="1" /> +<cdparam x="370" y="110" /> +<sizeparam width="147" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[Machine/not(nbCoin == 2)]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="83" > +<father id="96" num="2" /> +<cdparam x="355" y="145" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="502" id="98" > +<cdparam x="343" y="58" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="97" /> +</COMPONENT> + +<COMPONENT type="503" id="100" > +<cdparam x="461" y="166" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="99" /> +</COMPONENT> + +<COMPONENT type="506" id="111" > +<cdparam x="210" y="195" /> +<sizeparam width="94" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="setButtonTimer" /> +<TGConnectingPoint num="0" id="101" /> +<TGConnectingPoint num="1" id="102" /> +<TGConnectingPoint num="2" id="103" /> +<TGConnectingPoint num="3" id="104" /> +<TGConnectingPoint num="4" id="105" /> +<TGConnectingPoint num="5" id="106" /> +<TGConnectingPoint num="6" id="107" /> +<TGConnectingPoint num="7" id="108" /> +<TGConnectingPoint num="8" id="109" /> +<TGConnectingPoint num="9" id="110" /> +</COMPONENT> + +<COMPONENT type="501" id="127" > +<cdparam x="242" y="267" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="115" /> +<TGConnectingPoint num="1" id="116" /> +<TGConnectingPoint num="2" id="117" /> +<TGConnectingPoint num="3" id="118" /> +<TGConnectingPoint num="4" id="119" /> +<TGConnectingPoint num="5" id="120" /> +<TGConnectingPoint num="6" id="121" /> +<TGConnectingPoint num="7" id="122" /> +<TGConnectingPoint num="8" id="123" /> +<TGConnectingPoint num="9" id="124" /> +<TGConnectingPoint num="10" id="125" /> +<TGConnectingPoint num="11" id="126" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="127" num="0" /> +<cdparam x="217" y="277" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="113" > +<father id="127" num="1" /> +<cdparam x="277" y="277" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="114" > +<father id="127" num="2" /> +<cdparam x="262" y="312" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="506" id="138" > +<cdparam x="195" y="380" /> +<sizeparam width="125" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="coffeeButtonPressed" /> +<TGConnectingPoint num="0" id="128" /> +<TGConnectingPoint num="1" id="129" /> +<TGConnectingPoint num="2" id="130" /> +<TGConnectingPoint num="3" id="131" /> +<TGConnectingPoint num="4" id="132" /> +<TGConnectingPoint num="5" id="133" /> +<TGConnectingPoint num="6" id="134" /> +<TGConnectingPoint num="7" id="135" /> +<TGConnectingPoint num="8" id="136" /> +<TGConnectingPoint num="9" id="137" /> +</COMPONENT> + +<COMPONENT type="506" id="149" > +<cdparam x="63" y="379" /> +<sizeparam width="109" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="teaButtonPressed" /> +<TGConnectingPoint num="0" id="139" /> +<TGConnectingPoint num="1" id="140" /> +<TGConnectingPoint num="2" id="141" /> +<TGConnectingPoint num="3" id="142" /> +<TGConnectingPoint num="4" id="143" /> +<TGConnectingPoint num="5" id="144" /> +<TGConnectingPoint num="6" id="145" /> +<TGConnectingPoint num="7" id="146" /> +<TGConnectingPoint num="8" id="147" /> +<TGConnectingPoint num="9" id="148" /> +</COMPONENT> + +<COMPONENT type="506" id="160" > +<cdparam x="385" y="379" /> +<sizeparam width="79" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerExpires" /> +<TGConnectingPoint num="0" id="150" /> +<TGConnectingPoint num="1" id="151" /> +<TGConnectingPoint num="2" id="152" /> +<TGConnectingPoint num="3" id="153" /> +<TGConnectingPoint num="4" id="154" /> +<TGConnectingPoint num="5" id="155" /> +<TGConnectingPoint num="6" id="156" /> +<TGConnectingPoint num="7" id="157" /> +<TGConnectingPoint num="8" id="158" /> +<TGConnectingPoint num="9" id="159" /> +</COMPONENT> + +<COMPONENT type="506" id="171" > +<cdparam x="387" y="440" /> +<sizeparam width="74" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="coinEjected" /> +<TGConnectingPoint num="0" id="161" /> +<TGConnectingPoint num="1" id="162" /> +<TGConnectingPoint num="2" id="163" /> +<TGConnectingPoint num="3" id="164" /> +<TGConnectingPoint num="4" id="165" /> +<TGConnectingPoint num="5" id="166" /> +<TGConnectingPoint num="6" id="167" /> +<TGConnectingPoint num="7" id="168" /> +<TGConnectingPoint num="8" id="169" /> +<TGConnectingPoint num="9" id="170" /> +</COMPONENT> + +<COMPONENT type="503" id="173" > +<cdparam x="414" y="500" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="172" /> +</COMPONENT> + +<COMPONENT type="503" id="175" > +<cdparam x="173" y="558" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="174" /> +</COMPONENT> + +<COMPONENT type="506" id="186" > +<cdparam x="148" y="501" /> +<sizeparam width="71" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerReset" /> +<TGConnectingPoint num="0" id="176" /> +<TGConnectingPoint num="1" id="177" /> +<TGConnectingPoint num="2" id="178" /> +<TGConnectingPoint num="3" id="179" /> +<TGConnectingPoint num="4" id="180" /> +<TGConnectingPoint num="5" id="181" /> +<TGConnectingPoint num="6" id="182" /> +<TGConnectingPoint num="7" id="183" /> +<TGConnectingPoint num="8" id="184" /> +<TGConnectingPoint num="9" id="185" /> +</COMPONENT> + +<COMPONENT type="504" id="191" > +<cdparam x="168" y="457" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="187" /> +<TGConnectingPoint num="1" id="188" /> +<TGConnectingPoint num="2" id="189" /> +<TGConnectingPoint num="3" id="190" /> +</COMPONENT> + +<CONNECTOR type="105" id="192" > +<cdparam x="349" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="350" y="78" id="97" /> +<P2 x="350" y="90" id="84" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="193" > +<cdparam x="390" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="390" y="115" id="86" /> +<P2 x="471" y="161" id="99" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="195" > +<cdparam x="310" y="115" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="310" y="115" id="85" /> +<P2 x="257" y="190" id="101" /> +<Point x="257" y="181" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="194" > +<father id="195" num="0" /> +<cdparam x="257" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="196" > +<cdparam x="257" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to choice" value="null" /> +<P1 x="257" y="235" id="102" /> +<P2 x="257" y="257" id="115" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="198" > +<cdparam x="217" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="217" y="282" id="116" /> +<P2 x="117" y="374" id="139" /> +<Point x="117" y="361" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="197" > +<father id="198" num="0" /> +<cdparam x="117" y="361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="199" > +<cdparam x="257" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="257" y="322" id="118" /> +<P2 x="257" y="375" id="128" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="200" > +<cdparam x="297" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="297" y="282" id="117" /> +<P2 x="424" y="374" id="150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="201" > +<cdparam x="424" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to Reference to a SD" value="null" /> +<P1 x="424" y="419" id="151" /> +<P2 x="424" y="435" id="161" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="202" > +<cdparam x="424" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="424" y="480" id="162" /> +<P2 x="424" y="495" id="172" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="203" > +<cdparam x="117" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="117" y="419" id="140" /> +<P2 x="168" y="472" id="188" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="204" > +<cdparam x="257" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="257" y="420" id="129" /> +<P2 x="198" y="472" id="189" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="205" > +<cdparam x="183" y="487" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to Reference to a SD" value="null" /> +<P1 x="183" y="487" id="190" /> +<P2 x="183" y="496" id="176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="206" > +<cdparam x="183" y="541" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="183" y="541" id="177" /> +<P2 x="183" y="553" id="174" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<InteractionOverviewDiagramPanel name="CoinManagement" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="501" id="222" > +<cdparam x="345" y="315" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="210" /> +<TGConnectingPoint num="1" id="211" /> +<TGConnectingPoint num="2" id="212" /> +<TGConnectingPoint num="3" id="213" /> +<TGConnectingPoint num="4" id="214" /> +<TGConnectingPoint num="5" id="215" /> +<TGConnectingPoint num="6" id="216" /> +<TGConnectingPoint num="7" id="217" /> +<TGConnectingPoint num="8" id="218" /> +<TGConnectingPoint num="9" id="219" /> +<TGConnectingPoint num="10" id="220" /> +<TGConnectingPoint num="11" id="221" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="207" > +<father id="222" num="0" /> +<cdparam x="270" y="331" /> +<sizeparam width="83" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[Wallet/coin>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="208" > +<father id="222" num="1" /> +<cdparam x="380" y="325" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="209" > +<father id="222" num="2" /> +<cdparam x="365" y="360" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="506" id="233" > +<cdparam x="325" y="187" /> +<sizeparam width="70" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="insertCoin" /> +<TGConnectingPoint num="0" id="223" /> +<TGConnectingPoint num="1" id="224" /> +<TGConnectingPoint num="2" id="225" /> +<TGConnectingPoint num="3" id="226" /> +<TGConnectingPoint num="4" id="227" /> +<TGConnectingPoint num="5" id="228" /> +<TGConnectingPoint num="6" id="229" /> +<TGConnectingPoint num="7" id="230" /> +<TGConnectingPoint num="8" id="231" /> +<TGConnectingPoint num="9" id="232" /> +</COMPONENT> + +<COMPONENT type="506" id="244" > +<cdparam x="231" y="370" /> +<sizeparam width="70" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="insertCoin" /> +<TGConnectingPoint num="0" id="234" /> +<TGConnectingPoint num="1" id="235" /> +<TGConnectingPoint num="2" id="236" /> +<TGConnectingPoint num="3" id="237" /> +<TGConnectingPoint num="4" id="238" /> +<TGConnectingPoint num="5" id="239" /> +<TGConnectingPoint num="6" id="240" /> +<TGConnectingPoint num="7" id="241" /> +<TGConnectingPoint num="8" id="242" /> +<TGConnectingPoint num="9" id="243" /> +</COMPONENT> + +<COMPONENT type="506" id="255" > +<cdparam x="433" y="417" /> +<sizeparam width="74" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="coinEjected" /> +<TGConnectingPoint num="0" id="245" /> +<TGConnectingPoint num="1" id="246" /> +<TGConnectingPoint num="2" id="247" /> +<TGConnectingPoint num="3" id="248" /> +<TGConnectingPoint num="4" id="249" /> +<TGConnectingPoint num="5" id="250" /> +<TGConnectingPoint num="6" id="251" /> +<TGConnectingPoint num="7" id="252" /> +<TGConnectingPoint num="8" id="253" /> +<TGConnectingPoint num="9" id="254" /> +</COMPONENT> + +<COMPONENT type="502" id="257" > +<cdparam x="353" y="69" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="256" /> +</COMPONENT> + +<COMPONENT type="503" id="259" > +<cdparam x="256" y="475" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="258" /> +</COMPONENT> + +<COMPONENT type="503" id="261" > +<cdparam x="460" y="492" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="260" /> +</COMPONENT> + +<COMPONENT type="501" id="277" > +<cdparam x="345" y="114" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="265" /> +<TGConnectingPoint num="1" id="266" /> +<TGConnectingPoint num="2" id="267" /> +<TGConnectingPoint num="3" id="268" /> +<TGConnectingPoint num="4" id="269" /> +<TGConnectingPoint num="5" id="270" /> +<TGConnectingPoint num="6" id="271" /> +<TGConnectingPoint num="7" id="272" /> +<TGConnectingPoint num="8" id="273" /> +<TGConnectingPoint num="9" id="274" /> +<TGConnectingPoint num="10" id="275" /> +<TGConnectingPoint num="11" id="276" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="262" > +<father id="277" num="0" /> +<cdparam x="320" y="124" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="263" > +<father id="277" num="1" /> +<cdparam x="380" y="124" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="264" > +<father id="277" num="2" /> +<cdparam x="365" y="159" /> +<sizeparam width="80" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[Wallet/coin>0]" /> +</SUBCOMPONENT> + +<COMPONENT type="506" id="288" > +<cdparam x="318" y="249" /> +<sizeparam width="85" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="setCoinTimer" /> +<TGConnectingPoint num="0" id="278" /> +<TGConnectingPoint num="1" id="279" /> +<TGConnectingPoint num="2" id="280" /> +<TGConnectingPoint num="3" id="281" /> +<TGConnectingPoint num="4" id="282" /> +<TGConnectingPoint num="5" id="283" /> +<TGConnectingPoint num="6" id="284" /> +<TGConnectingPoint num="7" id="285" /> +<TGConnectingPoint num="8" id="286" /> +<TGConnectingPoint num="9" id="287" /> +</COMPONENT> + +<COMPONENT type="506" id="299" > +<cdparam x="431" y="357" /> +<sizeparam width="79" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerExpires" /> +<TGConnectingPoint num="0" id="289" /> +<TGConnectingPoint num="1" id="290" /> +<TGConnectingPoint num="2" id="291" /> +<TGConnectingPoint num="3" id="292" /> +<TGConnectingPoint num="4" id="293" /> +<TGConnectingPoint num="5" id="294" /> +<TGConnectingPoint num="6" id="295" /> +<TGConnectingPoint num="7" id="296" /> +<TGConnectingPoint num="8" id="297" /> +<TGConnectingPoint num="9" id="298" /> +</COMPONENT> + +<COMPONENT type="506" id="310" > +<cdparam x="231" y="422" /> +<sizeparam width="71" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="timerReset" /> +<TGConnectingPoint num="0" id="300" /> +<TGConnectingPoint num="1" id="301" /> +<TGConnectingPoint num="2" id="302" /> +<TGConnectingPoint num="3" id="303" /> +<TGConnectingPoint num="4" id="304" /> +<TGConnectingPoint num="5" id="305" /> +<TGConnectingPoint num="6" id="306" /> +<TGConnectingPoint num="7" id="307" /> +<TGConnectingPoint num="8" id="308" /> +<TGConnectingPoint num="9" id="309" /> +</COMPONENT> + +<CONNECTOR type="105" id="311" > +<cdparam x="360" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to choice" value="null" /> +<P1 x="360" y="227" id="224" /> +<P2 x="360" y="244" id="278" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="312" > +<cdparam x="318" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="320" y="330" id="211" /> +<P2 x="266" y="365" id="234" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="313" > +<cdparam x="398" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="400" y="330" id="212" /> +<P2 x="470" y="352" id="289" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="314" > +<cdparam x="357" y="172" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Reference to a SD" value="null" /> +<P1 x="360" y="89" id="256" /> +<P2 x="360" y="104" id="265" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="315" > +<cdparam x="266" y="410" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="266" y="410" id="235" /> +<P2 x="266" y="417" id="300" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="316" > +<cdparam x="470" y="457" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="470" y="457" id="246" /> +<P2 x="470" y="487" id="260" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="317" > +<cdparam x="360" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="360" y="169" id="268" /> +<P2 x="360" y="182" id="223" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="318" > +<cdparam x="366" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to choice" value="null" /> +<P1 x="360" y="289" id="279" /> +<P2 x="360" y="305" id="210" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="319" > +<cdparam x="470" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to Reference to a SD" value="null" /> +<P1 x="470" y="397" id="290" /> +<P2 x="470" y="412" id="245" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="320" > +<cdparam x="266" y="461" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="266" y="462" id="301" /> +<P2 x="266" y="470" id="258" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<SequenceDiagramPanel name="initInstances" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="372" > +<cdparam x="350" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="348" /> +<TGConnectingPoint num="1" id="349" /> +<TGConnectingPoint num="2" id="350" /> +<TGConnectingPoint num="3" id="351" /> +<TGConnectingPoint num="4" id="352" /> +<TGConnectingPoint num="5" id="353" /> +<TGConnectingPoint num="6" id="354" /> +<TGConnectingPoint num="7" id="355" /> +<TGConnectingPoint num="8" id="356" /> +<TGConnectingPoint num="9" id="357" /> +<TGConnectingPoint num="10" id="358" /> +<TGConnectingPoint num="11" id="359" /> +<TGConnectingPoint num="12" id="360" /> +<TGConnectingPoint num="13" id="361" /> +<TGConnectingPoint num="14" id="362" /> +<TGConnectingPoint num="15" id="363" /> +<TGConnectingPoint num="16" id="364" /> +<TGConnectingPoint num="17" id="365" /> +<TGConnectingPoint num="18" id="366" /> +<TGConnectingPoint num="19" id="367" /> +<TGConnectingPoint num="20" id="368" /> +<TGConnectingPoint num="21" id="369" /> +<TGConnectingPoint num="22" id="370" /> +<TGConnectingPoint num="23" id="371" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="329" > +<father id="372" num="0" /> +<cdparam x="355" y="79" /> +<sizeparam width="95" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="buttonDelay = 6" /> +<TGConnectingPoint num="0" id="321" /> +<TGConnectingPoint num="1" id="322" /> +<TGConnectingPoint num="2" id="323" /> +<TGConnectingPoint num="3" id="324" /> +<TGConnectingPoint num="4" id="325" /> +<TGConnectingPoint num="5" id="326" /> +<TGConnectingPoint num="6" id="327" /> +<TGConnectingPoint num="7" id="328" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="338" > +<father id="372" num="1" /> +<cdparam x="355" y="112" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="coinDelay = 5" /> +<TGConnectingPoint num="0" id="330" /> +<TGConnectingPoint num="1" id="331" /> +<TGConnectingPoint num="2" id="332" /> +<TGConnectingPoint num="3" id="333" /> +<TGConnectingPoint num="4" id="334" /> +<TGConnectingPoint num="5" id="335" /> +<TGConnectingPoint num="6" id="336" /> +<TGConnectingPoint num="7" id="337" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="347" > +<father id="372" num="2" /> +<cdparam x="355" y="153" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="339" /> +<TGConnectingPoint num="1" id="340" /> +<TGConnectingPoint num="2" id="341" /> +<TGConnectingPoint num="3" id="342" /> +<TGConnectingPoint num="4" id="343" /> +<TGConnectingPoint num="5" id="344" /> +<TGConnectingPoint num="6" id="345" /> +<TGConnectingPoint num="7" id="346" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="424" > +<cdparam x="186" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="400" /> +<TGConnectingPoint num="1" id="401" /> +<TGConnectingPoint num="2" id="402" /> +<TGConnectingPoint num="3" id="403" /> +<TGConnectingPoint num="4" id="404" /> +<TGConnectingPoint num="5" id="405" /> +<TGConnectingPoint num="6" id="406" /> +<TGConnectingPoint num="7" id="407" /> +<TGConnectingPoint num="8" id="408" /> +<TGConnectingPoint num="9" id="409" /> +<TGConnectingPoint num="10" id="410" /> +<TGConnectingPoint num="11" id="411" /> +<TGConnectingPoint num="12" id="412" /> +<TGConnectingPoint num="13" id="413" /> +<TGConnectingPoint num="14" id="414" /> +<TGConnectingPoint num="15" id="415" /> +<TGConnectingPoint num="16" id="416" /> +<TGConnectingPoint num="17" id="417" /> +<TGConnectingPoint num="18" id="418" /> +<TGConnectingPoint num="19" id="419" /> +<TGConnectingPoint num="20" id="420" /> +<TGConnectingPoint num="21" id="421" /> +<TGConnectingPoint num="22" id="422" /> +<TGConnectingPoint num="23" id="423" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="381" > +<father id="424" num="0" /> +<cdparam x="191" y="66" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="coin=2" /> +<TGConnectingPoint num="0" id="373" /> +<TGConnectingPoint num="1" id="374" /> +<TGConnectingPoint num="2" id="375" /> +<TGConnectingPoint num="3" id="376" /> +<TGConnectingPoint num="4" id="377" /> +<TGConnectingPoint num="5" id="378" /> +<TGConnectingPoint num="6" id="379" /> +<TGConnectingPoint num="7" id="380" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="390" > +<father id="424" num="1" /> +<cdparam x="191" y="99" /> +<sizeparam width="86" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="userDelay = 4" /> +<TGConnectingPoint num="0" id="382" /> +<TGConnectingPoint num="1" id="383" /> +<TGConnectingPoint num="2" id="384" /> +<TGConnectingPoint num="3" id="385" /> +<TGConnectingPoint num="4" id="386" /> +<TGConnectingPoint num="5" id="387" /> +<TGConnectingPoint num="6" id="388" /> +<TGConnectingPoint num="7" id="389" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="399" > +<father id="424" num="2" /> +<cdparam x="191" y="132" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="userLatency = 1" /> +<TGConnectingPoint num="0" id="391" /> +<TGConnectingPoint num="1" id="392" /> +<TGConnectingPoint num="2" id="393" /> +<TGConnectingPoint num="3" id="394" /> +<TGConnectingPoint num="4" id="395" /> +<TGConnectingPoint num="5" id="396" /> +<TGConnectingPoint num="6" id="397" /> +<TGConnectingPoint num="7" id="398" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="458" > +<cdparam x="633" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="434" /> +<TGConnectingPoint num="1" id="435" /> +<TGConnectingPoint num="2" id="436" /> +<TGConnectingPoint num="3" id="437" /> +<TGConnectingPoint num="4" id="438" /> +<TGConnectingPoint num="5" id="439" /> +<TGConnectingPoint num="6" id="440" /> +<TGConnectingPoint num="7" id="441" /> +<TGConnectingPoint num="8" id="442" /> +<TGConnectingPoint num="9" id="443" /> +<TGConnectingPoint num="10" id="444" /> +<TGConnectingPoint num="11" id="445" /> +<TGConnectingPoint num="12" id="446" /> +<TGConnectingPoint num="13" id="447" /> +<TGConnectingPoint num="14" id="448" /> +<TGConnectingPoint num="15" id="449" /> +<TGConnectingPoint num="16" id="450" /> +<TGConnectingPoint num="17" id="451" /> +<TGConnectingPoint num="18" id="452" /> +<TGConnectingPoint num="19" id="453" /> +<TGConnectingPoint num="20" id="454" /> +<TGConnectingPoint num="21" id="455" /> +<TGConnectingPoint num="22" id="456" /> +<TGConnectingPoint num="23" id="457" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="433" > +<father id="458" num="0" /> +<cdparam x="638" y="74" /> +<sizeparam width="125" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="mechanicalDelay = 3" /> +<TGConnectingPoint num="0" id="425" /> +<TGConnectingPoint num="1" id="426" /> +<TGConnectingPoint num="2" id="427" /> +<TGConnectingPoint num="3" id="428" /> +<TGConnectingPoint num="4" id="429" /> +<TGConnectingPoint num="5" id="430" /> +<TGConnectingPoint num="6" id="431" /> +<TGConnectingPoint num="7" id="432" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="492" > +<cdparam x="493" y="44" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="TeaButton" /> +<TGConnectingPoint num="0" id="468" /> +<TGConnectingPoint num="1" id="469" /> +<TGConnectingPoint num="2" id="470" /> +<TGConnectingPoint num="3" id="471" /> +<TGConnectingPoint num="4" id="472" /> +<TGConnectingPoint num="5" id="473" /> +<TGConnectingPoint num="6" id="474" /> +<TGConnectingPoint num="7" id="475" /> +<TGConnectingPoint num="8" id="476" /> +<TGConnectingPoint num="9" id="477" /> +<TGConnectingPoint num="10" id="478" /> +<TGConnectingPoint num="11" id="479" /> +<TGConnectingPoint num="12" id="480" /> +<TGConnectingPoint num="13" id="481" /> +<TGConnectingPoint num="14" id="482" /> +<TGConnectingPoint num="15" id="483" /> +<TGConnectingPoint num="16" id="484" /> +<TGConnectingPoint num="17" id="485" /> +<TGConnectingPoint num="18" id="486" /> +<TGConnectingPoint num="19" id="487" /> +<TGConnectingPoint num="20" id="488" /> +<TGConnectingPoint num="21" id="489" /> +<TGConnectingPoint num="22" id="490" /> +<TGConnectingPoint num="23" id="491" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="467" > +<father id="492" num="0" /> +<cdparam x="498" y="74" /> +<sizeparam width="125" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="mechanicalDelay = 2" /> +<TGConnectingPoint num="0" id="459" /> +<TGConnectingPoint num="1" id="460" /> +<TGConnectingPoint num="2" id="461" /> +<TGConnectingPoint num="3" id="462" /> +<TGConnectingPoint num="4" id="463" /> +<TGConnectingPoint num="5" id="464" /> +<TGConnectingPoint num="6" id="465" /> +<TGConnectingPoint num="7" id="466" /> +</SUBCOMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="coffeeButtonPressed" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="526" > +<cdparam x="351" y="79" /> +<sizeparam width="10" height="258" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="502" /> +<TGConnectingPoint num="1" id="503" /> +<TGConnectingPoint num="2" id="504" /> +<TGConnectingPoint num="3" id="505" /> +<TGConnectingPoint num="4" id="506" /> +<TGConnectingPoint num="5" id="507" /> +<TGConnectingPoint num="6" id="508" /> +<TGConnectingPoint num="7" id="509" /> +<TGConnectingPoint num="8" id="510" /> +<TGConnectingPoint num="9" id="511" /> +<TGConnectingPoint num="10" id="512" /> +<TGConnectingPoint num="11" id="513" /> +<TGConnectingPoint num="12" id="514" /> +<TGConnectingPoint num="13" id="515" /> +<TGConnectingPoint num="14" id="516" /> +<TGConnectingPoint num="15" id="517" /> +<TGConnectingPoint num="16" id="518" /> +<TGConnectingPoint num="17" id="519" /> +<TGConnectingPoint num="18" id="520" /> +<TGConnectingPoint num="19" id="521" /> +<TGConnectingPoint num="20" id="522" /> +<TGConnectingPoint num="21" id="523" /> +<TGConnectingPoint num="22" id="524" /> +<TGConnectingPoint num="23" id="525" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="501" > +<father id="526" num="0" /> +<cdparam x="356" y="158" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="218" /> +<infoparam name="time interval" value="[mechanicalDelay, mechanicalDelay]" /> +<TGConnectingPoint num="0" id="493" /> +<TGConnectingPoint num="1" id="494" /> +<TGConnectingPoint num="2" id="495" /> +<TGConnectingPoint num="3" id="496" /> +<TGConnectingPoint num="4" id="497" /> +<TGConnectingPoint num="5" id="498" /> +<TGConnectingPoint num="6" id="499" /> +<TGConnectingPoint num="7" id="500" /> +<extraparam> +<Interval minDelay="mechanicalDelay" maxDelay="mechanicalDelay" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="578" > +<cdparam x="148" y="79" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="554" /> +<TGConnectingPoint num="1" id="555" /> +<TGConnectingPoint num="2" id="556" /> +<TGConnectingPoint num="3" id="557" /> +<TGConnectingPoint num="4" id="558" /> +<TGConnectingPoint num="5" id="559" /> +<TGConnectingPoint num="6" id="560" /> +<TGConnectingPoint num="7" id="561" /> +<TGConnectingPoint num="8" id="562" /> +<TGConnectingPoint num="9" id="563" /> +<TGConnectingPoint num="10" id="564" /> +<TGConnectingPoint num="11" id="565" /> +<TGConnectingPoint num="12" id="566" /> +<TGConnectingPoint num="13" id="567" /> +<TGConnectingPoint num="14" id="568" /> +<TGConnectingPoint num="15" id="569" /> +<TGConnectingPoint num="16" id="570" /> +<TGConnectingPoint num="17" id="571" /> +<TGConnectingPoint num="18" id="572" /> +<TGConnectingPoint num="19" id="573" /> +<TGConnectingPoint num="20" id="574" /> +<TGConnectingPoint num="21" id="575" /> +<TGConnectingPoint num="22" id="576" /> +<TGConnectingPoint num="23" id="577" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="535" > +<father id="578" num="0" /> +<cdparam x="153" y="146" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="210" /> +<infoparam name="time interval" value="[5, 7]" /> +<TGConnectingPoint num="0" id="527" /> +<TGConnectingPoint num="1" id="528" /> +<TGConnectingPoint num="2" id="529" /> +<TGConnectingPoint num="3" id="530" /> +<TGConnectingPoint num="4" id="531" /> +<TGConnectingPoint num="5" id="532" /> +<TGConnectingPoint num="6" id="533" /> +<TGConnectingPoint num="7" id="534" /> +<extraparam> +<Interval minDelay="5" maxDelay="7" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="544" > +<father id="578" num="1" /> +<cdparam x="153" y="212" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="deliverCoffee" /> +<TGConnectingPoint num="0" id="536" /> +<TGConnectingPoint num="1" id="537" /> +<TGConnectingPoint num="2" id="538" /> +<TGConnectingPoint num="3" id="539" /> +<TGConnectingPoint num="4" id="540" /> +<TGConnectingPoint num="5" id="541" /> +<TGConnectingPoint num="6" id="542" /> +<TGConnectingPoint num="7" id="543" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="553" > +<father id="578" num="2" /> +<cdparam x="153" y="256" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="545" /> +<TGConnectingPoint num="1" id="546" /> +<TGConnectingPoint num="2" id="547" /> +<TGConnectingPoint num="3" id="548" /> +<TGConnectingPoint num="4" id="549" /> +<TGConnectingPoint num="5" id="550" /> +<TGConnectingPoint num="6" id="551" /> +<TGConnectingPoint num="7" id="552" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="579" > +<cdparam x="356" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="push" /> +<P1 x="356" y="119" id="505" /> +<P2 x="153" y="119" id="557" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="coinEjected" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="638" > +<cdparam x="478" y="54" /> +<sizeparam width="10" height="500" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="589" /> +<TGConnectingPoint num="1" id="590" /> +<TGConnectingPoint num="2" id="591" /> +<TGConnectingPoint num="3" id="592" /> +<TGConnectingPoint num="4" id="593" /> +<TGConnectingPoint num="5" id="594" /> +<TGConnectingPoint num="6" id="595" /> +<TGConnectingPoint num="7" id="596" /> +<TGConnectingPoint num="8" id="597" /> +<TGConnectingPoint num="9" id="598" /> +<TGConnectingPoint num="10" id="599" /> +<TGConnectingPoint num="11" id="600" /> +<TGConnectingPoint num="12" id="601" /> +<TGConnectingPoint num="13" id="602" /> +<TGConnectingPoint num="14" id="603" /> +<TGConnectingPoint num="15" id="604" /> +<TGConnectingPoint num="16" id="605" /> +<TGConnectingPoint num="17" id="606" /> +<TGConnectingPoint num="18" id="607" /> +<TGConnectingPoint num="19" id="608" /> +<TGConnectingPoint num="20" id="609" /> +<TGConnectingPoint num="21" id="610" /> +<TGConnectingPoint num="22" id="611" /> +<TGConnectingPoint num="23" id="612" /> +<TGConnectingPoint num="24" id="613" /> +<TGConnectingPoint num="25" id="614" /> +<TGConnectingPoint num="26" id="615" /> +<TGConnectingPoint num="27" id="616" /> +<TGConnectingPoint num="28" id="617" /> +<TGConnectingPoint num="29" id="618" /> +<TGConnectingPoint num="30" id="619" /> +<TGConnectingPoint num="31" id="620" /> +<TGConnectingPoint num="32" id="621" /> +<TGConnectingPoint num="33" id="622" /> +<TGConnectingPoint num="34" id="623" /> +<TGConnectingPoint num="35" id="624" /> +<TGConnectingPoint num="36" id="625" /> +<TGConnectingPoint num="37" id="626" /> +<TGConnectingPoint num="38" id="627" /> +<TGConnectingPoint num="39" id="628" /> +<TGConnectingPoint num="40" id="629" /> +<TGConnectingPoint num="41" id="630" /> +<TGConnectingPoint num="42" id="631" /> +<TGConnectingPoint num="43" id="632" /> +<TGConnectingPoint num="44" id="633" /> +<TGConnectingPoint num="45" id="634" /> +<TGConnectingPoint num="46" id="635" /> +<TGConnectingPoint num="47" id="636" /> +<TGConnectingPoint num="48" id="637" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="588" > +<father id="638" num="0" /> +<cdparam x="483" y="187" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="580" /> +<TGConnectingPoint num="1" id="581" /> +<TGConnectingPoint num="2" id="582" /> +<TGConnectingPoint num="3" id="583" /> +<TGConnectingPoint num="4" id="584" /> +<TGConnectingPoint num="5" id="585" /> +<TGConnectingPoint num="6" id="586" /> +<TGConnectingPoint num="7" id="587" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="706" > +<cdparam x="264" y="54" /> +<sizeparam width="10" height="500" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="657" /> +<TGConnectingPoint num="1" id="658" /> +<TGConnectingPoint num="2" id="659" /> +<TGConnectingPoint num="3" id="660" /> +<TGConnectingPoint num="4" id="661" /> +<TGConnectingPoint num="5" id="662" /> +<TGConnectingPoint num="6" id="663" /> +<TGConnectingPoint num="7" id="664" /> +<TGConnectingPoint num="8" id="665" /> +<TGConnectingPoint num="9" id="666" /> +<TGConnectingPoint num="10" id="667" /> +<TGConnectingPoint num="11" id="668" /> +<TGConnectingPoint num="12" id="669" /> +<TGConnectingPoint num="13" id="670" /> +<TGConnectingPoint num="14" id="671" /> +<TGConnectingPoint num="15" id="672" /> +<TGConnectingPoint num="16" id="673" /> +<TGConnectingPoint num="17" id="674" /> +<TGConnectingPoint num="18" id="675" /> +<TGConnectingPoint num="19" id="676" /> +<TGConnectingPoint num="20" id="677" /> +<TGConnectingPoint num="21" id="678" /> +<TGConnectingPoint num="22" id="679" /> +<TGConnectingPoint num="23" id="680" /> +<TGConnectingPoint num="24" id="681" /> +<TGConnectingPoint num="25" id="682" /> +<TGConnectingPoint num="26" id="683" /> +<TGConnectingPoint num="27" id="684" /> +<TGConnectingPoint num="28" id="685" /> +<TGConnectingPoint num="29" id="686" /> +<TGConnectingPoint num="30" id="687" /> +<TGConnectingPoint num="31" id="688" /> +<TGConnectingPoint num="32" id="689" /> +<TGConnectingPoint num="33" id="690" /> +<TGConnectingPoint num="34" id="691" /> +<TGConnectingPoint num="35" id="692" /> +<TGConnectingPoint num="36" id="693" /> +<TGConnectingPoint num="37" id="694" /> +<TGConnectingPoint num="38" id="695" /> +<TGConnectingPoint num="39" id="696" /> +<TGConnectingPoint num="40" id="697" /> +<TGConnectingPoint num="41" id="698" /> +<TGConnectingPoint num="42" id="699" /> +<TGConnectingPoint num="43" id="700" /> +<TGConnectingPoint num="44" id="701" /> +<TGConnectingPoint num="45" id="702" /> +<TGConnectingPoint num="46" id="703" /> +<TGConnectingPoint num="47" id="704" /> +<TGConnectingPoint num="48" id="705" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="647" > +<father id="706" num="0" /> +<cdparam x="269" y="193" /> +<sizeparam width="122" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="coin = coin + nbCoin" /> +<TGConnectingPoint num="0" id="639" /> +<TGConnectingPoint num="1" id="640" /> +<TGConnectingPoint num="2" id="641" /> +<TGConnectingPoint num="3" id="642" /> +<TGConnectingPoint num="4" id="643" /> +<TGConnectingPoint num="5" id="644" /> +<TGConnectingPoint num="6" id="645" /> +<TGConnectingPoint num="7" id="646" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="656" > +<father id="706" num="1" /> +<cdparam x="269" y="238" /> +<sizeparam width="65" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="print(coin)" /> +<TGConnectingPoint num="0" id="648" /> +<TGConnectingPoint num="1" id="649" /> +<TGConnectingPoint num="2" id="650" /> +<TGConnectingPoint num="3" id="651" /> +<TGConnectingPoint num="4" id="652" /> +<TGConnectingPoint num="5" id="653" /> +<TGConnectingPoint num="6" id="654" /> +<TGConnectingPoint num="7" id="655" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="707" > +<cdparam x="483" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="ejectCoin(nbCoin)" /> +<P1 x="483" y="154" id="598" /> +<P2 x="269" y="154" id="666" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="insertCoin" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="759" > +<cdparam x="195" y="37" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="735" /> +<TGConnectingPoint num="1" id="736" /> +<TGConnectingPoint num="2" id="737" /> +<TGConnectingPoint num="3" id="738" /> +<TGConnectingPoint num="4" id="739" /> +<TGConnectingPoint num="5" id="740" /> +<TGConnectingPoint num="6" id="741" /> +<TGConnectingPoint num="7" id="742" /> +<TGConnectingPoint num="8" id="743" /> +<TGConnectingPoint num="9" id="744" /> +<TGConnectingPoint num="10" id="745" /> +<TGConnectingPoint num="11" id="746" /> +<TGConnectingPoint num="12" id="747" /> +<TGConnectingPoint num="13" id="748" /> +<TGConnectingPoint num="14" id="749" /> +<TGConnectingPoint num="15" id="750" /> +<TGConnectingPoint num="16" id="751" /> +<TGConnectingPoint num="17" id="752" /> +<TGConnectingPoint num="18" id="753" /> +<TGConnectingPoint num="19" id="754" /> +<TGConnectingPoint num="20" id="755" /> +<TGConnectingPoint num="21" id="756" /> +<TGConnectingPoint num="22" id="757" /> +<TGConnectingPoint num="23" id="758" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="716" > +<father id="759" num="0" /> +<cdparam x="200" y="123" /> +<sizeparam width="86" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="coin = coin - 1" /> +<TGConnectingPoint num="0" id="708" /> +<TGConnectingPoint num="1" id="709" /> +<TGConnectingPoint num="2" id="710" /> +<TGConnectingPoint num="3" id="711" /> +<TGConnectingPoint num="4" id="712" /> +<TGConnectingPoint num="5" id="713" /> +<TGConnectingPoint num="6" id="714" /> +<TGConnectingPoint num="7" id="715" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="608" id="725" > +<father id="759" num="1" /> +<cdparam x="200" y="191" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="210" /> +<infoparam name="time interval" value="[userDelay, userDelay + userLatency]" /> +<TGConnectingPoint num="0" id="717" /> +<TGConnectingPoint num="1" id="718" /> +<TGConnectingPoint num="2" id="719" /> +<TGConnectingPoint num="3" id="720" /> +<TGConnectingPoint num="4" id="721" /> +<TGConnectingPoint num="5" id="722" /> +<TGConnectingPoint num="6" id="723" /> +<TGConnectingPoint num="7" id="724" /> +<extraparam> +<Interval minDelay="userDelay" maxDelay="userDelay + userLatency" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="734" > +<father id="759" num="2" /> +<cdparam x="200" y="159" /> +<sizeparam width="65" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="print(coin)" /> +<TGConnectingPoint num="0" id="726" /> +<TGConnectingPoint num="1" id="727" /> +<TGConnectingPoint num="2" id="728" /> +<TGConnectingPoint num="3" id="729" /> +<TGConnectingPoint num="4" id="730" /> +<TGConnectingPoint num="5" id="731" /> +<TGConnectingPoint num="6" id="732" /> +<TGConnectingPoint num="7" id="733" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="793" > +<cdparam x="409" y="37" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="769" /> +<TGConnectingPoint num="1" id="770" /> +<TGConnectingPoint num="2" id="771" /> +<TGConnectingPoint num="3" id="772" /> +<TGConnectingPoint num="4" id="773" /> +<TGConnectingPoint num="5" id="774" /> +<TGConnectingPoint num="6" id="775" /> +<TGConnectingPoint num="7" id="776" /> +<TGConnectingPoint num="8" id="777" /> +<TGConnectingPoint num="9" id="778" /> +<TGConnectingPoint num="10" id="779" /> +<TGConnectingPoint num="11" id="780" /> +<TGConnectingPoint num="12" id="781" /> +<TGConnectingPoint num="13" id="782" /> +<TGConnectingPoint num="14" id="783" /> +<TGConnectingPoint num="15" id="784" /> +<TGConnectingPoint num="16" id="785" /> +<TGConnectingPoint num="17" id="786" /> +<TGConnectingPoint num="18" id="787" /> +<TGConnectingPoint num="19" id="788" /> +<TGConnectingPoint num="20" id="789" /> +<TGConnectingPoint num="21" id="790" /> +<TGConnectingPoint num="22" id="791" /> +<TGConnectingPoint num="23" id="792" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="768" > +<father id="793" num="0" /> +<cdparam x="414" y="122" /> +<sizeparam width="123" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = nbCoin + 1" /> +<TGConnectingPoint num="0" id="760" /> +<TGConnectingPoint num="1" id="761" /> +<TGConnectingPoint num="2" id="762" /> +<TGConnectingPoint num="3" id="763" /> +<TGConnectingPoint num="4" id="764" /> +<TGConnectingPoint num="5" id="765" /> +<TGConnectingPoint num="6" id="766" /> +<TGConnectingPoint num="7" id="767" /> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="794" > +<cdparam x="200" y="87" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="putCoin" /> +<P1 x="200" y="87" id="739" /> +<P2 x="414" y="87" id="773" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="setButtonTimer" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="828" > +<cdparam x="463" y="104" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="804" /> +<TGConnectingPoint num="1" id="805" /> +<TGConnectingPoint num="2" id="806" /> +<TGConnectingPoint num="3" id="807" /> +<TGConnectingPoint num="4" id="808" /> +<TGConnectingPoint num="5" id="809" /> +<TGConnectingPoint num="6" id="810" /> +<TGConnectingPoint num="7" id="811" /> +<TGConnectingPoint num="8" id="812" /> +<TGConnectingPoint num="9" id="813" /> +<TGConnectingPoint num="10" id="814" /> +<TGConnectingPoint num="11" id="815" /> +<TGConnectingPoint num="12" id="816" /> +<TGConnectingPoint num="13" id="817" /> +<TGConnectingPoint num="14" id="818" /> +<TGConnectingPoint num="15" id="819" /> +<TGConnectingPoint num="16" id="820" /> +<TGConnectingPoint num="17" id="821" /> +<TGConnectingPoint num="18" id="822" /> +<TGConnectingPoint num="19" id="823" /> +<TGConnectingPoint num="20" id="824" /> +<TGConnectingPoint num="21" id="825" /> +<TGConnectingPoint num="22" id="826" /> +<TGConnectingPoint num="23" id="827" /> +</COMPONENT> +<SUBCOMPONENT type="603" id="803" > +<father id="828" num="0" /> +<cdparam x="481" y="121" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="setting timer" value="{timer=timer1, duration=buttonDelay}" /> +<TGConnectingPoint num="0" id="795" /> +<TGConnectingPoint num="1" id="796" /> +<TGConnectingPoint num="2" id="797" /> +<TGConnectingPoint num="3" id="798" /> +<TGConnectingPoint num="4" id="799" /> +<TGConnectingPoint num="5" id="800" /> +<TGConnectingPoint num="6" id="801" /> +<TGConnectingPoint num="7" id="802" /> +<extraparam> +<Interval timer="timer1" duration="buttonDelay" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="853" > +<cdparam x="249" y="104" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="829" /> +<TGConnectingPoint num="1" id="830" /> +<TGConnectingPoint num="2" id="831" /> +<TGConnectingPoint num="3" id="832" /> +<TGConnectingPoint num="4" id="833" /> +<TGConnectingPoint num="5" id="834" /> +<TGConnectingPoint num="6" id="835" /> +<TGConnectingPoint num="7" id="836" /> +<TGConnectingPoint num="8" id="837" /> +<TGConnectingPoint num="9" id="838" /> +<TGConnectingPoint num="10" id="839" /> +<TGConnectingPoint num="11" id="840" /> +<TGConnectingPoint num="12" id="841" /> +<TGConnectingPoint num="13" id="842" /> +<TGConnectingPoint num="14" id="843" /> +<TGConnectingPoint num="15" id="844" /> +<TGConnectingPoint num="16" id="845" /> +<TGConnectingPoint num="17" id="846" /> +<TGConnectingPoint num="18" id="847" /> +<TGConnectingPoint num="19" id="848" /> +<TGConnectingPoint num="20" id="849" /> +<TGConnectingPoint num="21" id="850" /> +<TGConnectingPoint num="22" id="851" /> +<TGConnectingPoint num="23" id="852" /> +</COMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="setCoinTimer" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="878" > +<cdparam x="242" y="83" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="854" /> +<TGConnectingPoint num="1" id="855" /> +<TGConnectingPoint num="2" id="856" /> +<TGConnectingPoint num="3" id="857" /> +<TGConnectingPoint num="4" id="858" /> +<TGConnectingPoint num="5" id="859" /> +<TGConnectingPoint num="6" id="860" /> +<TGConnectingPoint num="7" id="861" /> +<TGConnectingPoint num="8" id="862" /> +<TGConnectingPoint num="9" id="863" /> +<TGConnectingPoint num="10" id="864" /> +<TGConnectingPoint num="11" id="865" /> +<TGConnectingPoint num="12" id="866" /> +<TGConnectingPoint num="13" id="867" /> +<TGConnectingPoint num="14" id="868" /> +<TGConnectingPoint num="15" id="869" /> +<TGConnectingPoint num="16" id="870" /> +<TGConnectingPoint num="17" id="871" /> +<TGConnectingPoint num="18" id="872" /> +<TGConnectingPoint num="19" id="873" /> +<TGConnectingPoint num="20" id="874" /> +<TGConnectingPoint num="21" id="875" /> +<TGConnectingPoint num="22" id="876" /> +<TGConnectingPoint num="23" id="877" /> +</COMPONENT> + +<COMPONENT type="606" id="912" > +<cdparam x="456" y="83" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="888" /> +<TGConnectingPoint num="1" id="889" /> +<TGConnectingPoint num="2" id="890" /> +<TGConnectingPoint num="3" id="891" /> +<TGConnectingPoint num="4" id="892" /> +<TGConnectingPoint num="5" id="893" /> +<TGConnectingPoint num="6" id="894" /> +<TGConnectingPoint num="7" id="895" /> +<TGConnectingPoint num="8" id="896" /> +<TGConnectingPoint num="9" id="897" /> +<TGConnectingPoint num="10" id="898" /> +<TGConnectingPoint num="11" id="899" /> +<TGConnectingPoint num="12" id="900" /> +<TGConnectingPoint num="13" id="901" /> +<TGConnectingPoint num="14" id="902" /> +<TGConnectingPoint num="15" id="903" /> +<TGConnectingPoint num="16" id="904" /> +<TGConnectingPoint num="17" id="905" /> +<TGConnectingPoint num="18" id="906" /> +<TGConnectingPoint num="19" id="907" /> +<TGConnectingPoint num="20" id="908" /> +<TGConnectingPoint num="21" id="909" /> +<TGConnectingPoint num="22" id="910" /> +<TGConnectingPoint num="23" id="911" /> +</COMPONENT> +<SUBCOMPONENT type="603" id="887" > +<father id="912" num="0" /> +<cdparam x="474" y="100" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="setting timer" value="{timer=timer1, duration=coinDelay}" /> +<TGConnectingPoint num="0" id="879" /> +<TGConnectingPoint num="1" id="880" /> +<TGConnectingPoint num="2" id="881" /> +<TGConnectingPoint num="3" id="882" /> +<TGConnectingPoint num="4" id="883" /> +<TGConnectingPoint num="5" id="884" /> +<TGConnectingPoint num="6" id="885" /> +<TGConnectingPoint num="7" id="886" /> +<extraparam> +<Interval timer="timer1" duration="coinDelay" /> +</extraparam> +</SUBCOMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="teaButtonPressed" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="964" > +<cdparam x="227" y="85" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="940" /> +<TGConnectingPoint num="1" id="941" /> +<TGConnectingPoint num="2" id="942" /> +<TGConnectingPoint num="3" id="943" /> +<TGConnectingPoint num="4" id="944" /> +<TGConnectingPoint num="5" id="945" /> +<TGConnectingPoint num="6" id="946" /> +<TGConnectingPoint num="7" id="947" /> +<TGConnectingPoint num="8" id="948" /> +<TGConnectingPoint num="9" id="949" /> +<TGConnectingPoint num="10" id="950" /> +<TGConnectingPoint num="11" id="951" /> +<TGConnectingPoint num="12" id="952" /> +<TGConnectingPoint num="13" id="953" /> +<TGConnectingPoint num="14" id="954" /> +<TGConnectingPoint num="15" id="955" /> +<TGConnectingPoint num="16" id="956" /> +<TGConnectingPoint num="17" id="957" /> +<TGConnectingPoint num="18" id="958" /> +<TGConnectingPoint num="19" id="959" /> +<TGConnectingPoint num="20" id="960" /> +<TGConnectingPoint num="21" id="961" /> +<TGConnectingPoint num="22" id="962" /> +<TGConnectingPoint num="23" id="963" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="921" > +<father id="964" num="0" /> +<cdparam x="232" y="166" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="210" /> +<infoparam name="time interval" value="[6, 8]" /> +<TGConnectingPoint num="0" id="913" /> +<TGConnectingPoint num="1" id="914" /> +<TGConnectingPoint num="2" id="915" /> +<TGConnectingPoint num="3" id="916" /> +<TGConnectingPoint num="4" id="917" /> +<TGConnectingPoint num="5" id="918" /> +<TGConnectingPoint num="6" id="919" /> +<TGConnectingPoint num="7" id="920" /> +<extraparam> +<Interval minDelay="6" maxDelay="8" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="930" > +<father id="964" num="1" /> +<cdparam x="232" y="238" /> +<sizeparam width="67" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="deliverTea" /> +<TGConnectingPoint num="0" id="922" /> +<TGConnectingPoint num="1" id="923" /> +<TGConnectingPoint num="2" id="924" /> +<TGConnectingPoint num="3" id="925" /> +<TGConnectingPoint num="4" id="926" /> +<TGConnectingPoint num="5" id="927" /> +<TGConnectingPoint num="6" id="928" /> +<TGConnectingPoint num="7" id="929" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="939" > +<father id="964" num="2" /> +<cdparam x="232" y="280" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="220" /> +<infoparam name="action state" value="nbCoin = 0" /> +<TGConnectingPoint num="0" id="931" /> +<TGConnectingPoint num="1" id="932" /> +<TGConnectingPoint num="2" id="933" /> +<TGConnectingPoint num="3" id="934" /> +<TGConnectingPoint num="4" id="935" /> +<TGConnectingPoint num="5" id="936" /> +<TGConnectingPoint num="6" id="937" /> +<TGConnectingPoint num="7" id="938" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="998" > +<cdparam x="430" y="85" /> +<sizeparam width="10" height="258" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="TeaButton" /> +<TGConnectingPoint num="0" id="974" /> +<TGConnectingPoint num="1" id="975" /> +<TGConnectingPoint num="2" id="976" /> +<TGConnectingPoint num="3" id="977" /> +<TGConnectingPoint num="4" id="978" /> +<TGConnectingPoint num="5" id="979" /> +<TGConnectingPoint num="6" id="980" /> +<TGConnectingPoint num="7" id="981" /> +<TGConnectingPoint num="8" id="982" /> +<TGConnectingPoint num="9" id="983" /> +<TGConnectingPoint num="10" id="984" /> +<TGConnectingPoint num="11" id="985" /> +<TGConnectingPoint num="12" id="986" /> +<TGConnectingPoint num="13" id="987" /> +<TGConnectingPoint num="14" id="988" /> +<TGConnectingPoint num="15" id="989" /> +<TGConnectingPoint num="16" id="990" /> +<TGConnectingPoint num="17" id="991" /> +<TGConnectingPoint num="18" id="992" /> +<TGConnectingPoint num="19" id="993" /> +<TGConnectingPoint num="20" id="994" /> +<TGConnectingPoint num="21" id="995" /> +<TGConnectingPoint num="22" id="996" /> +<TGConnectingPoint num="23" id="997" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="973" > +<father id="998" num="0" /> +<cdparam x="435" y="164" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="218" /> +<infoparam name="time interval" value="[mechanicalDelay, mechanicalDelay]" /> +<TGConnectingPoint num="0" id="965" /> +<TGConnectingPoint num="1" id="966" /> +<TGConnectingPoint num="2" id="967" /> +<TGConnectingPoint num="3" id="968" /> +<TGConnectingPoint num="4" id="969" /> +<TGConnectingPoint num="5" id="970" /> +<TGConnectingPoint num="6" id="971" /> +<TGConnectingPoint num="7" id="972" /> +<extraparam> +<Interval minDelay="mechanicalDelay" maxDelay="mechanicalDelay" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="107" id="999" > +<cdparam x="435" y="129" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="push" /> +<P1 x="435" y="125" id="977" /> +<P2 x="232" y="125" id="943" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="timerExpires" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1033" > +<cdparam x="598" y="88" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="1009" /> +<TGConnectingPoint num="1" id="1010" /> +<TGConnectingPoint num="2" id="1011" /> +<TGConnectingPoint num="3" id="1012" /> +<TGConnectingPoint num="4" id="1013" /> +<TGConnectingPoint num="5" id="1014" /> +<TGConnectingPoint num="6" id="1015" /> +<TGConnectingPoint num="7" id="1016" /> +<TGConnectingPoint num="8" id="1017" /> +<TGConnectingPoint num="9" id="1018" /> +<TGConnectingPoint num="10" id="1019" /> +<TGConnectingPoint num="11" id="1020" /> +<TGConnectingPoint num="12" id="1021" /> +<TGConnectingPoint num="13" id="1022" /> +<TGConnectingPoint num="14" id="1023" /> +<TGConnectingPoint num="15" id="1024" /> +<TGConnectingPoint num="16" id="1025" /> +<TGConnectingPoint num="17" id="1026" /> +<TGConnectingPoint num="18" id="1027" /> +<TGConnectingPoint num="19" id="1028" /> +<TGConnectingPoint num="20" id="1029" /> +<TGConnectingPoint num="21" id="1030" /> +<TGConnectingPoint num="22" id="1031" /> +<TGConnectingPoint num="23" id="1032" /> +</COMPONENT> +<SUBCOMPONENT type="605" id="1008" > +<father id="1033" num="0" /> +<cdparam x="616" y="111" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="timer expiration" value="{timer=timer1}" /> +<TGConnectingPoint num="0" id="1000" /> +<TGConnectingPoint num="1" id="1001" /> +<TGConnectingPoint num="2" id="1002" /> +<TGConnectingPoint num="3" id="1003" /> +<TGConnectingPoint num="4" id="1004" /> +<TGConnectingPoint num="5" id="1005" /> +<TGConnectingPoint num="6" id="1006" /> +<TGConnectingPoint num="7" id="1007" /> +<extraparam> +<Interval timer="timer1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1058" > +<cdparam x="384" y="88" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="1034" /> +<TGConnectingPoint num="1" id="1035" /> +<TGConnectingPoint num="2" id="1036" /> +<TGConnectingPoint num="3" id="1037" /> +<TGConnectingPoint num="4" id="1038" /> +<TGConnectingPoint num="5" id="1039" /> +<TGConnectingPoint num="6" id="1040" /> +<TGConnectingPoint num="7" id="1041" /> +<TGConnectingPoint num="8" id="1042" /> +<TGConnectingPoint num="9" id="1043" /> +<TGConnectingPoint num="10" id="1044" /> +<TGConnectingPoint num="11" id="1045" /> +<TGConnectingPoint num="12" id="1046" /> +<TGConnectingPoint num="13" id="1047" /> +<TGConnectingPoint num="14" id="1048" /> +<TGConnectingPoint num="15" id="1049" /> +<TGConnectingPoint num="16" id="1050" /> +<TGConnectingPoint num="17" id="1051" /> +<TGConnectingPoint num="18" id="1052" /> +<TGConnectingPoint num="19" id="1053" /> +<TGConnectingPoint num="20" id="1054" /> +<TGConnectingPoint num="21" id="1055" /> +<TGConnectingPoint num="22" id="1056" /> +<TGConnectingPoint num="23" id="1057" /> +</COMPONENT> + + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="timerReset" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1092" > +<cdparam x="622" y="91" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="1068" /> +<TGConnectingPoint num="1" id="1069" /> +<TGConnectingPoint num="2" id="1070" /> +<TGConnectingPoint num="3" id="1071" /> +<TGConnectingPoint num="4" id="1072" /> +<TGConnectingPoint num="5" id="1073" /> +<TGConnectingPoint num="6" id="1074" /> +<TGConnectingPoint num="7" id="1075" /> +<TGConnectingPoint num="8" id="1076" /> +<TGConnectingPoint num="9" id="1077" /> +<TGConnectingPoint num="10" id="1078" /> +<TGConnectingPoint num="11" id="1079" /> +<TGConnectingPoint num="12" id="1080" /> +<TGConnectingPoint num="13" id="1081" /> +<TGConnectingPoint num="14" id="1082" /> +<TGConnectingPoint num="15" id="1083" /> +<TGConnectingPoint num="16" id="1084" /> +<TGConnectingPoint num="17" id="1085" /> +<TGConnectingPoint num="18" id="1086" /> +<TGConnectingPoint num="19" id="1087" /> +<TGConnectingPoint num="20" id="1088" /> +<TGConnectingPoint num="21" id="1089" /> +<TGConnectingPoint num="22" id="1090" /> +<TGConnectingPoint num="23" id="1091" /> +</COMPONENT> +<SUBCOMPONENT type="604" id="1067" > +<father id="1092" num="0" /> +<cdparam x="640" y="128" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="228" /> +<infoparam name="timer cancellation" value="{timer=timer1}" /> +<TGConnectingPoint num="0" id="1059" /> +<TGConnectingPoint num="1" id="1060" /> +<TGConnectingPoint num="2" id="1061" /> +<TGConnectingPoint num="3" id="1062" /> +<TGConnectingPoint num="4" id="1063" /> +<TGConnectingPoint num="5" id="1064" /> +<TGConnectingPoint num="6" id="1065" /> +<TGConnectingPoint num="7" id="1066" /> +<extraparam> +<Interval timer="timer1" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1117" > +<cdparam x="408" y="91" /> +<sizeparam width="10" height="250" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Wallet" /> +<TGConnectingPoint num="0" id="1093" /> +<TGConnectingPoint num="1" id="1094" /> +<TGConnectingPoint num="2" id="1095" /> +<TGConnectingPoint num="3" id="1096" /> +<TGConnectingPoint num="4" id="1097" /> +<TGConnectingPoint num="5" id="1098" /> +<TGConnectingPoint num="6" id="1099" /> +<TGConnectingPoint num="7" id="1100" /> +<TGConnectingPoint num="8" id="1101" /> +<TGConnectingPoint num="9" id="1102" /> +<TGConnectingPoint num="10" id="1103" /> +<TGConnectingPoint num="11" id="1104" /> +<TGConnectingPoint num="12" id="1105" /> +<TGConnectingPoint num="13" id="1106" /> +<TGConnectingPoint num="14" id="1107" /> +<TGConnectingPoint num="15" id="1108" /> +<TGConnectingPoint num="16" id="1109" /> +<TGConnectingPoint num="17" id="1110" /> +<TGConnectingPoint num="18" id="1111" /> +<TGConnectingPoint num="19" id="1112" /> +<TGConnectingPoint num="20" id="1113" /> +<TGConnectingPoint num="21" id="1114" /> +<TGConnectingPoint num="22" id="1115" /> +<TGConnectingPoint num="23" id="1116" /> +</COMPONENT> + + +</SequenceDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="1150" > +<cdparam x="175" y="197" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Wallet" /> +<TGConnectingPoint num="0" id="1118" /> +<TGConnectingPoint num="1" id="1119" /> +<TGConnectingPoint num="2" id="1120" /> +<TGConnectingPoint num="3" id="1121" /> +<TGConnectingPoint num="4" id="1122" /> +<TGConnectingPoint num="5" id="1123" /> +<TGConnectingPoint num="6" id="1124" /> +<TGConnectingPoint num="7" id="1125" /> +<TGConnectingPoint num="8" id="1126" /> +<TGConnectingPoint num="9" id="1127" /> +<TGConnectingPoint num="10" id="1128" /> +<TGConnectingPoint num="11" id="1129" /> +<TGConnectingPoint num="12" id="1130" /> +<TGConnectingPoint num="13" id="1131" /> +<TGConnectingPoint num="14" id="1132" /> +<TGConnectingPoint num="15" id="1133" /> +<TGConnectingPoint num="16" id="1134" /> +<TGConnectingPoint num="17" id="1135" /> +<TGConnectingPoint num="18" id="1136" /> +<TGConnectingPoint num="19" id="1137" /> +<TGConnectingPoint num="20" id="1138" /> +<TGConnectingPoint num="21" id="1139" /> +<TGConnectingPoint num="22" id="1140" /> +<TGConnectingPoint num="23" id="1141" /> +<TGConnectingPoint num="24" id="1142" /> +<TGConnectingPoint num="25" id="1143" /> +<TGConnectingPoint num="26" id="1144" /> +<TGConnectingPoint num="27" id="1145" /> +<TGConnectingPoint num="28" id="1146" /> +<TGConnectingPoint num="29" id="1147" /> +<TGConnectingPoint num="30" id="1148" /> +<TGConnectingPoint num="31" id="1149" /> +</COMPONENT> + +<COMPONENT type="701" id="1175" > +<cdparam x="396" y="143" /> +<sizeparam width="95" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Serve beverage" /> +<TGConnectingPoint num="0" id="1151" /> +<TGConnectingPoint num="1" id="1152" /> +<TGConnectingPoint num="2" id="1153" /> +<TGConnectingPoint num="3" id="1154" /> +<TGConnectingPoint num="4" id="1155" /> +<TGConnectingPoint num="5" id="1156" /> +<TGConnectingPoint num="6" id="1157" /> +<TGConnectingPoint num="7" id="1158" /> +<TGConnectingPoint num="8" id="1159" /> +<TGConnectingPoint num="9" id="1160" /> +<TGConnectingPoint num="10" id="1161" /> +<TGConnectingPoint num="11" id="1162" /> +<TGConnectingPoint num="12" id="1163" /> +<TGConnectingPoint num="13" id="1164" /> +<TGConnectingPoint num="14" id="1165" /> +<TGConnectingPoint num="15" id="1166" /> +<TGConnectingPoint num="16" id="1167" /> +<TGConnectingPoint num="17" id="1168" /> +<TGConnectingPoint num="18" id="1169" /> +<TGConnectingPoint num="19" id="1170" /> +<TGConnectingPoint num="20" id="1171" /> +<TGConnectingPoint num="21" id="1172" /> +<TGConnectingPoint num="22" id="1173" /> +<TGConnectingPoint num="23" id="1174" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1200" > +<cdparam x="275" y="198" /> +<sizeparam width="87" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Manage coins" /> +<TGConnectingPoint num="0" id="1176" /> +<TGConnectingPoint num="1" id="1177" /> +<TGConnectingPoint num="2" id="1178" /> +<TGConnectingPoint num="3" id="1179" /> +<TGConnectingPoint num="4" id="1180" /> +<TGConnectingPoint num="5" id="1181" /> +<TGConnectingPoint num="6" id="1182" /> +<TGConnectingPoint num="7" id="1183" /> +<TGConnectingPoint num="8" id="1184" /> +<TGConnectingPoint num="9" id="1185" /> +<TGConnectingPoint num="10" id="1186" /> +<TGConnectingPoint num="11" id="1187" /> +<TGConnectingPoint num="12" id="1188" /> +<TGConnectingPoint num="13" id="1189" /> +<TGConnectingPoint num="14" id="1190" /> +<TGConnectingPoint num="15" id="1191" /> +<TGConnectingPoint num="16" id="1192" /> +<TGConnectingPoint num="17" id="1193" /> +<TGConnectingPoint num="18" id="1194" /> +<TGConnectingPoint num="19" id="1195" /> +<TGConnectingPoint num="20" id="1196" /> +<TGConnectingPoint num="21" id="1197" /> +<TGConnectingPoint num="22" id="1198" /> +<TGConnectingPoint num="23" id="1199" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1225" > +<cdparam x="519" y="273" /> +<sizeparam width="74" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Prepare tea" /> +<TGConnectingPoint num="0" id="1201" /> +<TGConnectingPoint num="1" id="1202" /> +<TGConnectingPoint num="2" id="1203" /> +<TGConnectingPoint num="3" id="1204" /> +<TGConnectingPoint num="4" id="1205" /> +<TGConnectingPoint num="5" id="1206" /> +<TGConnectingPoint num="6" id="1207" /> +<TGConnectingPoint num="7" id="1208" /> +<TGConnectingPoint num="8" id="1209" /> +<TGConnectingPoint num="9" id="1210" /> +<TGConnectingPoint num="10" id="1211" /> +<TGConnectingPoint num="11" id="1212" /> +<TGConnectingPoint num="12" id="1213" /> +<TGConnectingPoint num="13" id="1214" /> +<TGConnectingPoint num="14" id="1215" /> +<TGConnectingPoint num="15" id="1216" /> +<TGConnectingPoint num="16" id="1217" /> +<TGConnectingPoint num="17" id="1218" /> +<TGConnectingPoint num="18" id="1219" /> +<TGConnectingPoint num="19" id="1220" /> +<TGConnectingPoint num="20" id="1221" /> +<TGConnectingPoint num="21" id="1222" /> +<TGConnectingPoint num="22" id="1223" /> +<TGConnectingPoint num="23" id="1224" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1250" > +<cdparam x="335" y="287" /> +<sizeparam width="90" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Prepare coffee" /> +<TGConnectingPoint num="0" id="1226" /> +<TGConnectingPoint num="1" id="1227" /> +<TGConnectingPoint num="2" id="1228" /> +<TGConnectingPoint num="3" id="1229" /> +<TGConnectingPoint num="4" id="1230" /> +<TGConnectingPoint num="5" id="1231" /> +<TGConnectingPoint num="6" id="1232" /> +<TGConnectingPoint num="7" id="1233" /> +<TGConnectingPoint num="8" id="1234" /> +<TGConnectingPoint num="9" id="1235" /> +<TGConnectingPoint num="10" id="1236" /> +<TGConnectingPoint num="11" id="1237" /> +<TGConnectingPoint num="12" id="1238" /> +<TGConnectingPoint num="13" id="1239" /> +<TGConnectingPoint num="14" id="1240" /> +<TGConnectingPoint num="15" id="1241" /> +<TGConnectingPoint num="16" id="1242" /> +<TGConnectingPoint num="17" id="1243" /> +<TGConnectingPoint num="18" id="1244" /> +<TGConnectingPoint num="19" id="1245" /> +<TGConnectingPoint num="20" id="1246" /> +<TGConnectingPoint num="21" id="1247" /> +<TGConnectingPoint num="22" id="1248" /> +<TGConnectingPoint num="23" id="1249" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="1259" > +<cdparam x="258" y="119" /> +<sizeparam width="348" height="214" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="CoffeeMachine" /> +<TGConnectingPoint num="0" id="1251" /> +<TGConnectingPoint num="1" id="1252" /> +<TGConnectingPoint num="2" id="1253" /> +<TGConnectingPoint num="3" id="1254" /> +<TGConnectingPoint num="4" id="1255" /> +<TGConnectingPoint num="5" id="1256" /> +<TGConnectingPoint num="6" id="1257" /> +<TGConnectingPoint num="7" id="1258" /> +</COMPONENT> + +<COMPONENT type="700" id="1292" > +<cdparam x="420" y="411" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Button" /> +<TGConnectingPoint num="0" id="1260" /> +<TGConnectingPoint num="1" id="1261" /> +<TGConnectingPoint num="2" id="1262" /> +<TGConnectingPoint num="3" id="1263" /> +<TGConnectingPoint num="4" id="1264" /> +<TGConnectingPoint num="5" id="1265" /> +<TGConnectingPoint num="6" id="1266" /> +<TGConnectingPoint num="7" id="1267" /> +<TGConnectingPoint num="8" id="1268" /> +<TGConnectingPoint num="9" id="1269" /> +<TGConnectingPoint num="10" id="1270" /> +<TGConnectingPoint num="11" id="1271" /> +<TGConnectingPoint num="12" id="1272" /> +<TGConnectingPoint num="13" id="1273" /> +<TGConnectingPoint num="14" id="1274" /> +<TGConnectingPoint num="15" id="1275" /> +<TGConnectingPoint num="16" id="1276" /> +<TGConnectingPoint num="17" id="1277" /> +<TGConnectingPoint num="18" id="1278" /> +<TGConnectingPoint num="19" id="1279" /> +<TGConnectingPoint num="20" id="1280" /> +<TGConnectingPoint num="21" id="1281" /> +<TGConnectingPoint num="22" id="1282" /> +<TGConnectingPoint num="23" id="1283" /> +<TGConnectingPoint num="24" id="1284" /> +<TGConnectingPoint num="25" id="1285" /> +<TGConnectingPoint num="26" id="1286" /> +<TGConnectingPoint num="27" id="1287" /> +<TGConnectingPoint num="28" id="1288" /> +<TGConnectingPoint num="29" id="1289" /> +<TGConnectingPoint num="30" id="1290" /> +<TGConnectingPoint num="31" id="1291" /> +</COMPONENT> + +<COMPONENT type="700" id="1325" > +<cdparam x="268" y="344" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="CoffeeButton" /> +<TGConnectingPoint num="0" id="1293" /> +<TGConnectingPoint num="1" id="1294" /> +<TGConnectingPoint num="2" id="1295" /> +<TGConnectingPoint num="3" id="1296" /> +<TGConnectingPoint num="4" id="1297" /> +<TGConnectingPoint num="5" id="1298" /> +<TGConnectingPoint num="6" id="1299" /> +<TGConnectingPoint num="7" id="1300" /> +<TGConnectingPoint num="8" id="1301" /> +<TGConnectingPoint num="9" id="1302" /> +<TGConnectingPoint num="10" id="1303" /> +<TGConnectingPoint num="11" id="1304" /> +<TGConnectingPoint num="12" id="1305" /> +<TGConnectingPoint num="13" id="1306" /> +<TGConnectingPoint num="14" id="1307" /> +<TGConnectingPoint num="15" id="1308" /> +<TGConnectingPoint num="16" id="1309" /> +<TGConnectingPoint num="17" id="1310" /> +<TGConnectingPoint num="18" id="1311" /> +<TGConnectingPoint num="19" id="1312" /> +<TGConnectingPoint num="20" id="1313" /> +<TGConnectingPoint num="21" id="1314" /> +<TGConnectingPoint num="22" id="1315" /> +<TGConnectingPoint num="23" id="1316" /> +<TGConnectingPoint num="24" id="1317" /> +<TGConnectingPoint num="25" id="1318" /> +<TGConnectingPoint num="26" id="1319" /> +<TGConnectingPoint num="27" id="1320" /> +<TGConnectingPoint num="28" id="1321" /> +<TGConnectingPoint num="29" id="1322" /> +<TGConnectingPoint num="30" id="1323" /> +<TGConnectingPoint num="31" id="1324" /> +</COMPONENT> + +<COMPONENT type="700" id="1358" > +<cdparam x="569" y="344" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="TeaButton" /> +<TGConnectingPoint num="0" id="1326" /> +<TGConnectingPoint num="1" id="1327" /> +<TGConnectingPoint num="2" id="1328" /> +<TGConnectingPoint num="3" id="1329" /> +<TGConnectingPoint num="4" id="1330" /> +<TGConnectingPoint num="5" id="1331" /> +<TGConnectingPoint num="6" id="1332" /> +<TGConnectingPoint num="7" id="1333" /> +<TGConnectingPoint num="8" id="1334" /> +<TGConnectingPoint num="9" id="1335" /> +<TGConnectingPoint num="10" id="1336" /> +<TGConnectingPoint num="11" id="1337" /> +<TGConnectingPoint num="12" id="1338" /> +<TGConnectingPoint num="13" id="1339" /> +<TGConnectingPoint num="14" id="1340" /> +<TGConnectingPoint num="15" id="1341" /> +<TGConnectingPoint num="16" id="1342" /> +<TGConnectingPoint num="17" id="1343" /> +<TGConnectingPoint num="18" id="1344" /> +<TGConnectingPoint num="19" id="1345" /> +<TGConnectingPoint num="20" id="1346" /> +<TGConnectingPoint num="21" id="1347" /> +<TGConnectingPoint num="22" id="1348" /> +<TGConnectingPoint num="23" id="1349" /> +<TGConnectingPoint num="24" id="1350" /> +<TGConnectingPoint num="25" id="1351" /> +<TGConnectingPoint num="26" id="1352" /> +<TGConnectingPoint num="27" id="1353" /> +<TGConnectingPoint num="28" id="1354" /> +<TGConnectingPoint num="29" id="1355" /> +<TGConnectingPoint num="30" id="1356" /> +<TGConnectingPoint num="31" id="1357" /> +</COMPONENT> + +<CONNECTOR type="111" id="1359" > +<cdparam x="395" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="396" y="163" id="1152" /> +<P2 x="318" y="198" id="1176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1360" > +<cdparam x="442" y="189" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="443" y="183" id="1158" /> +<P2 x="556" y="273" id="1201" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1361" > +<cdparam x="490" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="443" y="183" id="1154" /> +<P2 x="380" y="287" id="1226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1362" > +<cdparam x="299" y="376" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to actor" value="null" /> +<P1 x="298" y="379" id="1302" /> +<P2 x="420" y="446" id="1262" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1363" > +<cdparam x="569" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to actor" value="null" /> +<P1 x="569" y="379" id="1328" /> +<P2 x="450" y="446" id="1269" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1364" > +<cdparam x="275" y="218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="275" y="218" id="1177" /> +<P2 x="205" y="232" id="1127" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1365" > +<cdparam x="491" y="293" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="335" y="307" id="1227" /> +<P2 x="298" y="344" id="1300" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1366" > +<cdparam x="427" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="556" y="313" id="1204" /> +<P2 x="569" y="361" id="1327" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +<SequenceDiagramPanel name="Maintenance" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1434" > +<cdparam x="354" y="98" /> +<sizeparam width="10" height="500" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="instance" value="Machine" /> +<TGConnectingPoint num="0" id="1385" /> +<TGConnectingPoint num="1" id="1386" /> +<TGConnectingPoint num="2" id="1387" /> +<TGConnectingPoint num="3" id="1388" /> +<TGConnectingPoint num="4" id="1389" /> +<TGConnectingPoint num="5" id="1390" /> +<TGConnectingPoint num="6" id="1391" /> +<TGConnectingPoint num="7" id="1392" /> +<TGConnectingPoint num="8" id="1393" /> +<TGConnectingPoint num="9" id="1394" /> +<TGConnectingPoint num="10" id="1395" /> +<TGConnectingPoint num="11" id="1396" /> +<TGConnectingPoint num="12" id="1397" /> +<TGConnectingPoint num="13" id="1398" /> +<TGConnectingPoint num="14" id="1399" /> +<TGConnectingPoint num="15" id="1400" /> +<TGConnectingPoint num="16" id="1401" /> +<TGConnectingPoint num="17" id="1402" /> +<TGConnectingPoint num="18" id="1403" /> +<TGConnectingPoint num="19" id="1404" /> +<TGConnectingPoint num="20" id="1405" /> +<TGConnectingPoint num="21" id="1406" /> +<TGConnectingPoint num="22" id="1407" /> +<TGConnectingPoint num="23" id="1408" /> +<TGConnectingPoint num="24" id="1409" /> +<TGConnectingPoint num="25" id="1410" /> +<TGConnectingPoint num="26" id="1411" /> +<TGConnectingPoint num="27" id="1412" /> +<TGConnectingPoint num="28" id="1413" /> +<TGConnectingPoint num="29" id="1414" /> +<TGConnectingPoint num="30" id="1415" /> +<TGConnectingPoint num="31" id="1416" /> +<TGConnectingPoint num="32" id="1417" /> +<TGConnectingPoint num="33" id="1418" /> +<TGConnectingPoint num="34" id="1419" /> +<TGConnectingPoint num="35" id="1420" /> +<TGConnectingPoint num="36" id="1421" /> +<TGConnectingPoint num="37" id="1422" /> +<TGConnectingPoint num="38" id="1423" /> +<TGConnectingPoint num="39" id="1424" /> +<TGConnectingPoint num="40" id="1425" /> +<TGConnectingPoint num="41" id="1426" /> +<TGConnectingPoint num="42" id="1427" /> +<TGConnectingPoint num="43" id="1428" /> +<TGConnectingPoint num="44" id="1429" /> +<TGConnectingPoint num="45" id="1430" /> +<TGConnectingPoint num="46" id="1431" /> +<TGConnectingPoint num="47" id="1432" /> +<TGConnectingPoint num="48" id="1433" /> +</COMPONENT> +<SUBCOMPONENT type="608" id="1375" > +<father id="1434" num="0" /> +<cdparam x="359" y="127" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="460" /> +<infoparam name="time interval" value="[100, 100]" /> +<TGConnectingPoint num="0" id="1367" /> +<TGConnectingPoint num="1" id="1368" /> +<TGConnectingPoint num="2" id="1369" /> +<TGConnectingPoint num="3" id="1370" /> +<TGConnectingPoint num="4" id="1371" /> +<TGConnectingPoint num="5" id="1372" /> +<TGConnectingPoint num="6" id="1373" /> +<TGConnectingPoint num="7" id="1374" /> +<extraparam> +<Interval minDelay="100" maxDelay="100" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="602" id="1384" > +<father id="1434" num="1" /> +<cdparam x="359" y="203" /> +<sizeparam width="40" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="panic" /> +<TGConnectingPoint num="0" id="1376" /> +<TGConnectingPoint num="1" id="1377" /> +<TGConnectingPoint num="2" id="1378" /> +<TGConnectingPoint num="3" id="1379" /> +<TGConnectingPoint num="4" id="1380" /> +<TGConnectingPoint num="5" id="1381" /> +<TGConnectingPoint num="6" id="1382" /> +<TGConnectingPoint num="7" id="1383" /> +</SUBCOMPONENT> + + +</SequenceDiagramPanel> + +</Modeling> + + + + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1000" minY="10" maxY="900" attributes="true" gates="true" synchro="true" > +<COMPONENT type="201" id="1469" > +<cdparam x="201" y="10" /> +<sizeparam width="156" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Wallet" /> +<TGConnectingPoint num="0" id="1461" /> +<TGConnectingPoint num="1" id="1462" /> +<TGConnectingPoint num="2" id="1463" /> +<TGConnectingPoint num="3" id="1464" /> +<TGConnectingPoint num="4" id="1465" /> +<TGConnectingPoint num="5" id="1466" /> +<TGConnectingPoint num="6" id="1467" /> +<TGConnectingPoint num="7" id="1468" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1441" > +<father id="1469" num="0" /> +<cdparam x="201" y="40" /> +<sizeparam width="156" height="78" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="156" minDesiredHeight="78" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="- coin = 2 : Natural; +- x : Natural; +- userDelay = 4 : Natural; +- userLatency = 1 : Natural; +" /> +<TGConnectingPoint num="0" id="1435" /> +<TGConnectingPoint num="1" id="1436" /> +<TGConnectingPoint num="2" id="1437" /> +<TGConnectingPoint num="3" id="1438" /> +<TGConnectingPoint num="4" id="1439" /> +<TGConnectingPoint num="5" id="1440" /> +<extraparam> +<Attribute access="0" id="coin" value="2" type="0" typeOther="" /> +<Attribute access="0" id="x" value="" type="0" typeOther="" /> +<Attribute access="0" id="userDelay" value="4" type="0" typeOther="" /> +<Attribute access="0" id="userLatency" value="1" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1444" > +<father id="1469" num="1" /> +<cdparam x="201" y="118" /> +<sizeparam width="156" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="108" maxY="108" /> +<infoparam name="Tclass gates" value="+ putCoin : OutGate; ++ coinBack : InGate; +" /> +<TGConnectingPoint num="0" id="1442" /> +<TGConnectingPoint num="1" id="1443" /> +<extraparam> +<Attribute access="2" id="putCoin" value="" type="2" typeOther="" /> +<Attribute access="2" id="coinBack" value="" type="3" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1451" > +<father id="1469" num="2" /> +<cdparam x="201" y="164" /> +<sizeparam width="156" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="154" maxY="154" /> +<infoparam name="Tclass operations" value="+ Wallet(Natural coin)" /> +<TGConnectingPoint num="0" id="1445" /> +<TGConnectingPoint num="1" id="1446" /> +<TGConnectingPoint num="2" id="1447" /> +<TGConnectingPoint num="3" id="1448" /> +<TGConnectingPoint num="4" id="1449" /> +<TGConnectingPoint num="5" id="1450" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1460" > +<father id="1469" num="3" /> +<cdparam x="201" y="194" /> +<sizeparam width="156" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="184" maxY="184" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1452" /> +<TGConnectingPoint num="1" id="1453" /> +<TGConnectingPoint num="2" id="1454" /> +<TGConnectingPoint num="3" id="1455" /> +<TGConnectingPoint num="4" id="1456" /> +<TGConnectingPoint num="5" id="1457" /> +<TGConnectingPoint num="6" id="1458" /> +<TGConnectingPoint num="7" id="1459" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="1504" > +<cdparam x="676" y="225" /> +<sizeparam width="157" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Machine" /> +<TGConnectingPoint num="0" id="1496" /> +<TGConnectingPoint num="1" id="1497" /> +<TGConnectingPoint num="2" id="1498" /> +<TGConnectingPoint num="3" id="1499" /> +<TGConnectingPoint num="4" id="1500" /> +<TGConnectingPoint num="5" id="1501" /> +<TGConnectingPoint num="6" id="1502" /> +<TGConnectingPoint num="7" id="1503" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1476" > +<father id="1504" num="0" /> +<cdparam x="676" y="255" /> +<sizeparam width="157" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="157" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ buttonDelay = 5 : Natural; ++ coinDelay = 5 : Natural; +" /> +<TGConnectingPoint num="0" id="1470" /> +<TGConnectingPoint num="1" id="1471" /> +<TGConnectingPoint num="2" id="1472" /> +<TGConnectingPoint num="3" id="1473" /> +<TGConnectingPoint num="4" id="1474" /> +<TGConnectingPoint num="5" id="1475" /> +<extraparam> +<Attribute access="2" id="buttonDelay" value="5" type="0" typeOther="" /> +<Attribute access="2" id="coinDelay" value="5" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1479" > +<father id="1504" num="1" /> +<cdparam x="676" y="301" /> +<sizeparam width="157" height="110" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="110" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tclass gates" value="+ coin_in : InGate; ++ eject_coin : OutGate; ++ startCoffee : InGate; ++ deliverCoffee : OutGate; ++ startTea : InGate; ++ deliverTea : OutGate; +" /> +<TGConnectingPoint num="0" id="1477" /> +<TGConnectingPoint num="1" id="1478" /> +<extraparam> +<Attribute access="2" id="coin_in" value="" type="3" typeOther="" /> +<Attribute access="2" id="eject_coin" value="" type="2" typeOther="" /> +<Attribute access="2" id="startCoffee" value="" type="3" typeOther="" /> +<Attribute access="2" id="deliverCoffee" value="" type="2" typeOther="" /> +<Attribute access="2" id="startTea" value="" type="3" typeOther="" /> +<Attribute access="2" id="deliverTea" value="" type="2" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1486" > +<father id="1504" num="2" /> +<cdparam x="676" y="411" /> +<sizeparam width="157" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="186" maxY="186" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1480" /> +<TGConnectingPoint num="1" id="1481" /> +<TGConnectingPoint num="2" id="1482" /> +<TGConnectingPoint num="3" id="1483" /> +<TGConnectingPoint num="4" id="1484" /> +<TGConnectingPoint num="5" id="1485" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1495" > +<father id="1504" num="3" /> +<cdparam x="676" y="441" /> +<sizeparam width="157" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="216" maxY="216" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1487" /> +<TGConnectingPoint num="1" id="1488" /> +<TGConnectingPoint num="2" id="1489" /> +<TGConnectingPoint num="3" id="1490" /> +<TGConnectingPoint num="4" id="1491" /> +<TGConnectingPoint num="5" id="1492" /> +<TGConnectingPoint num="6" id="1493" /> +<TGConnectingPoint num="7" id="1494" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="1518" > +<cdparam x="482" y="62" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Wallet and Machine" value="Synchro" /> +<TGConnectingPoint num="0" id="1506" /> +<TGConnectingPoint num="1" id="1507" /> +<TGConnectingPoint num="2" id="1508" /> +<TGConnectingPoint num="3" id="1509" /> +<TGConnectingPoint num="4" id="1510" /> +<TGConnectingPoint num="5" id="1511" /> +<TGConnectingPoint num="6" id="1512" /> +<TGConnectingPoint num="7" id="1513" /> +<TGConnectingPoint num="8" id="1514" /> +<TGConnectingPoint num="9" id="1515" /> +<TGConnectingPoint num="10" id="1516" /> +<TGConnectingPoint num="11" id="1517" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1505" > +<father id="1518" num="0" /> +<cdparam x="500" y="102" /> +<sizeparam width="212" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="1469" g1="putCoin" t2="1504" g2="coin_in" /> +<Synchro t1="1469" g1="coinBack" t2="1504" g2="eject_coin" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="1532" > +<cdparam x="463" y="222" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between CoffeeButton_Button and Machine" value="Synchro" /> +<TGConnectingPoint num="0" id="1520" /> +<TGConnectingPoint num="1" id="1521" /> +<TGConnectingPoint num="2" id="1522" /> +<TGConnectingPoint num="3" id="1523" /> +<TGConnectingPoint num="4" id="1524" /> +<TGConnectingPoint num="5" id="1525" /> +<TGConnectingPoint num="6" id="1526" /> +<TGConnectingPoint num="7" id="1527" /> +<TGConnectingPoint num="8" id="1528" /> +<TGConnectingPoint num="9" id="1529" /> +<TGConnectingPoint num="10" id="1530" /> +<TGConnectingPoint num="11" id="1531" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1519" > +<father id="1532" num="0" /> +<cdparam x="388" y="309" /> +<sizeparam width="280" height="18" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="1625" g1="push" t2="1504" g2="startCoffee" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="1546" > +<cdparam x="463" y="377" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between TeaButton_Button and Machine" value="Synchro" /> +<TGConnectingPoint num="0" id="1534" /> +<TGConnectingPoint num="1" id="1535" /> +<TGConnectingPoint num="2" id="1536" /> +<TGConnectingPoint num="3" id="1537" /> +<TGConnectingPoint num="4" id="1538" /> +<TGConnectingPoint num="5" id="1539" /> +<TGConnectingPoint num="6" id="1540" /> +<TGConnectingPoint num="7" id="1541" /> +<TGConnectingPoint num="8" id="1542" /> +<TGConnectingPoint num="9" id="1543" /> +<TGConnectingPoint num="10" id="1544" /> +<TGConnectingPoint num="11" id="1545" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1533" > +<father id="1546" num="0" /> +<cdparam x="398" y="460" /> +<sizeparam width="250" height="18" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="1660" g1="push" t2="1504" g2="startTea" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="301" id="1555" > +<cdparam x="434" y="496" /> +<sizeparam width="535" height="228" minWidth="50" minHeight="20" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Hints for a demo of formal verification capabilities: +***> Logical behaviours: +If you modify the inital value of the coin attribute, you may observe +different behaviours of the system on simulation traces or on reachability graphs +coin = 1 -> impossible to get a tea / coffee +coin = 2 -> possibility to get only one tea or one coffee +coin = 3 -> one tea or one coffee, and then, nothing +except putting an additional coin in the machine, and waiting for its ejection +coin = 4 -> 2 beverages (tea and tea, coffee and tea, etc.) +***> Temporal behaviours: +if coin >1 and userDelay > coinDelay, one may observe that it is not possible to get a beverage. +if coin >1 and coinDelay > userDelay and userDelay + userLatency >coinDelay, +in some case, then, sometimes the beverage can be otbained, or inserted coins are ejected. +" /> +<TGConnectingPoint num="0" id="1547" /> +<TGConnectingPoint num="1" id="1548" /> +<TGConnectingPoint num="2" id="1549" /> +<TGConnectingPoint num="3" id="1550" /> +<TGConnectingPoint num="4" id="1551" /> +<TGConnectingPoint num="5" id="1552" /> +<TGConnectingPoint num="6" id="1553" /> +<TGConnectingPoint num="7" id="1554" /> +<extraparam> +<Line value="Hints for a demo of formal verification capabilities:" /> +<Line value="***> Logical behaviours:" /> +<Line value="If you modify the inital value of the coin attribute, you may observe " /> +<Line value="different behaviours of the system on simulation traces or on reachability graphs" /> +<Line value="coin = 1 -> impossible to get a tea / coffee" /> +<Line value="coin = 2 -> possibility to get only one tea or one coffee" /> +<Line value="coin = 3 -> one tea or one coffee, and then, nothing " /> +<Line value="except putting an additional coin in the machine, and waiting for its ejection" /> +<Line value="coin = 4 -> 2 beverages (tea and tea, coffee and tea, etc.)" /> +<Line value="***> Temporal behaviours:" /> +<Line value="if coin >1 and userDelay > coinDelay, one may observe that it is not possible to get a beverage." /> +<Line value="if coin >1 and coinDelay > userDelay and userDelay + userLatency >coinDelay, " /> +<Line value="in some case, then, sometimes the beverage can be otbained, or inserted coins are ejected." /> +</extraparam> +</COMPONENT> + +<COMPONENT type="201" id="1590" > +<cdparam x="11" y="335" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Button" /> +<TGConnectingPoint num="0" id="1582" /> +<TGConnectingPoint num="1" id="1583" /> +<TGConnectingPoint num="2" id="1584" /> +<TGConnectingPoint num="3" id="1585" /> +<TGConnectingPoint num="4" id="1586" /> +<TGConnectingPoint num="5" id="1587" /> +<TGConnectingPoint num="6" id="1588" /> +<TGConnectingPoint num="7" id="1589" /> +<extraparam> +<Start isStart="false" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1562" > +<father id="1590" num="0" /> +<cdparam x="11" y="365" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="167" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ mechanicalDelay : Natural; +" /> +<TGConnectingPoint num="0" id="1556" /> +<TGConnectingPoint num="1" id="1557" /> +<TGConnectingPoint num="2" id="1558" /> +<TGConnectingPoint num="3" id="1559" /> +<TGConnectingPoint num="4" id="1560" /> +<TGConnectingPoint num="5" id="1561" /> +<extraparam> +<Attribute access="2" id="mechanicalDelay" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1565" > +<father id="1590" num="1" /> +<cdparam x="11" y="395" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="60" maxY="60" /> +<infoparam name="Tclass gates" value="+ push : Gate; +" /> +<TGConnectingPoint num="0" id="1563" /> +<TGConnectingPoint num="1" id="1564" /> +<extraparam> +<Attribute access="2" id="push" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1572" > +<father id="1590" num="2" /> +<cdparam x="11" y="425" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="90" maxY="90" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1566" /> +<TGConnectingPoint num="1" id="1567" /> +<TGConnectingPoint num="2" id="1568" /> +<TGConnectingPoint num="3" id="1569" /> +<TGConnectingPoint num="4" id="1570" /> +<TGConnectingPoint num="5" id="1571" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1581" > +<father id="1590" num="3" /> +<cdparam x="11" y="455" /> +<sizeparam width="167" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="120" maxY="120" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1573" /> +<TGConnectingPoint num="1" id="1574" /> +<TGConnectingPoint num="2" id="1575" /> +<TGConnectingPoint num="3" id="1576" /> +<TGConnectingPoint num="4" id="1577" /> +<TGConnectingPoint num="5" id="1578" /> +<TGConnectingPoint num="6" id="1579" /> +<TGConnectingPoint num="7" id="1580" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="1625" > +<cdparam x="201" y="232" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tobject" value="CoffeeButton_Button" /> +<TGConnectingPoint num="0" id="1617" /> +<TGConnectingPoint num="1" id="1618" /> +<TGConnectingPoint num="2" id="1619" /> +<TGConnectingPoint num="3" id="1620" /> +<TGConnectingPoint num="4" id="1621" /> +<TGConnectingPoint num="5" id="1622" /> +<TGConnectingPoint num="6" id="1623" /> +<TGConnectingPoint num="7" id="1624" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="Button" /> +<FirstName name="CoffeeButton" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1597" > +<father id="1625" num="0" /> +<cdparam x="201" y="262" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ mechanicalDelay = 3 : Natural; +" /> +<TGConnectingPoint num="0" id="1591" /> +<TGConnectingPoint num="1" id="1592" /> +<TGConnectingPoint num="2" id="1593" /> +<TGConnectingPoint num="3" id="1594" /> +<TGConnectingPoint num="4" id="1595" /> +<TGConnectingPoint num="5" id="1596" /> +<extraparam> +<Attribute access="2" id="mechanicalDelay" value="3" type="0" typeOther="" set="true" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1600" > +<father id="1625" num="1" /> +<cdparam x="201" y="292" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="60" maxY="60" /> +<infoparam name="Tobject gates" value="+ push : Gate; +" /> +<TGConnectingPoint num="0" id="1598" /> +<TGConnectingPoint num="1" id="1599" /> +<extraparam> +<Attribute access="2" id="push" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1607" > +<father id="1625" num="2" /> +<cdparam x="201" y="322" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="90" maxY="90" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1601" /> +<TGConnectingPoint num="1" id="1602" /> +<TGConnectingPoint num="2" id="1603" /> +<TGConnectingPoint num="3" id="1604" /> +<TGConnectingPoint num="4" id="1605" /> +<TGConnectingPoint num="5" id="1606" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1616" > +<father id="1625" num="3" /> +<cdparam x="201" y="352" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="120" maxY="120" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1608" /> +<TGConnectingPoint num="1" id="1609" /> +<TGConnectingPoint num="2" id="1610" /> +<TGConnectingPoint num="3" id="1611" /> +<TGConnectingPoint num="4" id="1612" /> +<TGConnectingPoint num="5" id="1613" /> +<TGConnectingPoint num="6" id="1614" /> +<TGConnectingPoint num="7" id="1615" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="1660" > +<cdparam x="201" y="391" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="Tobject" value="TeaButton_Button" /> +<TGConnectingPoint num="0" id="1652" /> +<TGConnectingPoint num="1" id="1653" /> +<TGConnectingPoint num="2" id="1654" /> +<TGConnectingPoint num="3" id="1655" /> +<TGConnectingPoint num="4" id="1656" /> +<TGConnectingPoint num="5" id="1657" /> +<TGConnectingPoint num="6" id="1658" /> +<TGConnectingPoint num="7" id="1659" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="Button" /> +<FirstName name="TeaButton" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1632" > +<father id="1660" num="0" /> +<cdparam x="201" y="421" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ mechanicalDelay = 5 : Natural; +" /> +<TGConnectingPoint num="0" id="1626" /> +<TGConnectingPoint num="1" id="1627" /> +<TGConnectingPoint num="2" id="1628" /> +<TGConnectingPoint num="3" id="1629" /> +<TGConnectingPoint num="4" id="1630" /> +<TGConnectingPoint num="5" id="1631" /> +<extraparam> +<Attribute access="2" id="mechanicalDelay" value="5" type="0" typeOther="" set="true" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1635" > +<father id="1660" num="1" /> +<cdparam x="201" y="451" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="60" maxY="60" /> +<infoparam name="Tobject gates" value="+ push : Gate; +" /> +<TGConnectingPoint num="0" id="1633" /> +<TGConnectingPoint num="1" id="1634" /> +<extraparam> +<Attribute access="2" id="push" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1642" > +<father id="1660" num="2" /> +<cdparam x="201" y="481" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="90" maxY="90" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="1636" /> +<TGConnectingPoint num="1" id="1637" /> +<TGConnectingPoint num="2" id="1638" /> +<TGConnectingPoint num="3" id="1639" /> +<TGConnectingPoint num="4" id="1640" /> +<TGConnectingPoint num="5" id="1641" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1651" > +<father id="1660" num="3" /> +<cdparam x="201" y="511" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="120" maxY="120" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="1643" /> +<TGConnectingPoint num="1" id="1644" /> +<TGConnectingPoint num="2" id="1645" /> +<TGConnectingPoint num="3" id="1646" /> +<TGConnectingPoint num="4" id="1647" /> +<TGConnectingPoint num="5" id="1648" /> +<TGConnectingPoint num="6" id="1649" /> +<TGConnectingPoint num="7" id="1650" /> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="1662" > +<cdparam x="381" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TObject attribute setting to Tclass attributes" value="null" /> +<TGConnectingPoint num="0" id="1661" /> +<P1 x="351" y="277" id="1592" /> +<P2 x="676" y="278" id="1470" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="1663" > +<cdparam x="519" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TObject attribute setting to synchro composition operator" value="null" /> +<P1 x="513" y="277" id="1661" /> +<P2 x="513" y="247" id="1522" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="1665" > +<cdparam x="380" y="415" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tobject to Tclass operations" value="null" /> +<TGConnectingPoint num="0" id="1664" /> +<P1 x="351" y="436" id="1627" /> +<P2 x="676" y="426" id="1480" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="1666" > +<cdparam x="528" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TObject attribute setting to synchro composition operator" value="null" /> +<P1 x="513" y="431" id="1664" /> +<P2 x="513" y="402" id="1536" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="1670" > +<cdparam x="362" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass" value="null" /> +<TGConnectingPoint num="0" id="1668" /> +<TGConnectingPoint num="1" id="1669" /> +<P1 x="357" y="141" id="1443" /> +<P2 x="715" y="225" id="1498" /> +<Point x="689" y="137" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1667" > +<father id="1670" num="0" /> +<cdparam x="689" y="137" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1000" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="103" id="1671" > +<cdparam x="525" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="523" y="139" id="1668" /> +<P2 x="532" y="87" id="1508" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="Wallet" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="1673" > +<cdparam x="353" y="102" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1672" /> +</COMPONENT> + +<COMPONENT type="19" id="1689" > +<cdparam x="347" y="198" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1677" /> +<TGConnectingPoint num="1" id="1678" /> +<TGConnectingPoint num="2" id="1679" /> +<TGConnectingPoint num="3" id="1680" /> +<TGConnectingPoint num="4" id="1681" /> +<TGConnectingPoint num="5" id="1682" /> +<TGConnectingPoint num="6" id="1683" /> +<TGConnectingPoint num="7" id="1684" /> +<TGConnectingPoint num="8" id="1685" /> +<TGConnectingPoint num="9" id="1686" /> +<TGConnectingPoint num="10" id="1687" /> +<TGConnectingPoint num="11" id="1688" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1674" > +<father id="1689" num="0" /> +<cdparam x="299" y="208" /> +<sizeparam width="49" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ coin>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1675" > +<father id="1689" num="1" /> +<cdparam x="382" y="208" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1676" > +<father id="1689" num="2" /> +<cdparam x="367" y="243" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="1712" > +<cdparam x="346" y="139" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1690" /> +<TGConnectingPoint num="1" id="1691" /> +<TGConnectingPoint num="2" id="1692" /> +<TGConnectingPoint num="3" id="1693" /> +<TGConnectingPoint num="4" id="1694" /> +<TGConnectingPoint num="5" id="1695" /> +<TGConnectingPoint num="6" id="1696" /> +<TGConnectingPoint num="7" id="1697" /> +<TGConnectingPoint num="8" id="1698" /> +<TGConnectingPoint num="9" id="1699" /> +<TGConnectingPoint num="10" id="1700" /> +<TGConnectingPoint num="11" id="1701" /> +<TGConnectingPoint num="12" id="1702" /> +<TGConnectingPoint num="13" id="1703" /> +<TGConnectingPoint num="14" id="1704" /> +<TGConnectingPoint num="15" id="1705" /> +<TGConnectingPoint num="16" id="1706" /> +<TGConnectingPoint num="17" id="1707" /> +<TGConnectingPoint num="18" id="1708" /> +<TGConnectingPoint num="19" id="1709" /> +<TGConnectingPoint num="20" id="1710" /> +<TGConnectingPoint num="21" id="1711" /> +</COMPONENT> + +<COMPONENT type="15" id="1723" > +<cdparam x="397" y="382" /> +<sizeparam width="87" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coin = coin + x" /> +<TGConnectingPoint num="0" id="1713" /> +<TGConnectingPoint num="1" id="1714" /> +<TGConnectingPoint num="2" id="1715" /> +<TGConnectingPoint num="3" id="1716" /> +<TGConnectingPoint num="4" id="1717" /> +<TGConnectingPoint num="5" id="1718" /> +<TGConnectingPoint num="6" id="1719" /> +<TGConnectingPoint num="7" id="1720" /> +<TGConnectingPoint num="8" id="1721" /> +<TGConnectingPoint num="9" id="1722" /> +</COMPONENT> + +<COMPONENT type="15" id="1734" > +<cdparam x="296" y="331" /> +<sizeparam width="53" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="putCoin" /> +<TGConnectingPoint num="0" id="1724" /> +<TGConnectingPoint num="1" id="1725" /> +<TGConnectingPoint num="2" id="1726" /> +<TGConnectingPoint num="3" id="1727" /> +<TGConnectingPoint num="4" id="1728" /> +<TGConnectingPoint num="5" id="1729" /> +<TGConnectingPoint num="6" id="1730" /> +<TGConnectingPoint num="7" id="1731" /> +<TGConnectingPoint num="8" id="1732" /> +<TGConnectingPoint num="9" id="1733" /> +</COMPONENT> + +<COMPONENT type="15" id="1745" > +<cdparam x="277" y="381" /> +<sizeparam width="86" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coin = coin - 1" /> +<TGConnectingPoint num="0" id="1735" /> +<TGConnectingPoint num="1" id="1736" /> +<TGConnectingPoint num="2" id="1737" /> +<TGConnectingPoint num="3" id="1738" /> +<TGConnectingPoint num="4" id="1739" /> +<TGConnectingPoint num="5" id="1740" /> +<TGConnectingPoint num="6" id="1741" /> +<TGConnectingPoint num="7" id="1742" /> +<TGConnectingPoint num="8" id="1743" /> +<TGConnectingPoint num="9" id="1744" /> +</COMPONENT> + +<COMPONENT type="11" id="1757" > +<cdparam x="316" y="435" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1747" /> +<TGConnectingPoint num="1" id="1748" /> +<TGConnectingPoint num="2" id="1749" /> +<TGConnectingPoint num="3" id="1750" /> +<TGConnectingPoint num="4" id="1751" /> +<TGConnectingPoint num="5" id="1752" /> +<TGConnectingPoint num="6" id="1753" /> +<TGConnectingPoint num="7" id="1754" /> +<TGConnectingPoint num="8" id="1755" /> +<TGConnectingPoint num="9" id="1756" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1746" > +<father id="1757" num="0" /> +<cdparam x="331" y="455" /> +<sizeparam width="56" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="userDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="18" id="1769" > +<cdparam x="320" y="492" /> +<sizeparam width="8" height="32" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="non deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1759" /> +<TGConnectingPoint num="1" id="1760" /> +<TGConnectingPoint num="2" id="1761" /> +<TGConnectingPoint num="3" id="1762" /> +<TGConnectingPoint num="4" id="1763" /> +<TGConnectingPoint num="5" id="1764" /> +<TGConnectingPoint num="6" id="1765" /> +<TGConnectingPoint num="7" id="1766" /> +<TGConnectingPoint num="8" id="1767" /> +<TGConnectingPoint num="9" id="1768" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1758" > +<father id="1769" num="0" /> +<cdparam x="333" y="513" /> +<sizeparam width="67" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="8" maxX="18" minY="11" maxY="31" /> +<infoparam name="value of the latency" value="userLatency" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1780" > +<cdparam x="405" y="333" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coinBack?x" /> +<TGConnectingPoint num="0" id="1770" /> +<TGConnectingPoint num="1" id="1771" /> +<TGConnectingPoint num="2" id="1772" /> +<TGConnectingPoint num="3" id="1773" /> +<TGConnectingPoint num="4" id="1774" /> +<TGConnectingPoint num="5" id="1775" /> +<TGConnectingPoint num="6" id="1776" /> +<TGConnectingPoint num="7" id="1777" /> +<TGConnectingPoint num="8" id="1778" /> +<TGConnectingPoint num="9" id="1779" /> +</COMPONENT> + +<CONNECTOR type="101" id="1781" > +<cdparam x="360" y="122" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="360" y="122" id="1672" /> +<P2 x="361" y="139" id="1690" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1782" > +<cdparam x="361" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="361" y="169" id="1693" /> +<P2 x="362" y="188" id="1677" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1783" > +<cdparam x="441" y="358" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="441" y="358" id="1771" /> +<P2 x="440" y="377" id="1713" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1787" > +<cdparam x="445" y="412" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="440" y="407" id="1714" /> +<P2 x="376" y="154" id="1692" /> +<Point x="440" y="425" /> +<Point x="501" y="425" /> +<Point x="501" y="154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1784" > +<father id="1787" num="0" /> +<cdparam x="440" y="425" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1785" > +<father id="1787" num="1" /> +<cdparam x="501" y="425" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1786" > +<father id="1787" num="2" /> +<cdparam x="501" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="1788" > +<cdparam x="322" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="322" y="356" id="1725" /> +<P2 x="320" y="376" id="1735" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1792" > +<cdparam x="321" y="412" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="320" y="529" id="1760" /> +<P2 x="346" y="154" id="1691" /> +<Point x="320" y="546" /> +<Point x="254" y="546" /> +<Point x="254" y="154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1789" > +<father id="1792" num="0" /> +<cdparam x="320" y="546" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1790" > +<father id="1792" num="1" /> +<cdparam x="254" y="546" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1791" > +<father id="1792" num="2" /> +<cdparam x="254" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="1793" > +<cdparam x="321" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="320" y="406" id="1736" /> +<P2 x="321" y="430" id="1747" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1794" > +<cdparam x="321" y="470" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to non deterministic delay" value="null" /> +<P1 x="321" y="470" id="1748" /> +<P2 x="320" y="487" id="1759" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1795" > +<cdparam x="322" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="322" y="213" id="1678" /> +<P2 x="322" y="326" id="1724" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="1796" > +<cdparam x="402" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="402" y="213" id="1679" /> +<P2 x="441" y="328" id="1770" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Machine" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="1798" > +<cdparam x="353" y="29" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1797" /> +</COMPONENT> + +<COMPONENT type="15" id="1809" > +<cdparam x="335" y="123" /> +<sizeparam width="50" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="coin_in" /> +<TGConnectingPoint num="0" id="1799" /> +<TGConnectingPoint num="1" id="1800" /> +<TGConnectingPoint num="2" id="1801" /> +<TGConnectingPoint num="3" id="1802" /> +<TGConnectingPoint num="4" id="1803" /> +<TGConnectingPoint num="5" id="1804" /> +<TGConnectingPoint num="6" id="1805" /> +<TGConnectingPoint num="7" id="1806" /> +<TGConnectingPoint num="8" id="1807" /> +<TGConnectingPoint num="9" id="1808" /> +</COMPONENT> + +<COMPONENT type="16" id="1822" > +<cdparam x="331" y="197" /> +<sizeparam width="58" height="20" minWidth="30" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time-limited offer" value="coin_in" /> +<TGConnectingPoint num="0" id="1811" /> +<TGConnectingPoint num="1" id="1812" /> +<TGConnectingPoint num="2" id="1813" /> +<TGConnectingPoint num="3" id="1814" /> +<TGConnectingPoint num="4" id="1815" /> +<TGConnectingPoint num="5" id="1816" /> +<TGConnectingPoint num="6" id="1817" /> +<TGConnectingPoint num="7" id="1818" /> +<TGConnectingPoint num="8" id="1819" /> +<TGConnectingPoint num="9" id="1820" /> +<TGConnectingPoint num="10" id="1821" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1810" > +<father id="1822" num="0" /> +<cdparam x="414" y="212" /> +<sizeparam width="54" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="80" maxX="88" minY="5" maxY="25" /> +<infoparam name="value of the delay" value="coinDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="1845" > +<cdparam x="345" y="73" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1823" /> +<TGConnectingPoint num="1" id="1824" /> +<TGConnectingPoint num="2" id="1825" /> +<TGConnectingPoint num="3" id="1826" /> +<TGConnectingPoint num="4" id="1827" /> +<TGConnectingPoint num="5" id="1828" /> +<TGConnectingPoint num="6" id="1829" /> +<TGConnectingPoint num="7" id="1830" /> +<TGConnectingPoint num="8" id="1831" /> +<TGConnectingPoint num="9" id="1832" /> +<TGConnectingPoint num="10" id="1833" /> +<TGConnectingPoint num="11" id="1834" /> +<TGConnectingPoint num="12" id="1835" /> +<TGConnectingPoint num="13" id="1836" /> +<TGConnectingPoint num="14" id="1837" /> +<TGConnectingPoint num="15" id="1838" /> +<TGConnectingPoint num="16" id="1839" /> +<TGConnectingPoint num="17" id="1840" /> +<TGConnectingPoint num="18" id="1841" /> +<TGConnectingPoint num="19" id="1842" /> +<TGConnectingPoint num="20" id="1843" /> +<TGConnectingPoint num="21" id="1844" /> +</COMPONENT> + +<COMPONENT type="19" id="1861" > +<cdparam x="281" y="271" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1849" /> +<TGConnectingPoint num="1" id="1850" /> +<TGConnectingPoint num="2" id="1851" /> +<TGConnectingPoint num="3" id="1852" /> +<TGConnectingPoint num="4" id="1853" /> +<TGConnectingPoint num="5" id="1854" /> +<TGConnectingPoint num="6" id="1855" /> +<TGConnectingPoint num="7" id="1856" /> +<TGConnectingPoint num="8" id="1857" /> +<TGConnectingPoint num="9" id="1858" /> +<TGConnectingPoint num="10" id="1859" /> +<TGConnectingPoint num="11" id="1860" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1846" > +<father id="1861" num="0" /> +<cdparam x="256" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1847" > +<father id="1861" num="1" /> +<cdparam x="316" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1848" > +<father id="1861" num="2" /> +<cdparam x="301" y="316" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1872" > +<cdparam x="404" y="270" /> +<sizeparam width="82" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="eject_coin ! 1" /> +<TGConnectingPoint num="0" id="1862" /> +<TGConnectingPoint num="1" id="1863" /> +<TGConnectingPoint num="2" id="1864" /> +<TGConnectingPoint num="3" id="1865" /> +<TGConnectingPoint num="4" id="1866" /> +<TGConnectingPoint num="5" id="1867" /> +<TGConnectingPoint num="6" id="1868" /> +<TGConnectingPoint num="7" id="1869" /> +<TGConnectingPoint num="8" id="1870" /> +<TGConnectingPoint num="9" id="1871" /> +</COMPONENT> + +<COMPONENT type="15" id="1883" > +<cdparam x="166" y="348" /> +<sizeparam width="70" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="startCoffee" /> +<TGConnectingPoint num="0" id="1873" /> +<TGConnectingPoint num="1" id="1874" /> +<TGConnectingPoint num="2" id="1875" /> +<TGConnectingPoint num="3" id="1876" /> +<TGConnectingPoint num="4" id="1877" /> +<TGConnectingPoint num="5" id="1878" /> +<TGConnectingPoint num="6" id="1879" /> +<TGConnectingPoint num="7" id="1880" /> +<TGConnectingPoint num="8" id="1881" /> +<TGConnectingPoint num="9" id="1882" /> +</COMPONENT> + +<COMPONENT type="15" id="1894" > +<cdparam x="269" y="347" /> +<sizeparam width="55" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="startTea" /> +<TGConnectingPoint num="0" id="1884" /> +<TGConnectingPoint num="1" id="1885" /> +<TGConnectingPoint num="2" id="1886" /> +<TGConnectingPoint num="3" id="1887" /> +<TGConnectingPoint num="4" id="1888" /> +<TGConnectingPoint num="5" id="1889" /> +<TGConnectingPoint num="6" id="1890" /> +<TGConnectingPoint num="7" id="1891" /> +<TGConnectingPoint num="8" id="1892" /> +<TGConnectingPoint num="9" id="1893" /> +</COMPONENT> + +<COMPONENT type="11" id="1906" > +<cdparam x="196" y="394" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1896" /> +<TGConnectingPoint num="1" id="1897" /> +<TGConnectingPoint num="2" id="1898" /> +<TGConnectingPoint num="3" id="1899" /> +<TGConnectingPoint num="4" id="1900" /> +<TGConnectingPoint num="5" id="1901" /> +<TGConnectingPoint num="6" id="1902" /> +<TGConnectingPoint num="7" id="1903" /> +<TGConnectingPoint num="8" id="1904" /> +<TGConnectingPoint num="9" id="1905" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1895" > +<father id="1906" num="0" /> +<cdparam x="211" y="414" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="5" /> +</SUBCOMPONENT> + +<COMPONENT type="18" id="1918" > +<cdparam x="201" y="450" /> +<sizeparam width="8" height="32" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="non deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1908" /> +<TGConnectingPoint num="1" id="1909" /> +<TGConnectingPoint num="2" id="1910" /> +<TGConnectingPoint num="3" id="1911" /> +<TGConnectingPoint num="4" id="1912" /> +<TGConnectingPoint num="5" id="1913" /> +<TGConnectingPoint num="6" id="1914" /> +<TGConnectingPoint num="7" id="1915" /> +<TGConnectingPoint num="8" id="1916" /> +<TGConnectingPoint num="9" id="1917" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1907" > +<father id="1918" num="0" /> +<cdparam x="214" y="470" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="8" maxX="18" minY="11" maxY="31" /> +<infoparam name="value of the latency" value="3" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="1941" > +<cdparam x="281" y="583" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1919" /> +<TGConnectingPoint num="1" id="1920" /> +<TGConnectingPoint num="2" id="1921" /> +<TGConnectingPoint num="3" id="1922" /> +<TGConnectingPoint num="4" id="1923" /> +<TGConnectingPoint num="5" id="1924" /> +<TGConnectingPoint num="6" id="1925" /> +<TGConnectingPoint num="7" id="1926" /> +<TGConnectingPoint num="8" id="1927" /> +<TGConnectingPoint num="9" id="1928" /> +<TGConnectingPoint num="10" id="1929" /> +<TGConnectingPoint num="11" id="1930" /> +<TGConnectingPoint num="12" id="1931" /> +<TGConnectingPoint num="13" id="1932" /> +<TGConnectingPoint num="14" id="1933" /> +<TGConnectingPoint num="15" id="1934" /> +<TGConnectingPoint num="16" id="1935" /> +<TGConnectingPoint num="17" id="1936" /> +<TGConnectingPoint num="18" id="1937" /> +<TGConnectingPoint num="19" id="1938" /> +<TGConnectingPoint num="20" id="1939" /> +<TGConnectingPoint num="21" id="1940" /> +</COMPONENT> + +<COMPONENT type="11" id="1953" > +<cdparam x="430" y="351" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="1943" /> +<TGConnectingPoint num="1" id="1944" /> +<TGConnectingPoint num="2" id="1945" /> +<TGConnectingPoint num="3" id="1946" /> +<TGConnectingPoint num="4" id="1947" /> +<TGConnectingPoint num="5" id="1948" /> +<TGConnectingPoint num="6" id="1949" /> +<TGConnectingPoint num="7" id="1950" /> +<TGConnectingPoint num="8" id="1951" /> +<TGConnectingPoint num="9" id="1952" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1942" > +<father id="1953" num="0" /> +<cdparam x="445" y="371" /> +<sizeparam width="65" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="buttonDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1964" > +<cdparam x="394" y="411" /> +<sizeparam width="82" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="eject_coin ! 2" /> +<TGConnectingPoint num="0" id="1954" /> +<TGConnectingPoint num="1" id="1955" /> +<TGConnectingPoint num="2" id="1956" /> +<TGConnectingPoint num="3" id="1957" /> +<TGConnectingPoint num="4" id="1958" /> +<TGConnectingPoint num="5" id="1959" /> +<TGConnectingPoint num="6" id="1960" /> +<TGConnectingPoint num="7" id="1961" /> +<TGConnectingPoint num="8" id="1962" /> +<TGConnectingPoint num="9" id="1963" /> +</COMPONENT> + +<COMPONENT type="20" id="1976" > +<cdparam x="291" y="425" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="time interval" value="null" /> +<TGConnectingPoint num="0" id="1966" /> +<TGConnectingPoint num="1" id="1967" /> +<TGConnectingPoint num="2" id="1968" /> +<TGConnectingPoint num="3" id="1969" /> +<TGConnectingPoint num="4" id="1970" /> +<TGConnectingPoint num="5" id="1971" /> +<TGConnectingPoint num="6" id="1972" /> +<TGConnectingPoint num="7" id="1973" /> +<TGConnectingPoint num="8" id="1974" /> +<TGConnectingPoint num="9" id="1975" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1965" > +<father id="1976" num="0" /> +<cdparam x="306" y="445" /> +<sizeparam width="34" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the time interval" value="[6, 10]" /> +<extraparam> +<Interval minDelay="6" maxDelay="10" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="15" id="1987" > +<cdparam x="160" y="508" /> +<sizeparam width="82" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="deliverCoffee" /> +<TGConnectingPoint num="0" id="1977" /> +<TGConnectingPoint num="1" id="1978" /> +<TGConnectingPoint num="2" id="1979" /> +<TGConnectingPoint num="3" id="1980" /> +<TGConnectingPoint num="4" id="1981" /> +<TGConnectingPoint num="5" id="1982" /> +<TGConnectingPoint num="6" id="1983" /> +<TGConnectingPoint num="7" id="1984" /> +<TGConnectingPoint num="8" id="1985" /> +<TGConnectingPoint num="9" id="1986" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="15" id="1998" > +<cdparam x="263" y="508" /> +<sizeparam width="67" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="deliverTea" /> +<TGConnectingPoint num="0" id="1988" /> +<TGConnectingPoint num="1" id="1989" /> +<TGConnectingPoint num="2" id="1990" /> +<TGConnectingPoint num="3" id="1991" /> +<TGConnectingPoint num="4" id="1992" /> +<TGConnectingPoint num="5" id="1993" /> +<TGConnectingPoint num="6" id="1994" /> +<TGConnectingPoint num="7" id="1995" /> +<TGConnectingPoint num="8" id="1996" /> +<TGConnectingPoint num="9" id="1997" /> +<accessibility /> +</COMPONENT> + +<CONNECTOR type="101" id="1999" > +<cdparam x="367" y="56" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="360" y="49" id="1797" /> +<P2 x="360" y="73" id="1823" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2000" > +<cdparam x="364" y="103" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="360" y="103" id="1826" /> +<P2 x="360" y="118" id="1799" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2001" > +<cdparam x="361" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time-limited offer" value="null" /> +<P1 x="360" y="148" id="1800" /> +<P2 x="360" y="172" id="1811" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2002" > +<cdparam x="361" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to choice" value="null" /> +<P1 x="360" y="242" id="1812" /> +<P2 x="296" y="261" id="1849" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2003" > +<cdparam x="376" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time-limited offer to action state" value="null" /> +<P1 x="375" y="242" id="1813" /> +<P2 x="445" y="265" id="1862" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2008" > +<cdparam x="445" y="295" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="445" y="295" id="1863" /> +<P2 x="375" y="88" id="1825" /> +<Point x="445" y="315" /> +<Point x="503" y="315" /> +<Point x="503" y="68" /> +<Point x="375" y="68" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2004" > +<father id="2008" num="0" /> +<cdparam x="445" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2005" > +<father id="2008" num="1" /> +<cdparam x="503" y="315" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2006" > +<father id="2008" num="2" /> +<cdparam x="503" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2007" > +<father id="2008" num="3" /> +<cdparam x="375" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="2009" > +<cdparam x="256" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="256" y="286" id="1850" /> +<P2 x="201" y="343" id="1873" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2010" > +<cdparam x="332" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="296" y="326" id="1852" /> +<P2 x="296" y="342" id="1884" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2011" > +<cdparam x="242" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="201" y="373" id="1874" /> +<P2 x="201" y="389" id="1896" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2012" > +<cdparam x="248" y="431" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to non deterministic delay" value="null" /> +<P1 x="201" y="429" id="1897" /> +<P2 x="201" y="445" id="1908" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2017" > +<cdparam x="300" y="529" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="296" y="613" id="1922" /> +<P2 x="345" y="88" id="1824" /> +<Point x="296" y="633" /> +<Point x="112" y="633" /> +<Point x="112" y="68" /> +<Point x="345" y="68" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2013" > +<father id="2017" num="0" /> +<cdparam x="296" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2014" > +<father id="2017" num="1" /> +<cdparam x="112" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2015" > +<father id="2017" num="2" /> +<cdparam x="112" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2016" > +<father id="2017" num="3" /> +<cdparam x="345" y="68" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="2018" > +<cdparam x="336" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to deterministic delay" value="null" /> +<P1 x="336" y="286" id="1851" /> +<P2 x="435" y="346" id="1943" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2019" > +<cdparam x="435" y="386" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="435" y="386" id="1944" /> +<P2 x="435" y="406" id="1954" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2021" > +<cdparam x="436" y="436" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="435" y="436" id="1955" /> +<P2 x="311" y="598" id="1921" /> +<Point x="435" y="525" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2020" > +<father id="2021" num="0" /> +<cdparam x="435" y="525" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="2022" > +<cdparam x="332" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to time interval" value="null" /> +<P1 x="296" y="372" id="1885" /> +<P2 x="296" y="420" id="1966" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2023" > +<cdparam x="201" y="477" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from non deterministic delay to action state" value="null" /> +<P1 x="201" y="487" id="1909" /> +<P2 x="201" y="503" id="1977" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2024" > +<cdparam x="290" y="455" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from time interval to action state" value="null" /> +<P1 x="296" y="460" id="1967" /> +<P2 x="296" y="503" id="1988" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2025" > +<cdparam x="200" y="533" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="201" y="533" id="1978" /> +<P2 x="281" y="598" id="1920" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2026" > +<cdparam x="290" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="296" y="533" id="1989" /> +<P2 x="296" y="583" id="1919" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Button" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="2028" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="2027" /> +</COMPONENT> + +<COMPONENT type="15" id="2039" > +<cdparam x="388" y="165" /> +<sizeparam width="38" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="push" /> +<TGConnectingPoint num="0" id="2029" /> +<TGConnectingPoint num="1" id="2030" /> +<TGConnectingPoint num="2" id="2031" /> +<TGConnectingPoint num="3" id="2032" /> +<TGConnectingPoint num="4" id="2033" /> +<TGConnectingPoint num="5" id="2034" /> +<TGConnectingPoint num="6" id="2035" /> +<TGConnectingPoint num="7" id="2036" /> +<TGConnectingPoint num="8" id="2037" /> +<TGConnectingPoint num="9" id="2038" /> +</COMPONENT> + +<COMPONENT type="11" id="2051" > +<cdparam x="402" y="226" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="2041" /> +<TGConnectingPoint num="1" id="2042" /> +<TGConnectingPoint num="2" id="2043" /> +<TGConnectingPoint num="3" id="2044" /> +<TGConnectingPoint num="4" id="2045" /> +<TGConnectingPoint num="5" id="2046" /> +<TGConnectingPoint num="6" id="2047" /> +<TGConnectingPoint num="7" id="2048" /> +<TGConnectingPoint num="8" id="2049" /> +<TGConnectingPoint num="9" id="2050" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="2040" > +<father id="2051" num="0" /> +<cdparam x="416" y="246" /> +<sizeparam width="95" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="mechanicalDelay" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="2074" > +<cdparam x="392" y="104" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="2052" /> +<TGConnectingPoint num="1" id="2053" /> +<TGConnectingPoint num="2" id="2054" /> +<TGConnectingPoint num="3" id="2055" /> +<TGConnectingPoint num="4" id="2056" /> +<TGConnectingPoint num="5" id="2057" /> +<TGConnectingPoint num="6" id="2058" /> +<TGConnectingPoint num="7" id="2059" /> +<TGConnectingPoint num="8" id="2060" /> +<TGConnectingPoint num="9" id="2061" /> +<TGConnectingPoint num="10" id="2062" /> +<TGConnectingPoint num="11" id="2063" /> +<TGConnectingPoint num="12" id="2064" /> +<TGConnectingPoint num="13" id="2065" /> +<TGConnectingPoint num="14" id="2066" /> +<TGConnectingPoint num="15" id="2067" /> +<TGConnectingPoint num="16" id="2068" /> +<TGConnectingPoint num="17" id="2069" /> +<TGConnectingPoint num="18" id="2070" /> +<TGConnectingPoint num="19" id="2071" /> +<TGConnectingPoint num="20" id="2072" /> +<TGConnectingPoint num="21" id="2073" /> +</COMPONENT> + +<CONNECTOR type="101" id="2075" > +<cdparam x="407" y="194" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="407" y="190" id="2030" /> +<P2 x="407" y="221" id="2041" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2076" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="407" y="70" id="2027" /> +<P2 x="407" y="104" id="2052" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2077" > +<cdparam x="407" y="134" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="407" y="134" id="2055" /> +<P2 x="407" y="160" id="2029" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="2082" > +<cdparam x="406" y="261" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to junction" value="null" /> +<P1 x="407" y="261" id="2042" /> +<P2 x="392" y="119" id="2053" /> +<Point x="407" y="281" /> +<Point x="288" y="281" /> +<Point x="288" y="99" /> +<Point x="392" y="99" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2078" > +<father id="2082" num="0" /> +<cdparam x="407" y="281" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2079" > +<father id="2082" num="1" /> +<cdparam x="288" y="281" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2080" > +<father id="2082" num="2" /> +<cdparam x="288" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2081" > +<father id="2082" num="3" /> +<cdparam x="392" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml b/preinstallTTool/macos/TTool/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml new file mode 100644 index 0000000000000000000000000000000000000000..f8e675041da7f90d57a96a0541e27f84c204e3b1 --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/MicroWaveOven_SafetySecurity_fullMethodo.xml @@ -0,0 +1,9475 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta2"> + +<Modeling type="Avatar Methodology" nameTab="Methodology" > +<AvatarMethodologyDiagramPanel name="AVATAR_Methodology" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<COMPONENT type="5605" id="6" > +<cdparam x="200" y="400" /> +<sizeparam width="180" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Properties" /> +<TGConnectingPoint num="0" id="2" /> +<TGConnectingPoint num="1" id="3" /> +<TGConnectingPoint num="2" id="4" /> +<TGConnectingPoint num="3" id="5" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="1" > +<father id="6" num="0" /> +<cdparam x="205" y="440" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="205" maxX="205" minY="440" maxY="440" /> +<infoparam name="value " value="Safety_props" /> +</SUBCOMPONENT> + +<COMPONENT type="5606" id="12" > +<cdparam x="550" y="500" /> +<sizeparam width="300" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Prototyping" /> +<TGConnectingPoint num="0" id="8" /> +<TGConnectingPoint num="1" id="9" /> +<TGConnectingPoint num="2" id="10" /> +<TGConnectingPoint num="3" id="11" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="7" > +<father id="12" num="0" /> +<cdparam x="555" y="540" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="555" maxX="555" minY="540" maxY="540" /> +<infoparam name="value " value="Design" /> +</SUBCOMPONENT> + +<COMPONENT type="5604" id="19" > +<cdparam x="450" y="400" /> +<sizeparam width="300" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Design" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<TGConnectingPoint num="4" id="18" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="13" > +<father id="19" num="0" /> +<cdparam x="455" y="440" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="455" maxX="455" minY="440" maxY="440" /> +<infoparam name="value " value="Design" /> +</SUBCOMPONENT> + +<COMPONENT type="5603" id="27" > +<cdparam x="350" y="297" /> +<sizeparam width="200" height="77" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Analysis" /> +<TGConnectingPoint num="0" id="22" /> +<TGConnectingPoint num="1" id="23" /> +<TGConnectingPoint num="2" id="24" /> +<TGConnectingPoint num="3" id="25" /> +<TGConnectingPoint num="4" id="26" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="20" > +<father id="27" num="0" /> +<cdparam x="355" y="367" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="355" maxX="355" minY="370" maxY="370" /> +<infoparam name="value " value="Attack Trees" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5607" id="21" > +<father id="27" num="1" /> +<cdparam x="355" y="352" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="355" maxX="355" minY="355" maxY="355" /> +<infoparam name="value " value="Analysis_UseCase" /> +</SUBCOMPONENT> + +<COMPONENT type="5602" id="35" > +<cdparam x="250" y="200" /> +<sizeparam width="200" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Requirements" /> +<TGConnectingPoint num="0" id="29" /> +<TGConnectingPoint num="1" id="30" /> +<TGConnectingPoint num="2" id="31" /> +<TGConnectingPoint num="3" id="32" /> +<TGConnectingPoint num="4" id="33" /> +<TGConnectingPoint num="5" id="34" /> +</COMPONENT> +<SUBCOMPONENT type="5607" id="28" > +<father id="35" num="0" /> +<cdparam x="255" y="240" /> +<sizeparam width="10" height="10" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="255" maxX="255" minY="240" maxY="240" /> +<infoparam name="value " value="Reqs" /> +</SUBCOMPONENT> + +<COMPONENT type="5601" id="40" > +<cdparam x="150" y="97" /> +<sizeparam width="200" height="70" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Assumptions" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> + +<CONNECTOR type="5608" id="42" > +<cdparam x="270" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="41" /> +<P1 x="270" y="270" id="31" /> +<P2 x="236" y="400" id="2" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5608" id="46" > +<cdparam x="510" y="470" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="44" /> +<TGConnectingPoint num="1" id="45" /> +<P1 x="510" y="470" id="15" /> +<P2 x="550" y="535" id="8" /> +<Point x="510" y="535" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="43" > +<father id="46" num="0" /> +<cdparam x="510" y="535" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5608" id="50" > +<cdparam x="410" y="370" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="48" /> +<TGConnectingPoint num="1" id="49" /> +<P1 x="410" y="374" id="23" /> +<P2 x="450" y="435" id="14" /> +<Point x="410" y="435" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="47" > +<father id="50" num="0" /> +<cdparam x="410" y="435" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5608" id="54" > +<cdparam x="310" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="52" /> +<TGConnectingPoint num="1" id="53" /> +<P1 x="310" y="270" id="30" /> +<P2 x="350" y="335" id="22" /> +<Point x="310" y="335" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="51" > +<father id="54" num="0" /> +<cdparam x="310" y="335" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5608" id="58" > +<cdparam x="210" y="170" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="56" /> +<TGConnectingPoint num="1" id="57" /> +<P1 x="210" y="167" id="36" /> +<P2 x="250" y="235" id="29" /> +<Point x="210" y="235" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="55" > +<father id="58" num="0" /> +<cdparam x="210" y="235" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</AvatarMethodologyDiagramPanel> + +</Modeling> + + + + +<Modeling type="Avatar Requirement" nameTab="Reqs" > +<AvatarRDPanel name="AVATAR RD" minX="10" maxX="1400" minY="10" maxY="1400" zoom="1.0" > +<COMPONENT type="5201" id="74" > +<cdparam x="499" y="823" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="133" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="AuthenticityPragma" /> +<TGConnectingPoint num="0" id="59" /> +<TGConnectingPoint num="1" id="60" /> +<TGConnectingPoint num="2" id="61" /> +<TGConnectingPoint num="3" id="62" /> +<TGConnectingPoint num="4" id="63" /> +<TGConnectingPoint num="5" id="64" /> +<TGConnectingPoint num="6" id="65" /> +<TGConnectingPoint num="7" id="66" /> +<TGConnectingPoint num="8" id="67" /> +<TGConnectingPoint num="9" id="68" /> +<TGConnectingPoint num="10" id="69" /> +<TGConnectingPoint num="11" id="70" /> +<TGConnectingPoint num="12" id="71" /> +<TGConnectingPoint num="13" id="72" /> +<TGConnectingPoint num="14" id="73" /> +</COMPONENT> + +<COMPONENT type="5201" id="90" > +<cdparam x="210" y="819" /> +<sizeparam width="150" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="148" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="ConfidentialityPragma" /> +<TGConnectingPoint num="0" id="75" /> +<TGConnectingPoint num="1" id="76" /> +<TGConnectingPoint num="2" id="77" /> +<TGConnectingPoint num="3" id="78" /> +<TGConnectingPoint num="4" id="79" /> +<TGConnectingPoint num="5" id="80" /> +<TGConnectingPoint num="6" id="81" /> +<TGConnectingPoint num="7" id="82" /> +<TGConnectingPoint num="8" id="83" /> +<TGConnectingPoint num="9" id="84" /> +<TGConnectingPoint num="10" id="85" /> +<TGConnectingPoint num="11" id="86" /> +<TGConnectingPoint num="12" id="87" /> +<TGConnectingPoint num="13" id="88" /> +<TGConnectingPoint num="14" id="89" /> +</COMPONENT> + +<COMPONENT type="5200" id="122" > +<cdparam x="263" y="561" /> +<sizeparam width="277" height="85" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="111" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="RemoteSecurity" /> +<TGConnectingPoint num="0" id="91" /> +<TGConnectingPoint num="1" id="92" /> +<TGConnectingPoint num="2" id="93" /> +<TGConnectingPoint num="3" id="94" /> +<TGConnectingPoint num="4" id="95" /> +<TGConnectingPoint num="5" id="96" /> +<TGConnectingPoint num="6" id="97" /> +<TGConnectingPoint num="7" id="98" /> +<TGConnectingPoint num="8" id="99" /> +<TGConnectingPoint num="9" id="100" /> +<TGConnectingPoint num="10" id="101" /> +<TGConnectingPoint num="11" id="102" /> +<TGConnectingPoint num="12" id="103" /> +<TGConnectingPoint num="13" id="104" /> +<TGConnectingPoint num="14" id="105" /> +<TGConnectingPoint num="15" id="106" /> +<TGConnectingPoint num="16" id="107" /> +<TGConnectingPoint num="17" id="108" /> +<TGConnectingPoint num="18" id="109" /> +<TGConnectingPoint num="19" id="110" /> +<TGConnectingPoint num="20" id="111" /> +<TGConnectingPoint num="21" id="112" /> +<TGConnectingPoint num="22" id="113" /> +<TGConnectingPoint num="23" id="114" /> +<TGConnectingPoint num="24" id="115" /> +<TGConnectingPoint num="25" id="116" /> +<TGConnectingPoint num="26" id="117" /> +<TGConnectingPoint num="27" id="118" /> +<TGConnectingPoint num="28" id="119" /> +<TGConnectingPoint num="29" id="120" /> +<TGConnectingPoint num="30" id="121" /> +<extraparam> +<textline data="The remote control of the microwave" /> +<textline data="shall be secure" /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="2" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="131" > +<cdparam x="724" y="580" /> +<sizeparam width="352" height="170" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="Modeling assumptions +------------------- +The controller never fails. +None of the devices connected to the controller ever fails. +The oven is correctly initialized. +The oven is permanently connected to 220V AC. +There is no pet in the oven during operation. + +A sensor attached to the door enables detection of +"open door". +" /> +<TGConnectingPoint num="0" id="123" /> +<TGConnectingPoint num="1" id="124" /> +<TGConnectingPoint num="2" id="125" /> +<TGConnectingPoint num="3" id="126" /> +<TGConnectingPoint num="4" id="127" /> +<TGConnectingPoint num="5" id="128" /> +<TGConnectingPoint num="6" id="129" /> +<TGConnectingPoint num="7" id="130" /> +<extraparam> +<Line value="Modeling assumptions" /> +<Line value="-------------------" /> +<Line value="The controller never fails." /> +<Line value="None of the devices connected to the controller ever fails." /> +<Line value="The oven is correctly initialized." /> +<Line value="The oven is permanently connected to 220V AC." /> +<Line value="There is no pet in the oven during operation." /> +<Line value="" /> +<Line value="A sensor attached to the door enables detection of " /> +<Line value=""open door"." /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="163" > +<cdparam x="667" y="34" /> +<sizeparam width="313" height="139" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="165" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="StartButtonPressedCheck" /> +<TGConnectingPoint num="0" id="132" /> +<TGConnectingPoint num="1" id="133" /> +<TGConnectingPoint num="2" id="134" /> +<TGConnectingPoint num="3" id="135" /> +<TGConnectingPoint num="4" id="136" /> +<TGConnectingPoint num="5" id="137" /> +<TGConnectingPoint num="6" id="138" /> +<TGConnectingPoint num="7" id="139" /> +<TGConnectingPoint num="8" id="140" /> +<TGConnectingPoint num="9" id="141" /> +<TGConnectingPoint num="10" id="142" /> +<TGConnectingPoint num="11" id="143" /> +<TGConnectingPoint num="12" id="144" /> +<TGConnectingPoint num="13" id="145" /> +<TGConnectingPoint num="14" id="146" /> +<TGConnectingPoint num="15" id="147" /> +<TGConnectingPoint num="16" id="148" /> +<TGConnectingPoint num="17" id="149" /> +<TGConnectingPoint num="18" id="150" /> +<TGConnectingPoint num="19" id="151" /> +<TGConnectingPoint num="20" id="152" /> +<TGConnectingPoint num="21" id="153" /> +<TGConnectingPoint num="22" id="154" /> +<TGConnectingPoint num="23" id="155" /> +<TGConnectingPoint num="24" id="156" /> +<TGConnectingPoint num="25" id="157" /> +<TGConnectingPoint num="26" id="158" /> +<TGConnectingPoint num="27" id="159" /> +<TGConnectingPoint num="28" id="160" /> +<TGConnectingPoint num="29" id="161" /> +<TGConnectingPoint num="30" id="162" /> +<extraparam> +<textline data="The controller must not start the magnetron" /> +<textline data="as long as the user does not push the " /> +<textline data="Start button." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="195" > +<cdparam x="346" y="38" /> +<sizeparam width="256" height="109" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="57" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Inputs" /> +<TGConnectingPoint num="0" id="164" /> +<TGConnectingPoint num="1" id="165" /> +<TGConnectingPoint num="2" id="166" /> +<TGConnectingPoint num="3" id="167" /> +<TGConnectingPoint num="4" id="168" /> +<TGConnectingPoint num="5" id="169" /> +<TGConnectingPoint num="6" id="170" /> +<TGConnectingPoint num="7" id="171" /> +<TGConnectingPoint num="8" id="172" /> +<TGConnectingPoint num="9" id="173" /> +<TGConnectingPoint num="10" id="174" /> +<TGConnectingPoint num="11" id="175" /> +<TGConnectingPoint num="12" id="176" /> +<TGConnectingPoint num="13" id="177" /> +<TGConnectingPoint num="14" id="178" /> +<TGConnectingPoint num="15" id="179" /> +<TGConnectingPoint num="16" id="180" /> +<TGConnectingPoint num="17" id="181" /> +<TGConnectingPoint num="18" id="182" /> +<TGConnectingPoint num="19" id="183" /> +<TGConnectingPoint num="20" id="184" /> +<TGConnectingPoint num="21" id="185" /> +<TGConnectingPoint num="22" id="186" /> +<TGConnectingPoint num="23" id="187" /> +<TGConnectingPoint num="24" id="188" /> +<TGConnectingPoint num="25" id="189" /> +<TGConnectingPoint num="26" id="190" /> +<TGConnectingPoint num="27" id="191" /> +<TGConnectingPoint num="28" id="192" /> +<TGConnectingPoint num="29" id="193" /> +<TGConnectingPoint num="30" id="194" /> +<extraparam> +<textline data="The user uses a Start button to start " /> +<textline data="the heating process." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="227" > +<cdparam x="337" y="439" /> +<sizeparam width="313" height="103" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="43" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Bell" /> +<TGConnectingPoint num="0" id="196" /> +<TGConnectingPoint num="1" id="197" /> +<TGConnectingPoint num="2" id="198" /> +<TGConnectingPoint num="3" id="199" /> +<TGConnectingPoint num="4" id="200" /> +<TGConnectingPoint num="5" id="201" /> +<TGConnectingPoint num="6" id="202" /> +<TGConnectingPoint num="7" id="203" /> +<TGConnectingPoint num="8" id="204" /> +<TGConnectingPoint num="9" id="205" /> +<TGConnectingPoint num="10" id="206" /> +<TGConnectingPoint num="11" id="207" /> +<TGConnectingPoint num="12" id="208" /> +<TGConnectingPoint num="13" id="209" /> +<TGConnectingPoint num="14" id="210" /> +<TGConnectingPoint num="15" id="211" /> +<TGConnectingPoint num="16" id="212" /> +<TGConnectingPoint num="17" id="213" /> +<TGConnectingPoint num="18" id="214" /> +<TGConnectingPoint num="19" id="215" /> +<TGConnectingPoint num="20" id="216" /> +<TGConnectingPoint num="21" id="217" /> +<TGConnectingPoint num="22" id="218" /> +<TGConnectingPoint num="23" id="219" /> +<TGConnectingPoint num="24" id="220" /> +<TGConnectingPoint num="25" id="221" /> +<TGConnectingPoint num="26" id="222" /> +<TGConnectingPoint num="27" id="223" /> +<TGConnectingPoint num="28" id="224" /> +<TGConnectingPoint num="29" id="225" /> +<TGConnectingPoint num="30" id="226" /> +<extraparam> +<textline data="The bell rings only if the cooking time has" /> +<textline data="expired." /> +<kind data="Non-functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="259" > +<cdparam x="17" y="369" /> +<sizeparam width="284" height="112" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="75" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Overload" /> +<TGConnectingPoint num="0" id="228" /> +<TGConnectingPoint num="1" id="229" /> +<TGConnectingPoint num="2" id="230" /> +<TGConnectingPoint num="3" id="231" /> +<TGConnectingPoint num="4" id="232" /> +<TGConnectingPoint num="5" id="233" /> +<TGConnectingPoint num="6" id="234" /> +<TGConnectingPoint num="7" id="235" /> +<TGConnectingPoint num="8" id="236" /> +<TGConnectingPoint num="9" id="237" /> +<TGConnectingPoint num="10" id="238" /> +<TGConnectingPoint num="11" id="239" /> +<TGConnectingPoint num="12" id="240" /> +<TGConnectingPoint num="13" id="241" /> +<TGConnectingPoint num="14" id="242" /> +<TGConnectingPoint num="15" id="243" /> +<TGConnectingPoint num="16" id="244" /> +<TGConnectingPoint num="17" id="245" /> +<TGConnectingPoint num="18" id="246" /> +<TGConnectingPoint num="19" id="247" /> +<TGConnectingPoint num="20" id="248" /> +<TGConnectingPoint num="21" id="249" /> +<TGConnectingPoint num="22" id="250" /> +<TGConnectingPoint num="23" id="251" /> +<TGConnectingPoint num="24" id="252" /> +<TGConnectingPoint num="25" id="253" /> +<TGConnectingPoint num="26" id="254" /> +<TGConnectingPoint num="27" id="255" /> +<TGConnectingPoint num="28" id="256" /> +<TGConnectingPoint num="29" id="257" /> +<TGConnectingPoint num="30" id="258" /> +<extraparam> +<textline data="To avoid an overload of the magnetron," /> +<textline data="it should not be operated more than" /> +<textline data="10 time units at full power." /> +<kind data="Functional" /> +<criticality data="Medium" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="291" > +<cdparam x="10" y="177" /> +<sizeparam width="310" height="102" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="63" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Control" /> +<TGConnectingPoint num="0" id="260" /> +<TGConnectingPoint num="1" id="261" /> +<TGConnectingPoint num="2" id="262" /> +<TGConnectingPoint num="3" id="263" /> +<TGConnectingPoint num="4" id="264" /> +<TGConnectingPoint num="5" id="265" /> +<TGConnectingPoint num="6" id="266" /> +<TGConnectingPoint num="7" id="267" /> +<TGConnectingPoint num="8" id="268" /> +<TGConnectingPoint num="9" id="269" /> +<TGConnectingPoint num="10" id="270" /> +<TGConnectingPoint num="11" id="271" /> +<TGConnectingPoint num="12" id="272" /> +<TGConnectingPoint num="13" id="273" /> +<TGConnectingPoint num="14" id="274" /> +<TGConnectingPoint num="15" id="275" /> +<TGConnectingPoint num="16" id="276" /> +<TGConnectingPoint num="17" id="277" /> +<TGConnectingPoint num="18" id="278" /> +<TGConnectingPoint num="19" id="279" /> +<TGConnectingPoint num="20" id="280" /> +<TGConnectingPoint num="21" id="281" /> +<TGConnectingPoint num="22" id="282" /> +<TGConnectingPoint num="23" id="283" /> +<TGConnectingPoint num="24" id="284" /> +<TGConnectingPoint num="25" id="285" /> +<TGConnectingPoint num="26" id="286" /> +<TGConnectingPoint num="27" id="287" /> +<TGConnectingPoint num="28" id="288" /> +<TGConnectingPoint num="29" id="289" /> +<TGConnectingPoint num="30" id="290" /> +<extraparam> +<textline data="The controller pilots the magnetron." /> +<kind data="Functional" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="323" > +<cdparam x="24" y="11" /> +<sizeparam width="280" height="129" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="Requirement_0" /> +<TGConnectingPoint num="0" id="292" /> +<TGConnectingPoint num="1" id="293" /> +<TGConnectingPoint num="2" id="294" /> +<TGConnectingPoint num="3" id="295" /> +<TGConnectingPoint num="4" id="296" /> +<TGConnectingPoint num="5" id="297" /> +<TGConnectingPoint num="6" id="298" /> +<TGConnectingPoint num="7" id="299" /> +<TGConnectingPoint num="8" id="300" /> +<TGConnectingPoint num="9" id="301" /> +<TGConnectingPoint num="10" id="302" /> +<TGConnectingPoint num="11" id="303" /> +<TGConnectingPoint num="12" id="304" /> +<TGConnectingPoint num="13" id="305" /> +<TGConnectingPoint num="14" id="306" /> +<TGConnectingPoint num="15" id="307" /> +<TGConnectingPoint num="16" id="308" /> +<TGConnectingPoint num="17" id="309" /> +<TGConnectingPoint num="18" id="310" /> +<TGConnectingPoint num="19" id="311" /> +<TGConnectingPoint num="20" id="312" /> +<TGConnectingPoint num="21" id="313" /> +<TGConnectingPoint num="22" id="314" /> +<TGConnectingPoint num="23" id="315" /> +<TGConnectingPoint num="24" id="316" /> +<TGConnectingPoint num="25" id="317" /> +<TGConnectingPoint num="26" id="318" /> +<TGConnectingPoint num="27" id="319" /> +<TGConnectingPoint num="28" id="320" /> +<TGConnectingPoint num="29" id="321" /> +<TGConnectingPoint num="30" id="322" /> +<extraparam> +<textline data="The micro-wave oven heats a plate" /> +<textline data="so as to keep food hot." /> +<kind data="Availability" /> +<criticality data="Low" /> +<reqType data="0" /> +<id data="1" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="355" > +<cdparam x="912" y="202" /> +<sizeparam width="311" height="97" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="139" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="DoorOpenOperation" /> +<TGConnectingPoint num="0" id="324" /> +<TGConnectingPoint num="1" id="325" /> +<TGConnectingPoint num="2" id="326" /> +<TGConnectingPoint num="3" id="327" /> +<TGConnectingPoint num="4" id="328" /> +<TGConnectingPoint num="5" id="329" /> +<TGConnectingPoint num="6" id="330" /> +<TGConnectingPoint num="7" id="331" /> +<TGConnectingPoint num="8" id="332" /> +<TGConnectingPoint num="9" id="333" /> +<TGConnectingPoint num="10" id="334" /> +<TGConnectingPoint num="11" id="335" /> +<TGConnectingPoint num="12" id="336" /> +<TGConnectingPoint num="13" id="337" /> +<TGConnectingPoint num="14" id="338" /> +<TGConnectingPoint num="15" id="339" /> +<TGConnectingPoint num="16" id="340" /> +<TGConnectingPoint num="17" id="341" /> +<TGConnectingPoint num="18" id="342" /> +<TGConnectingPoint num="19" id="343" /> +<TGConnectingPoint num="20" id="344" /> +<TGConnectingPoint num="21" id="345" /> +<TGConnectingPoint num="22" id="346" /> +<TGConnectingPoint num="23" id="347" /> +<TGConnectingPoint num="24" id="348" /> +<TGConnectingPoint num="25" id="349" /> +<TGConnectingPoint num="26" id="350" /> +<TGConnectingPoint num="27" id="351" /> +<TGConnectingPoint num="28" id="352" /> +<TGConnectingPoint num="29" id="353" /> +<TGConnectingPoint num="30" id="354" /> +<extraparam> +<textline data="When the door is opened during operation, " /> +<textline data="the magnetron is switched off for the time " /> +<textline data="the door remains open." /> +<kind data="Controlled access (authorization)" /> +<criticality data="High" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="387" > +<cdparam x="416" y="200" /> +<sizeparam width="387" height="97" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="99" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="DoorNotOpen" /> +<TGConnectingPoint num="0" id="356" /> +<TGConnectingPoint num="1" id="357" /> +<TGConnectingPoint num="2" id="358" /> +<TGConnectingPoint num="3" id="359" /> +<TGConnectingPoint num="4" id="360" /> +<TGConnectingPoint num="5" id="361" /> +<TGConnectingPoint num="6" id="362" /> +<TGConnectingPoint num="7" id="363" /> +<TGConnectingPoint num="8" id="364" /> +<TGConnectingPoint num="9" id="365" /> +<TGConnectingPoint num="10" id="366" /> +<TGConnectingPoint num="11" id="367" /> +<TGConnectingPoint num="12" id="368" /> +<TGConnectingPoint num="13" id="369" /> +<TGConnectingPoint num="14" id="370" /> +<TGConnectingPoint num="15" id="371" /> +<TGConnectingPoint num="16" id="372" /> +<TGConnectingPoint num="17" id="373" /> +<TGConnectingPoint num="18" id="374" /> +<TGConnectingPoint num="19" id="375" /> +<TGConnectingPoint num="20" id="376" /> +<TGConnectingPoint num="21" id="377" /> +<TGConnectingPoint num="22" id="378" /> +<TGConnectingPoint num="23" id="379" /> +<TGConnectingPoint num="24" id="380" /> +<TGConnectingPoint num="25" id="381" /> +<TGConnectingPoint num="26" id="382" /> +<TGConnectingPoint num="27" id="383" /> +<TGConnectingPoint num="28" id="384" /> +<TGConnectingPoint num="29" id="385" /> +<TGConnectingPoint num="30" id="386" /> +<extraparam> +<textline data="The heating unit is not started when the door is open." /> +<kind data="Controlled access (authorization)" /> +<criticality data="High" /> +<reqType data="0" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5201" id="403" > +<cdparam x="1010" y="79" /> +<sizeparam width="206" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="54" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Req3" /> +<TGConnectingPoint num="0" id="388" /> +<TGConnectingPoint num="1" id="389" /> +<TGConnectingPoint num="2" id="390" /> +<TGConnectingPoint num="3" id="391" /> +<TGConnectingPoint num="4" id="392" /> +<TGConnectingPoint num="5" id="393" /> +<TGConnectingPoint num="6" id="394" /> +<TGConnectingPoint num="7" id="395" /> +<TGConnectingPoint num="8" id="396" /> +<TGConnectingPoint num="9" id="397" /> +<TGConnectingPoint num="10" id="398" /> +<TGConnectingPoint num="11" id="399" /> +<TGConnectingPoint num="12" id="400" /> +<TGConnectingPoint num="13" id="401" /> +<TGConnectingPoint num="14" id="402" /> +</COMPONENT> + +<COMPONENT type="5201" id="419" > +<cdparam x="704" y="345" /> +<sizeparam width="206" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="56" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Prop1" /> +<TGConnectingPoint num="0" id="404" /> +<TGConnectingPoint num="1" id="405" /> +<TGConnectingPoint num="2" id="406" /> +<TGConnectingPoint num="3" id="407" /> +<TGConnectingPoint num="4" id="408" /> +<TGConnectingPoint num="5" id="409" /> +<TGConnectingPoint num="6" id="410" /> +<TGConnectingPoint num="7" id="411" /> +<TGConnectingPoint num="8" id="412" /> +<TGConnectingPoint num="9" id="413" /> +<TGConnectingPoint num="10" id="414" /> +<TGConnectingPoint num="11" id="415" /> +<TGConnectingPoint num="12" id="416" /> +<TGConnectingPoint num="13" id="417" /> +<TGConnectingPoint num="14" id="418" /> +</COMPONENT> + +<COMPONENT type="5201" id="435" > +<cdparam x="61" y="524" /> +<sizeparam width="161" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="56" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Prop4" /> +<TGConnectingPoint num="0" id="420" /> +<TGConnectingPoint num="1" id="421" /> +<TGConnectingPoint num="2" id="422" /> +<TGConnectingPoint num="3" id="423" /> +<TGConnectingPoint num="4" id="424" /> +<TGConnectingPoint num="5" id="425" /> +<TGConnectingPoint num="6" id="426" /> +<TGConnectingPoint num="7" id="427" /> +<TGConnectingPoint num="8" id="428" /> +<TGConnectingPoint num="9" id="429" /> +<TGConnectingPoint num="10" id="430" /> +<TGConnectingPoint num="11" id="431" /> +<TGConnectingPoint num="12" id="432" /> +<TGConnectingPoint num="13" id="433" /> +<TGConnectingPoint num="14" id="434" /> +</COMPONENT> + +<COMPONENT type="5201" id="451" > +<cdparam x="506" y="319" /> +<sizeparam width="161" height="30" minWidth="10" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="56" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="AvatarProperty" value="Prop2" /> +<TGConnectingPoint num="0" id="436" /> +<TGConnectingPoint num="1" id="437" /> +<TGConnectingPoint num="2" id="438" /> +<TGConnectingPoint num="3" id="439" /> +<TGConnectingPoint num="4" id="440" /> +<TGConnectingPoint num="5" id="441" /> +<TGConnectingPoint num="6" id="442" /> +<TGConnectingPoint num="7" id="443" /> +<TGConnectingPoint num="8" id="444" /> +<TGConnectingPoint num="9" id="445" /> +<TGConnectingPoint num="10" id="446" /> +<TGConnectingPoint num="11" id="447" /> +<TGConnectingPoint num="12" id="448" /> +<TGConnectingPoint num="13" id="449" /> +<TGConnectingPoint num="14" id="450" /> +</COMPONENT> + +<COMPONENT type="5200" id="483" > +<cdparam x="439" y="675" /> +<sizeparam width="271" height="109" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="205" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="AuthenticityOfRemoteCommand" /> +<TGConnectingPoint num="0" id="452" /> +<TGConnectingPoint num="1" id="453" /> +<TGConnectingPoint num="2" id="454" /> +<TGConnectingPoint num="3" id="455" /> +<TGConnectingPoint num="4" id="456" /> +<TGConnectingPoint num="5" id="457" /> +<TGConnectingPoint num="6" id="458" /> +<TGConnectingPoint num="7" id="459" /> +<TGConnectingPoint num="8" id="460" /> +<TGConnectingPoint num="9" id="461" /> +<TGConnectingPoint num="10" id="462" /> +<TGConnectingPoint num="11" id="463" /> +<TGConnectingPoint num="12" id="464" /> +<TGConnectingPoint num="13" id="465" /> +<TGConnectingPoint num="14" id="466" /> +<TGConnectingPoint num="15" id="467" /> +<TGConnectingPoint num="16" id="468" /> +<TGConnectingPoint num="17" id="469" /> +<TGConnectingPoint num="18" id="470" /> +<TGConnectingPoint num="19" id="471" /> +<TGConnectingPoint num="20" id="472" /> +<TGConnectingPoint num="21" id="473" /> +<TGConnectingPoint num="22" id="474" /> +<TGConnectingPoint num="23" id="475" /> +<TGConnectingPoint num="24" id="476" /> +<TGConnectingPoint num="25" id="477" /> +<TGConnectingPoint num="26" id="478" /> +<TGConnectingPoint num="27" id="479" /> +<TGConnectingPoint num="28" id="480" /> +<TGConnectingPoint num="29" id="481" /> +<TGConnectingPoint num="30" id="482" /> +<extraparam> +<textline data="Data received wirelessly by the oven" /> +<textline data="must have been sent by the corresponding " /> +<textline data="remote control" /> +<kind data="Data origin authenticity" /> +<criticality data="High" /> +<reqType data="2" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5200" id="515" > +<cdparam x="161" y="674" /> +<sizeparam width="248" height="103" minWidth="1" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="220" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Requirement" value="ConfidentialityOfRemoteCommand" /> +<TGConnectingPoint num="0" id="484" /> +<TGConnectingPoint num="1" id="485" /> +<TGConnectingPoint num="2" id="486" /> +<TGConnectingPoint num="3" id="487" /> +<TGConnectingPoint num="4" id="488" /> +<TGConnectingPoint num="5" id="489" /> +<TGConnectingPoint num="6" id="490" /> +<TGConnectingPoint num="7" id="491" /> +<TGConnectingPoint num="8" id="492" /> +<TGConnectingPoint num="9" id="493" /> +<TGConnectingPoint num="10" id="494" /> +<TGConnectingPoint num="11" id="495" /> +<TGConnectingPoint num="12" id="496" /> +<TGConnectingPoint num="13" id="497" /> +<TGConnectingPoint num="14" id="498" /> +<TGConnectingPoint num="15" id="499" /> +<TGConnectingPoint num="16" id="500" /> +<TGConnectingPoint num="17" id="501" /> +<TGConnectingPoint num="18" id="502" /> +<TGConnectingPoint num="19" id="503" /> +<TGConnectingPoint num="20" id="504" /> +<TGConnectingPoint num="21" id="505" /> +<TGConnectingPoint num="22" id="506" /> +<TGConnectingPoint num="23" id="507" /> +<TGConnectingPoint num="24" id="508" /> +<TGConnectingPoint num="25" id="509" /> +<TGConnectingPoint num="26" id="510" /> +<TGConnectingPoint num="27" id="511" /> +<TGConnectingPoint num="28" id="512" /> +<TGConnectingPoint num="29" id="513" /> +<TGConnectingPoint num="30" id="514" /> +<extraparam> +<textline data="Data sent by the remote control" /> +<textline data="of the microwave shall remain confidential" /> +<kind data="Confidentiality" /> +<criticality data="Medium" /> +<reqType data="2" /> +<id data="0" /> +<satisfied data="false" /> +<verified data="false" /> +<attackTreeNode data="" /> +<violatedAction data="" /> +<referenceElements data="" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="5203" id="517" > +<cdparam x="575" y="876" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="516" /> +<P1 x="574" y="823" id="66" /> +<P2 x="574" y="784" id="474" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="519" > +<cdparam x="126" y="876" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="518" /> +<P1 x="285" y="819" id="82" /> +<P2 x="285" y="777" id="506" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="521" > +<cdparam x="619" y="728" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="520" /> +<P1 x="506" y="675" id="458" /> +<P2 x="470" y="646" id="102" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="523" > +<cdparam x="197" y="765" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="522" /> +<P1 x="285" y="674" id="491" /> +<P2 x="332" y="646" id="100" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="525" > +<cdparam x="330" y="611" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="524" /> +<P1 x="141" y="524" id="427" /> +<P2 x="159" y="481" id="250" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="527" > +<cdparam x="1113" y="353" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="526" /> +<P1 x="1113" y="79" id="395" /> +<P2 x="1067" y="299" id="346" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="529" > +<cdparam x="952" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="528" /> +<P1 x="912" y="250" id="325" /> +<P2 x="803" y="248" id="360" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="531" > +<cdparam x="856" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="530" /> +<P1 x="807" y="345" id="411" /> +<P2 x="706" y="297" id="379" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="533" > +<cdparam x="690" y="244" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="532" /> +<P1 x="609" y="200" id="363" /> +<P2 x="474" y="147" id="174" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="535" > +<cdparam x="636" y="108" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="534" /> +<P1 x="667" y="103" id="133" /> +<P2 x="602" y="92" id="168" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="537" > +<cdparam x="512" y="166" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="536" /> +<P1 x="346" y="92" id="165" /> +<P2 x="304" y="107" id="297" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5202" id="539" > +<cdparam x="268" y="309" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="538" /> +<P1 x="320" y="228" id="264" /> +<P2 x="415" y="439" id="202" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5203" id="543" > +<cdparam x="655" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from AvatarProperty to Requirement" value="<<verify>>" /> +<TGConnectingPoint num="0" id="541" /> +<TGConnectingPoint num="1" id="542" /> +<P1 x="586" y="349" id="446" /> +<P2 x="493" y="439" id="215" /> +<Point x="535" y="394" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="540" > +<father id="543" num="0" /> +<cdparam x="535" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5202" id="545" > +<cdparam x="165" y="390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="544" /> +<P1 x="165" y="279" id="270" /> +<P2 x="159" y="369" id="235" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5205" id="547" > +<cdparam x="165" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Requirement to Requirement" value="<<composition>>" /> +<TGConnectingPoint num="0" id="546" /> +<P1 x="164" y="140" id="302" /> +<P2 x="165" y="177" id="267" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</AvatarRDPanel> + +</Modeling> + + + + +<Modeling type="Avatar Requirement" nameTab="Safety_props" > +<AvatarPDPanel name="Prop1" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="549" > +<cdparam x="221" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="548" /> +<P1 x="221" y="237" id="562" /> +<P2 x="224" y="263" id="556" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="551" > +<cdparam x="130" y="239" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="550" /> +<P1 x="120" y="239" id="584" /> +<P2 x="191" y="187" id="566" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="553" > +<cdparam x="128" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="552" /> +<P1 x="118" y="191" id="597" /> +<P2 x="191" y="167" id="564" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="555" > +<cdparam x="125" y="82" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="554" /> +<P1 x="117" y="81" id="635" /> +<P2 x="197" y="137" id="569" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="560" > +<cdparam x="174" y="263" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Req1" /> +<TGConnectingPoint num="0" id="556" /> +<TGConnectingPoint num="1" id="557" /> +<TGConnectingPoint num="2" id="558" /> +<TGConnectingPoint num="3" id="559" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5301" id="581" > +<cdparam x="191" y="137" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="<<LC>>" /> +<TGConnectingPoint num="0" id="561" /> +<TGConnectingPoint num="1" id="562" /> +<TGConnectingPoint num="2" id="563" /> +<TGConnectingPoint num="3" id="564" /> +<TGConnectingPoint num="4" id="565" /> +<TGConnectingPoint num="5" id="566" /> +<TGConnectingPoint num="6" id="567" /> +<TGConnectingPoint num="7" id="568" /> +<TGConnectingPoint num="8" id="569" /> +<TGConnectingPoint num="9" id="570" /> +<TGConnectingPoint num="10" id="571" /> +<TGConnectingPoint num="11" id="572" /> +<TGConnectingPoint num="12" id="573" /> +<TGConnectingPoint num="13" id="574" /> +<TGConnectingPoint num="14" id="575" /> +<TGConnectingPoint num="15" id="576" /> +<TGConnectingPoint num="16" id="577" /> +<TGConnectingPoint num="17" id="578" /> +<TGConnectingPoint num="18" id="579" /> +<TGConnectingPoint num="19" id="580" /> +</COMPONENT> + +<COMPONENT type="5300" id="632" > +<cdparam x="10" y="128" /> +<sizeparam width="124" height="141" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Door" /> +<TGConnectingPoint num="0" id="608" /> +<TGConnectingPoint num="1" id="609" /> +<TGConnectingPoint num="2" id="610" /> +<TGConnectingPoint num="3" id="611" /> +<TGConnectingPoint num="4" id="612" /> +<TGConnectingPoint num="5" id="613" /> +<TGConnectingPoint num="6" id="614" /> +<TGConnectingPoint num="7" id="615" /> +<TGConnectingPoint num="8" id="616" /> +<TGConnectingPoint num="9" id="617" /> +<TGConnectingPoint num="10" id="618" /> +<TGConnectingPoint num="11" id="619" /> +<TGConnectingPoint num="12" id="620" /> +<TGConnectingPoint num="13" id="621" /> +<TGConnectingPoint num="14" id="622" /> +<TGConnectingPoint num="15" id="623" /> +<TGConnectingPoint num="16" id="624" /> +<TGConnectingPoint num="17" id="625" /> +<TGConnectingPoint num="18" id="626" /> +<TGConnectingPoint num="19" id="627" /> +<TGConnectingPoint num="20" id="628" /> +<TGConnectingPoint num="21" id="629" /> +<TGConnectingPoint num="22" id="630" /> +<TGConnectingPoint num="23" id="631" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="594" > +<father id="632" num="0" /> +<cdparam x="20" y="219" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="closed" /> +<TGConnectingPoint num="0" id="582" /> +<TGConnectingPoint num="1" id="583" /> +<TGConnectingPoint num="2" id="584" /> +<TGConnectingPoint num="3" id="585" /> +<TGConnectingPoint num="4" id="586" /> +<TGConnectingPoint num="5" id="587" /> +<TGConnectingPoint num="6" id="588" /> +<TGConnectingPoint num="7" id="589" /> +<TGConnectingPoint num="8" id="590" /> +<TGConnectingPoint num="9" id="591" /> +<TGConnectingPoint num="10" id="592" /> +<TGConnectingPoint num="11" id="593" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="607" > +<father id="632" num="1" /> +<cdparam x="18" y="171" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="open" /> +<TGConnectingPoint num="0" id="595" /> +<TGConnectingPoint num="1" id="596" /> +<TGConnectingPoint num="2" id="597" /> +<TGConnectingPoint num="3" id="598" /> +<TGConnectingPoint num="4" id="599" /> +<TGConnectingPoint num="5" id="600" /> +<TGConnectingPoint num="6" id="601" /> +<TGConnectingPoint num="7" id="602" /> +<TGConnectingPoint num="8" id="603" /> +<TGConnectingPoint num="9" id="604" /> +<TGConnectingPoint num="10" id="605" /> +<TGConnectingPoint num="11" id="606" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="670" > +<cdparam x="10" y="20" /> +<sizeparam width="124" height="95" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="646" /> +<TGConnectingPoint num="1" id="647" /> +<TGConnectingPoint num="2" id="648" /> +<TGConnectingPoint num="3" id="649" /> +<TGConnectingPoint num="4" id="650" /> +<TGConnectingPoint num="5" id="651" /> +<TGConnectingPoint num="6" id="652" /> +<TGConnectingPoint num="7" id="653" /> +<TGConnectingPoint num="8" id="654" /> +<TGConnectingPoint num="9" id="655" /> +<TGConnectingPoint num="10" id="656" /> +<TGConnectingPoint num="11" id="657" /> +<TGConnectingPoint num="12" id="658" /> +<TGConnectingPoint num="13" id="659" /> +<TGConnectingPoint num="14" id="660" /> +<TGConnectingPoint num="15" id="661" /> +<TGConnectingPoint num="16" id="662" /> +<TGConnectingPoint num="17" id="663" /> +<TGConnectingPoint num="18" id="664" /> +<TGConnectingPoint num="19" id="665" /> +<TGConnectingPoint num="20" id="666" /> +<TGConnectingPoint num="21" id="667" /> +<TGConnectingPoint num="22" id="668" /> +<TGConnectingPoint num="23" id="669" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="645" > +<father id="670" num="0" /> +<cdparam x="17" y="61" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="55" /> +<infoparam name="TGComponent" value="startMagnetron" /> +<TGConnectingPoint num="0" id="633" /> +<TGConnectingPoint num="1" id="634" /> +<TGConnectingPoint num="2" id="635" /> +<TGConnectingPoint num="3" id="636" /> +<TGConnectingPoint num="4" id="637" /> +<TGConnectingPoint num="5" id="638" /> +<TGConnectingPoint num="6" id="639" /> +<TGConnectingPoint num="7" id="640" /> +<TGConnectingPoint num="8" id="641" /> +<TGConnectingPoint num="9" id="642" /> +<TGConnectingPoint num="10" id="643" /> +<TGConnectingPoint num="11" id="644" /> +</SUBCOMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="Prop2" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="672" > +<cdparam x="214" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="671" /> +<P1 x="205" y="221" id="697" /> +<P2 x="205" y="247" id="679" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="674" > +<cdparam x="130" y="76" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="673" /> +<P1 x="141" y="80" id="716" /> +<P2 x="179" y="60" id="686" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="676" > +<cdparam x="179" y="10" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="675" /> +<P1 x="141" y="146" id="724" /> +<P2 x="175" y="146" id="698" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="678" > +<cdparam x="331" y="141" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="677" /> +<P1 x="220" y="85" id="684" /> +<P2 x="220" y="121" id="696" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="683" > +<cdparam x="155" y="247" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Req2" /> +<TGConnectingPoint num="0" id="679" /> +<TGConnectingPoint num="1" id="680" /> +<TGConnectingPoint num="2" id="681" /> +<TGConnectingPoint num="3" id="682" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5306" id="695" > +<cdparam x="179" y="35" /> +<sizeparam width="118" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="remainingTime==0" /> +<TGConnectingPoint num="0" id="684" /> +<TGConnectingPoint num="1" id="685" /> +<TGConnectingPoint num="2" id="686" /> +<TGConnectingPoint num="3" id="687" /> +<TGConnectingPoint num="4" id="688" /> +<TGConnectingPoint num="5" id="689" /> +<TGConnectingPoint num="6" id="690" /> +<TGConnectingPoint num="7" id="691" /> +<TGConnectingPoint num="8" id="692" /> +<TGConnectingPoint num="9" id="693" /> +<TGConnectingPoint num="10" id="694" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="708" > +<cdparam x="175" y="121" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="=0" /> +<TGConnectingPoint num="0" id="696" /> +<TGConnectingPoint num="1" id="697" /> +<TGConnectingPoint num="2" id="698" /> +<TGConnectingPoint num="3" id="699" /> +<TGConnectingPoint num="4" id="700" /> +<TGConnectingPoint num="5" id="701" /> +<TGConnectingPoint num="6" id="702" /> +<TGConnectingPoint num="7" id="703" /> +<TGConnectingPoint num="8" id="704" /> +<TGConnectingPoint num="9" id="705" /> +<TGConnectingPoint num="10" id="706" /> +<TGConnectingPoint num="11" id="707" /> +</COMPONENT> + +<COMPONENT type="5300" id="759" > +<cdparam x="37" y="24" /> +<sizeparam width="114" height="166" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="735" /> +<TGConnectingPoint num="1" id="736" /> +<TGConnectingPoint num="2" id="737" /> +<TGConnectingPoint num="3" id="738" /> +<TGConnectingPoint num="4" id="739" /> +<TGConnectingPoint num="5" id="740" /> +<TGConnectingPoint num="6" id="741" /> +<TGConnectingPoint num="7" id="742" /> +<TGConnectingPoint num="8" id="743" /> +<TGConnectingPoint num="9" id="744" /> +<TGConnectingPoint num="10" id="745" /> +<TGConnectingPoint num="11" id="746" /> +<TGConnectingPoint num="12" id="747" /> +<TGConnectingPoint num="13" id="748" /> +<TGConnectingPoint num="14" id="749" /> +<TGConnectingPoint num="15" id="750" /> +<TGConnectingPoint num="16" id="751" /> +<TGConnectingPoint num="17" id="752" /> +<TGConnectingPoint num="18" id="753" /> +<TGConnectingPoint num="19" id="754" /> +<TGConnectingPoint num="20" id="755" /> +<TGConnectingPoint num="21" id="756" /> +<TGConnectingPoint num="22" id="757" /> +<TGConnectingPoint num="23" id="758" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="721" > +<father id="759" num="0" /> +<cdparam x="41" y="68" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="14" minY="0" maxY="116" /> +<infoparam name="TGComponent" value="remainingTime" /> +<TGConnectingPoint num="0" id="709" /> +<TGConnectingPoint num="1" id="710" /> +<TGConnectingPoint num="2" id="711" /> +<TGConnectingPoint num="3" id="712" /> +<TGConnectingPoint num="4" id="713" /> +<TGConnectingPoint num="5" id="714" /> +<TGConnectingPoint num="6" id="715" /> +<TGConnectingPoint num="7" id="716" /> +<TGConnectingPoint num="8" id="717" /> +<TGConnectingPoint num="9" id="718" /> +<TGConnectingPoint num="10" id="719" /> +<TGConnectingPoint num="11" id="720" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="734" > +<father id="759" num="1" /> +<cdparam x="41" y="126" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="14" minY="0" maxY="126" /> +<infoparam name="TGComponent" value="ringBell" /> +<TGConnectingPoint num="0" id="722" /> +<TGConnectingPoint num="1" id="723" /> +<TGConnectingPoint num="2" id="724" /> +<TGConnectingPoint num="3" id="725" /> +<TGConnectingPoint num="4" id="726" /> +<TGConnectingPoint num="5" id="727" /> +<TGConnectingPoint num="6" id="728" /> +<TGConnectingPoint num="7" id="729" /> +<TGConnectingPoint num="8" id="730" /> +<TGConnectingPoint num="9" id="731" /> +<TGConnectingPoint num="10" id="732" /> +<TGConnectingPoint num="11" id="733" /> +</SUBCOMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="Prop3" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="761" > +<cdparam x="205" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="760" /> +<P1 x="205" y="420" id="853" /> +<P2 x="206" y="452" id="776" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="763" > +<cdparam x="127" y="89" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="762" /> +<P1 x="124" y="92" id="783" /> +<P2 x="186" y="145" id="821" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="765" > +<cdparam x="145" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="764" /> +<P1 x="119" y="400" id="939" /> +<P2 x="175" y="370" id="857" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="767" > +<cdparam x="144" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="766" /> +<P1 x="121" y="353" id="926" /> +<P2 x="175" y="350" id="855" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="769" > +<cdparam x="146" y="252" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="768" /> +<P1 x="120" y="248" id="875" /> +<P2 x="189" y="226" id="834" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="771" > +<cdparam x="144" y="204" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="770" /> +<P1 x="122" y="198" id="888" /> +<P2 x="189" y="216" id="833" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="773" > +<cdparam x="337" y="165" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="772" /> +<P1 x="231" y="170" id="819" /> +<P2 x="234" y="196" id="831" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5312" id="775" > +<cdparam x="273" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="774" /> +<P1 x="219" y="296" id="832" /> +<P2 x="220" y="320" id="852" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="780" > +<cdparam x="156" y="452" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Req3" /> +<TGConnectingPoint num="0" id="776" /> +<TGConnectingPoint num="1" id="777" /> +<TGConnectingPoint num="2" id="778" /> +<TGConnectingPoint num="3" id="779" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5300" id="818" > +<cdparam x="11" y="22" /> +<sizeparam width="122" height="103" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Magnetron" /> +<TGConnectingPoint num="0" id="794" /> +<TGConnectingPoint num="1" id="795" /> +<TGConnectingPoint num="2" id="796" /> +<TGConnectingPoint num="3" id="797" /> +<TGConnectingPoint num="4" id="798" /> +<TGConnectingPoint num="5" id="799" /> +<TGConnectingPoint num="6" id="800" /> +<TGConnectingPoint num="7" id="801" /> +<TGConnectingPoint num="8" id="802" /> +<TGConnectingPoint num="9" id="803" /> +<TGConnectingPoint num="10" id="804" /> +<TGConnectingPoint num="11" id="805" /> +<TGConnectingPoint num="12" id="806" /> +<TGConnectingPoint num="13" id="807" /> +<TGConnectingPoint num="14" id="808" /> +<TGConnectingPoint num="15" id="809" /> +<TGConnectingPoint num="16" id="810" /> +<TGConnectingPoint num="17" id="811" /> +<TGConnectingPoint num="18" id="812" /> +<TGConnectingPoint num="19" id="813" /> +<TGConnectingPoint num="20" id="814" /> +<TGConnectingPoint num="21" id="815" /> +<TGConnectingPoint num="22" id="816" /> +<TGConnectingPoint num="23" id="817" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="793" > +<father id="818" num="0" /> +<cdparam x="24" y="67" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="22" minY="0" maxY="53" /> +<infoparam name="TGComponent" value="magnetronState" /> +<TGConnectingPoint num="0" id="781" /> +<TGConnectingPoint num="1" id="782" /> +<TGConnectingPoint num="2" id="783" /> +<TGConnectingPoint num="3" id="784" /> +<TGConnectingPoint num="4" id="785" /> +<TGConnectingPoint num="5" id="786" /> +<TGConnectingPoint num="6" id="787" /> +<TGConnectingPoint num="7" id="788" /> +<TGConnectingPoint num="8" id="789" /> +<TGConnectingPoint num="9" id="790" /> +<TGConnectingPoint num="10" id="791" /> +<TGConnectingPoint num="11" id="792" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="830" > +<cdparam x="186" y="120" /> +<sizeparam width="129" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="magnetronState==off" /> +<TGConnectingPoint num="0" id="819" /> +<TGConnectingPoint num="1" id="820" /> +<TGConnectingPoint num="2" id="821" /> +<TGConnectingPoint num="3" id="822" /> +<TGConnectingPoint num="4" id="823" /> +<TGConnectingPoint num="5" id="824" /> +<TGConnectingPoint num="6" id="825" /> +<TGConnectingPoint num="7" id="826" /> +<TGConnectingPoint num="8" id="827" /> +<TGConnectingPoint num="9" id="828" /> +<TGConnectingPoint num="10" id="829" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5301" id="851" > +<cdparam x="189" y="196" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="<<LS>>" /> +<TGConnectingPoint num="0" id="831" /> +<TGConnectingPoint num="1" id="832" /> +<TGConnectingPoint num="2" id="833" /> +<TGConnectingPoint num="3" id="834" /> +<TGConnectingPoint num="4" id="835" /> +<TGConnectingPoint num="5" id="836" /> +<TGConnectingPoint num="6" id="837" /> +<TGConnectingPoint num="7" id="838" /> +<TGConnectingPoint num="8" id="839" /> +<TGConnectingPoint num="9" id="840" /> +<TGConnectingPoint num="10" id="841" /> +<TGConnectingPoint num="11" id="842" /> +<TGConnectingPoint num="12" id="843" /> +<TGConnectingPoint num="13" id="844" /> +<TGConnectingPoint num="14" id="845" /> +<TGConnectingPoint num="15" id="846" /> +<TGConnectingPoint num="16" id="847" /> +<TGConnectingPoint num="17" id="848" /> +<TGConnectingPoint num="18" id="849" /> +<TGConnectingPoint num="19" id="850" /> +</COMPONENT> + +<COMPONENT type="5301" id="872" > +<cdparam x="175" y="320" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="<<LS>>" /> +<TGConnectingPoint num="0" id="852" /> +<TGConnectingPoint num="1" id="853" /> +<TGConnectingPoint num="2" id="854" /> +<TGConnectingPoint num="3" id="855" /> +<TGConnectingPoint num="4" id="856" /> +<TGConnectingPoint num="5" id="857" /> +<TGConnectingPoint num="6" id="858" /> +<TGConnectingPoint num="7" id="859" /> +<TGConnectingPoint num="8" id="860" /> +<TGConnectingPoint num="9" id="861" /> +<TGConnectingPoint num="10" id="862" /> +<TGConnectingPoint num="11" id="863" /> +<TGConnectingPoint num="12" id="864" /> +<TGConnectingPoint num="13" id="865" /> +<TGConnectingPoint num="14" id="866" /> +<TGConnectingPoint num="15" id="867" /> +<TGConnectingPoint num="16" id="868" /> +<TGConnectingPoint num="17" id="869" /> +<TGConnectingPoint num="18" id="870" /> +<TGConnectingPoint num="19" id="871" /> +</COMPONENT> + +<COMPONENT type="5300" id="923" > +<cdparam x="10" y="137" /> +<sizeparam width="124" height="141" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Door" /> +<TGConnectingPoint num="0" id="899" /> +<TGConnectingPoint num="1" id="900" /> +<TGConnectingPoint num="2" id="901" /> +<TGConnectingPoint num="3" id="902" /> +<TGConnectingPoint num="4" id="903" /> +<TGConnectingPoint num="5" id="904" /> +<TGConnectingPoint num="6" id="905" /> +<TGConnectingPoint num="7" id="906" /> +<TGConnectingPoint num="8" id="907" /> +<TGConnectingPoint num="9" id="908" /> +<TGConnectingPoint num="10" id="909" /> +<TGConnectingPoint num="11" id="910" /> +<TGConnectingPoint num="12" id="911" /> +<TGConnectingPoint num="13" id="912" /> +<TGConnectingPoint num="14" id="913" /> +<TGConnectingPoint num="15" id="914" /> +<TGConnectingPoint num="16" id="915" /> +<TGConnectingPoint num="17" id="916" /> +<TGConnectingPoint num="18" id="917" /> +<TGConnectingPoint num="19" id="918" /> +<TGConnectingPoint num="20" id="919" /> +<TGConnectingPoint num="21" id="920" /> +<TGConnectingPoint num="22" id="921" /> +<TGConnectingPoint num="23" id="922" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="885" > +<father id="923" num="0" /> +<cdparam x="20" y="228" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="closed" /> +<TGConnectingPoint num="0" id="873" /> +<TGConnectingPoint num="1" id="874" /> +<TGConnectingPoint num="2" id="875" /> +<TGConnectingPoint num="3" id="876" /> +<TGConnectingPoint num="4" id="877" /> +<TGConnectingPoint num="5" id="878" /> +<TGConnectingPoint num="6" id="879" /> +<TGConnectingPoint num="7" id="880" /> +<TGConnectingPoint num="8" id="881" /> +<TGConnectingPoint num="9" id="882" /> +<TGConnectingPoint num="10" id="883" /> +<TGConnectingPoint num="11" id="884" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="898" > +<father id="923" num="1" /> +<cdparam x="22" y="178" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="101" /> +<infoparam name="TGComponent" value="open" /> +<TGConnectingPoint num="0" id="886" /> +<TGConnectingPoint num="1" id="887" /> +<TGConnectingPoint num="2" id="888" /> +<TGConnectingPoint num="3" id="889" /> +<TGConnectingPoint num="4" id="890" /> +<TGConnectingPoint num="5" id="891" /> +<TGConnectingPoint num="6" id="892" /> +<TGConnectingPoint num="7" id="893" /> +<TGConnectingPoint num="8" id="894" /> +<TGConnectingPoint num="9" id="895" /> +<TGConnectingPoint num="10" id="896" /> +<TGConnectingPoint num="11" id="897" /> +</SUBCOMPONENT> + +<COMPONENT type="5300" id="974" > +<cdparam x="10" y="288" /> +<sizeparam width="124" height="139" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="950" /> +<TGConnectingPoint num="1" id="951" /> +<TGConnectingPoint num="2" id="952" /> +<TGConnectingPoint num="3" id="953" /> +<TGConnectingPoint num="4" id="954" /> +<TGConnectingPoint num="5" id="955" /> +<TGConnectingPoint num="6" id="956" /> +<TGConnectingPoint num="7" id="957" /> +<TGConnectingPoint num="8" id="958" /> +<TGConnectingPoint num="9" id="959" /> +<TGConnectingPoint num="10" id="960" /> +<TGConnectingPoint num="11" id="961" /> +<TGConnectingPoint num="12" id="962" /> +<TGConnectingPoint num="13" id="963" /> +<TGConnectingPoint num="14" id="964" /> +<TGConnectingPoint num="15" id="965" /> +<TGConnectingPoint num="16" id="966" /> +<TGConnectingPoint num="17" id="967" /> +<TGConnectingPoint num="18" id="968" /> +<TGConnectingPoint num="19" id="969" /> +<TGConnectingPoint num="20" id="970" /> +<TGConnectingPoint num="21" id="971" /> +<TGConnectingPoint num="22" id="972" /> +<TGConnectingPoint num="23" id="973" /> +</COMPONENT> +<SUBCOMPONENT type="5304" id="936" > +<father id="974" num="0" /> +<cdparam x="21" y="333" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="99" /> +<infoparam name="TGComponent" value="startCooking" /> +<TGConnectingPoint num="0" id="924" /> +<TGConnectingPoint num="1" id="925" /> +<TGConnectingPoint num="2" id="926" /> +<TGConnectingPoint num="3" id="927" /> +<TGConnectingPoint num="4" id="928" /> +<TGConnectingPoint num="5" id="929" /> +<TGConnectingPoint num="6" id="930" /> +<TGConnectingPoint num="7" id="931" /> +<TGConnectingPoint num="8" id="932" /> +<TGConnectingPoint num="9" id="933" /> +<TGConnectingPoint num="10" id="934" /> +<TGConnectingPoint num="11" id="935" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5304" id="949" > +<father id="974" num="1" /> +<cdparam x="19" y="380" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="99" /> +<infoparam name="TGComponent" value="stopCooking" /> +<TGConnectingPoint num="0" id="937" /> +<TGConnectingPoint num="1" id="938" /> +<TGConnectingPoint num="2" id="939" /> +<TGConnectingPoint num="3" id="940" /> +<TGConnectingPoint num="4" id="941" /> +<TGConnectingPoint num="5" id="942" /> +<TGConnectingPoint num="6" id="943" /> +<TGConnectingPoint num="7" id="944" /> +<TGConnectingPoint num="8" id="945" /> +<TGConnectingPoint num="9" id="946" /> +<TGConnectingPoint num="10" id="947" /> +<TGConnectingPoint num="11" id="948" /> +</SUBCOMPONENT> + + +</AvatarPDPanel> + +<AvatarPDPanel name="Prop4" minX="10" maxX="900" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5312" id="976" > +<cdparam x="328" y="172" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="reg" /> +<TGConnectingPoint num="0" id="975" /> +<P1 x="323" y="163" id="1053" /> +<P2 x="324" y="190" id="985" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="978" > +<cdparam x="125" y="108" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="977" /> +<P1 x="121" y="96" id="992" /> +<P2 x="149" y="106" id="1034" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5310" id="980" > +<cdparam x="125" y="95" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="979" /> +<P1 x="121" y="83" id="997" /> +<P2 x="151" y="47" id="1046" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="982" > +<cdparam x="186" y="256" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="981" /> +<P1 x="234" y="144" id="1037" /> +<P2 x="293" y="138" id="1055" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5311" id="984" > +<cdparam x="213" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="983" /> +<P1 x="236" y="85" id="1049" /> +<P2 x="293" y="88" id="1054" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5308" id="989" > +<cdparam x="274" y="190" /> +<sizeparam width="100" height="55" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Prop" /> +<TGConnectingPoint num="0" id="985" /> +<TGConnectingPoint num="1" id="986" /> +<TGConnectingPoint num="2" id="987" /> +<TGConnectingPoint num="3" id="988" /> +<extraparam> +<liveness data="0" /> +<not data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5300" id="1027" > +<cdparam x="10" y="32" /> +<sizeparam width="124" height="110" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="Block0" value="Magnetron" /> +<TGConnectingPoint num="0" id="1003" /> +<TGConnectingPoint num="1" id="1004" /> +<TGConnectingPoint num="2" id="1005" /> +<TGConnectingPoint num="3" id="1006" /> +<TGConnectingPoint num="4" id="1007" /> +<TGConnectingPoint num="5" id="1008" /> +<TGConnectingPoint num="6" id="1009" /> +<TGConnectingPoint num="7" id="1010" /> +<TGConnectingPoint num="8" id="1011" /> +<TGConnectingPoint num="9" id="1012" /> +<TGConnectingPoint num="10" id="1013" /> +<TGConnectingPoint num="11" id="1014" /> +<TGConnectingPoint num="12" id="1015" /> +<TGConnectingPoint num="13" id="1016" /> +<TGConnectingPoint num="14" id="1017" /> +<TGConnectingPoint num="15" id="1018" /> +<TGConnectingPoint num="16" id="1019" /> +<TGConnectingPoint num="17" id="1020" /> +<TGConnectingPoint num="18" id="1021" /> +<TGConnectingPoint num="19" id="1022" /> +<TGConnectingPoint num="20" id="1023" /> +<TGConnectingPoint num="21" id="1024" /> +<TGConnectingPoint num="22" id="1025" /> +<TGConnectingPoint num="23" id="1026" /> +</COMPONENT> +<SUBCOMPONENT type="5303" id="1002" > +<father id="1027" num="0" /> +<cdparam x="21" y="71" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="24" minY="0" maxY="60" /> +<infoparam name="TGComponent" value="power" /> +<TGConnectingPoint num="0" id="990" /> +<TGConnectingPoint num="1" id="991" /> +<TGConnectingPoint num="2" id="992" /> +<TGConnectingPoint num="3" id="993" /> +<TGConnectingPoint num="4" id="994" /> +<TGConnectingPoint num="5" id="995" /> +<TGConnectingPoint num="6" id="996" /> +<TGConnectingPoint num="7" id="997" /> +<TGConnectingPoint num="8" id="998" /> +<TGConnectingPoint num="9" id="999" /> +<TGConnectingPoint num="10" id="1000" /> +<TGConnectingPoint num="11" id="1001" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5306" id="1039" > +<cdparam x="149" y="94" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="power<100" /> +<TGConnectingPoint num="0" id="1028" /> +<TGConnectingPoint num="1" id="1029" /> +<TGConnectingPoint num="2" id="1030" /> +<TGConnectingPoint num="3" id="1031" /> +<TGConnectingPoint num="4" id="1032" /> +<TGConnectingPoint num="5" id="1033" /> +<TGConnectingPoint num="6" id="1034" /> +<TGConnectingPoint num="7" id="1035" /> +<TGConnectingPoint num="8" id="1036" /> +<TGConnectingPoint num="9" id="1037" /> +<TGConnectingPoint num="10" id="1038" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5306" id="1051" > +<cdparam x="151" y="35" /> +<sizeparam width="100" height="50" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="power=100" /> +<TGConnectingPoint num="0" id="1040" /> +<TGConnectingPoint num="1" id="1041" /> +<TGConnectingPoint num="2" id="1042" /> +<TGConnectingPoint num="3" id="1043" /> +<TGConnectingPoint num="4" id="1044" /> +<TGConnectingPoint num="5" id="1045" /> +<TGConnectingPoint num="6" id="1046" /> +<TGConnectingPoint num="7" id="1047" /> +<TGConnectingPoint num="8" id="1048" /> +<TGConnectingPoint num="9" id="1049" /> +<TGConnectingPoint num="10" id="1050" /> +<extraparam> +<Toggle value="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5302" id="1064" > +<cdparam x="293" y="63" /> +<sizeparam width="60" height="100" minWidth="50" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="900" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="< 10" /> +<TGConnectingPoint num="0" id="1052" /> +<TGConnectingPoint num="1" id="1053" /> +<TGConnectingPoint num="2" id="1054" /> +<TGConnectingPoint num="3" id="1055" /> +<TGConnectingPoint num="4" id="1056" /> +<TGConnectingPoint num="5" id="1057" /> +<TGConnectingPoint num="6" id="1058" /> +<TGConnectingPoint num="7" id="1059" /> +<TGConnectingPoint num="8" id="1060" /> +<TGConnectingPoint num="9" id="1061" /> +<TGConnectingPoint num="10" id="1062" /> +<TGConnectingPoint num="11" id="1063" /> +</COMPONENT> + + +</AvatarPDPanel> + +</Modeling> + + + + +<Modeling type="Avatar Analysis" nameTab="Analysis_UseCase" > +<UseCaseDiagramPanel name="Use case" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="703" id="1097" > +<cdparam x="144" y="84" /> +<sizeparam width="116" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Magnetron actuator" /> +<TGConnectingPoint num="0" id="1065" /> +<TGConnectingPoint num="1" id="1066" /> +<TGConnectingPoint num="2" id="1067" /> +<TGConnectingPoint num="3" id="1068" /> +<TGConnectingPoint num="4" id="1069" /> +<TGConnectingPoint num="5" id="1070" /> +<TGConnectingPoint num="6" id="1071" /> +<TGConnectingPoint num="7" id="1072" /> +<TGConnectingPoint num="8" id="1073" /> +<TGConnectingPoint num="9" id="1074" /> +<TGConnectingPoint num="10" id="1075" /> +<TGConnectingPoint num="11" id="1076" /> +<TGConnectingPoint num="12" id="1077" /> +<TGConnectingPoint num="13" id="1078" /> +<TGConnectingPoint num="14" id="1079" /> +<TGConnectingPoint num="15" id="1080" /> +<TGConnectingPoint num="16" id="1081" /> +<TGConnectingPoint num="17" id="1082" /> +<TGConnectingPoint num="18" id="1083" /> +<TGConnectingPoint num="19" id="1084" /> +<TGConnectingPoint num="20" id="1085" /> +<TGConnectingPoint num="21" id="1086" /> +<TGConnectingPoint num="22" id="1087" /> +<TGConnectingPoint num="23" id="1088" /> +<TGConnectingPoint num="24" id="1089" /> +<TGConnectingPoint num="25" id="1090" /> +<TGConnectingPoint num="26" id="1091" /> +<TGConnectingPoint num="27" id="1092" /> +<TGConnectingPoint num="28" id="1093" /> +<TGConnectingPoint num="29" id="1094" /> +<TGConnectingPoint num="30" id="1095" /> +<TGConnectingPoint num="31" id="1096" /> +</COMPONENT> + +<COMPONENT type="703" id="1130" > +<cdparam x="161" y="171" /> +<sizeparam width="75" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Bell actuator" /> +<TGConnectingPoint num="0" id="1098" /> +<TGConnectingPoint num="1" id="1099" /> +<TGConnectingPoint num="2" id="1100" /> +<TGConnectingPoint num="3" id="1101" /> +<TGConnectingPoint num="4" id="1102" /> +<TGConnectingPoint num="5" id="1103" /> +<TGConnectingPoint num="6" id="1104" /> +<TGConnectingPoint num="7" id="1105" /> +<TGConnectingPoint num="8" id="1106" /> +<TGConnectingPoint num="9" id="1107" /> +<TGConnectingPoint num="10" id="1108" /> +<TGConnectingPoint num="11" id="1109" /> +<TGConnectingPoint num="12" id="1110" /> +<TGConnectingPoint num="13" id="1111" /> +<TGConnectingPoint num="14" id="1112" /> +<TGConnectingPoint num="15" id="1113" /> +<TGConnectingPoint num="16" id="1114" /> +<TGConnectingPoint num="17" id="1115" /> +<TGConnectingPoint num="18" id="1116" /> +<TGConnectingPoint num="19" id="1117" /> +<TGConnectingPoint num="20" id="1118" /> +<TGConnectingPoint num="21" id="1119" /> +<TGConnectingPoint num="22" id="1120" /> +<TGConnectingPoint num="23" id="1121" /> +<TGConnectingPoint num="24" id="1122" /> +<TGConnectingPoint num="25" id="1123" /> +<TGConnectingPoint num="26" id="1124" /> +<TGConnectingPoint num="27" id="1125" /> +<TGConnectingPoint num="28" id="1126" /> +<TGConnectingPoint num="29" id="1127" /> +<TGConnectingPoint num="30" id="1128" /> +<TGConnectingPoint num="31" id="1129" /> +</COMPONENT> + +<COMPONENT type="701" id="1155" > +<cdparam x="284" y="176" /> +<sizeparam width="77" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Ringing bell" /> +<TGConnectingPoint num="0" id="1131" /> +<TGConnectingPoint num="1" id="1132" /> +<TGConnectingPoint num="2" id="1133" /> +<TGConnectingPoint num="3" id="1134" /> +<TGConnectingPoint num="4" id="1135" /> +<TGConnectingPoint num="5" id="1136" /> +<TGConnectingPoint num="6" id="1137" /> +<TGConnectingPoint num="7" id="1138" /> +<TGConnectingPoint num="8" id="1139" /> +<TGConnectingPoint num="9" id="1140" /> +<TGConnectingPoint num="10" id="1141" /> +<TGConnectingPoint num="11" id="1142" /> +<TGConnectingPoint num="12" id="1143" /> +<TGConnectingPoint num="13" id="1144" /> +<TGConnectingPoint num="14" id="1145" /> +<TGConnectingPoint num="15" id="1146" /> +<TGConnectingPoint num="16" id="1147" /> +<TGConnectingPoint num="17" id="1148" /> +<TGConnectingPoint num="18" id="1149" /> +<TGConnectingPoint num="19" id="1150" /> +<TGConnectingPoint num="20" id="1151" /> +<TGConnectingPoint num="21" id="1152" /> +<TGConnectingPoint num="22" id="1153" /> +<TGConnectingPoint num="23" id="1154" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="703" id="1188" > +<cdparam x="677" y="311" /> +<sizeparam width="230" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Wireless interface of the remote control" /> +<TGConnectingPoint num="0" id="1156" /> +<TGConnectingPoint num="1" id="1157" /> +<TGConnectingPoint num="2" id="1158" /> +<TGConnectingPoint num="3" id="1159" /> +<TGConnectingPoint num="4" id="1160" /> +<TGConnectingPoint num="5" id="1161" /> +<TGConnectingPoint num="6" id="1162" /> +<TGConnectingPoint num="7" id="1163" /> +<TGConnectingPoint num="8" id="1164" /> +<TGConnectingPoint num="9" id="1165" /> +<TGConnectingPoint num="10" id="1166" /> +<TGConnectingPoint num="11" id="1167" /> +<TGConnectingPoint num="12" id="1168" /> +<TGConnectingPoint num="13" id="1169" /> +<TGConnectingPoint num="14" id="1170" /> +<TGConnectingPoint num="15" id="1171" /> +<TGConnectingPoint num="16" id="1172" /> +<TGConnectingPoint num="17" id="1173" /> +<TGConnectingPoint num="18" id="1174" /> +<TGConnectingPoint num="19" id="1175" /> +<TGConnectingPoint num="20" id="1176" /> +<TGConnectingPoint num="21" id="1177" /> +<TGConnectingPoint num="22" id="1178" /> +<TGConnectingPoint num="23" id="1179" /> +<TGConnectingPoint num="24" id="1180" /> +<TGConnectingPoint num="25" id="1181" /> +<TGConnectingPoint num="26" id="1182" /> +<TGConnectingPoint num="27" id="1183" /> +<TGConnectingPoint num="28" id="1184" /> +<TGConnectingPoint num="29" id="1185" /> +<TGConnectingPoint num="30" id="1186" /> +<TGConnectingPoint num="31" id="1187" /> +</COMPONENT> + +<COMPONENT type="703" id="1221" > +<cdparam x="326" y="351" /> +<sizeparam width="81" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Control panel" /> +<TGConnectingPoint num="0" id="1189" /> +<TGConnectingPoint num="1" id="1190" /> +<TGConnectingPoint num="2" id="1191" /> +<TGConnectingPoint num="3" id="1192" /> +<TGConnectingPoint num="4" id="1193" /> +<TGConnectingPoint num="5" id="1194" /> +<TGConnectingPoint num="6" id="1195" /> +<TGConnectingPoint num="7" id="1196" /> +<TGConnectingPoint num="8" id="1197" /> +<TGConnectingPoint num="9" id="1198" /> +<TGConnectingPoint num="10" id="1199" /> +<TGConnectingPoint num="11" id="1200" /> +<TGConnectingPoint num="12" id="1201" /> +<TGConnectingPoint num="13" id="1202" /> +<TGConnectingPoint num="14" id="1203" /> +<TGConnectingPoint num="15" id="1204" /> +<TGConnectingPoint num="16" id="1205" /> +<TGConnectingPoint num="17" id="1206" /> +<TGConnectingPoint num="18" id="1207" /> +<TGConnectingPoint num="19" id="1208" /> +<TGConnectingPoint num="20" id="1209" /> +<TGConnectingPoint num="21" id="1210" /> +<TGConnectingPoint num="22" id="1211" /> +<TGConnectingPoint num="23" id="1212" /> +<TGConnectingPoint num="24" id="1213" /> +<TGConnectingPoint num="25" id="1214" /> +<TGConnectingPoint num="26" id="1215" /> +<TGConnectingPoint num="27" id="1216" /> +<TGConnectingPoint num="28" id="1217" /> +<TGConnectingPoint num="29" id="1218" /> +<TGConnectingPoint num="30" id="1219" /> +<TGConnectingPoint num="31" id="1220" /> +</COMPONENT> + +<COMPONENT type="703" id="1254" > +<cdparam x="676" y="133" /> +<sizeparam width="74" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Door sensor" /> +<TGConnectingPoint num="0" id="1222" /> +<TGConnectingPoint num="1" id="1223" /> +<TGConnectingPoint num="2" id="1224" /> +<TGConnectingPoint num="3" id="1225" /> +<TGConnectingPoint num="4" id="1226" /> +<TGConnectingPoint num="5" id="1227" /> +<TGConnectingPoint num="6" id="1228" /> +<TGConnectingPoint num="7" id="1229" /> +<TGConnectingPoint num="8" id="1230" /> +<TGConnectingPoint num="9" id="1231" /> +<TGConnectingPoint num="10" id="1232" /> +<TGConnectingPoint num="11" id="1233" /> +<TGConnectingPoint num="12" id="1234" /> +<TGConnectingPoint num="13" id="1235" /> +<TGConnectingPoint num="14" id="1236" /> +<TGConnectingPoint num="15" id="1237" /> +<TGConnectingPoint num="16" id="1238" /> +<TGConnectingPoint num="17" id="1239" /> +<TGConnectingPoint num="18" id="1240" /> +<TGConnectingPoint num="19" id="1241" /> +<TGConnectingPoint num="20" id="1242" /> +<TGConnectingPoint num="21" id="1243" /> +<TGConnectingPoint num="22" id="1244" /> +<TGConnectingPoint num="23" id="1245" /> +<TGConnectingPoint num="24" id="1246" /> +<TGConnectingPoint num="25" id="1247" /> +<TGConnectingPoint num="26" id="1248" /> +<TGConnectingPoint num="27" id="1249" /> +<TGConnectingPoint num="28" id="1250" /> +<TGConnectingPoint num="29" id="1251" /> +<TGConnectingPoint num="30" id="1252" /> +<TGConnectingPoint num="31" id="1253" /> +</COMPONENT> + +<COMPONENT type="701" id="1279" > +<cdparam x="505" y="126" /> +<sizeparam width="117" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Door management" /> +<TGConnectingPoint num="0" id="1255" /> +<TGConnectingPoint num="1" id="1256" /> +<TGConnectingPoint num="2" id="1257" /> +<TGConnectingPoint num="3" id="1258" /> +<TGConnectingPoint num="4" id="1259" /> +<TGConnectingPoint num="5" id="1260" /> +<TGConnectingPoint num="6" id="1261" /> +<TGConnectingPoint num="7" id="1262" /> +<TGConnectingPoint num="8" id="1263" /> +<TGConnectingPoint num="9" id="1264" /> +<TGConnectingPoint num="10" id="1265" /> +<TGConnectingPoint num="11" id="1266" /> +<TGConnectingPoint num="12" id="1267" /> +<TGConnectingPoint num="13" id="1268" /> +<TGConnectingPoint num="14" id="1269" /> +<TGConnectingPoint num="15" id="1270" /> +<TGConnectingPoint num="16" id="1271" /> +<TGConnectingPoint num="17" id="1272" /> +<TGConnectingPoint num="18" id="1273" /> +<TGConnectingPoint num="19" id="1274" /> +<TGConnectingPoint num="20" id="1275" /> +<TGConnectingPoint num="21" id="1276" /> +<TGConnectingPoint num="22" id="1277" /> +<TGConnectingPoint num="23" id="1278" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1304" > +<cdparam x="446" y="277" /> +<sizeparam width="168" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Starting with remote control" /> +<TGConnectingPoint num="0" id="1280" /> +<TGConnectingPoint num="1" id="1281" /> +<TGConnectingPoint num="2" id="1282" /> +<TGConnectingPoint num="3" id="1283" /> +<TGConnectingPoint num="4" id="1284" /> +<TGConnectingPoint num="5" id="1285" /> +<TGConnectingPoint num="6" id="1286" /> +<TGConnectingPoint num="7" id="1287" /> +<TGConnectingPoint num="8" id="1288" /> +<TGConnectingPoint num="9" id="1289" /> +<TGConnectingPoint num="10" id="1290" /> +<TGConnectingPoint num="11" id="1291" /> +<TGConnectingPoint num="12" id="1292" /> +<TGConnectingPoint num="13" id="1293" /> +<TGConnectingPoint num="14" id="1294" /> +<TGConnectingPoint num="15" id="1295" /> +<TGConnectingPoint num="16" id="1296" /> +<TGConnectingPoint num="17" id="1297" /> +<TGConnectingPoint num="18" id="1298" /> +<TGConnectingPoint num="19" id="1299" /> +<TGConnectingPoint num="20" id="1300" /> +<TGConnectingPoint num="21" id="1301" /> +<TGConnectingPoint num="22" id="1302" /> +<TGConnectingPoint num="23" id="1303" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1329" > +<cdparam x="306" y="278" /> +<sizeparam width="121" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Starting with button" /> +<TGConnectingPoint num="0" id="1305" /> +<TGConnectingPoint num="1" id="1306" /> +<TGConnectingPoint num="2" id="1307" /> +<TGConnectingPoint num="3" id="1308" /> +<TGConnectingPoint num="4" id="1309" /> +<TGConnectingPoint num="5" id="1310" /> +<TGConnectingPoint num="6" id="1311" /> +<TGConnectingPoint num="7" id="1312" /> +<TGConnectingPoint num="8" id="1313" /> +<TGConnectingPoint num="9" id="1314" /> +<TGConnectingPoint num="10" id="1315" /> +<TGConnectingPoint num="11" id="1316" /> +<TGConnectingPoint num="12" id="1317" /> +<TGConnectingPoint num="13" id="1318" /> +<TGConnectingPoint num="14" id="1319" /> +<TGConnectingPoint num="15" id="1320" /> +<TGConnectingPoint num="16" id="1321" /> +<TGConnectingPoint num="17" id="1322" /> +<TGConnectingPoint num="18" id="1323" /> +<TGConnectingPoint num="19" id="1324" /> +<TGConnectingPoint num="20" id="1325" /> +<TGConnectingPoint num="21" id="1326" /> +<TGConnectingPoint num="22" id="1327" /> +<TGConnectingPoint num="23" id="1328" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1354" > +<cdparam x="384" y="182" /> +<sizeparam width="113" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Starting heating" /> +<TGConnectingPoint num="0" id="1330" /> +<TGConnectingPoint num="1" id="1331" /> +<TGConnectingPoint num="2" id="1332" /> +<TGConnectingPoint num="3" id="1333" /> +<TGConnectingPoint num="4" id="1334" /> +<TGConnectingPoint num="5" id="1335" /> +<TGConnectingPoint num="6" id="1336" /> +<TGConnectingPoint num="7" id="1337" /> +<TGConnectingPoint num="8" id="1338" /> +<TGConnectingPoint num="9" id="1339" /> +<TGConnectingPoint num="10" id="1340" /> +<TGConnectingPoint num="11" id="1341" /> +<TGConnectingPoint num="12" id="1342" /> +<TGConnectingPoint num="13" id="1343" /> +<TGConnectingPoint num="14" id="1344" /> +<TGConnectingPoint num="15" id="1345" /> +<TGConnectingPoint num="16" id="1346" /> +<TGConnectingPoint num="17" id="1347" /> +<TGConnectingPoint num="18" id="1348" /> +<TGConnectingPoint num="19" id="1349" /> +<TGConnectingPoint num="20" id="1350" /> +<TGConnectingPoint num="21" id="1351" /> +<TGConnectingPoint num="22" id="1352" /> +<TGConnectingPoint num="23" id="1353" /> +<extraparam> +<info extension="Duration selection" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1379" > +<cdparam x="413" y="89" /> +<sizeparam width="54" height="40" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Heating" /> +<TGConnectingPoint num="0" id="1355" /> +<TGConnectingPoint num="1" id="1356" /> +<TGConnectingPoint num="2" id="1357" /> +<TGConnectingPoint num="3" id="1358" /> +<TGConnectingPoint num="4" id="1359" /> +<TGConnectingPoint num="5" id="1360" /> +<TGConnectingPoint num="6" id="1361" /> +<TGConnectingPoint num="7" id="1362" /> +<TGConnectingPoint num="8" id="1363" /> +<TGConnectingPoint num="9" id="1364" /> +<TGConnectingPoint num="10" id="1365" /> +<TGConnectingPoint num="11" id="1366" /> +<TGConnectingPoint num="12" id="1367" /> +<TGConnectingPoint num="13" id="1368" /> +<TGConnectingPoint num="14" id="1369" /> +<TGConnectingPoint num="15" id="1370" /> +<TGConnectingPoint num="16" id="1371" /> +<TGConnectingPoint num="17" id="1372" /> +<TGConnectingPoint num="18" id="1373" /> +<TGConnectingPoint num="19" id="1374" /> +<TGConnectingPoint num="20" id="1375" /> +<TGConnectingPoint num="21" id="1376" /> +<TGConnectingPoint num="22" id="1377" /> +<TGConnectingPoint num="23" id="1378" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="703" id="1412" > +<cdparam x="677" y="236" /> +<sizeparam width="207" height="50" minWidth="40" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Wireless interface of the microwave" /> +<TGConnectingPoint num="0" id="1380" /> +<TGConnectingPoint num="1" id="1381" /> +<TGConnectingPoint num="2" id="1382" /> +<TGConnectingPoint num="3" id="1383" /> +<TGConnectingPoint num="4" id="1384" /> +<TGConnectingPoint num="5" id="1385" /> +<TGConnectingPoint num="6" id="1386" /> +<TGConnectingPoint num="7" id="1387" /> +<TGConnectingPoint num="8" id="1388" /> +<TGConnectingPoint num="9" id="1389" /> +<TGConnectingPoint num="10" id="1390" /> +<TGConnectingPoint num="11" id="1391" /> +<TGConnectingPoint num="12" id="1392" /> +<TGConnectingPoint num="13" id="1393" /> +<TGConnectingPoint num="14" id="1394" /> +<TGConnectingPoint num="15" id="1395" /> +<TGConnectingPoint num="16" id="1396" /> +<TGConnectingPoint num="17" id="1397" /> +<TGConnectingPoint num="18" id="1398" /> +<TGConnectingPoint num="19" id="1399" /> +<TGConnectingPoint num="20" id="1400" /> +<TGConnectingPoint num="21" id="1401" /> +<TGConnectingPoint num="22" id="1402" /> +<TGConnectingPoint num="23" id="1403" /> +<TGConnectingPoint num="24" id="1404" /> +<TGConnectingPoint num="25" id="1405" /> +<TGConnectingPoint num="26" id="1406" /> +<TGConnectingPoint num="27" id="1407" /> +<TGConnectingPoint num="28" id="1408" /> +<TGConnectingPoint num="29" id="1409" /> +<TGConnectingPoint num="30" id="1410" /> +<TGConnectingPoint num="31" id="1411" /> +</COMPONENT> + +<COMPONENT type="702" id="1421" > +<cdparam x="277" y="61" /> +<sizeparam width="363" height="268" minWidth="100" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Software of the MicroWave Oven and of its remote control" /> +<TGConnectingPoint num="0" id="1413" /> +<TGConnectingPoint num="1" id="1414" /> +<TGConnectingPoint num="2" id="1415" /> +<TGConnectingPoint num="3" id="1416" /> +<TGConnectingPoint num="4" id="1417" /> +<TGConnectingPoint num="5" id="1418" /> +<TGConnectingPoint num="6" id="1419" /> +<TGConnectingPoint num="7" id="1420" /> +</COMPONENT> + +<CONNECTOR type="111" id="1422" > +<cdparam x="481" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="467" y="109" id="1361" /> +<P2 x="563" y="126" id="1255" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1423" > +<cdparam x="511" y="202" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="497" y="202" id="1332" /> +<P2 x="563" y="166" id="1258" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1424" > +<cdparam x="481" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="413" y="109" id="1360" /> +<P2 x="260" y="109" id="1074" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1425" > +<cdparam x="249" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="236" y="196" id="1107" /> +<P2 x="284" y="196" id="1132" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1426" > +<cdparam x="427" y="119" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="413" y="109" id="1356" /> +<P2 x="322" y="176" id="1131" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1427" > +<cdparam x="701" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="677" y="336" id="1158" /> +<P2 x="614" y="297" id="1286" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1428" > +<cdparam x="384" y="318" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="366" y="318" id="1308" /> +<P2 x="366" y="351" id="1194" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1429" > +<cdparam x="689" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="677" y="261" id="1382" /> +<P2 x="614" y="297" id="1282" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1430" > +<cdparam x="694" y="149" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="676" y="158" id="1224" /> +<P2 x="622" y="146" id="1257" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1431" > +<cdparam x="560" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="530" y="277" id="1280" /> +<P2 x="440" y="222" id="1337" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="1432" > +<cdparam x="384" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="366" y="278" id="1305" /> +<P2 x="440" y="222" id="1333" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1433" > +<cdparam x="443" y="142" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="440" y="129" id="1358" /> +<P2 x="440" y="182" id="1330" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +</Modeling> + + + + +<Modeling type="Avatar Analysis" nameTab="Analysis_MainActivity" > +<AvatarADPanel name="MainActivity" minX="10" maxX="1400" minY="10" maxY="900" zoom="1.0" > +<CONNECTOR type="5500" id="1438" > +<cdparam x="199" y="756" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="199" y="756" id="1470" /> +<P2 x="371" y="136" id="1758" /> +<Point x="199" y="776" /> +<Point x="42" y="776" /> +<Point x="42" y="116" /> +<Point x="371" y="116" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1434" > +<father id="1438" num="0" /> +<cdparam x="199" y="776" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1435" > +<father id="1438" num="1" /> +<cdparam x="42" y="776" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1436" > +<father id="1438" num="2" /> +<cdparam x="42" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1437" > +<father id="1438" num="3" /> +<cdparam x="371" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1439" > +<cdparam x="199" y="683" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="199" y="683" id="1511" /> +<P2 x="199" y="706" id="1465" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1442" > +<cdparam x="159" y="643" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="159" y="643" id="1509" /> +<P2 x="279" y="355" id="1645" /> +<Point x="76" y="643" /> +<Point x="76" y="355" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1440" > +<father id="1442" num="0" /> +<cdparam x="76" y="643" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1441" > +<father id="1442" num="1" /> +<cdparam x="76" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1443" > +<cdparam x="199" y="587" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="199" y="587" id="1519" /> +<P2 x="199" y="618" id="1508" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1444" > +<cdparam x="254" y="478" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="254" y="478" id="1599" /> +<P2 x="199" y="537" id="1514" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1448" > +<cdparam x="467" y="586" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="467" y="586" id="1560" /> +<P2 x="309" y="355" id="1650" /> +<Point x="467" y="606" /> +<Point x="587" y="606" /> +<Point x="587" y="355" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1445" > +<father id="1448" num="0" /> +<cdparam x="467" y="606" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1446" > +<father id="1448" num="1" /> +<cdparam x="587" y="606" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1447" > +<father id="1448" num="2" /> +<cdparam x="587" y="355" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1449" > +<cdparam x="334" y="478" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="334" y="478" id="1600" /> +<P2 x="467" y="536" id="1555" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1450" > +<cdparam x="294" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="294" y="432" id="1609" /> +<P2 x="294" y="453" id="1598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1451" > +<cdparam x="294" y="370" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="294" y="370" id="1647" /> +<P2 x="294" y="382" id="1604" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1452" > +<cdparam x="386" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="296" id="1714" /> +<P2 x="309" y="355" id="1646" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1453" > +<cdparam x="212" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="212" y="294" id="1786" /> +<P2 x="294" y="340" id="1644" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1458" > +<cdparam x="618" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="618" y="294" id="1673" /> +<P2 x="401" y="136" id="1759" /> +<Point x="618" y="314" /> +<Point x="748" y="314" /> +<Point x="748" y="116" /> +<Point x="401" y="116" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1454" > +<father id="1458" num="0" /> +<cdparam x="618" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1455" > +<father id="1458" num="1" /> +<cdparam x="748" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1456" > +<father id="1458" num="2" /> +<cdparam x="748" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1457" > +<father id="1458" num="3" /> +<cdparam x="401" y="116" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5500" id="1459" > +<cdparam x="426" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="426" y="188" id="1754" /> +<P2 x="618" y="244" id="1668" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1460" > +<cdparam x="386" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="228" id="1755" /> +<P2 x="386" y="246" id="1709" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1461" > +<cdparam x="346" y="188" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="346" y="188" id="1753" /> +<P2 x="212" y="244" id="1781" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1462" > +<cdparam x="386" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="151" id="1760" /> +<P2 x="386" y="163" id="1752" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="5500" id="1463" > +<cdparam x="390" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<P1 x="386" y="95" id="1821" /> +<P2 x="386" y="121" id="1757" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="5507" id="1504" > +<cdparam x="149" y="706" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="RingBell" /> +<TGConnectingPoint num="0" id="1464" /> +<TGConnectingPoint num="1" id="1465" /> +<TGConnectingPoint num="2" id="1466" /> +<TGConnectingPoint num="3" id="1467" /> +<TGConnectingPoint num="4" id="1468" /> +<TGConnectingPoint num="5" id="1469" /> +<TGConnectingPoint num="6" id="1470" /> +<TGConnectingPoint num="7" id="1471" /> +<TGConnectingPoint num="8" id="1472" /> +<TGConnectingPoint num="9" id="1473" /> +<TGConnectingPoint num="10" id="1474" /> +<TGConnectingPoint num="11" id="1475" /> +<TGConnectingPoint num="12" id="1476" /> +<TGConnectingPoint num="13" id="1477" /> +<TGConnectingPoint num="14" id="1478" /> +<TGConnectingPoint num="15" id="1479" /> +<TGConnectingPoint num="16" id="1480" /> +<TGConnectingPoint num="17" id="1481" /> +<TGConnectingPoint num="18" id="1482" /> +<TGConnectingPoint num="19" id="1483" /> +<TGConnectingPoint num="20" id="1484" /> +<TGConnectingPoint num="21" id="1485" /> +<TGConnectingPoint num="22" id="1486" /> +<TGConnectingPoint num="23" id="1487" /> +<TGConnectingPoint num="24" id="1488" /> +<TGConnectingPoint num="25" id="1489" /> +<TGConnectingPoint num="26" id="1490" /> +<TGConnectingPoint num="27" id="1491" /> +<TGConnectingPoint num="28" id="1492" /> +<TGConnectingPoint num="29" id="1493" /> +<TGConnectingPoint num="30" id="1494" /> +<TGConnectingPoint num="31" id="1495" /> +<TGConnectingPoint num="32" id="1496" /> +<TGConnectingPoint num="33" id="1497" /> +<TGConnectingPoint num="34" id="1498" /> +<TGConnectingPoint num="35" id="1499" /> +<TGConnectingPoint num="36" id="1500" /> +<TGConnectingPoint num="37" id="1501" /> +<TGConnectingPoint num="38" id="1502" /> +<TGConnectingPoint num="39" id="1503" /> +</COMPONENT> + +<COMPONENT type="5503" id="1512" > +<cdparam x="184" y="628" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1508" /> +<TGConnectingPoint num="1" id="1509" /> +<TGConnectingPoint num="2" id="1510" /> +<TGConnectingPoint num="3" id="1511" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1505" > +<father id="1512" num="0" /> +<cdparam x="127" y="638" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1506" > +<father id="1512" num="1" /> +<cdparam x="219" y="638" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1507" > +<father id="1512" num="2" /> +<cdparam x="222" y="673" /> +<sizeparam width="135" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ cookingTimeElapsed ]" /> +</SUBCOMPONENT> + +<COMPONENT type="5507" id="1553" > +<cdparam x="100" y="537" /> +<sizeparam width="198" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="UpdatingCookingTime" /> +<TGConnectingPoint num="0" id="1513" /> +<TGConnectingPoint num="1" id="1514" /> +<TGConnectingPoint num="2" id="1515" /> +<TGConnectingPoint num="3" id="1516" /> +<TGConnectingPoint num="4" id="1517" /> +<TGConnectingPoint num="5" id="1518" /> +<TGConnectingPoint num="6" id="1519" /> +<TGConnectingPoint num="7" id="1520" /> +<TGConnectingPoint num="8" id="1521" /> +<TGConnectingPoint num="9" id="1522" /> +<TGConnectingPoint num="10" id="1523" /> +<TGConnectingPoint num="11" id="1524" /> +<TGConnectingPoint num="12" id="1525" /> +<TGConnectingPoint num="13" id="1526" /> +<TGConnectingPoint num="14" id="1527" /> +<TGConnectingPoint num="15" id="1528" /> +<TGConnectingPoint num="16" id="1529" /> +<TGConnectingPoint num="17" id="1530" /> +<TGConnectingPoint num="18" id="1531" /> +<TGConnectingPoint num="19" id="1532" /> +<TGConnectingPoint num="20" id="1533" /> +<TGConnectingPoint num="21" id="1534" /> +<TGConnectingPoint num="22" id="1535" /> +<TGConnectingPoint num="23" id="1536" /> +<TGConnectingPoint num="24" id="1537" /> +<TGConnectingPoint num="25" id="1538" /> +<TGConnectingPoint num="26" id="1539" /> +<TGConnectingPoint num="27" id="1540" /> +<TGConnectingPoint num="28" id="1541" /> +<TGConnectingPoint num="29" id="1542" /> +<TGConnectingPoint num="30" id="1543" /> +<TGConnectingPoint num="31" id="1544" /> +<TGConnectingPoint num="32" id="1545" /> +<TGConnectingPoint num="33" id="1546" /> +<TGConnectingPoint num="34" id="1547" /> +<TGConnectingPoint num="35" id="1548" /> +<TGConnectingPoint num="36" id="1549" /> +<TGConnectingPoint num="37" id="1550" /> +<TGConnectingPoint num="38" id="1551" /> +<TGConnectingPoint num="39" id="1552" /> +</COMPONENT> + +<COMPONENT type="5507" id="1594" > +<cdparam x="366" y="536" /> +<sizeparam width="203" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="DoorOpenedWhileIdle" /> +<TGConnectingPoint num="0" id="1554" /> +<TGConnectingPoint num="1" id="1555" /> +<TGConnectingPoint num="2" id="1556" /> +<TGConnectingPoint num="3" id="1557" /> +<TGConnectingPoint num="4" id="1558" /> +<TGConnectingPoint num="5" id="1559" /> +<TGConnectingPoint num="6" id="1560" /> +<TGConnectingPoint num="7" id="1561" /> +<TGConnectingPoint num="8" id="1562" /> +<TGConnectingPoint num="9" id="1563" /> +<TGConnectingPoint num="10" id="1564" /> +<TGConnectingPoint num="11" id="1565" /> +<TGConnectingPoint num="12" id="1566" /> +<TGConnectingPoint num="13" id="1567" /> +<TGConnectingPoint num="14" id="1568" /> +<TGConnectingPoint num="15" id="1569" /> +<TGConnectingPoint num="16" id="1570" /> +<TGConnectingPoint num="17" id="1571" /> +<TGConnectingPoint num="18" id="1572" /> +<TGConnectingPoint num="19" id="1573" /> +<TGConnectingPoint num="20" id="1574" /> +<TGConnectingPoint num="21" id="1575" /> +<TGConnectingPoint num="22" id="1576" /> +<TGConnectingPoint num="23" id="1577" /> +<TGConnectingPoint num="24" id="1578" /> +<TGConnectingPoint num="25" id="1579" /> +<TGConnectingPoint num="26" id="1580" /> +<TGConnectingPoint num="27" id="1581" /> +<TGConnectingPoint num="28" id="1582" /> +<TGConnectingPoint num="29" id="1583" /> +<TGConnectingPoint num="30" id="1584" /> +<TGConnectingPoint num="31" id="1585" /> +<TGConnectingPoint num="32" id="1586" /> +<TGConnectingPoint num="33" id="1587" /> +<TGConnectingPoint num="34" id="1588" /> +<TGConnectingPoint num="35" id="1589" /> +<TGConnectingPoint num="36" id="1590" /> +<TGConnectingPoint num="37" id="1591" /> +<TGConnectingPoint num="38" id="1592" /> +<TGConnectingPoint num="39" id="1593" /> +</COMPONENT> + +<COMPONENT type="5503" id="1602" > +<cdparam x="279" y="463" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1598" /> +<TGConnectingPoint num="1" id="1599" /> +<TGConnectingPoint num="2" id="1600" /> +<TGConnectingPoint num="3" id="1601" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1595" > +<father id="1602" num="0" /> +<cdparam x="254" y="473" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1596" > +<father id="1602" num="1" /> +<cdparam x="314" y="473" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1597" > +<father id="1602" num="2" /> +<cdparam x="299" y="508" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="5507" id="1643" > +<cdparam x="244" y="382" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="Cooking" /> +<TGConnectingPoint num="0" id="1603" /> +<TGConnectingPoint num="1" id="1604" /> +<TGConnectingPoint num="2" id="1605" /> +<TGConnectingPoint num="3" id="1606" /> +<TGConnectingPoint num="4" id="1607" /> +<TGConnectingPoint num="5" id="1608" /> +<TGConnectingPoint num="6" id="1609" /> +<TGConnectingPoint num="7" id="1610" /> +<TGConnectingPoint num="8" id="1611" /> +<TGConnectingPoint num="9" id="1612" /> +<TGConnectingPoint num="10" id="1613" /> +<TGConnectingPoint num="11" id="1614" /> +<TGConnectingPoint num="12" id="1615" /> +<TGConnectingPoint num="13" id="1616" /> +<TGConnectingPoint num="14" id="1617" /> +<TGConnectingPoint num="15" id="1618" /> +<TGConnectingPoint num="16" id="1619" /> +<TGConnectingPoint num="17" id="1620" /> +<TGConnectingPoint num="18" id="1621" /> +<TGConnectingPoint num="19" id="1622" /> +<TGConnectingPoint num="20" id="1623" /> +<TGConnectingPoint num="21" id="1624" /> +<TGConnectingPoint num="22" id="1625" /> +<TGConnectingPoint num="23" id="1626" /> +<TGConnectingPoint num="24" id="1627" /> +<TGConnectingPoint num="25" id="1628" /> +<TGConnectingPoint num="26" id="1629" /> +<TGConnectingPoint num="27" id="1630" /> +<TGConnectingPoint num="28" id="1631" /> +<TGConnectingPoint num="29" id="1632" /> +<TGConnectingPoint num="30" id="1633" /> +<TGConnectingPoint num="31" id="1634" /> +<TGConnectingPoint num="32" id="1635" /> +<TGConnectingPoint num="33" id="1636" /> +<TGConnectingPoint num="34" id="1637" /> +<TGConnectingPoint num="35" id="1638" /> +<TGConnectingPoint num="36" id="1639" /> +<TGConnectingPoint num="37" id="1640" /> +<TGConnectingPoint num="38" id="1641" /> +<TGConnectingPoint num="39" id="1642" /> +</COMPONENT> + +<COMPONENT type="5504" id="1666" > +<cdparam x="279" y="340" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1644" /> +<TGConnectingPoint num="1" id="1645" /> +<TGConnectingPoint num="2" id="1646" /> +<TGConnectingPoint num="3" id="1647" /> +<TGConnectingPoint num="4" id="1648" /> +<TGConnectingPoint num="5" id="1649" /> +<TGConnectingPoint num="6" id="1650" /> +<TGConnectingPoint num="7" id="1651" /> +<TGConnectingPoint num="8" id="1652" /> +<TGConnectingPoint num="9" id="1653" /> +<TGConnectingPoint num="10" id="1654" /> +<TGConnectingPoint num="11" id="1655" /> +<TGConnectingPoint num="12" id="1656" /> +<TGConnectingPoint num="13" id="1657" /> +<TGConnectingPoint num="14" id="1658" /> +<TGConnectingPoint num="15" id="1659" /> +<TGConnectingPoint num="16" id="1660" /> +<TGConnectingPoint num="17" id="1661" /> +<TGConnectingPoint num="18" id="1662" /> +<TGConnectingPoint num="19" id="1663" /> +<TGConnectingPoint num="20" id="1664" /> +<TGConnectingPoint num="21" id="1665" /> +</COMPONENT> + +<COMPONENT type="5507" id="1707" > +<cdparam x="516" y="244" /> +<sizeparam width="205" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="DoorOpenedWhileIdle" /> +<TGConnectingPoint num="0" id="1667" /> +<TGConnectingPoint num="1" id="1668" /> +<TGConnectingPoint num="2" id="1669" /> +<TGConnectingPoint num="3" id="1670" /> +<TGConnectingPoint num="4" id="1671" /> +<TGConnectingPoint num="5" id="1672" /> +<TGConnectingPoint num="6" id="1673" /> +<TGConnectingPoint num="7" id="1674" /> +<TGConnectingPoint num="8" id="1675" /> +<TGConnectingPoint num="9" id="1676" /> +<TGConnectingPoint num="10" id="1677" /> +<TGConnectingPoint num="11" id="1678" /> +<TGConnectingPoint num="12" id="1679" /> +<TGConnectingPoint num="13" id="1680" /> +<TGConnectingPoint num="14" id="1681" /> +<TGConnectingPoint num="15" id="1682" /> +<TGConnectingPoint num="16" id="1683" /> +<TGConnectingPoint num="17" id="1684" /> +<TGConnectingPoint num="18" id="1685" /> +<TGConnectingPoint num="19" id="1686" /> +<TGConnectingPoint num="20" id="1687" /> +<TGConnectingPoint num="21" id="1688" /> +<TGConnectingPoint num="22" id="1689" /> +<TGConnectingPoint num="23" id="1690" /> +<TGConnectingPoint num="24" id="1691" /> +<TGConnectingPoint num="25" id="1692" /> +<TGConnectingPoint num="26" id="1693" /> +<TGConnectingPoint num="27" id="1694" /> +<TGConnectingPoint num="28" id="1695" /> +<TGConnectingPoint num="29" id="1696" /> +<TGConnectingPoint num="30" id="1697" /> +<TGConnectingPoint num="31" id="1698" /> +<TGConnectingPoint num="32" id="1699" /> +<TGConnectingPoint num="33" id="1700" /> +<TGConnectingPoint num="34" id="1701" /> +<TGConnectingPoint num="35" id="1702" /> +<TGConnectingPoint num="36" id="1703" /> +<TGConnectingPoint num="37" id="1704" /> +<TGConnectingPoint num="38" id="1705" /> +<TGConnectingPoint num="39" id="1706" /> +</COMPONENT> + +<COMPONENT type="5507" id="1748" > +<cdparam x="330" y="246" /> +<sizeparam width="112" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="LocalStart" /> +<TGConnectingPoint num="0" id="1708" /> +<TGConnectingPoint num="1" id="1709" /> +<TGConnectingPoint num="2" id="1710" /> +<TGConnectingPoint num="3" id="1711" /> +<TGConnectingPoint num="4" id="1712" /> +<TGConnectingPoint num="5" id="1713" /> +<TGConnectingPoint num="6" id="1714" /> +<TGConnectingPoint num="7" id="1715" /> +<TGConnectingPoint num="8" id="1716" /> +<TGConnectingPoint num="9" id="1717" /> +<TGConnectingPoint num="10" id="1718" /> +<TGConnectingPoint num="11" id="1719" /> +<TGConnectingPoint num="12" id="1720" /> +<TGConnectingPoint num="13" id="1721" /> +<TGConnectingPoint num="14" id="1722" /> +<TGConnectingPoint num="15" id="1723" /> +<TGConnectingPoint num="16" id="1724" /> +<TGConnectingPoint num="17" id="1725" /> +<TGConnectingPoint num="18" id="1726" /> +<TGConnectingPoint num="19" id="1727" /> +<TGConnectingPoint num="20" id="1728" /> +<TGConnectingPoint num="21" id="1729" /> +<TGConnectingPoint num="22" id="1730" /> +<TGConnectingPoint num="23" id="1731" /> +<TGConnectingPoint num="24" id="1732" /> +<TGConnectingPoint num="25" id="1733" /> +<TGConnectingPoint num="26" id="1734" /> +<TGConnectingPoint num="27" id="1735" /> +<TGConnectingPoint num="28" id="1736" /> +<TGConnectingPoint num="29" id="1737" /> +<TGConnectingPoint num="30" id="1738" /> +<TGConnectingPoint num="31" id="1739" /> +<TGConnectingPoint num="32" id="1740" /> +<TGConnectingPoint num="33" id="1741" /> +<TGConnectingPoint num="34" id="1742" /> +<TGConnectingPoint num="35" id="1743" /> +<TGConnectingPoint num="36" id="1744" /> +<TGConnectingPoint num="37" id="1745" /> +<TGConnectingPoint num="38" id="1746" /> +<TGConnectingPoint num="39" id="1747" /> +</COMPONENT> + +<COMPONENT type="5503" id="1756" > +<cdparam x="371" y="173" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1752" /> +<TGConnectingPoint num="1" id="1753" /> +<TGConnectingPoint num="2" id="1754" /> +<TGConnectingPoint num="3" id="1755" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1749" > +<father id="1756" num="0" /> +<cdparam x="346" y="183" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1750" > +<father id="1756" num="1" /> +<cdparam x="406" y="183" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1751" > +<father id="1756" num="2" /> +<cdparam x="391" y="218" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="5504" id="1779" > +<cdparam x="371" y="121" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1757" /> +<TGConnectingPoint num="1" id="1758" /> +<TGConnectingPoint num="2" id="1759" /> +<TGConnectingPoint num="3" id="1760" /> +<TGConnectingPoint num="4" id="1761" /> +<TGConnectingPoint num="5" id="1762" /> +<TGConnectingPoint num="6" id="1763" /> +<TGConnectingPoint num="7" id="1764" /> +<TGConnectingPoint num="8" id="1765" /> +<TGConnectingPoint num="9" id="1766" /> +<TGConnectingPoint num="10" id="1767" /> +<TGConnectingPoint num="11" id="1768" /> +<TGConnectingPoint num="12" id="1769" /> +<TGConnectingPoint num="13" id="1770" /> +<TGConnectingPoint num="14" id="1771" /> +<TGConnectingPoint num="15" id="1772" /> +<TGConnectingPoint num="16" id="1773" /> +<TGConnectingPoint num="17" id="1774" /> +<TGConnectingPoint num="18" id="1775" /> +<TGConnectingPoint num="19" id="1776" /> +<TGConnectingPoint num="20" id="1777" /> +<TGConnectingPoint num="21" id="1778" /> +</COMPONENT> + +<COMPONENT type="5507" id="1820" > +<cdparam x="151" y="244" /> +<sizeparam width="123" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="activity0" value="RemoteStart" /> +<TGConnectingPoint num="0" id="1780" /> +<TGConnectingPoint num="1" id="1781" /> +<TGConnectingPoint num="2" id="1782" /> +<TGConnectingPoint num="3" id="1783" /> +<TGConnectingPoint num="4" id="1784" /> +<TGConnectingPoint num="5" id="1785" /> +<TGConnectingPoint num="6" id="1786" /> +<TGConnectingPoint num="7" id="1787" /> +<TGConnectingPoint num="8" id="1788" /> +<TGConnectingPoint num="9" id="1789" /> +<TGConnectingPoint num="10" id="1790" /> +<TGConnectingPoint num="11" id="1791" /> +<TGConnectingPoint num="12" id="1792" /> +<TGConnectingPoint num="13" id="1793" /> +<TGConnectingPoint num="14" id="1794" /> +<TGConnectingPoint num="15" id="1795" /> +<TGConnectingPoint num="16" id="1796" /> +<TGConnectingPoint num="17" id="1797" /> +<TGConnectingPoint num="18" id="1798" /> +<TGConnectingPoint num="19" id="1799" /> +<TGConnectingPoint num="20" id="1800" /> +<TGConnectingPoint num="21" id="1801" /> +<TGConnectingPoint num="22" id="1802" /> +<TGConnectingPoint num="23" id="1803" /> +<TGConnectingPoint num="24" id="1804" /> +<TGConnectingPoint num="25" id="1805" /> +<TGConnectingPoint num="26" id="1806" /> +<TGConnectingPoint num="27" id="1807" /> +<TGConnectingPoint num="28" id="1808" /> +<TGConnectingPoint num="29" id="1809" /> +<TGConnectingPoint num="30" id="1810" /> +<TGConnectingPoint num="31" id="1811" /> +<TGConnectingPoint num="32" id="1812" /> +<TGConnectingPoint num="33" id="1813" /> +<TGConnectingPoint num="34" id="1814" /> +<TGConnectingPoint num="35" id="1815" /> +<TGConnectingPoint num="36" id="1816" /> +<TGConnectingPoint num="37" id="1817" /> +<TGConnectingPoint num="38" id="1818" /> +<TGConnectingPoint num="39" id="1819" /> +</COMPONENT> + +<COMPONENT type="5501" id="1822" > +<cdparam x="379" y="75" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1821" /> +</COMPONENT> + + +</AvatarADPanel> + +<SequenceDiagramPanel name="OpenDoorDuringHeating" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="606" id="1850" > +<cdparam x="751" y="119" /> +<sizeparam width="10" height="287" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="MagnetronActuator" value="MagnetronActuator" /> +<TGConnectingPoint num="0" id="1823" /> +<TGConnectingPoint num="1" id="1824" /> +<TGConnectingPoint num="2" id="1825" /> +<TGConnectingPoint num="3" id="1826" /> +<TGConnectingPoint num="4" id="1827" /> +<TGConnectingPoint num="5" id="1828" /> +<TGConnectingPoint num="6" id="1829" /> +<TGConnectingPoint num="7" id="1830" /> +<TGConnectingPoint num="8" id="1831" /> +<TGConnectingPoint num="9" id="1832" /> +<TGConnectingPoint num="10" id="1833" /> +<TGConnectingPoint num="11" id="1834" /> +<TGConnectingPoint num="12" id="1835" /> +<TGConnectingPoint num="13" id="1836" /> +<TGConnectingPoint num="14" id="1837" /> +<TGConnectingPoint num="15" id="1838" /> +<TGConnectingPoint num="16" id="1839" /> +<TGConnectingPoint num="17" id="1840" /> +<TGConnectingPoint num="18" id="1841" /> +<TGConnectingPoint num="19" id="1842" /> +<TGConnectingPoint num="20" id="1843" /> +<TGConnectingPoint num="21" id="1844" /> +<TGConnectingPoint num="22" id="1845" /> +<TGConnectingPoint num="23" id="1846" /> +<TGConnectingPoint num="24" id="1847" /> +<TGConnectingPoint num="25" id="1848" /> +<TGConnectingPoint num="26" id="1849" /> +<extraparam> +<Actor data="true" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="606" id="1896" > +<cdparam x="613" y="119" /> +<sizeparam width="10" height="285" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="MagnetronDriver" value="MagnetronDriver" /> +<TGConnectingPoint num="0" id="1869" /> +<TGConnectingPoint num="1" id="1870" /> +<TGConnectingPoint num="2" id="1871" /> +<TGConnectingPoint num="3" id="1872" /> +<TGConnectingPoint num="4" id="1873" /> +<TGConnectingPoint num="5" id="1874" /> +<TGConnectingPoint num="6" id="1875" /> +<TGConnectingPoint num="7" id="1876" /> +<TGConnectingPoint num="8" id="1877" /> +<TGConnectingPoint num="9" id="1878" /> +<TGConnectingPoint num="10" id="1879" /> +<TGConnectingPoint num="11" id="1880" /> +<TGConnectingPoint num="12" id="1881" /> +<TGConnectingPoint num="13" id="1882" /> +<TGConnectingPoint num="14" id="1883" /> +<TGConnectingPoint num="15" id="1884" /> +<TGConnectingPoint num="16" id="1885" /> +<TGConnectingPoint num="17" id="1886" /> +<TGConnectingPoint num="18" id="1887" /> +<TGConnectingPoint num="19" id="1888" /> +<TGConnectingPoint num="20" id="1889" /> +<TGConnectingPoint num="21" id="1890" /> +<TGConnectingPoint num="22" id="1891" /> +<TGConnectingPoint num="23" id="1892" /> +<TGConnectingPoint num="24" id="1893" /> +<TGConnectingPoint num="25" id="1894" /> +<TGConnectingPoint num="26" id="1895" /> +<extraparam> +<Actor data="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="609" id="1859" > +<father id="1896" num="0" /> +<cdparam x="618" y="299" /> +<sizeparam width="32" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="255" /> +<infoparam name="action state" value="end" /> +<TGConnectingPoint num="0" id="1851" /> +<TGConnectingPoint num="1" id="1852" /> +<TGConnectingPoint num="2" id="1853" /> +<TGConnectingPoint num="3" id="1854" /> +<TGConnectingPoint num="4" id="1855" /> +<TGConnectingPoint num="5" id="1856" /> +<TGConnectingPoint num="6" id="1857" /> +<TGConnectingPoint num="7" id="1858" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="609" id="1868" > +<father id="1896" num="1" /> +<cdparam x="618" y="235" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="255" /> +<infoparam name="action state" value="magnetronIsOn" /> +<TGConnectingPoint num="0" id="1860" /> +<TGConnectingPoint num="1" id="1861" /> +<TGConnectingPoint num="2" id="1862" /> +<TGConnectingPoint num="3" id="1863" /> +<TGConnectingPoint num="4" id="1864" /> +<TGConnectingPoint num="5" id="1865" /> +<TGConnectingPoint num="6" id="1866" /> +<TGConnectingPoint num="7" id="1867" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1924" > +<cdparam x="347" y="119" /> +<sizeparam width="10" height="285" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="DoorDriver" value="DoorDriver" /> +<TGConnectingPoint num="0" id="1897" /> +<TGConnectingPoint num="1" id="1898" /> +<TGConnectingPoint num="2" id="1899" /> +<TGConnectingPoint num="3" id="1900" /> +<TGConnectingPoint num="4" id="1901" /> +<TGConnectingPoint num="5" id="1902" /> +<TGConnectingPoint num="6" id="1903" /> +<TGConnectingPoint num="7" id="1904" /> +<TGConnectingPoint num="8" id="1905" /> +<TGConnectingPoint num="9" id="1906" /> +<TGConnectingPoint num="10" id="1907" /> +<TGConnectingPoint num="11" id="1908" /> +<TGConnectingPoint num="12" id="1909" /> +<TGConnectingPoint num="13" id="1910" /> +<TGConnectingPoint num="14" id="1911" /> +<TGConnectingPoint num="15" id="1912" /> +<TGConnectingPoint num="16" id="1913" /> +<TGConnectingPoint num="17" id="1914" /> +<TGConnectingPoint num="18" id="1915" /> +<TGConnectingPoint num="19" id="1916" /> +<TGConnectingPoint num="20" id="1917" /> +<TGConnectingPoint num="21" id="1918" /> +<TGConnectingPoint num="22" id="1919" /> +<TGConnectingPoint num="23" id="1920" /> +<TGConnectingPoint num="24" id="1921" /> +<TGConnectingPoint num="25" id="1922" /> +<TGConnectingPoint num="26" id="1923" /> +<extraparam> +<Actor data="false" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="606" id="1961" > +<cdparam x="482" y="119" /> +<sizeparam width="10" height="284" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="MainController" value="Controller" /> +<TGConnectingPoint num="0" id="1934" /> +<TGConnectingPoint num="1" id="1935" /> +<TGConnectingPoint num="2" id="1936" /> +<TGConnectingPoint num="3" id="1937" /> +<TGConnectingPoint num="4" id="1938" /> +<TGConnectingPoint num="5" id="1939" /> +<TGConnectingPoint num="6" id="1940" /> +<TGConnectingPoint num="7" id="1941" /> +<TGConnectingPoint num="8" id="1942" /> +<TGConnectingPoint num="9" id="1943" /> +<TGConnectingPoint num="10" id="1944" /> +<TGConnectingPoint num="11" id="1945" /> +<TGConnectingPoint num="12" id="1946" /> +<TGConnectingPoint num="13" id="1947" /> +<TGConnectingPoint num="14" id="1948" /> +<TGConnectingPoint num="15" id="1949" /> +<TGConnectingPoint num="16" id="1950" /> +<TGConnectingPoint num="17" id="1951" /> +<TGConnectingPoint num="18" id="1952" /> +<TGConnectingPoint num="19" id="1953" /> +<TGConnectingPoint num="20" id="1954" /> +<TGConnectingPoint num="21" id="1955" /> +<TGConnectingPoint num="22" id="1956" /> +<TGConnectingPoint num="23" id="1957" /> +<TGConnectingPoint num="24" id="1958" /> +<TGConnectingPoint num="25" id="1959" /> +<TGConnectingPoint num="26" id="1960" /> +<extraparam> +<Actor data="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="602" id="1933" > +<father id="1961" num="0" /> +<cdparam x="487" y="277" /> +<sizeparam width="169" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="254" /> +<infoparam name="action state" value="saveRemainingHeatingTime" /> +<TGConnectingPoint num="0" id="1925" /> +<TGConnectingPoint num="1" id="1926" /> +<TGConnectingPoint num="2" id="1927" /> +<TGConnectingPoint num="3" id="1928" /> +<TGConnectingPoint num="4" id="1929" /> +<TGConnectingPoint num="5" id="1930" /> +<TGConnectingPoint num="6" id="1931" /> +<TGConnectingPoint num="7" id="1932" /> +</SUBCOMPONENT> + +<COMPONENT type="606" id="1990" > +<cdparam x="221" y="119" /> +<sizeparam width="10" height="292" minWidth="10" minHeight="250" maxWidth="10" maxHeight="1500" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="DoorSensor" value="DoorSensor" /> +<TGConnectingPoint num="0" id="1962" /> +<TGConnectingPoint num="1" id="1963" /> +<TGConnectingPoint num="2" id="1964" /> +<TGConnectingPoint num="3" id="1965" /> +<TGConnectingPoint num="4" id="1966" /> +<TGConnectingPoint num="5" id="1967" /> +<TGConnectingPoint num="6" id="1968" /> +<TGConnectingPoint num="7" id="1969" /> +<TGConnectingPoint num="8" id="1970" /> +<TGConnectingPoint num="9" id="1971" /> +<TGConnectingPoint num="10" id="1972" /> +<TGConnectingPoint num="11" id="1973" /> +<TGConnectingPoint num="12" id="1974" /> +<TGConnectingPoint num="13" id="1975" /> +<TGConnectingPoint num="14" id="1976" /> +<TGConnectingPoint num="15" id="1977" /> +<TGConnectingPoint num="16" id="1978" /> +<TGConnectingPoint num="17" id="1979" /> +<TGConnectingPoint num="18" id="1980" /> +<TGConnectingPoint num="19" id="1981" /> +<TGConnectingPoint num="20" id="1982" /> +<TGConnectingPoint num="21" id="1983" /> +<TGConnectingPoint num="22" id="1984" /> +<TGConnectingPoint num="23" id="1985" /> +<TGConnectingPoint num="24" id="1986" /> +<TGConnectingPoint num="25" id="1987" /> +<TGConnectingPoint num="26" id="1988" /> +<TGConnectingPoint num="27" id="1989" /> +<extraparam> +<Actor data="true" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="106" id="1991" > +<cdparam x="352" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="doorClose()" /> +<P1 x="352" y="359" id="1920" /> +<P2 x="487" y="359" id="1957" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1992" > +<cdparam x="226" y="329" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="close()" /> +<P1 x="226" y="329" id="1982" /> +<P2 x="352" y="329" id="1917" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1993" > +<cdparam x="702" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="turnOff()" /> +<P1 x="618" y="279" id="1884" /> +<P2 x="756" y="279" id="1838" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1994" > +<cdparam x="527" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="stopMagnetron()" /> +<P1 x="487" y="209" id="1942" /> +<P2 x="618" y="209" id="1877" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1995" > +<cdparam x="352" y="179" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="doorOpened()" /> +<P1 x="352" y="179" id="1902" /> +<P2 x="487" y="179" id="1939" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="106" id="1996" > +<cdparam x="202" y="149" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="open()" /> +<P1 x="226" y="149" id="1964" /> +<P2 x="352" y="149" id="1899" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +</Modeling> + + + + +<Modeling type="AttackTree" nameTab="Attack Trees" > +<AttackTreeDiagramPanel name="Microwave Flashing" minX="10" maxX="1400" minY="10" maxY="1400" zoom="1.0" > +<CONNECTOR type="133" id="2002" > +<cdparam x="182" y="647" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="1999" /> +<TGConnectingPoint num="1" id="2000" /> +<TGConnectingPoint num="2" id="2001" /> +<P1 x="405" y="290" id="2439" /> +<P2 x="621" y="229" id="2135" /> +<Point x="575" y="290" /> +<Point x="575" y="228" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1997" > +<father id="2002" num="0" /> +<cdparam x="575" y="290" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1998" > +<father id="2002" num="1" /> +<cdparam x="575" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2008" > +<cdparam x="767" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2005" /> +<TGConnectingPoint num="1" id="2006" /> +<TGConnectingPoint num="2" id="2007" /> +<P1 x="746" y="209" id="2134" /> +<P2 x="864" y="242" id="2348" /> +<Point x="832" y="209" /> +<Point x="832" y="241" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2003" > +<father id="2008" num="0" /> +<cdparam x="832" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2004" > +<father id="2008" num="1" /> +<cdparam x="832" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2014" > +<cdparam x="870" y="301" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2011" /> +<TGConnectingPoint num="1" id="2012" /> +<TGConnectingPoint num="2" id="2013" /> +<P1 x="836" y="301" id="2335" /> +<P2 x="746" y="229" id="2136" /> +<Point x="802" y="301" /> +<Point x="802" y="229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2009" > +<father id="2014" num="0" /> +<cdparam x="802" y="301" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2010" > +<father id="2014" num="1" /> +<cdparam x="802" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2022" > +<cdparam x="524" y="599" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2018" /> +<TGConnectingPoint num="1" id="2019" /> +<TGConnectingPoint num="2" id="2020" /> +<TGConnectingPoint num="3" id="2021" /> +<P1 x="559" y="549" id="2233" /> +<P2 x="652" y="239" id="2137" /> +<Point x="609" y="549" /> +<Point x="609" y="283" /> +<Point x="652" y="283" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2015" > +<father id="2022" num="0" /> +<cdparam x="609" y="549" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2016" > +<father id="2022" num="1" /> +<cdparam x="609" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2017" > +<father id="2022" num="2" /> +<cdparam x="652" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2024" > +<cdparam x="701" y="358" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2023" /> +<P1 x="713" y="322" id="2101" /> +<P2 x="714" y="239" id="2138" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2026" > +<cdparam x="319" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="2" /> +<TGConnectingPoint num="0" id="2025" /> +<P1 x="405" y="342" id="2426" /> +<P2 x="651" y="342" id="2102" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2030" > +<cdparam x="498" y="228" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2028" /> +<TGConnectingPoint num="1" id="2029" /> +<P1 x="492" y="225" id="2088" /> +<P2 x="287" y="189" id="2452" /> +<Point x="492" y="189" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2027" > +<father id="2030" num="0" /> +<cdparam x="492" y="189" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2032" > +<cdparam x="257" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="1" /> +<TGConnectingPoint num="0" id="2031" /> +<P1 x="295" y="245" id="2413" /> +<P2 x="430" y="245" id="2089" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2034" > +<cdparam x="476" y="520" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="2" /> +<TGConnectingPoint num="0" id="2033" /> +<P1 x="493" y="474" id="2244" /> +<P2 x="492" y="265" id="2091" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2040" > +<cdparam x="259" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2037" /> +<TGConnectingPoint num="1" id="2038" /> +<TGConnectingPoint num="2" id="2039" /> +<P1 x="287" y="145" id="2472" /> +<P2 x="621" y="209" id="2133" /> +<Point x="505" y="145" /> +<Point x="505" y="209" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2035" > +<father id="2040" num="0" /> +<cdparam x="505" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2036" > +<father id="2040" num="1" /> +<cdparam x="505" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2042" > +<cdparam x="569" y="124" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2041" /> +<P1 x="569" y="124" id="2120" /> +<P2 x="287" y="125" id="2470" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2044" > +<cdparam x="867" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="2" /> +<TGConnectingPoint num="0" id="2043" /> +<P1 x="784" y="123" id="2374" /> +<P2 x="694" y="124" id="2121" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2050" > +<cdparam x="868" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="1" /> +<TGConnectingPoint num="0" id="2047" /> +<TGConnectingPoint num="1" id="2048" /> +<TGConnectingPoint num="2" id="2049" /> +<P1 x="834" y="183" id="2361" /> +<P2 x="694" y="144" id="2123" /> +<Point x="753" y="183" /> +<Point x="753" y="144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2045" > +<father id="2050" num="0" /> +<cdparam x="753" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2046" > +<father id="2050" num="1" /> +<cdparam x="753" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2054" > +<cdparam x="553" y="575" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="1" /> +<TGConnectingPoint num="0" id="2052" /> +<TGConnectingPoint num="1" id="2053" /> +<P1 x="532" y="598" id="2207" /> +<P2 x="713" y="362" id="2104" /> +<Point x="712" y="598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2051" > +<father id="2054" num="0" /> +<cdparam x="712" y="598" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2058" > +<cdparam x="179" y="657" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2056" /> +<TGConnectingPoint num="1" id="2057" /> +<P1 x="228" y="310" id="2440" /> +<P2 x="270" y="598" id="2206" /> +<Point x="228" y="598" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2055" > +<father id="2058" num="0" /> +<cdparam x="228" y="598" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2062" > +<cdparam x="356" y="697" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2060" /> +<TGConnectingPoint num="1" id="2061" /> +<P1 x="515" y="703" id="2194" /> +<P2 x="906" y="500" id="2298" /> +<Point x="906" y="703" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2059" > +<father id="2062" num="0" /> +<cdparam x="906" y="703" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2066" > +<cdparam x="1217" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2064" /> +<TGConnectingPoint num="1" id="2065" /> +<P1 x="1253" y="400" id="2140" /> +<P2 x="1157" y="368" id="2323" /> +<Point x="1253" y="367" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2063" > +<father id="2066" num="0" /> +<cdparam x="1253" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2068" > +<cdparam x="996" y="395" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2067" /> +<P1 x="1056" y="420" id="2310" /> +<P2 x="1191" y="420" id="2141" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2072" > +<cdparam x="1023" y="726" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2070" /> +<TGConnectingPoint num="1" id="2071" /> +<P1 x="1140" y="480" id="2284" /> +<P2 x="1253" y="440" id="2143" /> +<Point x="1253" y="480" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2069" > +<father id="2072" num="0" /> +<cdparam x="1253" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="133" id="2074" > +<cdparam x="413" y="928" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2073" /> +<P1 x="496" y="810" id="2166" /> +<P2 x="427" y="787" id="2164" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2076" > +<cdparam x="219" y="930" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2075" /> +<P1 x="346" y="807" id="2179" /> +<P2 x="365" y="787" id="2163" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="133" id="2078" > +<cdparam x="285" y="843" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="" /> +<TGConnectingPoint num="0" id="2077" /> +<P1 x="396" y="747" id="2153" /> +<P2 x="404" y="723" id="2195" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="301" id="2087" > +<cdparam x="425" y="10" /> +<sizeparam width="341" height="65" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="Attacks on the flashing process of the microwave +We assume the flashing can be done remotely (Internet) +or by a maintenance station +" /> +<TGConnectingPoint num="0" id="2079" /> +<TGConnectingPoint num="1" id="2080" /> +<TGConnectingPoint num="2" id="2081" /> +<TGConnectingPoint num="3" id="2082" /> +<TGConnectingPoint num="4" id="2083" /> +<TGConnectingPoint num="5" id="2084" /> +<TGConnectingPoint num="6" id="2085" /> +<TGConnectingPoint num="7" id="2086" /> +<extraparam> +<Line value="Attacks on the flashing process of the microwave" /> +<Line value="We assume the flashing can be done remotely (Internet)" /> +<Line value="or by a maintenance station" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2100" > +<cdparam x="430" y="225" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<SEQUENCE>>" /> +<TGConnectingPoint num="0" id="2088" /> +<TGConnectingPoint num="1" id="2089" /> +<TGConnectingPoint num="2" id="2090" /> +<TGConnectingPoint num="3" id="2091" /> +<TGConnectingPoint num="4" id="2092" /> +<TGConnectingPoint num="5" id="2093" /> +<TGConnectingPoint num="6" id="2094" /> +<TGConnectingPoint num="7" id="2095" /> +<TGConnectingPoint num="8" id="2096" /> +<TGConnectingPoint num="9" id="2097" /> +<TGConnectingPoint num="10" id="2098" /> +<TGConnectingPoint num="11" id="2099" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2113" > +<cdparam x="651" y="322" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<SEQUENCE>>" /> +<TGConnectingPoint num="0" id="2101" /> +<TGConnectingPoint num="1" id="2102" /> +<TGConnectingPoint num="2" id="2103" /> +<TGConnectingPoint num="3" id="2104" /> +<TGConnectingPoint num="4" id="2105" /> +<TGConnectingPoint num="5" id="2106" /> +<TGConnectingPoint num="6" id="2107" /> +<TGConnectingPoint num="7" id="2108" /> +<TGConnectingPoint num="8" id="2109" /> +<TGConnectingPoint num="9" id="2110" /> +<TGConnectingPoint num="10" id="2111" /> +<TGConnectingPoint num="11" id="2112" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2126" > +<cdparam x="569" y="114" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<SEQUENCE>>" /> +<TGConnectingPoint num="0" id="2114" /> +<TGConnectingPoint num="1" id="2115" /> +<TGConnectingPoint num="2" id="2116" /> +<TGConnectingPoint num="3" id="2117" /> +<TGConnectingPoint num="4" id="2118" /> +<TGConnectingPoint num="5" id="2119" /> +<TGConnectingPoint num="6" id="2120" /> +<TGConnectingPoint num="7" id="2121" /> +<TGConnectingPoint num="8" id="2122" /> +<TGConnectingPoint num="9" id="2123" /> +<TGConnectingPoint num="10" id="2124" /> +<TGConnectingPoint num="11" id="2125" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2139" > +<cdparam x="621" y="199" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<OR>>" /> +<TGConnectingPoint num="0" id="2127" /> +<TGConnectingPoint num="1" id="2128" /> +<TGConnectingPoint num="2" id="2129" /> +<TGConnectingPoint num="3" id="2130" /> +<TGConnectingPoint num="4" id="2131" /> +<TGConnectingPoint num="5" id="2132" /> +<TGConnectingPoint num="6" id="2133" /> +<TGConnectingPoint num="7" id="2134" /> +<TGConnectingPoint num="8" id="2135" /> +<TGConnectingPoint num="9" id="2136" /> +<TGConnectingPoint num="10" id="2137" /> +<TGConnectingPoint num="11" id="2138" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2152" > +<cdparam x="1191" y="400" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<OR>>" /> +<TGConnectingPoint num="0" id="2140" /> +<TGConnectingPoint num="1" id="2141" /> +<TGConnectingPoint num="2" id="2142" /> +<TGConnectingPoint num="3" id="2143" /> +<TGConnectingPoint num="4" id="2144" /> +<TGConnectingPoint num="5" id="2145" /> +<TGConnectingPoint num="6" id="2146" /> +<TGConnectingPoint num="7" id="2147" /> +<TGConnectingPoint num="8" id="2148" /> +<TGConnectingPoint num="9" id="2149" /> +<TGConnectingPoint num="10" id="2150" /> +<TGConnectingPoint num="11" id="2151" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1402" id="2165" > +<cdparam x="334" y="747" /> +<sizeparam width="125" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="TGComponent" value="<<OR>>" /> +<TGConnectingPoint num="0" id="2153" /> +<TGConnectingPoint num="1" id="2154" /> +<TGConnectingPoint num="2" id="2155" /> +<TGConnectingPoint num="3" id="2156" /> +<TGConnectingPoint num="4" id="2157" /> +<TGConnectingPoint num="5" id="2158" /> +<TGConnectingPoint num="6" id="2159" /> +<TGConnectingPoint num="7" id="2160" /> +<TGConnectingPoint num="8" id="2161" /> +<TGConnectingPoint num="9" id="2162" /> +<TGConnectingPoint num="10" id="2163" /> +<TGConnectingPoint num="11" id="2164" /> +<extraparam> +<info equation="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1400" id="2281" > +<cdparam x="245" y="436" /> +<sizeparam width="328" height="429" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block2" value="InOvenCommunication" /> +<TGConnectingPoint num="0" id="2257" /> +<TGConnectingPoint num="1" id="2258" /> +<TGConnectingPoint num="2" id="2259" /> +<TGConnectingPoint num="3" id="2260" /> +<TGConnectingPoint num="4" id="2261" /> +<TGConnectingPoint num="5" id="2262" /> +<TGConnectingPoint num="6" id="2263" /> +<TGConnectingPoint num="7" id="2264" /> +<TGConnectingPoint num="8" id="2265" /> +<TGConnectingPoint num="9" id="2266" /> +<TGConnectingPoint num="10" id="2267" /> +<TGConnectingPoint num="11" id="2268" /> +<TGConnectingPoint num="12" id="2269" /> +<TGConnectingPoint num="13" id="2270" /> +<TGConnectingPoint num="14" id="2271" /> +<TGConnectingPoint num="15" id="2272" /> +<TGConnectingPoint num="16" id="2273" /> +<TGConnectingPoint num="17" id="2274" /> +<TGConnectingPoint num="18" id="2275" /> +<TGConnectingPoint num="19" id="2276" /> +<TGConnectingPoint num="20" id="2277" /> +<TGConnectingPoint num="21" id="2278" /> +<TGConnectingPoint num="22" id="2279" /> +<TGConnectingPoint num="23" id="2280" /> +</COMPONENT> +<SUBCOMPONENT type="1401" id="2178" > +<father id="2281" num="0" /> +<cdparam x="446" y="810" /> +<sizeparam width="100" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="228" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="BusProbing" /> +<TGConnectingPoint num="0" id="2166" /> +<TGConnectingPoint num="1" id="2167" /> +<TGConnectingPoint num="2" id="2168" /> +<TGConnectingPoint num="3" id="2169" /> +<TGConnectingPoint num="4" id="2170" /> +<TGConnectingPoint num="5" id="2171" /> +<TGConnectingPoint num="6" id="2172" /> +<TGConnectingPoint num="7" id="2173" /> +<TGConnectingPoint num="8" id="2174" /> +<TGConnectingPoint num="9" id="2175" /> +<TGConnectingPoint num="10" id="2176" /> +<TGConnectingPoint num="11" id="2177" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2191" > +<father id="2281" num="1" /> +<cdparam x="256" y="807" /> +<sizeparam width="181" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="147" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="HijackingTheRemoteSession" /> +<TGConnectingPoint num="0" id="2179" /> +<TGConnectingPoint num="1" id="2180" /> +<TGConnectingPoint num="2" id="2181" /> +<TGConnectingPoint num="3" id="2182" /> +<TGConnectingPoint num="4" id="2183" /> +<TGConnectingPoint num="5" id="2184" /> +<TGConnectingPoint num="6" id="2185" /> +<TGConnectingPoint num="7" id="2186" /> +<TGConnectingPoint num="8" id="2187" /> +<TGConnectingPoint num="9" id="2188" /> +<TGConnectingPoint num="10" id="2189" /> +<TGConnectingPoint num="11" id="2190" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2204" > +<father id="2281" num="2" /> +<cdparam x="293" y="683" /> +<sizeparam width="222" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="106" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="RemoteControlProtocolVulnerability" /> +<TGConnectingPoint num="0" id="2192" /> +<TGConnectingPoint num="1" id="2193" /> +<TGConnectingPoint num="2" id="2194" /> +<TGConnectingPoint num="3" id="2195" /> +<TGConnectingPoint num="4" id="2196" /> +<TGConnectingPoint num="5" id="2197" /> +<TGConnectingPoint num="6" id="2198" /> +<TGConnectingPoint num="7" id="2199" /> +<TGConnectingPoint num="8" id="2200" /> +<TGConnectingPoint num="9" id="2201" /> +<TGConnectingPoint num="10" id="2202" /> +<TGConnectingPoint num="11" id="2203" /> +<extraparam> +<info description="Exploit vulnerability or implementation error" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2217" > +<father id="2281" num="3" /> +<cdparam x="270" y="578" /> +<sizeparam width="262" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="66" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="ExploitVulnerabilityOrImplementationError" /> +<TGConnectingPoint num="0" id="2205" /> +<TGConnectingPoint num="1" id="2206" /> +<TGConnectingPoint num="2" id="2207" /> +<TGConnectingPoint num="3" id="2208" /> +<TGConnectingPoint num="4" id="2209" /> +<TGConnectingPoint num="5" id="2210" /> +<TGConnectingPoint num="6" id="2211" /> +<TGConnectingPoint num="7" id="2212" /> +<TGConnectingPoint num="8" id="2213" /> +<TGConnectingPoint num="9" id="2214" /> +<TGConnectingPoint num="10" id="2215" /> +<TGConnectingPoint num="11" id="2216" /> +<extraparam> +<info description="HU-CCU" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2230" > +<father id="2281" num="4" /> +<cdparam x="310" y="633" /> +<sizeparam width="151" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="177" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="ManInTheMiddleAttack" /> +<TGConnectingPoint num="0" id="2218" /> +<TGConnectingPoint num="1" id="2219" /> +<TGConnectingPoint num="2" id="2220" /> +<TGConnectingPoint num="3" id="2221" /> +<TGConnectingPoint num="4" id="2222" /> +<TGConnectingPoint num="5" id="2223" /> +<TGConnectingPoint num="6" id="2224" /> +<TGConnectingPoint num="7" id="2225" /> +<TGConnectingPoint num="8" id="2226" /> +<TGConnectingPoint num="9" id="2227" /> +<TGConnectingPoint num="10" id="2228" /> +<TGConnectingPoint num="11" id="2229" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2243" > +<father id="2281" num="5" /> +<cdparam x="269" y="529" /> +<sizeparam width="290" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="38" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="AttackerInjectWrongFirmwareOnTheDomainBus" /> +<TGConnectingPoint num="0" id="2231" /> +<TGConnectingPoint num="1" id="2232" /> +<TGConnectingPoint num="2" id="2233" /> +<TGConnectingPoint num="3" id="2234" /> +<TGConnectingPoint num="4" id="2235" /> +<TGConnectingPoint num="5" id="2236" /> +<TGConnectingPoint num="6" id="2237" /> +<TGConnectingPoint num="7" id="2238" /> +<TGConnectingPoint num="8" id="2239" /> +<TGConnectingPoint num="9" id="2240" /> +<TGConnectingPoint num="10" id="2241" /> +<TGConnectingPoint num="11" id="2242" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2256" > +<father id="2281" num="6" /> +<cdparam x="416" y="474" /> +<sizeparam width="155" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="173" minY="0" maxY="389" /> +<infoparam name="TGComponent" value="CorruptOrFakeMessage" /> +<TGConnectingPoint num="0" id="2244" /> +<TGConnectingPoint num="1" id="2245" /> +<TGConnectingPoint num="2" id="2246" /> +<TGConnectingPoint num="3" id="2247" /> +<TGConnectingPoint num="4" id="2248" /> +<TGConnectingPoint num="5" id="2249" /> +<TGConnectingPoint num="6" id="2250" /> +<TGConnectingPoint num="7" id="2251" /> +<TGConnectingPoint num="8" id="2252" /> +<TGConnectingPoint num="9" id="2253" /> +<TGConnectingPoint num="10" id="2254" /> +<TGConnectingPoint num="11" id="2255" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1400" id="2410" > +<cdparam x="784" y="56" /> +<sizeparam width="376" height="465" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block1" value="Microcontroller" /> +<TGConnectingPoint num="0" id="2386" /> +<TGConnectingPoint num="1" id="2387" /> +<TGConnectingPoint num="2" id="2388" /> +<TGConnectingPoint num="3" id="2389" /> +<TGConnectingPoint num="4" id="2390" /> +<TGConnectingPoint num="5" id="2391" /> +<TGConnectingPoint num="6" id="2392" /> +<TGConnectingPoint num="7" id="2393" /> +<TGConnectingPoint num="8" id="2394" /> +<TGConnectingPoint num="9" id="2395" /> +<TGConnectingPoint num="10" id="2396" /> +<TGConnectingPoint num="11" id="2397" /> +<TGConnectingPoint num="12" id="2398" /> +<TGConnectingPoint num="13" id="2399" /> +<TGConnectingPoint num="14" id="2400" /> +<TGConnectingPoint num="15" id="2401" /> +<TGConnectingPoint num="16" id="2402" /> +<TGConnectingPoint num="17" id="2403" /> +<TGConnectingPoint num="18" id="2404" /> +<TGConnectingPoint num="19" id="2405" /> +<TGConnectingPoint num="20" id="2406" /> +<TGConnectingPoint num="21" id="2407" /> +<TGConnectingPoint num="22" id="2408" /> +<TGConnectingPoint num="23" id="2409" /> +</COMPONENT> +<SUBCOMPONENT type="1401" id="2294" > +<father id="2410" num="0" /> +<cdparam x="989" y="460" /> +<sizeparam width="151" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="225" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="InjectBogusKeysInOven" /> +<TGConnectingPoint num="0" id="2282" /> +<TGConnectingPoint num="1" id="2283" /> +<TGConnectingPoint num="2" id="2284" /> +<TGConnectingPoint num="3" id="2285" /> +<TGConnectingPoint num="4" id="2286" /> +<TGConnectingPoint num="5" id="2287" /> +<TGConnectingPoint num="6" id="2288" /> +<TGConnectingPoint num="7" id="2289" /> +<TGConnectingPoint num="8" id="2290" /> +<TGConnectingPoint num="9" id="2291" /> +<TGConnectingPoint num="10" id="2292" /> +<TGConnectingPoint num="11" id="2293" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2307" > +<father id="2410" num="1" /> +<cdparam x="830" y="460" /> +<sizeparam width="153" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="223" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="FlashYourOwnFirmware" /> +<TGConnectingPoint num="0" id="2295" /> +<TGConnectingPoint num="1" id="2296" /> +<TGConnectingPoint num="2" id="2297" /> +<TGConnectingPoint num="3" id="2298" /> +<TGConnectingPoint num="4" id="2299" /> +<TGConnectingPoint num="5" id="2300" /> +<TGConnectingPoint num="6" id="2301" /> +<TGConnectingPoint num="7" id="2302" /> +<TGConnectingPoint num="8" id="2303" /> +<TGConnectingPoint num="9" id="2304" /> +<TGConnectingPoint num="10" id="2305" /> +<TGConnectingPoint num="11" id="2306" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2320" > +<father id="2410" num="2" /> +<cdparam x="836" y="400" /> +<sizeparam width="220" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="156" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="FaultyORNoFirmwareAuthentication" /> +<TGConnectingPoint num="0" id="2308" /> +<TGConnectingPoint num="1" id="2309" /> +<TGConnectingPoint num="2" id="2310" /> +<TGConnectingPoint num="3" id="2311" /> +<TGConnectingPoint num="4" id="2312" /> +<TGConnectingPoint num="5" id="2313" /> +<TGConnectingPoint num="6" id="2314" /> +<TGConnectingPoint num="7" id="2315" /> +<TGConnectingPoint num="8" id="2316" /> +<TGConnectingPoint num="9" id="2317" /> +<TGConnectingPoint num="10" id="2318" /> +<TGConnectingPoint num="11" id="2319" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2333" > +<father id="2410" num="3" /> +<cdparam x="802" y="348" /> +<sizeparam width="355" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="21" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="MaintenanceInstalledModifiedFirmwareToWirelessInterface" /> +<TGConnectingPoint num="0" id="2321" /> +<TGConnectingPoint num="1" id="2322" /> +<TGConnectingPoint num="2" id="2323" /> +<TGConnectingPoint num="3" id="2324" /> +<TGConnectingPoint num="4" id="2325" /> +<TGConnectingPoint num="5" id="2326" /> +<TGConnectingPoint num="6" id="2327" /> +<TGConnectingPoint num="7" id="2328" /> +<TGConnectingPoint num="8" id="2329" /> +<TGConnectingPoint num="9" id="2330" /> +<TGConnectingPoint num="10" id="2331" /> +<TGConnectingPoint num="11" id="2332" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2346" > +<father id="2410" num="4" /> +<cdparam x="836" y="281" /> +<sizeparam width="251" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="125" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="InfectedWirelessInterfaceNotResponding" /> +<TGConnectingPoint num="0" id="2334" /> +<TGConnectingPoint num="1" id="2335" /> +<TGConnectingPoint num="2" id="2336" /> +<TGConnectingPoint num="3" id="2337" /> +<TGConnectingPoint num="4" id="2338" /> +<TGConnectingPoint num="5" id="2339" /> +<TGConnectingPoint num="6" id="2340" /> +<TGConnectingPoint num="7" id="2341" /> +<TGConnectingPoint num="8" id="2342" /> +<TGConnectingPoint num="9" id="2343" /> +<TGConnectingPoint num="10" id="2344" /> +<TGConnectingPoint num="11" id="2345" /> +<extraparam> +<info description="Denial of service" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2359" > +<father id="2410" num="5" /> +<cdparam x="864" y="222" /> +<sizeparam width="155" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="221" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="AbortFlashingOperation" /> +<TGConnectingPoint num="0" id="2347" /> +<TGConnectingPoint num="1" id="2348" /> +<TGConnectingPoint num="2" id="2349" /> +<TGConnectingPoint num="3" id="2350" /> +<TGConnectingPoint num="4" id="2351" /> +<TGConnectingPoint num="5" id="2352" /> +<TGConnectingPoint num="6" id="2353" /> +<TGConnectingPoint num="7" id="2354" /> +<TGConnectingPoint num="8" id="2355" /> +<TGConnectingPoint num="9" id="2356" /> +<TGConnectingPoint num="10" id="2357" /> +<TGConnectingPoint num="11" id="2358" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2372" > +<father id="2410" num="6" /> +<cdparam x="834" y="163" /> +<sizeparam width="269" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="107" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="ExploitVulnerabilitesOrImplementationError" /> +<TGConnectingPoint num="0" id="2360" /> +<TGConnectingPoint num="1" id="2361" /> +<TGConnectingPoint num="2" id="2362" /> +<TGConnectingPoint num="3" id="2363" /> +<TGConnectingPoint num="4" id="2364" /> +<TGConnectingPoint num="5" id="2365" /> +<TGConnectingPoint num="6" id="2366" /> +<TGConnectingPoint num="7" id="2367" /> +<TGConnectingPoint num="8" id="2368" /> +<TGConnectingPoint num="9" id="2369" /> +<TGConnectingPoint num="10" id="2370" /> +<TGConnectingPoint num="11" id="2371" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2385" > +<father id="2410" num="7" /> +<cdparam x="784" y="103" /> +<sizeparam width="376" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="0" minY="0" maxY="425" /> +<infoparam name="TGComponent" value="InfectedControllerSendsTooManyMessagesToWirelessInterface" /> +<TGConnectingPoint num="0" id="2373" /> +<TGConnectingPoint num="1" id="2374" /> +<TGConnectingPoint num="2" id="2375" /> +<TGConnectingPoint num="3" id="2376" /> +<TGConnectingPoint num="4" id="2377" /> +<TGConnectingPoint num="5" id="2378" /> +<TGConnectingPoint num="6" id="2379" /> +<TGConnectingPoint num="7" id="2380" /> +<TGConnectingPoint num="8" id="2381" /> +<TGConnectingPoint num="9" id="2382" /> +<TGConnectingPoint num="10" id="2383" /> +<TGConnectingPoint num="11" id="2384" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1400" id="2500" > +<cdparam x="51" y="60" /> +<sizeparam width="354" height="313" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="OvenWirelessCommunicationUnit" /> +<TGConnectingPoint num="0" id="2476" /> +<TGConnectingPoint num="1" id="2477" /> +<TGConnectingPoint num="2" id="2478" /> +<TGConnectingPoint num="3" id="2479" /> +<TGConnectingPoint num="4" id="2480" /> +<TGConnectingPoint num="5" id="2481" /> +<TGConnectingPoint num="6" id="2482" /> +<TGConnectingPoint num="7" id="2483" /> +<TGConnectingPoint num="8" id="2484" /> +<TGConnectingPoint num="9" id="2485" /> +<TGConnectingPoint num="10" id="2486" /> +<TGConnectingPoint num="11" id="2487" /> +<TGConnectingPoint num="12" id="2488" /> +<TGConnectingPoint num="13" id="2489" /> +<TGConnectingPoint num="14" id="2490" /> +<TGConnectingPoint num="15" id="2491" /> +<TGConnectingPoint num="16" id="2492" /> +<TGConnectingPoint num="17" id="2493" /> +<TGConnectingPoint num="18" id="2494" /> +<TGConnectingPoint num="19" id="2495" /> +<TGConnectingPoint num="20" id="2496" /> +<TGConnectingPoint num="21" id="2497" /> +<TGConnectingPoint num="22" id="2498" /> +<TGConnectingPoint num="23" id="2499" /> +</COMPONENT> +<SUBCOMPONENT type="1401" id="2423" > +<father id="2500" num="0" /> +<cdparam x="99" y="225" /> +<sizeparam width="196" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="158" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="ExploitVulnerabilitiesInFlashing" /> +<TGConnectingPoint num="0" id="2411" /> +<TGConnectingPoint num="1" id="2412" /> +<TGConnectingPoint num="2" id="2413" /> +<TGConnectingPoint num="3" id="2414" /> +<TGConnectingPoint num="4" id="2415" /> +<TGConnectingPoint num="5" id="2416" /> +<TGConnectingPoint num="6" id="2417" /> +<TGConnectingPoint num="7" id="2418" /> +<TGConnectingPoint num="8" id="2419" /> +<TGConnectingPoint num="9" id="2420" /> +<TGConnectingPoint num="10" id="2421" /> +<TGConnectingPoint num="11" id="2422" /> +<extraparam> +<info description="blah blah blah" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2436" > +<father id="2500" num="1" /> +<cdparam x="77" y="322" /> +<sizeparam width="328" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="26" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="InfectedWirelessInterfaceShuttingDownCommunication" /> +<TGConnectingPoint num="0" id="2424" /> +<TGConnectingPoint num="1" id="2425" /> +<TGConnectingPoint num="2" id="2426" /> +<TGConnectingPoint num="3" id="2427" /> +<TGConnectingPoint num="4" id="2428" /> +<TGConnectingPoint num="5" id="2429" /> +<TGConnectingPoint num="6" id="2430" /> +<TGConnectingPoint num="7" id="2431" /> +<TGConnectingPoint num="8" id="2432" /> +<TGConnectingPoint num="9" id="2433" /> +<TGConnectingPoint num="10" id="2434" /> +<TGConnectingPoint num="11" id="2435" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2449" > +<father id="2500" num="2" /> +<cdparam x="52" y="270" /> +<sizeparam width="353" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="1" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="InfectedWirelessInterfaceReportsBogusMoreRecentVersion" /> +<TGConnectingPoint num="0" id="2437" /> +<TGConnectingPoint num="1" id="2438" /> +<TGConnectingPoint num="2" id="2439" /> +<TGConnectingPoint num="3" id="2440" /> +<TGConnectingPoint num="4" id="2441" /> +<TGConnectingPoint num="5" id="2442" /> +<TGConnectingPoint num="6" id="2443" /> +<TGConnectingPoint num="7" id="2444" /> +<TGConnectingPoint num="8" id="2445" /> +<TGConnectingPoint num="9" id="2446" /> +<TGConnectingPoint num="10" id="2447" /> +<TGConnectingPoint num="11" id="2448" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2462" > +<father id="2500" num="3" /> +<cdparam x="90" y="169" /> +<sizeparam width="197" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="157" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="GainAccessToWirelessInterface" /> +<TGConnectingPoint num="0" id="2450" /> +<TGConnectingPoint num="1" id="2451" /> +<TGConnectingPoint num="2" id="2452" /> +<TGConnectingPoint num="3" id="2453" /> +<TGConnectingPoint num="4" id="2454" /> +<TGConnectingPoint num="5" id="2455" /> +<TGConnectingPoint num="6" id="2456" /> +<TGConnectingPoint num="7" id="2457" /> +<TGConnectingPoint num="8" id="2458" /> +<TGConnectingPoint num="9" id="2459" /> +<TGConnectingPoint num="10" id="2460" /> +<TGConnectingPoint num="11" id="2461" /> +<extraparam> +<info description="" root="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1401" id="2475" > +<father id="2500" num="4" /> +<cdparam x="88" y="115" /> +<sizeparam width="199" height="40" minWidth="100" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<enabled value="true" /> +<cdrectangleparam minX="0" maxX="155" minY="0" maxY="273" /> +<infoparam name="TGComponent" value="OvenTakesTooLongToRespond" /> +<TGConnectingPoint num="0" id="2463" /> +<TGConnectingPoint num="1" id="2464" /> +<TGConnectingPoint num="2" id="2465" /> +<TGConnectingPoint num="3" id="2466" /> +<TGConnectingPoint num="4" id="2467" /> +<TGConnectingPoint num="5" id="2468" /> +<TGConnectingPoint num="6" id="2469" /> +<TGConnectingPoint num="7" id="2470" /> +<TGConnectingPoint num="8" id="2471" /> +<TGConnectingPoint num="9" id="2472" /> +<TGConnectingPoint num="10" id="2473" /> +<TGConnectingPoint num="11" id="2474" /> +<extraparam> +<info description="Denial of Service Attack" root="false" /> +</extraparam> +</SUBCOMPONENT> + + +</AttackTreeDiagramPanel> + +</Modeling> + + + + +<Modeling type="AVATAR Design" nameTab="Design" > +<AVATARBlockDiagramPanel name="AVATAR Block Diagram" minX="10" maxX="1400" minY="10" maxY="1400" > +<MainCode value="#include <sys/types.h>"/> +<MainCode value="#include <sys/socket.h>"/> +<MainCode value="#include <netinet/in.h>"/> +<MainCode value="#include <netdb.h>"/> +<MainCode value="#include <stdio.h>"/> +<MainCode value="#include <strings.h>"/> +<MainCode value="#include <errno.h>"/> +<MainCode value=""/> +<MainCode value="const char* hostname="localhost";"/> +<MainCode value="const char* portname="8374";"/> +<MainCode value="int fd;"/> +<MainCode value="struct addrinfo* res;"/> +<MainCode value=""/> +<MainCode value="void sendDatagram(char * data, int size) {"/> +<MainCode value=" if (sendto(fd,data,size, 0, res->ai_addr,res->ai_addrlen)==-1) {"/> +<MainCode value=" printf("Error when sending datagram");"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value="}"/> +<MainCode value=""/> +<MainCode value="void __user_init() { "/> +<MainCode value=" const char* content = "salut";"/> +<MainCode value=" struct addrinfo hints;"/> +<MainCode value=""/> +<MainCode value=" memset(&hints,0,sizeof(hints));"/> +<MainCode value=" hints.ai_family=AF_UNSPEC;"/> +<MainCode value=" hints.ai_socktype=SOCK_DGRAM;"/> +<MainCode value=" hints.ai_protocol=0;"/> +<MainCode value=" hints.ai_flags=AI_ADDRCONFIG;"/> +<MainCode value=" "/> +<MainCode value=" int err=getaddrinfo(hostname,portname,&hints,&res);"/> +<MainCode value=" if (err!=0) {"/> +<MainCode value=" printf("failed to resolve remote socket address (err=%d)",err);"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value=" fd=socket(res->ai_family,res->ai_socktype,res->ai_protocol);"/> +<MainCode value=" if (fd==-1) {"/> +<MainCode value=" printf("%s",strerror(errno));"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value=" if (sendto(fd,content,sizeof(content),0,"/> +<MainCode value=" res->ai_addr,res->ai_addrlen)==-1) {"/> +<MainCode value=" printf("%s",strerror(errno));"/> +<MainCode value=" exit(-1);"/> +<MainCode value=" }"/> +<MainCode value=""/> +<MainCode value="}"/> +<Optimized value="true" /> +<Validated value="ObserverProp1;RemotelyControlledMicrowave;RemoteControl;MicroWaveOven;Bell;ControlPanel;Controller;Magnetron;Door;WirelessInterface;" /> +<Ignored value="" /> + +<CONNECTOR type="5002" id="2502" > +<cdparam x="712" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2501" /> +<P1 x="664" y="795" id="2661" /> +<P2 x="669" y="837" id="2520" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in obs_open()" /> +<isd value="in obs_closed()" /> +<isd value="in obs_magnetronStart()" /> +<oso value="out obs_open()" /> +<oso value="out obs_closed()" /> +<oso value="out obs_magnetronStart()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2504" > +<cdparam x="286" y="415" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2503" /> +<P1 x="412" y="497" id="2731" /> +<P2 x="115" y="498" id="2756" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in remoteStart(int value)" /> +<oso value="out remoteStart(int value)" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2510" > +<cdparam x="742" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2507" /> +<TGConnectingPoint num="1" id="2508" /> +<TGConnectingPoint num="2" id="2509" /> +<P1 x="331" y="184" id="2779" /> +<P2 x="815" y="184" id="2780" /> +<Point x="332" y="151" /> +<Point x="815" y="151" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in wirelessChannelRead(Message msg)" /> +<osd value="out wirelessChannelWrite(Message msg)" /> +<FIFOType asynchronous="false" size="5" blocking="false" private="false" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR><SUBCOMPONENT type="-1" id="2505" > +<father id="2510" num="0" /> +<cdparam x="332" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2506" > +<father id="2510" num="1" /> +<cdparam x="815" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="5002" id="2512" > +<cdparam x="661" y="322" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2511" /> +<P1 x="418" y="753" id="2658" /> +<P2 x="319" y="752" id="2600" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in ring()" /> +<oso value="out ringBell()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2514" > +<cdparam x="364" y="344" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2513" /> +<P1 x="792" y="767" id="2708" /> +<P2 x="746" y="753" id="2659" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in open()" /> +<isd value="in closed()" /> +<oso value="out open()" /> +<oso value="out closed()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2516" > +<cdparam x="656" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2515" /> +<P1 x="746" y="628" id="2648" /> +<P2 x="777" y="539" id="2674" /> +<AutomaticDrawing data="true" /> +<extraparam> +<isd value="in startM()" /> +<isd value="in stopM()" /> +<oso value="out startMagnetron()" /> +<oso value="out stopMagnetron()" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="2518" > +<cdparam x="336" y="271" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="2517" /> +<P1 x="385" y="598" id="2625" /> +<P2 x="418" y="711" id="2649" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in LEDOn()" /> +<iso value="in LEDoff()" /> +<osd value="out startCooking()" /> +<osd value="out stopCooking()" /> +<isd value="in start(int duration)" /> +<oso value="out startButton(int duration)" /> +<FIFOType asynchronous="false" size="1" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<COMPONENT type="5000" id="2543" > +<cdparam x="557" y="837" /> +<sizeparam width="225" height="131" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="ObserverProp1" /> +<TGConnectingPoint num="0" id="2519" /> +<TGConnectingPoint num="1" id="2520" /> +<TGConnectingPoint num="2" id="2521" /> +<TGConnectingPoint num="3" id="2522" /> +<TGConnectingPoint num="4" id="2523" /> +<TGConnectingPoint num="5" id="2524" /> +<TGConnectingPoint num="6" id="2525" /> +<TGConnectingPoint num="7" id="2526" /> +<TGConnectingPoint num="8" id="2527" /> +<TGConnectingPoint num="9" id="2528" /> +<TGConnectingPoint num="10" id="2529" /> +<TGConnectingPoint num="11" id="2530" /> +<TGConnectingPoint num="12" id="2531" /> +<TGConnectingPoint num="13" id="2532" /> +<TGConnectingPoint num="14" id="2533" /> +<TGConnectingPoint num="15" id="2534" /> +<TGConnectingPoint num="16" id="2535" /> +<TGConnectingPoint num="17" id="2536" /> +<TGConnectingPoint num="18" id="2537" /> +<TGConnectingPoint num="19" id="2538" /> +<TGConnectingPoint num="20" id="2539" /> +<TGConnectingPoint num="21" id="2540" /> +<TGConnectingPoint num="22" id="2541" /> +<TGConnectingPoint num="23" id="2542" /> +<extraparam> +<CryptoBlock value="false" /> +<Signal value="in obs_open()" /> +<Signal value="in obs_closed()" /> +<Signal value="in obs_magnetronStart()" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5003" id="2552" > +<cdparam x="326" y="839" /> +<sizeparam width="203" height="93" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="DataType0" value="Message" /> +<TGConnectingPoint num="0" id="2544" /> +<TGConnectingPoint num="1" id="2545" /> +<TGConnectingPoint num="2" id="2546" /> +<TGConnectingPoint num="3" id="2547" /> +<TGConnectingPoint num="4" id="2548" /> +<TGConnectingPoint num="5" id="2549" /> +<TGConnectingPoint num="6" id="2550" /> +<TGConnectingPoint num="7" id="2551" /> +<extraparam> +<Attribute access="0" id="data" value="" type="8" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5003" id="2561" > +<cdparam x="92" y="837" /> +<sizeparam width="203" height="90" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="DataType0" value="Key" /> +<TGConnectingPoint num="0" id="2553" /> +<TGConnectingPoint num="1" id="2554" /> +<TGConnectingPoint num="2" id="2555" /> +<TGConnectingPoint num="3" id="2556" /> +<TGConnectingPoint num="4" id="2557" /> +<TGConnectingPoint num="5" id="2558" /> +<TGConnectingPoint num="6" id="2559" /> +<TGConnectingPoint num="7" id="2560" /> +<extraparam> +<Attribute access="0" id="data" value="" type="8" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="2570" > +<cdparam x="63" y="22" /> +<sizeparam width="591" height="95" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="UML Note" value="#Confidentiality RemoteControl.duration +#Authenticity RemoteControl.SendingRemoteOrder.msg WirelessInterface.gotDecryptedOrder.msg2 + + +#InitialSystemKnowledge RemoteControl.PSK WirelessInterface.PSK +" /> +<TGConnectingPoint num="0" id="2562" /> +<TGConnectingPoint num="1" id="2563" /> +<TGConnectingPoint num="2" id="2564" /> +<TGConnectingPoint num="3" id="2565" /> +<TGConnectingPoint num="4" id="2566" /> +<TGConnectingPoint num="5" id="2567" /> +<TGConnectingPoint num="6" id="2568" /> +<TGConnectingPoint num="7" id="2569" /> +<extraparam> +<Line value="#Confidentiality RemoteControl.duration" /> +<Line value="#Authenticity RemoteControl.SendingRemoteOrder.msg WirelessInterface.gotDecryptedOrder.msg2" /> +<Line value="" /> +<Line value="" /> +<Line value="#InitialSystemKnowledge RemoteControl.PSK WirelessInterface.PSK" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="2795" > +<cdparam x="90" y="184" /> +<sizeparam width="967" height="631" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Block0" value="RemotelyControlledMicrowave" /> +<TGConnectingPoint num="0" id="2771" /> +<TGConnectingPoint num="1" id="2772" /> +<TGConnectingPoint num="2" id="2773" /> +<TGConnectingPoint num="3" id="2774" /> +<TGConnectingPoint num="4" id="2775" /> +<TGConnectingPoint num="5" id="2776" /> +<TGConnectingPoint num="6" id="2777" /> +<TGConnectingPoint num="7" id="2778" /> +<TGConnectingPoint num="8" id="2779" /> +<TGConnectingPoint num="9" id="2780" /> +<TGConnectingPoint num="10" id="2781" /> +<TGConnectingPoint num="11" id="2782" /> +<TGConnectingPoint num="12" id="2783" /> +<TGConnectingPoint num="13" id="2784" /> +<TGConnectingPoint num="14" id="2785" /> +<TGConnectingPoint num="15" id="2786" /> +<TGConnectingPoint num="16" id="2787" /> +<TGConnectingPoint num="17" id="2788" /> +<TGConnectingPoint num="18" id="2789" /> +<TGConnectingPoint num="19" id="2790" /> +<TGConnectingPoint num="20" id="2791" /> +<TGConnectingPoint num="21" id="2792" /> +<TGConnectingPoint num="22" id="2793" /> +<TGConnectingPoint num="23" id="2794" /> +<extraparam> +<CryptoBlock value="false" /> +<Signal value="in wirelessChannelRead(Message msg)" /> +<Signal value="out wirelessChannelWrite(Message msg)" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5000" id="2595" > +<father id="2795" num="0" /> +<cdparam x="433" y="231" /> +<sizeparam width="414" height="148" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="553" minY="0" maxY="483" /> +<infoparam name="Block0" value="RemoteControl" /> +<TGConnectingPoint num="0" id="2571" /> +<TGConnectingPoint num="1" id="2572" /> +<TGConnectingPoint num="2" id="2573" /> +<TGConnectingPoint num="3" id="2574" /> +<TGConnectingPoint num="4" id="2575" /> +<TGConnectingPoint num="5" id="2576" /> +<TGConnectingPoint num="6" id="2577" /> +<TGConnectingPoint num="7" id="2578" /> +<TGConnectingPoint num="8" id="2579" /> +<TGConnectingPoint num="9" id="2580" /> +<TGConnectingPoint num="10" id="2581" /> +<TGConnectingPoint num="11" id="2582" /> +<TGConnectingPoint num="12" id="2583" /> +<TGConnectingPoint num="13" id="2584" /> +<TGConnectingPoint num="14" id="2585" /> +<TGConnectingPoint num="15" id="2586" /> +<TGConnectingPoint num="16" id="2587" /> +<TGConnectingPoint num="17" id="2588" /> +<TGConnectingPoint num="18" id="2589" /> +<TGConnectingPoint num="19" id="2590" /> +<TGConnectingPoint num="20" id="2591" /> +<TGConnectingPoint num="21" id="2592" /> +<TGConnectingPoint num="22" id="2593" /> +<TGConnectingPoint num="23" id="2594" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="duration" value="12" type="8" typeOther="" /> +<Attribute access="0" id="msg1" value="" type="5" typeOther="Message" /> +<Attribute access="0" id="PSK" value="" type="5" typeOther="Key" /> +<Attribute access="0" id="msg" value="" type="5" typeOther="Message" /> +<Method value="Message encrypt(Message msg, Key k)" /> +<Method value="Message decrypt(Message msg, Key k)" /> +<Method value="Message sencrypt(Message msg, Key k)" /> +<Method value="Message sdecrypt(Message msg, Key k)" /> +<Method value="Message MAC(Message msg, Key k)" /> +<Method value="bool verifyMAC(Message msg, Key k, Message macmsg)" /> +<Method value="Message concat2(Message msg1, Message msg2)" /> +<Method value="Message concat3(Message msg1, Message msg2, Message msg3)" /> +<Method value="Message concat4(Message msg1, Message msg2, Message msg3, Message msg4)" /> +<Method value="get2(Message msg, Message msg1, Message msg2)" /> +<Method value="get3(Message msg, Message msg1, Message msg2, Message msg3)" /> +<Method value="get4(Message msg, Message msg1, Message msg2, Message msg3, Message msg4)" /> +<globalCode value="" /> +<globalCode value="/* This is my global code !!!! */" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2770" > +<father id="2795" num="1" /> +<cdparam x="115" y="395" /> +<sizeparam width="921" height="412" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="46" minY="0" maxY="219" /> +<infoparam name="Block0" value="MicroWaveOven" /> +<TGConnectingPoint num="0" id="2746" /> +<TGConnectingPoint num="1" id="2747" /> +<TGConnectingPoint num="2" id="2748" /> +<TGConnectingPoint num="3" id="2749" /> +<TGConnectingPoint num="4" id="2750" /> +<TGConnectingPoint num="5" id="2751" /> +<TGConnectingPoint num="6" id="2752" /> +<TGConnectingPoint num="7" id="2753" /> +<TGConnectingPoint num="8" id="2754" /> +<TGConnectingPoint num="9" id="2755" /> +<TGConnectingPoint num="10" id="2756" /> +<TGConnectingPoint num="11" id="2757" /> +<TGConnectingPoint num="12" id="2758" /> +<TGConnectingPoint num="13" id="2759" /> +<TGConnectingPoint num="14" id="2760" /> +<TGConnectingPoint num="15" id="2761" /> +<TGConnectingPoint num="16" id="2762" /> +<TGConnectingPoint num="17" id="2763" /> +<TGConnectingPoint num="18" id="2764" /> +<TGConnectingPoint num="19" id="2765" /> +<TGConnectingPoint num="20" id="2766" /> +<TGConnectingPoint num="21" id="2767" /> +<TGConnectingPoint num="22" id="2768" /> +<TGConnectingPoint num="23" id="2769" /> +<extraparam> +<CryptoBlock value="false" /> +<Signal value="in remoteStart(int value)" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2620" > +<father id="2770" num="0" /> +<cdparam x="138" y="705" /> +<sizeparam width="181" height="95" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="740" minY="0" maxY="317" /> +<infoparam name="Block0" value="Bell" /> +<TGConnectingPoint num="0" id="2596" /> +<TGConnectingPoint num="1" id="2597" /> +<TGConnectingPoint num="2" id="2598" /> +<TGConnectingPoint num="3" id="2599" /> +<TGConnectingPoint num="4" id="2600" /> +<TGConnectingPoint num="5" id="2601" /> +<TGConnectingPoint num="6" id="2602" /> +<TGConnectingPoint num="7" id="2603" /> +<TGConnectingPoint num="8" id="2604" /> +<TGConnectingPoint num="9" id="2605" /> +<TGConnectingPoint num="10" id="2606" /> +<TGConnectingPoint num="11" id="2607" /> +<TGConnectingPoint num="12" id="2608" /> +<TGConnectingPoint num="13" id="2609" /> +<TGConnectingPoint num="14" id="2610" /> +<TGConnectingPoint num="15" id="2611" /> +<TGConnectingPoint num="16" id="2612" /> +<TGConnectingPoint num="17" id="2613" /> +<TGConnectingPoint num="18" id="2614" /> +<TGConnectingPoint num="19" id="2615" /> +<TGConnectingPoint num="20" id="2616" /> +<TGConnectingPoint num="21" id="2617" /> +<TGConnectingPoint num="22" id="2618" /> +<TGConnectingPoint num="23" id="2619" /> +<extraparam> +<CryptoBlock value="false" /> +<Method value="$runBell()" /> +<Signal value="in ring()" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="const char* dring = "Dring dring dring";" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Bell__runBell() {" /> +<globalCode value=" sendDatagram(dring, 18);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2645" > +<father id="2770" num="1" /> +<cdparam x="129" y="517" /> +<sizeparam width="256" height="162" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="665" minY="0" maxY="250" /> +<infoparam name="Block0" value="ControlPanel" /> +<TGConnectingPoint num="0" id="2621" /> +<TGConnectingPoint num="1" id="2622" /> +<TGConnectingPoint num="2" id="2623" /> +<TGConnectingPoint num="3" id="2624" /> +<TGConnectingPoint num="4" id="2625" /> +<TGConnectingPoint num="5" id="2626" /> +<TGConnectingPoint num="6" id="2627" /> +<TGConnectingPoint num="7" id="2628" /> +<TGConnectingPoint num="8" id="2629" /> +<TGConnectingPoint num="9" id="2630" /> +<TGConnectingPoint num="10" id="2631" /> +<TGConnectingPoint num="11" id="2632" /> +<TGConnectingPoint num="12" id="2633" /> +<TGConnectingPoint num="13" id="2634" /> +<TGConnectingPoint num="14" id="2635" /> +<TGConnectingPoint num="15" id="2636" /> +<TGConnectingPoint num="16" id="2637" /> +<TGConnectingPoint num="17" id="2638" /> +<TGConnectingPoint num="18" id="2639" /> +<TGConnectingPoint num="19" id="2640" /> +<TGConnectingPoint num="20" id="2641" /> +<TGConnectingPoint num="21" id="2642" /> +<TGConnectingPoint num="22" id="2643" /> +<TGConnectingPoint num="23" id="2644" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="duration" value="9" type="8" typeOther="" /> +<Signal value="in LEDOn()" /> +<Signal value="in LEDoff()" /> +<Signal value="out startButton(int duration)" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2670" > +<father id="2770" num="2" /> +<cdparam x="418" y="628" /> +<sizeparam width="328" height="167" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="593" minY="0" maxY="245" /> +<infoparam name="Block0" value="Controller" /> +<TGConnectingPoint num="0" id="2646" /> +<TGConnectingPoint num="1" id="2647" /> +<TGConnectingPoint num="2" id="2648" /> +<TGConnectingPoint num="3" id="2649" /> +<TGConnectingPoint num="4" id="2650" /> +<TGConnectingPoint num="5" id="2651" /> +<TGConnectingPoint num="6" id="2652" /> +<TGConnectingPoint num="7" id="2653" /> +<TGConnectingPoint num="8" id="2654" /> +<TGConnectingPoint num="9" id="2655" /> +<TGConnectingPoint num="10" id="2656" /> +<TGConnectingPoint num="11" id="2657" /> +<TGConnectingPoint num="12" id="2658" /> +<TGConnectingPoint num="13" id="2659" /> +<TGConnectingPoint num="14" id="2660" /> +<TGConnectingPoint num="15" id="2661" /> +<TGConnectingPoint num="16" id="2662" /> +<TGConnectingPoint num="17" id="2663" /> +<TGConnectingPoint num="18" id="2664" /> +<TGConnectingPoint num="19" id="2665" /> +<TGConnectingPoint num="20" id="2666" /> +<TGConnectingPoint num="21" id="2667" /> +<TGConnectingPoint num="22" id="2668" /> +<TGConnectingPoint num="23" id="2669" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="duration" value="5" type="8" typeOther="" /> +<Attribute access="0" id="remainingTime" value="0" type="8" typeOther="" /> +<Method value="$startCooking(int duration)" /> +<Method value="$durationModified(int duration)" /> +<Signal value="in start(int duration)" /> +<Signal value="in closed()" /> +<Signal value="in open()" /> +<Signal value="out ringBell()" /> +<Signal value="out startMagnetron()" /> +<Signal value="out stopMagnetron()" /> +<Signal value="out startCooking()" /> +<Signal value="out stopCooking()" /> +<Signal value="out obs_open()" /> +<Signal value="out obs_closed()" /> +<Signal value="out obs_magnetronStart()" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="const char* dur = "Duration";" /> +<globalCode value="const char* sta = "Start ";" /> +<globalCode value="char *mybuf;" /> +<globalCode value="" /> +<globalCode value="void initBuffer() {" /> +<globalCode value=" int i=0;" /> +<globalCode value=" if (mybuf == NULL) {" /> +<globalCode value=" mybuf = (char *)(malloc(sizeof(char)*15));" /> +<globalCode value=" }" /> +<globalCode value=" for(i=0; i<15; i++) {" /> +<globalCode value=" mybuf[i] = ' ';" /> +<globalCode value=" }" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Controller__startCooking(int val) {" /> +<globalCode value="initBuffer();" /> +<globalCode value=" sprintf(mybuf, "%s %d", sta, val);" /> +<globalCode value=" sendDatagram(mybuf, 15);" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Controller__durationModified(int val) {" /> +<globalCode value="initBuffer();" /> +<globalCode value="" /> +<globalCode value="sprintf(mybuf, "%s %d", dur, val);" /> +<globalCode value=" sendDatagram(mybuf, 15);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2695" > +<father id="2770" num="3" /> +<cdparam x="777" y="459" /> +<sizeparam width="253" height="160" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="668" minY="0" maxY="252" /> +<infoparam name="Block0" value="Magnetron" /> +<TGConnectingPoint num="0" id="2671" /> +<TGConnectingPoint num="1" id="2672" /> +<TGConnectingPoint num="2" id="2673" /> +<TGConnectingPoint num="3" id="2674" /> +<TGConnectingPoint num="4" id="2675" /> +<TGConnectingPoint num="5" id="2676" /> +<TGConnectingPoint num="6" id="2677" /> +<TGConnectingPoint num="7" id="2678" /> +<TGConnectingPoint num="8" id="2679" /> +<TGConnectingPoint num="9" id="2680" /> +<TGConnectingPoint num="10" id="2681" /> +<TGConnectingPoint num="11" id="2682" /> +<TGConnectingPoint num="12" id="2683" /> +<TGConnectingPoint num="13" id="2684" /> +<TGConnectingPoint num="14" id="2685" /> +<TGConnectingPoint num="15" id="2686" /> +<TGConnectingPoint num="16" id="2687" /> +<TGConnectingPoint num="17" id="2688" /> +<TGConnectingPoint num="18" id="2689" /> +<TGConnectingPoint num="19" id="2690" /> +<TGConnectingPoint num="20" id="2691" /> +<TGConnectingPoint num="21" id="2692" /> +<TGConnectingPoint num="22" id="2693" /> +<TGConnectingPoint num="23" id="2694" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="power" value="0" type="8" typeOther="" /> +<Method value="$ON()" /> +<Method value="$OFF()" /> +<Signal value="in startM()" /> +<Signal value="in stopM()" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Magnetron__ON() {" /> +<globalCode value=" sendDatagram("Magnetron_ON", 13);" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Magnetron__OFF() {" /> +<globalCode value=" sendDatagram("Magnetron_OFF", 14);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2720" > +<father id="2770" num="4" /> +<cdparam x="792" y="673" /> +<sizeparam width="215" height="126" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="706" minY="0" maxY="286" /> +<infoparam name="Block0" value="Door" /> +<TGConnectingPoint num="0" id="2696" /> +<TGConnectingPoint num="1" id="2697" /> +<TGConnectingPoint num="2" id="2698" /> +<TGConnectingPoint num="3" id="2699" /> +<TGConnectingPoint num="4" id="2700" /> +<TGConnectingPoint num="5" id="2701" /> +<TGConnectingPoint num="6" id="2702" /> +<TGConnectingPoint num="7" id="2703" /> +<TGConnectingPoint num="8" id="2704" /> +<TGConnectingPoint num="9" id="2705" /> +<TGConnectingPoint num="10" id="2706" /> +<TGConnectingPoint num="11" id="2707" /> +<TGConnectingPoint num="12" id="2708" /> +<TGConnectingPoint num="13" id="2709" /> +<TGConnectingPoint num="14" id="2710" /> +<TGConnectingPoint num="15" id="2711" /> +<TGConnectingPoint num="16" id="2712" /> +<TGConnectingPoint num="17" id="2713" /> +<TGConnectingPoint num="18" id="2714" /> +<TGConnectingPoint num="19" id="2715" /> +<TGConnectingPoint num="20" id="2716" /> +<TGConnectingPoint num="21" id="2717" /> +<TGConnectingPoint num="22" id="2718" /> +<TGConnectingPoint num="23" id="2719" /> +<extraparam> +<CryptoBlock value="false" /> +<Method value="$openM()" /> +<Method value="$closeM()" /> +<Signal value="out closed()" /> +<Signal value="out open()" /> +<globalCode value="" /> +<globalCode value="extern void sendDatagram(char *data, int size);" /> +<globalCode value="" /> +<globalCode value="const char* openD = "Open Door";" /> +<globalCode value="const char* closeD = "Close Door";" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Door__openM() {" /> +<globalCode value=" sendDatagram(openD, 10);" /> +<globalCode value="}" /> +<globalCode value="" /> +<globalCode value="void _userImplemented_Door__closeM() {" /> +<globalCode value=" sendDatagram(closeD, 10);" /> +<globalCode value="}" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="2745" > +<father id="2770" num="5" /> +<cdparam x="412" y="459" /> +<sizeparam width="334" height="154" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="587" minY="0" maxY="258" /> +<infoparam name="Block0" value="WirelessInterface" /> +<TGConnectingPoint num="0" id="2721" /> +<TGConnectingPoint num="1" id="2722" /> +<TGConnectingPoint num="2" id="2723" /> +<TGConnectingPoint num="3" id="2724" /> +<TGConnectingPoint num="4" id="2725" /> +<TGConnectingPoint num="5" id="2726" /> +<TGConnectingPoint num="6" id="2727" /> +<TGConnectingPoint num="7" id="2728" /> +<TGConnectingPoint num="8" id="2729" /> +<TGConnectingPoint num="9" id="2730" /> +<TGConnectingPoint num="10" id="2731" /> +<TGConnectingPoint num="11" id="2732" /> +<TGConnectingPoint num="12" id="2733" /> +<TGConnectingPoint num="13" id="2734" /> +<TGConnectingPoint num="14" id="2735" /> +<TGConnectingPoint num="15" id="2736" /> +<TGConnectingPoint num="16" id="2737" /> +<TGConnectingPoint num="17" id="2738" /> +<TGConnectingPoint num="18" id="2739" /> +<TGConnectingPoint num="19" id="2740" /> +<TGConnectingPoint num="20" id="2741" /> +<TGConnectingPoint num="21" id="2742" /> +<TGConnectingPoint num="22" id="2743" /> +<TGConnectingPoint num="23" id="2744" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="msg2" value="" type="5" typeOther="Message" /> +<Attribute access="0" id="PSK" value="" type="5" typeOther="Key" /> +<Attribute access="0" id="selectedDuration" value="" type="8" typeOther="" /> +<Attribute access="0" id="msg3" value="" type="5" typeOther="Message" /> +<Method value="Message encrypt(Message msg, Key k)" /> +<Method value="Message decrypt(Message msg, Key k)" /> +<Method value="Message sencrypt(Message msg, Key k)" /> +<Method value="Message sdecrypt(Message msg, Key k)" /> +<Method value="Message MAC(Message msg, Key k)" /> +<Method value="bool verifyMAC(Message msg, Key k, Message macmsg)" /> +<Method value="Message concat2(Message msg1, Message msg2)" /> +<Method value="Message concat3(Message msg1, Message msg2, Message msg3)" /> +<Method value="Message concat4(Message msg1, Message msg2, Message msg3, Message msg4)" /> +<Method value="get2(Message msg, Message msg1, Message msg2)" /> +<Method value="get3(Message msg, Message msg1, Message msg2, Message msg3)" /> +<Method value="get4(Message msg, Message msg1, Message msg2, Message msg3, Message msg4)" /> +<Signal value="out remoteStart(int value)" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARBlockDiagramPanel> + +<AVATARStateMachineDiagramPanel name="ObserverProp1" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="2802" > +<cdparam x="395" y="433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2801" /> +<P1 x="395" y="433" id="2915" /> +<P2 x="395" y="450" id="2874" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2800" > +<father id="2802" num="0" /> +<cdparam x="395" y="473" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2796" /> +<TGConnectingPoint num="1" id="2797" /> +<TGConnectingPoint num="2" id="2798" /> +<TGConnectingPoint num="3" id="2799" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2809" > +<cdparam x="303" y="356" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2808" /> +<P1 x="303" y="356" id="2962" /> +<P2 x="395" y="403" id="2914" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2807" > +<father id="2809" num="0" /> +<cdparam x="303" y="396" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2803" /> +<TGConnectingPoint num="1" id="2804" /> +<TGConnectingPoint num="2" id="2805" /> +<TGConnectingPoint num="3" id="2806" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2822" > +<cdparam x="436" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2818" /> +<TGConnectingPoint num="1" id="2819" /> +<TGConnectingPoint num="2" id="2820" /> +<TGConnectingPoint num="3" id="2821" /> +<P1 x="436" y="285" id="2926" /> +<P2 x="409" y="180" id="3010" /> +<Point x="436" y="302" /> +<Point x="554" y="302" /> +<Point x="554" y="180" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2810" > +<father id="2822" num="0" /> +<cdparam x="436" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2811" > +<father id="2822" num="1" /> +<cdparam x="554" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2812" > +<father id="2822" num="2" /> +<cdparam x="554" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2817" > +<father id="2822" num="3" /> +<cdparam x="436" y="325" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2813" /> +<TGConnectingPoint num="1" id="2814" /> +<TGConnectingPoint num="2" id="2815" /> +<TGConnectingPoint num="3" id="2816" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2829" > +<cdparam x="379" y="218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2828" /> +<P1 x="379" y="218" id="3014" /> +<P2 x="436" y="255" id="2925" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2827" > +<father id="2829" num="0" /> +<cdparam x="379" y="258" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2823" /> +<TGConnectingPoint num="1" id="2824" /> +<TGConnectingPoint num="2" id="2825" /> +<TGConnectingPoint num="3" id="2826" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2844" > +<cdparam x="228" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2839" /> +<TGConnectingPoint num="1" id="2840" /> +<TGConnectingPoint num="2" id="2841" /> +<TGConnectingPoint num="3" id="2842" /> +<TGConnectingPoint num="4" id="2843" /> +<P1 x="228" y="432" id="2937" /> +<P2 x="319" y="168" id="3007" /> +<Point x="228" y="452" /> +<Point x="165" y="452" /> +<Point x="165" y="136" /> +<Point x="320" y="136" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2830" > +<father id="2844" num="0" /> +<cdparam x="228" y="452" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2831" > +<father id="2844" num="1" /> +<cdparam x="165" y="452" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2832" > +<father id="2844" num="2" /> +<cdparam x="165" y="136" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2833" > +<father id="2844" num="3" /> +<cdparam x="320" y="136" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2838" > +<father id="2844" num="4" /> +<cdparam x="228" y="472" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2834" /> +<TGConnectingPoint num="1" id="2835" /> +<TGConnectingPoint num="2" id="2836" /> +<TGConnectingPoint num="3" id="2837" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2851" > +<cdparam x="252" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2850" /> +<P1 x="246" y="356" id="2961" /> +<P2 x="228" y="402" id="2936" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2849" > +<father id="2851" num="0" /> +<cdparam x="252" y="408" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2845" /> +<TGConnectingPoint num="1" id="2846" /> +<TGConnectingPoint num="2" id="2847" /> +<TGConnectingPoint num="3" id="2848" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2858" > +<cdparam x="275" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="2857" /> +<P1 x="275" y="286" id="2989" /> +<P2 x="275" y="306" id="2948" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2856" > +<father id="2858" num="0" /> +<cdparam x="275" y="326" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2852" /> +<TGConnectingPoint num="1" id="2853" /> +<TGConnectingPoint num="2" id="2854" /> +<TGConnectingPoint num="3" id="2855" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2865" > +<cdparam x="319" y="205" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="2864" /> +<P1 x="319" y="218" id="3013" /> +<P2 x="275" y="256" id="2988" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2863" > +<father id="2865" num="0" /> +<cdparam x="319" y="245" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2859" /> +<TGConnectingPoint num="1" id="2860" /> +<TGConnectingPoint num="2" id="2861" /> +<TGConnectingPoint num="3" id="2862" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="2872" > +<cdparam x="349" y="143" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="2871" /> +<P1 x="349" y="143" id="3040" /> +<P2 x="349" y="168" id="3000" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="2870" > +<father id="2872" num="0" /> +<cdparam x="349" y="183" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="2866" /> +<TGConnectingPoint num="1" id="2867" /> +<TGConnectingPoint num="2" id="2868" /> +<TGConnectingPoint num="3" id="2869" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="2913" > +<cdparam x="345" y="450" /> +<sizeparam width="100" height="54" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Error" /> +<TGConnectingPoint num="0" id="2873" /> +<TGConnectingPoint num="1" id="2874" /> +<TGConnectingPoint num="2" id="2875" /> +<TGConnectingPoint num="3" id="2876" /> +<TGConnectingPoint num="4" id="2877" /> +<TGConnectingPoint num="5" id="2878" /> +<TGConnectingPoint num="6" id="2879" /> +<TGConnectingPoint num="7" id="2880" /> +<TGConnectingPoint num="8" id="2881" /> +<TGConnectingPoint num="9" id="2882" /> +<TGConnectingPoint num="10" id="2883" /> +<TGConnectingPoint num="11" id="2884" /> +<TGConnectingPoint num="12" id="2885" /> +<TGConnectingPoint num="13" id="2886" /> +<TGConnectingPoint num="14" id="2887" /> +<TGConnectingPoint num="15" id="2888" /> +<TGConnectingPoint num="16" id="2889" /> +<TGConnectingPoint num="17" id="2890" /> +<TGConnectingPoint num="18" id="2891" /> +<TGConnectingPoint num="19" id="2892" /> +<TGConnectingPoint num="20" id="2893" /> +<TGConnectingPoint num="21" id="2894" /> +<TGConnectingPoint num="22" id="2895" /> +<TGConnectingPoint num="23" id="2896" /> +<TGConnectingPoint num="24" id="2897" /> +<TGConnectingPoint num="25" id="2898" /> +<TGConnectingPoint num="26" id="2899" /> +<TGConnectingPoint num="27" id="2900" /> +<TGConnectingPoint num="28" id="2901" /> +<TGConnectingPoint num="29" id="2902" /> +<TGConnectingPoint num="30" id="2903" /> +<TGConnectingPoint num="31" id="2904" /> +<TGConnectingPoint num="32" id="2905" /> +<TGConnectingPoint num="33" id="2906" /> +<TGConnectingPoint num="34" id="2907" /> +<TGConnectingPoint num="35" id="2908" /> +<TGConnectingPoint num="36" id="2909" /> +<TGConnectingPoint num="37" id="2910" /> +<TGConnectingPoint num="38" id="2911" /> +<TGConnectingPoint num="39" id="2912" /> +<accessibility /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="2924" > +<cdparam x="325" y="408" /> +<sizeparam width="141" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="2914" /> +<TGConnectingPoint num="1" id="2915" /> +<TGConnectingPoint num="2" id="2916" /> +<TGConnectingPoint num="3" id="2917" /> +<TGConnectingPoint num="4" id="2918" /> +<TGConnectingPoint num="5" id="2919" /> +<TGConnectingPoint num="6" id="2920" /> +<TGConnectingPoint num="7" id="2921" /> +<TGConnectingPoint num="8" id="2922" /> +<TGConnectingPoint num="9" id="2923" /> +</COMPONENT> + +<COMPONENT type="5104" id="2935" > +<cdparam x="366" y="260" /> +<sizeparam width="141" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="2925" /> +<TGConnectingPoint num="1" id="2926" /> +<TGConnectingPoint num="2" id="2927" /> +<TGConnectingPoint num="3" id="2928" /> +<TGConnectingPoint num="4" id="2929" /> +<TGConnectingPoint num="5" id="2930" /> +<TGConnectingPoint num="6" id="2931" /> +<TGConnectingPoint num="7" id="2932" /> +<TGConnectingPoint num="8" id="2933" /> +<TGConnectingPoint num="9" id="2934" /> +</COMPONENT> + +<COMPONENT type="5104" id="2946" > +<cdparam x="183" y="407" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_closed()" /> +<TGConnectingPoint num="0" id="2936" /> +<TGConnectingPoint num="1" id="2937" /> +<TGConnectingPoint num="2" id="2938" /> +<TGConnectingPoint num="3" id="2939" /> +<TGConnectingPoint num="4" id="2940" /> +<TGConnectingPoint num="5" id="2941" /> +<TGConnectingPoint num="6" id="2942" /> +<TGConnectingPoint num="7" id="2943" /> +<TGConnectingPoint num="8" id="2944" /> +<TGConnectingPoint num="9" id="2945" /> +</COMPONENT> + +<COMPONENT type="5106" id="2987" > +<cdparam x="218" y="306" /> +<sizeparam width="114" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitingForClosed" /> +<TGConnectingPoint num="0" id="2947" /> +<TGConnectingPoint num="1" id="2948" /> +<TGConnectingPoint num="2" id="2949" /> +<TGConnectingPoint num="3" id="2950" /> +<TGConnectingPoint num="4" id="2951" /> +<TGConnectingPoint num="5" id="2952" /> +<TGConnectingPoint num="6" id="2953" /> +<TGConnectingPoint num="7" id="2954" /> +<TGConnectingPoint num="8" id="2955" /> +<TGConnectingPoint num="9" id="2956" /> +<TGConnectingPoint num="10" id="2957" /> +<TGConnectingPoint num="11" id="2958" /> +<TGConnectingPoint num="12" id="2959" /> +<TGConnectingPoint num="13" id="2960" /> +<TGConnectingPoint num="14" id="2961" /> +<TGConnectingPoint num="15" id="2962" /> +<TGConnectingPoint num="16" id="2963" /> +<TGConnectingPoint num="17" id="2964" /> +<TGConnectingPoint num="18" id="2965" /> +<TGConnectingPoint num="19" id="2966" /> +<TGConnectingPoint num="20" id="2967" /> +<TGConnectingPoint num="21" id="2968" /> +<TGConnectingPoint num="22" id="2969" /> +<TGConnectingPoint num="23" id="2970" /> +<TGConnectingPoint num="24" id="2971" /> +<TGConnectingPoint num="25" id="2972" /> +<TGConnectingPoint num="26" id="2973" /> +<TGConnectingPoint num="27" id="2974" /> +<TGConnectingPoint num="28" id="2975" /> +<TGConnectingPoint num="29" id="2976" /> +<TGConnectingPoint num="30" id="2977" /> +<TGConnectingPoint num="31" id="2978" /> +<TGConnectingPoint num="32" id="2979" /> +<TGConnectingPoint num="33" id="2980" /> +<TGConnectingPoint num="34" id="2981" /> +<TGConnectingPoint num="35" id="2982" /> +<TGConnectingPoint num="36" id="2983" /> +<TGConnectingPoint num="37" id="2984" /> +<TGConnectingPoint num="38" id="2985" /> +<TGConnectingPoint num="39" id="2986" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="2998" > +<cdparam x="234" y="261" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="obs_open()" /> +<TGConnectingPoint num="0" id="2988" /> +<TGConnectingPoint num="1" id="2989" /> +<TGConnectingPoint num="2" id="2990" /> +<TGConnectingPoint num="3" id="2991" /> +<TGConnectingPoint num="4" id="2992" /> +<TGConnectingPoint num="5" id="2993" /> +<TGConnectingPoint num="6" id="2994" /> +<TGConnectingPoint num="7" id="2995" /> +<TGConnectingPoint num="8" id="2996" /> +<TGConnectingPoint num="9" id="2997" /> +</COMPONENT> + +<COMPONENT type="5106" id="3039" > +<cdparam x="289" y="168" /> +<sizeparam width="120" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitingForOpen" /> +<TGConnectingPoint num="0" id="2999" /> +<TGConnectingPoint num="1" id="3000" /> +<TGConnectingPoint num="2" id="3001" /> +<TGConnectingPoint num="3" id="3002" /> +<TGConnectingPoint num="4" id="3003" /> +<TGConnectingPoint num="5" id="3004" /> +<TGConnectingPoint num="6" id="3005" /> +<TGConnectingPoint num="7" id="3006" /> +<TGConnectingPoint num="8" id="3007" /> +<TGConnectingPoint num="9" id="3008" /> +<TGConnectingPoint num="10" id="3009" /> +<TGConnectingPoint num="11" id="3010" /> +<TGConnectingPoint num="12" id="3011" /> +<TGConnectingPoint num="13" id="3012" /> +<TGConnectingPoint num="14" id="3013" /> +<TGConnectingPoint num="15" id="3014" /> +<TGConnectingPoint num="16" id="3015" /> +<TGConnectingPoint num="17" id="3016" /> +<TGConnectingPoint num="18" id="3017" /> +<TGConnectingPoint num="19" id="3018" /> +<TGConnectingPoint num="20" id="3019" /> +<TGConnectingPoint num="21" id="3020" /> +<TGConnectingPoint num="22" id="3021" /> +<TGConnectingPoint num="23" id="3022" /> +<TGConnectingPoint num="24" id="3023" /> +<TGConnectingPoint num="25" id="3024" /> +<TGConnectingPoint num="26" id="3025" /> +<TGConnectingPoint num="27" id="3026" /> +<TGConnectingPoint num="28" id="3027" /> +<TGConnectingPoint num="29" id="3028" /> +<TGConnectingPoint num="30" id="3029" /> +<TGConnectingPoint num="31" id="3030" /> +<TGConnectingPoint num="32" id="3031" /> +<TGConnectingPoint num="33" id="3032" /> +<TGConnectingPoint num="34" id="3033" /> +<TGConnectingPoint num="35" id="3034" /> +<TGConnectingPoint num="36" id="3035" /> +<TGConnectingPoint num="37" id="3036" /> +<TGConnectingPoint num="38" id="3037" /> +<TGConnectingPoint num="39" id="3038" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="3041" > +<cdparam x="342" y="123" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3040" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="RemotelyControlledMicrowave" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3048" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to stop state" value="null" /> +<TGConnectingPoint num="0" id="3047" /> +<P1 x="407" y="70" id="3051" /> +<P2 x="408" y="85" id="3049" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3046" > +<father id="3048" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3042" /> +<TGConnectingPoint num="1" id="3043" /> +<TGConnectingPoint num="2" id="3044" /> +<TGConnectingPoint num="3" id="3045" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5101" id="3050" > +<cdparam x="398" y="90" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="3049" /> +</COMPONENT> + +<COMPONENT type="5100" id="3052" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3051" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="MicroWaveOven" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3059" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="3058" /> +<P1 x="407" y="70" id="3101" /> +<P2 x="451" y="106" id="3061" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3057" > +<father id="3059" num="0" /> +<cdparam x="444" y="75" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3053" /> +<TGConnectingPoint num="1" id="3054" /> +<TGConnectingPoint num="2" id="3055" /> +<TGConnectingPoint num="3" id="3056" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="3100" > +<cdparam x="396" y="106" /> +<sizeparam width="111" height="42" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Running" /> +<TGConnectingPoint num="0" id="3060" /> +<TGConnectingPoint num="1" id="3061" /> +<TGConnectingPoint num="2" id="3062" /> +<TGConnectingPoint num="3" id="3063" /> +<TGConnectingPoint num="4" id="3064" /> +<TGConnectingPoint num="5" id="3065" /> +<TGConnectingPoint num="6" id="3066" /> +<TGConnectingPoint num="7" id="3067" /> +<TGConnectingPoint num="8" id="3068" /> +<TGConnectingPoint num="9" id="3069" /> +<TGConnectingPoint num="10" id="3070" /> +<TGConnectingPoint num="11" id="3071" /> +<TGConnectingPoint num="12" id="3072" /> +<TGConnectingPoint num="13" id="3073" /> +<TGConnectingPoint num="14" id="3074" /> +<TGConnectingPoint num="15" id="3075" /> +<TGConnectingPoint num="16" id="3076" /> +<TGConnectingPoint num="17" id="3077" /> +<TGConnectingPoint num="18" id="3078" /> +<TGConnectingPoint num="19" id="3079" /> +<TGConnectingPoint num="20" id="3080" /> +<TGConnectingPoint num="21" id="3081" /> +<TGConnectingPoint num="22" id="3082" /> +<TGConnectingPoint num="23" id="3083" /> +<TGConnectingPoint num="24" id="3084" /> +<TGConnectingPoint num="25" id="3085" /> +<TGConnectingPoint num="26" id="3086" /> +<TGConnectingPoint num="27" id="3087" /> +<TGConnectingPoint num="28" id="3088" /> +<TGConnectingPoint num="29" id="3089" /> +<TGConnectingPoint num="30" id="3090" /> +<TGConnectingPoint num="31" id="3091" /> +<TGConnectingPoint num="32" id="3092" /> +<TGConnectingPoint num="33" id="3093" /> +<TGConnectingPoint num="34" id="3094" /> +<TGConnectingPoint num="35" id="3095" /> +<TGConnectingPoint num="36" id="3096" /> +<TGConnectingPoint num="37" id="3097" /> +<TGConnectingPoint num="38" id="3098" /> +<TGConnectingPoint num="39" id="3099" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="3102" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3101" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="WirelessInterface" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3109" > +<cdparam x="447" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="3108" /> +<P1 x="447" y="399" id="3144" /> +<P2 x="474" y="432" id="3179" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3107" > +<father id="3109" num="0" /> +<cdparam x="447" y="439" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3103" /> +<TGConnectingPoint num="1" id="3104" /> +<TGConnectingPoint num="2" id="3105" /> +<TGConnectingPoint num="3" id="3106" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3116" > +<cdparam x="491" y="459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="3115" /> +<P1 x="474" y="462" id="3180" /> +<P2 x="485" y="495" id="3231" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3114" > +<father id="3116" num="0" /> +<cdparam x="491" y="499" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3110" /> +<TGConnectingPoint num="1" id="3111" /> +<TGConnectingPoint num="2" id="3112" /> +<TGConnectingPoint num="3" id="3113" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3123" > +<cdparam x="455" y="352" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to stop state" value="null" /> +<TGConnectingPoint num="0" id="3122" /> +<P1 x="414" y="275" id="3196" /> +<P2 x="447" y="349" id="3139" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3121" > +<father id="3123" num="0" /> +<cdparam x="459" y="317" /> +<sizeparam width="177" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3117" /> +<TGConnectingPoint num="1" id="3118" /> +<TGConnectingPoint num="2" id="3119" /> +<TGConnectingPoint num="3" id="3120" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="msg3 = sdecrypt(msg2, PSK)" /> +<actions value="selectedDuration = msg3.data" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3130" > +<cdparam x="386" y="101" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="3129" /> +<P1 x="386" y="101" id="3244" /> +<P2 x="401" y="161" id="3233" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3128" > +<father id="3130" num="0" /> +<cdparam x="386" y="141" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3124" /> +<TGConnectingPoint num="1" id="3125" /> +<TGConnectingPoint num="2" id="3126" /> +<TGConnectingPoint num="3" id="3127" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3137" > +<cdparam x="401" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to stop state" value="null" /> +<TGConnectingPoint num="0" id="3136" /> +<P1 x="401" y="191" id="3234" /> +<P2 x="414" y="225" id="3191" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3135" > +<father id="3137" num="0" /> +<cdparam x="453" y="214" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3131" /> +<TGConnectingPoint num="1" id="3132" /> +<TGConnectingPoint num="2" id="3133" /> +<TGConnectingPoint num="3" id="3134" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="3178" > +<cdparam x="306" y="349" /> +<sizeparam width="282" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="gotDecryptedOrder" /> +<TGConnectingPoint num="0" id="3138" /> +<TGConnectingPoint num="1" id="3139" /> +<TGConnectingPoint num="2" id="3140" /> +<TGConnectingPoint num="3" id="3141" /> +<TGConnectingPoint num="4" id="3142" /> +<TGConnectingPoint num="5" id="3143" /> +<TGConnectingPoint num="6" id="3144" /> +<TGConnectingPoint num="7" id="3145" /> +<TGConnectingPoint num="8" id="3146" /> +<TGConnectingPoint num="9" id="3147" /> +<TGConnectingPoint num="10" id="3148" /> +<TGConnectingPoint num="11" id="3149" /> +<TGConnectingPoint num="12" id="3150" /> +<TGConnectingPoint num="13" id="3151" /> +<TGConnectingPoint num="14" id="3152" /> +<TGConnectingPoint num="15" id="3153" /> +<TGConnectingPoint num="16" id="3154" /> +<TGConnectingPoint num="17" id="3155" /> +<TGConnectingPoint num="18" id="3156" /> +<TGConnectingPoint num="19" id="3157" /> +<TGConnectingPoint num="20" id="3158" /> +<TGConnectingPoint num="21" id="3159" /> +<TGConnectingPoint num="22" id="3160" /> +<TGConnectingPoint num="23" id="3161" /> +<TGConnectingPoint num="24" id="3162" /> +<TGConnectingPoint num="25" id="3163" /> +<TGConnectingPoint num="26" id="3164" /> +<TGConnectingPoint num="27" id="3165" /> +<TGConnectingPoint num="28" id="3166" /> +<TGConnectingPoint num="29" id="3167" /> +<TGConnectingPoint num="30" id="3168" /> +<TGConnectingPoint num="31" id="3169" /> +<TGConnectingPoint num="32" id="3170" /> +<TGConnectingPoint num="33" id="3171" /> +<TGConnectingPoint num="34" id="3172" /> +<TGConnectingPoint num="35" id="3173" /> +<TGConnectingPoint num="36" id="3174" /> +<TGConnectingPoint num="37" id="3175" /> +<TGConnectingPoint num="38" id="3176" /> +<TGConnectingPoint num="39" id="3177" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="3189" > +<cdparam x="383" y="437" /> +<sizeparam width="182" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="remoteStart(selectedDuration)" /> +<TGConnectingPoint num="0" id="3179" /> +<TGConnectingPoint num="1" id="3180" /> +<TGConnectingPoint num="2" id="3181" /> +<TGConnectingPoint num="3" id="3182" /> +<TGConnectingPoint num="4" id="3183" /> +<TGConnectingPoint num="5" id="3184" /> +<TGConnectingPoint num="6" id="3185" /> +<TGConnectingPoint num="7" id="3186" /> +<TGConnectingPoint num="8" id="3187" /> +<TGConnectingPoint num="9" id="3188" /> +</COMPONENT> + +<COMPONENT type="5106" id="3230" > +<cdparam x="348" y="225" /> +<sizeparam width="133" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="gotWirelessOrder" /> +<TGConnectingPoint num="0" id="3190" /> +<TGConnectingPoint num="1" id="3191" /> +<TGConnectingPoint num="2" id="3192" /> +<TGConnectingPoint num="3" id="3193" /> +<TGConnectingPoint num="4" id="3194" /> +<TGConnectingPoint num="5" id="3195" /> +<TGConnectingPoint num="6" id="3196" /> +<TGConnectingPoint num="7" id="3197" /> +<TGConnectingPoint num="8" id="3198" /> +<TGConnectingPoint num="9" id="3199" /> +<TGConnectingPoint num="10" id="3200" /> +<TGConnectingPoint num="11" id="3201" /> +<TGConnectingPoint num="12" id="3202" /> +<TGConnectingPoint num="13" id="3203" /> +<TGConnectingPoint num="14" id="3204" /> +<TGConnectingPoint num="15" id="3205" /> +<TGConnectingPoint num="16" id="3206" /> +<TGConnectingPoint num="17" id="3207" /> +<TGConnectingPoint num="18" id="3208" /> +<TGConnectingPoint num="19" id="3209" /> +<TGConnectingPoint num="20" id="3210" /> +<TGConnectingPoint num="21" id="3211" /> +<TGConnectingPoint num="22" id="3212" /> +<TGConnectingPoint num="23" id="3213" /> +<TGConnectingPoint num="24" id="3214" /> +<TGConnectingPoint num="25" id="3215" /> +<TGConnectingPoint num="26" id="3216" /> +<TGConnectingPoint num="27" id="3217" /> +<TGConnectingPoint num="28" id="3218" /> +<TGConnectingPoint num="29" id="3219" /> +<TGConnectingPoint num="30" id="3220" /> +<TGConnectingPoint num="31" id="3221" /> +<TGConnectingPoint num="32" id="3222" /> +<TGConnectingPoint num="33" id="3223" /> +<TGConnectingPoint num="34" id="3224" /> +<TGConnectingPoint num="35" id="3225" /> +<TGConnectingPoint num="36" id="3226" /> +<TGConnectingPoint num="37" id="3227" /> +<TGConnectingPoint num="38" id="3228" /> +<TGConnectingPoint num="39" id="3229" /> +<extraparam> +<entryCode value="printf("Got duration from remote control :%d\n", msg2__data);" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5101" id="3232" > +<cdparam x="475" y="500" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="3231" /> +</COMPONENT> + +<COMPONENT type="5104" id="3243" > +<cdparam x="311" y="166" /> +<sizeparam width="180" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="wirelessChannelRead(msg2)" /> +<TGConnectingPoint num="0" id="3233" /> +<TGConnectingPoint num="1" id="3234" /> +<TGConnectingPoint num="2" id="3235" /> +<TGConnectingPoint num="3" id="3236" /> +<TGConnectingPoint num="4" id="3237" /> +<TGConnectingPoint num="5" id="3238" /> +<TGConnectingPoint num="6" id="3239" /> +<TGConnectingPoint num="7" id="3240" /> +<TGConnectingPoint num="8" id="3241" /> +<TGConnectingPoint num="9" id="3242" /> +</COMPONENT> + +<COMPONENT type="5100" id="3245" > +<cdparam x="379" y="81" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3244" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Door" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3252" > +<cdparam x="407" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="3251" /> +<P1 x="407" y="209" id="3340" /> +<P2 x="407" y="290" id="3288" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3250" > +<father id="3252" num="0" /> +<cdparam x="407" y="249" /> +<sizeparam width="47" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3246" /> +<TGConnectingPoint num="1" id="3247" /> +<TGConnectingPoint num="2" id="3248" /> +<TGConnectingPoint num="3" id="3249" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="openM()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3259" > +<cdparam x="407" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3258" /> +<P1 x="407" y="340" id="3293" /> +<P2 x="407" y="374" id="3328" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3257" > +<father id="3259" num="0" /> +<cdparam x="414" y="365" /> +<sizeparam width="59" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3253" /> +<TGConnectingPoint num="1" id="3254" /> +<TGConnectingPoint num="2" id="3255" /> +<TGConnectingPoint num="3" id="3256" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="2" /> +<afterMax value="3" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3272" > +<cdparam x="407" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3268" /> +<TGConnectingPoint num="1" id="3269" /> +<TGConnectingPoint num="2" id="3270" /> +<TGConnectingPoint num="3" id="3271" /> +<P1 x="407" y="404" id="3329" /> +<P2 x="357" y="125" id="3353" /> +<Point x="300" y="404" /> +<Point x="300" y="278" /> +<Point x="300" y="125" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3260" > +<father id="3272" num="0" /> +<cdparam x="300" y="404" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3261" > +<father id="3272" num="1" /> +<cdparam x="300" y="278" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3262" > +<father id="3272" num="2" /> +<cdparam x="300" y="125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3267" > +<father id="3272" num="3" /> +<cdparam x="246" y="301" /> +<sizeparam width="47" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3263" /> +<TGConnectingPoint num="1" id="3264" /> +<TGConnectingPoint num="2" id="3265" /> +<TGConnectingPoint num="3" id="3266" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="closeM()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3279" > +<cdparam x="407" y="150" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3278" /> +<P1 x="407" y="150" id="3356" /> +<P2 x="407" y="179" id="3339" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3277" > +<father id="3279" num="0" /> +<cdparam x="412" y="172" /> +<sizeparam width="59" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3273" /> +<TGConnectingPoint num="1" id="3274" /> +<TGConnectingPoint num="2" id="3275" /> +<TGConnectingPoint num="3" id="3276" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="2" /> +<afterMax value="3" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3286" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="3285" /> +<P1 x="407" y="70" id="3391" /> +<P2 x="407" y="100" id="3351" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3284" > +<father id="3286" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3280" /> +<TGConnectingPoint num="1" id="3281" /> +<TGConnectingPoint num="2" id="3282" /> +<TGConnectingPoint num="3" id="3283" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="3327" > +<cdparam x="357" y="290" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Opened" /> +<TGConnectingPoint num="0" id="3287" /> +<TGConnectingPoint num="1" id="3288" /> +<TGConnectingPoint num="2" id="3289" /> +<TGConnectingPoint num="3" id="3290" /> +<TGConnectingPoint num="4" id="3291" /> +<TGConnectingPoint num="5" id="3292" /> +<TGConnectingPoint num="6" id="3293" /> +<TGConnectingPoint num="7" id="3294" /> +<TGConnectingPoint num="8" id="3295" /> +<TGConnectingPoint num="9" id="3296" /> +<TGConnectingPoint num="10" id="3297" /> +<TGConnectingPoint num="11" id="3298" /> +<TGConnectingPoint num="12" id="3299" /> +<TGConnectingPoint num="13" id="3300" /> +<TGConnectingPoint num="14" id="3301" /> +<TGConnectingPoint num="15" id="3302" /> +<TGConnectingPoint num="16" id="3303" /> +<TGConnectingPoint num="17" id="3304" /> +<TGConnectingPoint num="18" id="3305" /> +<TGConnectingPoint num="19" id="3306" /> +<TGConnectingPoint num="20" id="3307" /> +<TGConnectingPoint num="21" id="3308" /> +<TGConnectingPoint num="22" id="3309" /> +<TGConnectingPoint num="23" id="3310" /> +<TGConnectingPoint num="24" id="3311" /> +<TGConnectingPoint num="25" id="3312" /> +<TGConnectingPoint num="26" id="3313" /> +<TGConnectingPoint num="27" id="3314" /> +<TGConnectingPoint num="28" id="3315" /> +<TGConnectingPoint num="29" id="3316" /> +<TGConnectingPoint num="30" id="3317" /> +<TGConnectingPoint num="31" id="3318" /> +<TGConnectingPoint num="32" id="3319" /> +<TGConnectingPoint num="33" id="3320" /> +<TGConnectingPoint num="34" id="3321" /> +<TGConnectingPoint num="35" id="3322" /> +<TGConnectingPoint num="36" id="3323" /> +<TGConnectingPoint num="37" id="3324" /> +<TGConnectingPoint num="38" id="3325" /> +<TGConnectingPoint num="39" id="3326" /> +<extraparam> +<entryCode value="printf("Door is opened!!!\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="3338" > +<cdparam x="380" y="379" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="closed()" /> +<TGConnectingPoint num="0" id="3328" /> +<TGConnectingPoint num="1" id="3329" /> +<TGConnectingPoint num="2" id="3330" /> +<TGConnectingPoint num="3" id="3331" /> +<TGConnectingPoint num="4" id="3332" /> +<TGConnectingPoint num="5" id="3333" /> +<TGConnectingPoint num="6" id="3334" /> +<TGConnectingPoint num="7" id="3335" /> +<TGConnectingPoint num="8" id="3336" /> +<TGConnectingPoint num="9" id="3337" /> +</COMPONENT> + +<COMPONENT type="5103" id="3349" > +<cdparam x="384" y="184" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="open()" /> +<TGConnectingPoint num="0" id="3339" /> +<TGConnectingPoint num="1" id="3340" /> +<TGConnectingPoint num="2" id="3341" /> +<TGConnectingPoint num="3" id="3342" /> +<TGConnectingPoint num="4" id="3343" /> +<TGConnectingPoint num="5" id="3344" /> +<TGConnectingPoint num="6" id="3345" /> +<TGConnectingPoint num="7" id="3346" /> +<TGConnectingPoint num="8" id="3347" /> +<TGConnectingPoint num="9" id="3348" /> +</COMPONENT> + +<COMPONENT type="5106" id="3390" > +<cdparam x="357" y="100" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="IDLE" /> +<TGConnectingPoint num="0" id="3350" /> +<TGConnectingPoint num="1" id="3351" /> +<TGConnectingPoint num="2" id="3352" /> +<TGConnectingPoint num="3" id="3353" /> +<TGConnectingPoint num="4" id="3354" /> +<TGConnectingPoint num="5" id="3355" /> +<TGConnectingPoint num="6" id="3356" /> +<TGConnectingPoint num="7" id="3357" /> +<TGConnectingPoint num="8" id="3358" /> +<TGConnectingPoint num="9" id="3359" /> +<TGConnectingPoint num="10" id="3360" /> +<TGConnectingPoint num="11" id="3361" /> +<TGConnectingPoint num="12" id="3362" /> +<TGConnectingPoint num="13" id="3363" /> +<TGConnectingPoint num="14" id="3364" /> +<TGConnectingPoint num="15" id="3365" /> +<TGConnectingPoint num="16" id="3366" /> +<TGConnectingPoint num="17" id="3367" /> +<TGConnectingPoint num="18" id="3368" /> +<TGConnectingPoint num="19" id="3369" /> +<TGConnectingPoint num="20" id="3370" /> +<TGConnectingPoint num="21" id="3371" /> +<TGConnectingPoint num="22" id="3372" /> +<TGConnectingPoint num="23" id="3373" /> +<TGConnectingPoint num="24" id="3374" /> +<TGConnectingPoint num="25" id="3375" /> +<TGConnectingPoint num="26" id="3376" /> +<TGConnectingPoint num="27" id="3377" /> +<TGConnectingPoint num="28" id="3378" /> +<TGConnectingPoint num="29" id="3379" /> +<TGConnectingPoint num="30" id="3380" /> +<TGConnectingPoint num="31" id="3381" /> +<TGConnectingPoint num="32" id="3382" /> +<TGConnectingPoint num="33" id="3383" /> +<TGConnectingPoint num="34" id="3384" /> +<TGConnectingPoint num="35" id="3385" /> +<TGConnectingPoint num="36" id="3386" /> +<TGConnectingPoint num="37" id="3387" /> +<TGConnectingPoint num="38" id="3388" /> +<TGConnectingPoint num="39" id="3389" /> +<extraparam> +<entryCode value="printf("Door is closed\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="3392" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3391" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Magnetron" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3405" > +<cdparam x="407" y="380" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3401" /> +<TGConnectingPoint num="1" id="3402" /> +<TGConnectingPoint num="2" id="3403" /> +<TGConnectingPoint num="3" id="3404" /> +<P1 x="407" y="310" id="3435" /> +<P2 x="365" y="113" id="3502" /> +<Point x="407" y="327" /> +<Point x="323" y="327" /> +<Point x="323" y="113" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3393" > +<father id="3405" num="0" /> +<cdparam x="407" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3394" > +<father id="3405" num="1" /> +<cdparam x="323" y="327" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3395" > +<father id="3405" num="2" /> +<cdparam x="323" y="113" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3400" > +<father id="3405" num="3" /> +<cdparam x="418" y="343" /> +<sizeparam width="29" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3396" /> +<TGConnectingPoint num="1" id="3397" /> +<TGConnectingPoint num="2" id="3398" /> +<TGConnectingPoint num="3" id="3399" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="OFF()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3412" > +<cdparam x="411" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3411" /> +<P1 x="408" y="242" id="3451" /> +<P2 x="407" y="280" id="3434" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3410" > +<father id="3412" num="0" /> +<cdparam x="411" y="283" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3406" /> +<TGConnectingPoint num="1" id="3407" /> +<TGConnectingPoint num="2" id="3408" /> +<TGConnectingPoint num="3" id="3409" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3419" > +<cdparam x="398" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state1" value="null" /> +<TGConnectingPoint num="0" id="3418" /> +<P1 x="407" y="183" id="3487" /> +<P2 x="408" y="202" id="3446" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3417" > +<father id="3419" num="0" /> +<cdparam x="417" y="195" /> +<sizeparam width="26" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3413" /> +<TGConnectingPoint num="1" id="3414" /> +<TGConnectingPoint num="2" id="3415" /> +<TGConnectingPoint num="3" id="3416" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="ON()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3426" > +<cdparam x="393" y="131" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3425" /> +<P1 x="407" y="131" id="3505" /> +<P2 x="407" y="153" id="3486" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3424" > +<father id="3426" num="0" /> +<cdparam x="393" y="171" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3420" /> +<TGConnectingPoint num="1" id="3421" /> +<TGConnectingPoint num="2" id="3422" /> +<TGConnectingPoint num="3" id="3423" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3433" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="3432" /> +<P1 x="407" y="70" id="3497" /> +<P2 x="407" y="96" id="3500" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3431" > +<father id="3433" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3427" /> +<TGConnectingPoint num="1" id="3428" /> +<TGConnectingPoint num="2" id="3429" /> +<TGConnectingPoint num="3" id="3430" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5104" id="3444" > +<cdparam x="377" y="285" /> +<sizeparam width="61" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="stopM()" /> +<TGConnectingPoint num="0" id="3434" /> +<TGConnectingPoint num="1" id="3435" /> +<TGConnectingPoint num="2" id="3436" /> +<TGConnectingPoint num="3" id="3437" /> +<TGConnectingPoint num="4" id="3438" /> +<TGConnectingPoint num="5" id="3439" /> +<TGConnectingPoint num="6" id="3440" /> +<TGConnectingPoint num="7" id="3441" /> +<TGConnectingPoint num="8" id="3442" /> +<TGConnectingPoint num="9" id="3443" /> +</COMPONENT> + +<COMPONENT type="5106" id="3485" > +<cdparam x="373" y="202" /> +<sizeparam width="71" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state1" value="Running" /> +<TGConnectingPoint num="0" id="3445" /> +<TGConnectingPoint num="1" id="3446" /> +<TGConnectingPoint num="2" id="3447" /> +<TGConnectingPoint num="3" id="3448" /> +<TGConnectingPoint num="4" id="3449" /> +<TGConnectingPoint num="5" id="3450" /> +<TGConnectingPoint num="6" id="3451" /> +<TGConnectingPoint num="7" id="3452" /> +<TGConnectingPoint num="8" id="3453" /> +<TGConnectingPoint num="9" id="3454" /> +<TGConnectingPoint num="10" id="3455" /> +<TGConnectingPoint num="11" id="3456" /> +<TGConnectingPoint num="12" id="3457" /> +<TGConnectingPoint num="13" id="3458" /> +<TGConnectingPoint num="14" id="3459" /> +<TGConnectingPoint num="15" id="3460" /> +<TGConnectingPoint num="16" id="3461" /> +<TGConnectingPoint num="17" id="3462" /> +<TGConnectingPoint num="18" id="3463" /> +<TGConnectingPoint num="19" id="3464" /> +<TGConnectingPoint num="20" id="3465" /> +<TGConnectingPoint num="21" id="3466" /> +<TGConnectingPoint num="22" id="3467" /> +<TGConnectingPoint num="23" id="3468" /> +<TGConnectingPoint num="24" id="3469" /> +<TGConnectingPoint num="25" id="3470" /> +<TGConnectingPoint num="26" id="3471" /> +<TGConnectingPoint num="27" id="3472" /> +<TGConnectingPoint num="28" id="3473" /> +<TGConnectingPoint num="29" id="3474" /> +<TGConnectingPoint num="30" id="3475" /> +<TGConnectingPoint num="31" id="3476" /> +<TGConnectingPoint num="32" id="3477" /> +<TGConnectingPoint num="33" id="3478" /> +<TGConnectingPoint num="34" id="3479" /> +<TGConnectingPoint num="35" id="3480" /> +<TGConnectingPoint num="36" id="3481" /> +<TGConnectingPoint num="37" id="3482" /> +<TGConnectingPoint num="38" id="3483" /> +<TGConnectingPoint num="39" id="3484" /> +<extraparam> +<entryCode value="printf("DANGER: Magnetron is ON\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="3496" > +<cdparam x="376" y="158" /> +<sizeparam width="62" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startM()" /> +<TGConnectingPoint num="0" id="3486" /> +<TGConnectingPoint num="1" id="3487" /> +<TGConnectingPoint num="2" id="3488" /> +<TGConnectingPoint num="3" id="3489" /> +<TGConnectingPoint num="4" id="3490" /> +<TGConnectingPoint num="5" id="3491" /> +<TGConnectingPoint num="6" id="3492" /> +<TGConnectingPoint num="7" id="3493" /> +<TGConnectingPoint num="8" id="3494" /> +<TGConnectingPoint num="9" id="3495" /> +</COMPONENT> + +<COMPONENT type="5100" id="3498" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3497" /> +</COMPONENT> + +<COMPONENT type="5106" id="3539" > +<cdparam x="365" y="96" /> +<sizeparam width="84" height="35" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitForStart" /> +<TGConnectingPoint num="0" id="3499" /> +<TGConnectingPoint num="1" id="3500" /> +<TGConnectingPoint num="2" id="3501" /> +<TGConnectingPoint num="3" id="3502" /> +<TGConnectingPoint num="4" id="3503" /> +<TGConnectingPoint num="5" id="3504" /> +<TGConnectingPoint num="6" id="3505" /> +<TGConnectingPoint num="7" id="3506" /> +<TGConnectingPoint num="8" id="3507" /> +<TGConnectingPoint num="9" id="3508" /> +<TGConnectingPoint num="10" id="3509" /> +<TGConnectingPoint num="11" id="3510" /> +<TGConnectingPoint num="12" id="3511" /> +<TGConnectingPoint num="13" id="3512" /> +<TGConnectingPoint num="14" id="3513" /> +<TGConnectingPoint num="15" id="3514" /> +<TGConnectingPoint num="16" id="3515" /> +<TGConnectingPoint num="17" id="3516" /> +<TGConnectingPoint num="18" id="3517" /> +<TGConnectingPoint num="19" id="3518" /> +<TGConnectingPoint num="20" id="3519" /> +<TGConnectingPoint num="21" id="3520" /> +<TGConnectingPoint num="22" id="3521" /> +<TGConnectingPoint num="23" id="3522" /> +<TGConnectingPoint num="24" id="3523" /> +<TGConnectingPoint num="25" id="3524" /> +<TGConnectingPoint num="26" id="3525" /> +<TGConnectingPoint num="27" id="3526" /> +<TGConnectingPoint num="28" id="3527" /> +<TGConnectingPoint num="29" id="3528" /> +<TGConnectingPoint num="30" id="3529" /> +<TGConnectingPoint num="31" id="3530" /> +<TGConnectingPoint num="32" id="3531" /> +<TGConnectingPoint num="33" id="3532" /> +<TGConnectingPoint num="34" id="3533" /> +<TGConnectingPoint num="35" id="3534" /> +<TGConnectingPoint num="36" id="3535" /> +<TGConnectingPoint num="37" id="3536" /> +<TGConnectingPoint num="38" id="3537" /> +<TGConnectingPoint num="39" id="3538" /> +<extraparam> +<entryCode value="printf("Magnetron is off\n");" /> +</extraparam> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Controller" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="3546" > +<cdparam x="671" y="552" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="3545" /> +<P1 x="671" y="552" id="4007" /> +<P2 x="671" y="557" id="3749" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3544" > +<father id="3546" num="0" /> +<cdparam x="671" y="592" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3540" /> +<TGConnectingPoint num="1" id="3541" /> +<TGConnectingPoint num="2" id="3542" /> +<TGConnectingPoint num="3" id="3543" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3553" > +<cdparam x="671" y="540" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3552" /> +<P1 x="671" y="518" id="3761" /> +<P2 x="671" y="522" id="4006" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3551" > +<father id="3553" num="0" /> +<cdparam x="671" y="580" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3547" /> +<TGConnectingPoint num="1" id="3548" /> +<TGConnectingPoint num="2" id="3549" /> +<TGConnectingPoint num="3" id="3550" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3560" > +<cdparam x="671" y="332" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3559" /> +<P1 x="671" y="332" id="3772" /> +<P2 x="671" y="345" id="3984" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3558" > +<father id="3560" num="0" /> +<cdparam x="671" y="372" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3554" /> +<TGConnectingPoint num="1" id="3555" /> +<TGConnectingPoint num="2" id="3556" /> +<TGConnectingPoint num="3" id="3557" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3567" > +<cdparam x="428" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3566" /> +<P1 x="428" y="380" id="4133" /> +<P2 x="428" y="395" id="3868" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3565" > +<father id="3567" num="0" /> +<cdparam x="428" y="413" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3561" /> +<TGConnectingPoint num="1" id="3562" /> +<TGConnectingPoint num="2" id="3563" /> +<TGConnectingPoint num="3" id="3564" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3574" > +<cdparam x="661" y="175" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3573" /> +<P1 x="661" y="175" id="4040" /> +<P2 x="661" y="180" id="3782" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3572" > +<father id="3574" num="0" /> +<cdparam x="661" y="215" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3568" /> +<TGConnectingPoint num="1" id="3569" /> +<TGConnectingPoint num="2" id="3570" /> +<TGConnectingPoint num="3" id="3571" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3581" > +<cdparam x="661" y="95" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3580" /> +<P1 x="661" y="95" id="3794" /> +<P2 x="661" y="106" id="4051" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3579" > +<father id="3581" num="0" /> +<cdparam x="661" y="135" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3575" /> +<TGConnectingPoint num="1" id="3576" /> +<TGConnectingPoint num="2" id="3577" /> +<TGConnectingPoint num="3" id="3578" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3588" > +<cdparam x="450" y="255" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3587" /> +<P1 x="492" y="208" id="3972" /> +<P2 x="453" y="262" id="3813" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3586" > +<father id="3588" num="0" /> +<cdparam x="450" y="295" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3582" /> +<TGConnectingPoint num="1" id="3583" /> +<TGConnectingPoint num="2" id="3584" /> +<TGConnectingPoint num="3" id="3585" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3595" > +<cdparam x="304" y="257" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3594" /> +<P1 x="357" y="209" id="3846" /> +<P2 x="403" y="262" id="3812" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3593" > +<father id="3595" num="0" /> +<cdparam x="304" y="297" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3589" /> +<TGConnectingPoint num="1" id="3590" /> +<TGConnectingPoint num="2" id="3591" /> +<TGConnectingPoint num="3" id="3592" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3602" > +<cdparam x="409" y="164" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="3601" /> +<P1 x="409" y="164" id="3944" /> +<P2 x="357" y="179" id="3845" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3600" > +<father id="3602" num="0" /> +<cdparam x="409" y="204" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3596" /> +<TGConnectingPoint num="1" id="3597" /> +<TGConnectingPoint num="2" id="3598" /> +<TGConnectingPoint num="3" id="3599" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3609" > +<cdparam x="646" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state1" value="null" /> +<TGConnectingPoint num="0" id="3608" /> +<P1 x="661" y="210" id="3783" /> +<P2 x="471" y="152" id="3943" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3607" > +<father id="3609" num="0" /> +<cdparam x="646" y="310" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3603" /> +<TGConnectingPoint num="1" id="3604" /> +<TGConnectingPoint num="2" id="3605" /> +<TGConnectingPoint num="3" id="3606" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3616" > +<cdparam x="660" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3615" /> +<P1 x="661" y="141" id="4056" /> +<P2 x="661" y="145" id="4039" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3614" > +<father id="3616" num="0" /> +<cdparam x="660" y="218" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3610" /> +<TGConnectingPoint num="1" id="3611" /> +<TGConnectingPoint num="2" id="3612" /> +<TGConnectingPoint num="3" id="3613" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3623" > +<cdparam x="659" y="110" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3622" /> +<P1 x="661" y="61" id="3920" /> +<P2 x="661" y="65" id="3793" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3621" > +<father id="3623" num="0" /> +<cdparam x="659" y="150" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3617" /> +<TGConnectingPoint num="1" id="3618" /> +<TGConnectingPoint num="2" id="3619" /> +<TGConnectingPoint num="3" id="3620" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3630" > +<cdparam x="739" y="573" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3629" /> +<P1 x="671" y="485" id="4029" /> +<P2 x="671" y="488" id="3760" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3628" > +<father id="3630" num="0" /> +<cdparam x="739" y="613" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3624" /> +<TGConnectingPoint num="1" id="3625" /> +<TGConnectingPoint num="2" id="3626" /> +<TGConnectingPoint num="3" id="3627" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3637" > +<cdparam x="769" y="593" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3636" /> +<P1 x="671" y="443" id="4097" /> +<P2 x="671" y="455" id="4028" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3635" > +<father id="3637" num="0" /> +<cdparam x="769" y="633" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3631" /> +<TGConnectingPoint num="1" id="3632" /> +<TGConnectingPoint num="2" id="3633" /> +<TGConnectingPoint num="3" id="3634" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3650" > +<cdparam x="656" y="608" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3646" /> +<TGConnectingPoint num="1" id="3647" /> +<TGConnectingPoint num="2" id="3648" /> +<TGConnectingPoint num="3" id="3649" /> +<P1 x="671" y="587" id="3750" /> +<P2 x="478" y="432" id="3880" /> +<Point x="671" y="595" /> +<Point x="548" y="595" /> +<Point x="548" y="432" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3638" > +<father id="3650" num="0" /> +<cdparam x="671" y="595" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3639" > +<father id="3650" num="1" /> +<cdparam x="548" y="595" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3640" > +<father id="3650" num="2" /> +<cdparam x="548" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3645" > +<father id="3650" num="3" /> +<cdparam x="656" y="648" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3641" /> +<TGConnectingPoint num="1" id="3642" /> +<TGConnectingPoint num="2" id="3643" /> +<TGConnectingPoint num="3" id="3644" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3657" > +<cdparam x="770" y="523" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3656" /> +<P1 x="671" y="375" id="3985" /> +<P2 x="671" y="393" id="4092" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3655" > +<father id="3657" num="0" /> +<cdparam x="770" y="563" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3651" /> +<TGConnectingPoint num="1" id="3652" /> +<TGConnectingPoint num="2" id="3653" /> +<TGConnectingPoint num="3" id="3654" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3664" > +<cdparam x="642" y="363" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Receive signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3663" /> +<P1 x="670" y="287" id="3857" /> +<P2 x="671" y="302" id="3771" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3662" > +<father id="3664" num="0" /> +<cdparam x="654" y="379" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3658" /> +<TGConnectingPoint num="1" id="3659" /> +<TGConnectingPoint num="2" id="3660" /> +<TGConnectingPoint num="3" id="3661" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3677" > +<cdparam x="425" y="562" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to state0" value="null" /> +<TGConnectingPoint num="0" id="3673" /> +<TGConnectingPoint num="1" id="3674" /> +<TGConnectingPoint num="2" id="3675" /> +<TGConnectingPoint num="3" id="3676" /> +<P1 x="403" y="445" id="3881" /> +<P2 x="378" y="432" id="3879" /> +<Point x="403" y="480" /> +<Point x="319" y="480" /> +<Point x="319" y="432" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3665" > +<father id="3677" num="0" /> +<cdparam x="403" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3666" > +<father id="3677" num="1" /> +<cdparam x="319" y="480" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3667" > +<father id="3677" num="2" /> +<cdparam x="319" y="432" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3672" > +<father id="3677" num="3" /> +<cdparam x="158" y="477" /> +<sizeparam width="205" height="60" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3668" /> +<TGConnectingPoint num="1" id="3669" /> +<TGConnectingPoint num="2" id="3670" /> +<TGConnectingPoint num="3" id="3671" /> +<extraparam> +<guard value="[ remainingTime>0 ]" /> +<afterMin value="1" /> +<afterMax value="1" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="remainingTime= remainingTime -1" /> +<actions value="durationModified(remainingTime)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3684" > +<cdparam x="499" y="496" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Receive signal" value="null" /> +<TGConnectingPoint num="0" id="3683" /> +<P1 x="478" y="420" id="3871" /> +<P2 x="670" y="257" id="3856" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3682" > +<father id="3684" num="0" /> +<cdparam x="513" y="302" /> +<sizeparam width="201" height="60" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3678" /> +<TGConnectingPoint num="1" id="3679" /> +<TGConnectingPoint num="2" id="3680" /> +<TGConnectingPoint num="3" id="3681" /> +<extraparam> +<guard value="[remainingTime > 0 ]" /> +<afterMin value="1" /> +<afterMax value="1" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="remainingTime=remainingTime -1" /> +<actions value="durationModified(remainingTime)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3691" > +<cdparam x="450" y="562" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3690" /> +<P1 x="428" y="445" id="3873" /> +<P2 x="428" y="507" id="3995" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3689" > +<father id="3691" num="0" /> +<cdparam x="397" y="475" /> +<sizeparam width="139" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3685" /> +<TGConnectingPoint num="1" id="3686" /> +<TGConnectingPoint num="2" id="3687" /> +<TGConnectingPoint num="3" id="3688" /> +<extraparam> +<guard value="[ remainingTime==0 ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3698" > +<cdparam x="450" y="487" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="3697" /> +<P1 x="428" y="334" id="4018" /> +<P2 x="428" y="350" id="4132" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3696" > +<father id="3698" num="0" /> +<cdparam x="252" y="341" /> +<sizeparam width="166" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3692" /> +<TGConnectingPoint num="1" id="3693" /> +<TGConnectingPoint num="2" id="3694" /> +<TGConnectingPoint num="3" id="3695" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="remainingTime=duration" /> +<actions value="startCooking(remainingTime)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3713" > +<cdparam x="419" y="547" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state1" value="null" /> +<TGConnectingPoint num="0" id="3708" /> +<TGConnectingPoint num="1" id="3709" /> +<TGConnectingPoint num="2" id="3710" /> +<TGConnectingPoint num="3" id="3711" /> +<TGConnectingPoint num="4" id="3712" /> +<P1 x="428" y="579" id="3909" /> +<P2 x="389" y="119" id="3930" /> +<Point x="428" y="603" /> +<Point x="220" y="603" /> +<Point x="220" y="83" /> +<Point x="389" y="83" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3699" > +<father id="3713" num="0" /> +<cdparam x="428" y="603" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3700" > +<father id="3713" num="1" /> +<cdparam x="220" y="603" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3701" > +<father id="3713" num="2" /> +<cdparam x="220" y="83" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3702" > +<father id="3713" num="3" /> +<cdparam x="389" y="83" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3707" > +<father id="3713" num="4" /> +<cdparam x="448" y="590" /> +<sizeparam width="59" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3703" /> +<TGConnectingPoint num="1" id="3704" /> +<TGConnectingPoint num="2" id="3705" /> +<TGConnectingPoint num="3" id="3706" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="5" /> +<afterMax value="9" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3720" > +<cdparam x="419" y="633" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3719" /> +<P1 x="428" y="537" id="3996" /> +<P2 x="428" y="549" id="3908" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3718" > +<father id="3720" num="0" /> +<cdparam x="419" y="673" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3714" /> +<TGConnectingPoint num="1" id="3715" /> +<TGConnectingPoint num="2" id="3716" /> +<TGConnectingPoint num="3" id="3717" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3727" > +<cdparam x="471" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3726" /> +<P1 x="471" y="141" id="3934" /> +<P2 x="661" y="31" id="3919" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3725" > +<father id="3727" num="0" /> +<cdparam x="471" y="223" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3721" /> +<TGConnectingPoint num="1" id="3722" /> +<TGConnectingPoint num="2" id="3723" /> +<TGConnectingPoint num="3" id="3724" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3734" > +<cdparam x="463" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state1 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3733" /> +<P1 x="450" y="164" id="3945" /> +<P2 x="492" y="178" id="3971" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3732" > +<father id="3734" num="0" /> +<cdparam x="400" y="221" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3728" /> +<TGConnectingPoint num="1" id="3729" /> +<TGConnectingPoint num="2" id="3730" /> +<TGConnectingPoint num="3" id="3731" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3741" > +<cdparam x="438" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state1" value="null" /> +<TGConnectingPoint num="0" id="3740" /> +<P1 x="430" y="100" id="3982" /> +<P2 x="430" y="119" id="3931" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3739" > +<father id="3741" num="0" /> +<cdparam x="442" y="129" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3735" /> +<TGConnectingPoint num="1" id="3736" /> +<TGConnectingPoint num="2" id="3737" /> +<TGConnectingPoint num="3" id="3738" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="3748" > +<cdparam x="449" y="388" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="3747" /> +<P1 x="428" y="298" id="3810" /> +<P2 x="428" y="304" id="4017" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="3746" > +<father id="3748" num="0" /> +<cdparam x="449" y="428" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="3742" /> +<TGConnectingPoint num="1" id="3743" /> +<TGConnectingPoint num="2" id="3744" /> +<TGConnectingPoint num="3" id="3745" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="3759" > +<cdparam x="605" y="562" /> +<sizeparam width="133" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="3749" /> +<TGConnectingPoint num="1" id="3750" /> +<TGConnectingPoint num="2" id="3751" /> +<TGConnectingPoint num="3" id="3752" /> +<TGConnectingPoint num="4" id="3753" /> +<TGConnectingPoint num="5" id="3754" /> +<TGConnectingPoint num="6" id="3755" /> +<TGConnectingPoint num="7" id="3756" /> +<TGConnectingPoint num="8" id="3757" /> +<TGConnectingPoint num="9" id="3758" /> +</COMPONENT> + +<COMPONENT type="5103" id="3770" > +<cdparam x="630" y="493" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_closed()" /> +<TGConnectingPoint num="0" id="3760" /> +<TGConnectingPoint num="1" id="3761" /> +<TGConnectingPoint num="2" id="3762" /> +<TGConnectingPoint num="3" id="3763" /> +<TGConnectingPoint num="4" id="3764" /> +<TGConnectingPoint num="5" id="3765" /> +<TGConnectingPoint num="6" id="3766" /> +<TGConnectingPoint num="7" id="3767" /> +<TGConnectingPoint num="8" id="3768" /> +<TGConnectingPoint num="9" id="3769" /> +</COMPONENT> + +<COMPONENT type="5103" id="3781" > +<cdparam x="634" y="307" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_open()" /> +<TGConnectingPoint num="0" id="3771" /> +<TGConnectingPoint num="1" id="3772" /> +<TGConnectingPoint num="2" id="3773" /> +<TGConnectingPoint num="3" id="3774" /> +<TGConnectingPoint num="4" id="3775" /> +<TGConnectingPoint num="5" id="3776" /> +<TGConnectingPoint num="6" id="3777" /> +<TGConnectingPoint num="7" id="3778" /> +<TGConnectingPoint num="8" id="3779" /> +<TGConnectingPoint num="9" id="3780" /> +</COMPONENT> + +<COMPONENT type="5103" id="3792" > +<cdparam x="620" y="185" /> +<sizeparam width="82" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_closed()" /> +<TGConnectingPoint num="0" id="3782" /> +<TGConnectingPoint num="1" id="3783" /> +<TGConnectingPoint num="2" id="3784" /> +<TGConnectingPoint num="3" id="3785" /> +<TGConnectingPoint num="4" id="3786" /> +<TGConnectingPoint num="5" id="3787" /> +<TGConnectingPoint num="6" id="3788" /> +<TGConnectingPoint num="7" id="3789" /> +<TGConnectingPoint num="8" id="3790" /> +<TGConnectingPoint num="9" id="3791" /> +</COMPONENT> + +<COMPONENT type="5103" id="3803" > +<cdparam x="624" y="70" /> +<sizeparam width="74" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_open()" /> +<TGConnectingPoint num="0" id="3793" /> +<TGConnectingPoint num="1" id="3794" /> +<TGConnectingPoint num="2" id="3795" /> +<TGConnectingPoint num="3" id="3796" /> +<TGConnectingPoint num="4" id="3797" /> +<TGConnectingPoint num="5" id="3798" /> +<TGConnectingPoint num="6" id="3799" /> +<TGConnectingPoint num="7" id="3800" /> +<TGConnectingPoint num="8" id="3801" /> +<TGConnectingPoint num="9" id="3802" /> +</COMPONENT> + +<COMPONENT type="5106" id="3844" > +<cdparam x="378" y="262" /> +<sizeparam width="100" height="36" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Starting" /> +<TGConnectingPoint num="0" id="3804" /> +<TGConnectingPoint num="1" id="3805" /> +<TGConnectingPoint num="2" id="3806" /> +<TGConnectingPoint num="3" id="3807" /> +<TGConnectingPoint num="4" id="3808" /> +<TGConnectingPoint num="5" id="3809" /> +<TGConnectingPoint num="6" id="3810" /> +<TGConnectingPoint num="7" id="3811" /> +<TGConnectingPoint num="8" id="3812" /> +<TGConnectingPoint num="9" id="3813" /> +<TGConnectingPoint num="10" id="3814" /> +<TGConnectingPoint num="11" id="3815" /> +<TGConnectingPoint num="12" id="3816" /> +<TGConnectingPoint num="13" id="3817" /> +<TGConnectingPoint num="14" id="3818" /> +<TGConnectingPoint num="15" id="3819" /> +<TGConnectingPoint num="16" id="3820" /> +<TGConnectingPoint num="17" id="3821" /> +<TGConnectingPoint num="18" id="3822" /> +<TGConnectingPoint num="19" id="3823" /> +<TGConnectingPoint num="20" id="3824" /> +<TGConnectingPoint num="21" id="3825" /> +<TGConnectingPoint num="22" id="3826" /> +<TGConnectingPoint num="23" id="3827" /> +<TGConnectingPoint num="24" id="3828" /> +<TGConnectingPoint num="25" id="3829" /> +<TGConnectingPoint num="26" id="3830" /> +<TGConnectingPoint num="27" id="3831" /> +<TGConnectingPoint num="28" id="3832" /> +<TGConnectingPoint num="29" id="3833" /> +<TGConnectingPoint num="30" id="3834" /> +<TGConnectingPoint num="31" id="3835" /> +<TGConnectingPoint num="32" id="3836" /> +<TGConnectingPoint num="33" id="3837" /> +<TGConnectingPoint num="34" id="3838" /> +<TGConnectingPoint num="35" id="3839" /> +<TGConnectingPoint num="36" id="3840" /> +<TGConnectingPoint num="37" id="3841" /> +<TGConnectingPoint num="38" id="3842" /> +<TGConnectingPoint num="39" id="3843" /> +<extraparam> +<entryCode value="printf("Starting microwave, lets go!\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="3855" > +<cdparam x="287" y="184" /> +<sizeparam width="141" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="remoteStart(duration)" /> +<TGConnectingPoint num="0" id="3845" /> +<TGConnectingPoint num="1" id="3846" /> +<TGConnectingPoint num="2" id="3847" /> +<TGConnectingPoint num="3" id="3848" /> +<TGConnectingPoint num="4" id="3849" /> +<TGConnectingPoint num="5" id="3850" /> +<TGConnectingPoint num="6" id="3851" /> +<TGConnectingPoint num="7" id="3852" /> +<TGConnectingPoint num="8" id="3853" /> +<TGConnectingPoint num="9" id="3854" /> +</COMPONENT> + +<COMPONENT type="5104" id="3866" > +<cdparam x="643" y="262" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Receive signal" value="open()" /> +<TGConnectingPoint num="0" id="3856" /> +<TGConnectingPoint num="1" id="3857" /> +<TGConnectingPoint num="2" id="3858" /> +<TGConnectingPoint num="3" id="3859" /> +<TGConnectingPoint num="4" id="3860" /> +<TGConnectingPoint num="5" id="3861" /> +<TGConnectingPoint num="6" id="3862" /> +<TGConnectingPoint num="7" id="3863" /> +<TGConnectingPoint num="8" id="3864" /> +<TGConnectingPoint num="9" id="3865" /> +</COMPONENT> + +<COMPONENT type="5106" id="3907" > +<cdparam x="378" y="395" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="ReallyHeating" /> +<TGConnectingPoint num="0" id="3867" /> +<TGConnectingPoint num="1" id="3868" /> +<TGConnectingPoint num="2" id="3869" /> +<TGConnectingPoint num="3" id="3870" /> +<TGConnectingPoint num="4" id="3871" /> +<TGConnectingPoint num="5" id="3872" /> +<TGConnectingPoint num="6" id="3873" /> +<TGConnectingPoint num="7" id="3874" /> +<TGConnectingPoint num="8" id="3875" /> +<TGConnectingPoint num="9" id="3876" /> +<TGConnectingPoint num="10" id="3877" /> +<TGConnectingPoint num="11" id="3878" /> +<TGConnectingPoint num="12" id="3879" /> +<TGConnectingPoint num="13" id="3880" /> +<TGConnectingPoint num="14" id="3881" /> +<TGConnectingPoint num="15" id="3882" /> +<TGConnectingPoint num="16" id="3883" /> +<TGConnectingPoint num="17" id="3884" /> +<TGConnectingPoint num="18" id="3885" /> +<TGConnectingPoint num="19" id="3886" /> +<TGConnectingPoint num="20" id="3887" /> +<TGConnectingPoint num="21" id="3888" /> +<TGConnectingPoint num="22" id="3889" /> +<TGConnectingPoint num="23" id="3890" /> +<TGConnectingPoint num="24" id="3891" /> +<TGConnectingPoint num="25" id="3892" /> +<TGConnectingPoint num="26" id="3893" /> +<TGConnectingPoint num="27" id="3894" /> +<TGConnectingPoint num="28" id="3895" /> +<TGConnectingPoint num="29" id="3896" /> +<TGConnectingPoint num="30" id="3897" /> +<TGConnectingPoint num="31" id="3898" /> +<TGConnectingPoint num="32" id="3899" /> +<TGConnectingPoint num="33" id="3900" /> +<TGConnectingPoint num="34" id="3901" /> +<TGConnectingPoint num="35" id="3902" /> +<TGConnectingPoint num="36" id="3903" /> +<TGConnectingPoint num="37" id="3904" /> +<TGConnectingPoint num="38" id="3905" /> +<TGConnectingPoint num="39" id="3906" /> +<extraparam> +<entryCode value="printf("Heating ; remaining time :%d\n", remainingTime);" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="3918" > +<cdparam x="398" y="554" /> +<sizeparam width="60" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="ringBell()" /> +<TGConnectingPoint num="0" id="3908" /> +<TGConnectingPoint num="1" id="3909" /> +<TGConnectingPoint num="2" id="3910" /> +<TGConnectingPoint num="3" id="3911" /> +<TGConnectingPoint num="4" id="3912" /> +<TGConnectingPoint num="5" id="3913" /> +<TGConnectingPoint num="6" id="3914" /> +<TGConnectingPoint num="7" id="3915" /> +<TGConnectingPoint num="8" id="3916" /> +<TGConnectingPoint num="9" id="3917" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="5104" id="3929" > +<cdparam x="634" y="36" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="open()" /> +<TGConnectingPoint num="0" id="3919" /> +<TGConnectingPoint num="1" id="3920" /> +<TGConnectingPoint num="2" id="3921" /> +<TGConnectingPoint num="3" id="3922" /> +<TGConnectingPoint num="4" id="3923" /> +<TGConnectingPoint num="5" id="3924" /> +<TGConnectingPoint num="6" id="3925" /> +<TGConnectingPoint num="7" id="3926" /> +<TGConnectingPoint num="8" id="3927" /> +<TGConnectingPoint num="9" id="3928" /> +</COMPONENT> + +<COMPONENT type="5106" id="3970" > +<cdparam x="389" y="119" /> +<sizeparam width="82" height="45" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state1" value="Idle" /> +<TGConnectingPoint num="0" id="3930" /> +<TGConnectingPoint num="1" id="3931" /> +<TGConnectingPoint num="2" id="3932" /> +<TGConnectingPoint num="3" id="3933" /> +<TGConnectingPoint num="4" id="3934" /> +<TGConnectingPoint num="5" id="3935" /> +<TGConnectingPoint num="6" id="3936" /> +<TGConnectingPoint num="7" id="3937" /> +<TGConnectingPoint num="8" id="3938" /> +<TGConnectingPoint num="9" id="3939" /> +<TGConnectingPoint num="10" id="3940" /> +<TGConnectingPoint num="11" id="3941" /> +<TGConnectingPoint num="12" id="3942" /> +<TGConnectingPoint num="13" id="3943" /> +<TGConnectingPoint num="14" id="3944" /> +<TGConnectingPoint num="15" id="3945" /> +<TGConnectingPoint num="16" id="3946" /> +<TGConnectingPoint num="17" id="3947" /> +<TGConnectingPoint num="18" id="3948" /> +<TGConnectingPoint num="19" id="3949" /> +<TGConnectingPoint num="20" id="3950" /> +<TGConnectingPoint num="21" id="3951" /> +<TGConnectingPoint num="22" id="3952" /> +<TGConnectingPoint num="23" id="3953" /> +<TGConnectingPoint num="24" id="3954" /> +<TGConnectingPoint num="25" id="3955" /> +<TGConnectingPoint num="26" id="3956" /> +<TGConnectingPoint num="27" id="3957" /> +<TGConnectingPoint num="28" id="3958" /> +<TGConnectingPoint num="29" id="3959" /> +<TGConnectingPoint num="30" id="3960" /> +<TGConnectingPoint num="31" id="3961" /> +<TGConnectingPoint num="32" id="3962" /> +<TGConnectingPoint num="33" id="3963" /> +<TGConnectingPoint num="34" id="3964" /> +<TGConnectingPoint num="35" id="3965" /> +<TGConnectingPoint num="36" id="3966" /> +<TGConnectingPoint num="37" id="3967" /> +<TGConnectingPoint num="38" id="3968" /> +<TGConnectingPoint num="39" id="3969" /> +<breakpoint /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="3981" > +<cdparam x="442" y="183" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="start(duration)" /> +<TGConnectingPoint num="0" id="3971" /> +<TGConnectingPoint num="1" id="3972" /> +<TGConnectingPoint num="2" id="3973" /> +<TGConnectingPoint num="3" id="3974" /> +<TGConnectingPoint num="4" id="3975" /> +<TGConnectingPoint num="5" id="3976" /> +<TGConnectingPoint num="6" id="3977" /> +<TGConnectingPoint num="7" id="3978" /> +<TGConnectingPoint num="8" id="3979" /> +<TGConnectingPoint num="9" id="3980" /> +</COMPONENT> + +<COMPONENT type="5100" id="3983" > +<cdparam x="423" y="80" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="3982" /> +</COMPONENT> + +<COMPONENT type="5103" id="3994" > +<cdparam x="619" y="350" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="stopMagnetron()" /> +<TGConnectingPoint num="0" id="3984" /> +<TGConnectingPoint num="1" id="3985" /> +<TGConnectingPoint num="2" id="3986" /> +<TGConnectingPoint num="3" id="3987" /> +<TGConnectingPoint num="4" id="3988" /> +<TGConnectingPoint num="5" id="3989" /> +<TGConnectingPoint num="6" id="3990" /> +<TGConnectingPoint num="7" id="3991" /> +<TGConnectingPoint num="8" id="3992" /> +<TGConnectingPoint num="9" id="3993" /> +</COMPONENT> + +<COMPONENT type="5103" id="4005" > +<cdparam x="376" y="512" /> +<sizeparam width="104" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="stopMagnetron()" /> +<TGConnectingPoint num="0" id="3995" /> +<TGConnectingPoint num="1" id="3996" /> +<TGConnectingPoint num="2" id="3997" /> +<TGConnectingPoint num="3" id="3998" /> +<TGConnectingPoint num="4" id="3999" /> +<TGConnectingPoint num="5" id="4000" /> +<TGConnectingPoint num="6" id="4001" /> +<TGConnectingPoint num="7" id="4002" /> +<TGConnectingPoint num="8" id="4003" /> +<TGConnectingPoint num="9" id="4004" /> +</COMPONENT> + +<COMPONENT type="5103" id="4016" > +<cdparam x="619" y="527" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startMagnetron()" /> +<TGConnectingPoint num="0" id="4006" /> +<TGConnectingPoint num="1" id="4007" /> +<TGConnectingPoint num="2" id="4008" /> +<TGConnectingPoint num="3" id="4009" /> +<TGConnectingPoint num="4" id="4010" /> +<TGConnectingPoint num="5" id="4011" /> +<TGConnectingPoint num="6" id="4012" /> +<TGConnectingPoint num="7" id="4013" /> +<TGConnectingPoint num="8" id="4014" /> +<TGConnectingPoint num="9" id="4015" /> +</COMPONENT> + +<COMPONENT type="5103" id="4027" > +<cdparam x="376" y="309" /> +<sizeparam width="105" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startMagnetron()" /> +<TGConnectingPoint num="0" id="4017" /> +<TGConnectingPoint num="1" id="4018" /> +<TGConnectingPoint num="2" id="4019" /> +<TGConnectingPoint num="3" id="4020" /> +<TGConnectingPoint num="4" id="4021" /> +<TGConnectingPoint num="5" id="4022" /> +<TGConnectingPoint num="6" id="4023" /> +<TGConnectingPoint num="7" id="4024" /> +<TGConnectingPoint num="8" id="4025" /> +<TGConnectingPoint num="9" id="4026" /> +</COMPONENT> + +<COMPONENT type="5104" id="4038" > +<cdparam x="640" y="460" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="closed()" /> +<TGConnectingPoint num="0" id="4028" /> +<TGConnectingPoint num="1" id="4029" /> +<TGConnectingPoint num="2" id="4030" /> +<TGConnectingPoint num="3" id="4031" /> +<TGConnectingPoint num="4" id="4032" /> +<TGConnectingPoint num="5" id="4033" /> +<TGConnectingPoint num="6" id="4034" /> +<TGConnectingPoint num="7" id="4035" /> +<TGConnectingPoint num="8" id="4036" /> +<TGConnectingPoint num="9" id="4037" /> +</COMPONENT> + +<COMPONENT type="5104" id="4049" > +<cdparam x="630" y="150" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="closed()" /> +<TGConnectingPoint num="0" id="4039" /> +<TGConnectingPoint num="1" id="4040" /> +<TGConnectingPoint num="2" id="4041" /> +<TGConnectingPoint num="3" id="4042" /> +<TGConnectingPoint num="4" id="4043" /> +<TGConnectingPoint num="5" id="4044" /> +<TGConnectingPoint num="6" id="4045" /> +<TGConnectingPoint num="7" id="4046" /> +<TGConnectingPoint num="8" id="4047" /> +<TGConnectingPoint num="9" id="4048" /> +</COMPONENT> + +<COMPONENT type="5106" id="4090" > +<cdparam x="603" y="106" /> +<sizeparam width="116" height="35" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="DoorOpened" /> +<TGConnectingPoint num="0" id="4050" /> +<TGConnectingPoint num="1" id="4051" /> +<TGConnectingPoint num="2" id="4052" /> +<TGConnectingPoint num="3" id="4053" /> +<TGConnectingPoint num="4" id="4054" /> +<TGConnectingPoint num="5" id="4055" /> +<TGConnectingPoint num="6" id="4056" /> +<TGConnectingPoint num="7" id="4057" /> +<TGConnectingPoint num="8" id="4058" /> +<TGConnectingPoint num="9" id="4059" /> +<TGConnectingPoint num="10" id="4060" /> +<TGConnectingPoint num="11" id="4061" /> +<TGConnectingPoint num="12" id="4062" /> +<TGConnectingPoint num="13" id="4063" /> +<TGConnectingPoint num="14" id="4064" /> +<TGConnectingPoint num="15" id="4065" /> +<TGConnectingPoint num="16" id="4066" /> +<TGConnectingPoint num="17" id="4067" /> +<TGConnectingPoint num="18" id="4068" /> +<TGConnectingPoint num="19" id="4069" /> +<TGConnectingPoint num="20" id="4070" /> +<TGConnectingPoint num="21" id="4071" /> +<TGConnectingPoint num="22" id="4072" /> +<TGConnectingPoint num="23" id="4073" /> +<TGConnectingPoint num="24" id="4074" /> +<TGConnectingPoint num="25" id="4075" /> +<TGConnectingPoint num="26" id="4076" /> +<TGConnectingPoint num="27" id="4077" /> +<TGConnectingPoint num="28" id="4078" /> +<TGConnectingPoint num="29" id="4079" /> +<TGConnectingPoint num="30" id="4080" /> +<TGConnectingPoint num="31" id="4081" /> +<TGConnectingPoint num="32" id="4082" /> +<TGConnectingPoint num="33" id="4083" /> +<TGConnectingPoint num="34" id="4084" /> +<TGConnectingPoint num="35" id="4085" /> +<TGConnectingPoint num="36" id="4086" /> +<TGConnectingPoint num="37" id="4087" /> +<TGConnectingPoint num="38" id="4088" /> +<TGConnectingPoint num="39" id="4089" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="4131" > +<cdparam x="571" y="393" /> +<sizeparam width="200" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="DoorOpenedWhileHeating" /> +<TGConnectingPoint num="0" id="4091" /> +<TGConnectingPoint num="1" id="4092" /> +<TGConnectingPoint num="2" id="4093" /> +<TGConnectingPoint num="3" id="4094" /> +<TGConnectingPoint num="4" id="4095" /> +<TGConnectingPoint num="5" id="4096" /> +<TGConnectingPoint num="6" id="4097" /> +<TGConnectingPoint num="7" id="4098" /> +<TGConnectingPoint num="8" id="4099" /> +<TGConnectingPoint num="9" id="4100" /> +<TGConnectingPoint num="10" id="4101" /> +<TGConnectingPoint num="11" id="4102" /> +<TGConnectingPoint num="12" id="4103" /> +<TGConnectingPoint num="13" id="4104" /> +<TGConnectingPoint num="14" id="4105" /> +<TGConnectingPoint num="15" id="4106" /> +<TGConnectingPoint num="16" id="4107" /> +<TGConnectingPoint num="17" id="4108" /> +<TGConnectingPoint num="18" id="4109" /> +<TGConnectingPoint num="19" id="4110" /> +<TGConnectingPoint num="20" id="4111" /> +<TGConnectingPoint num="21" id="4112" /> +<TGConnectingPoint num="22" id="4113" /> +<TGConnectingPoint num="23" id="4114" /> +<TGConnectingPoint num="24" id="4115" /> +<TGConnectingPoint num="25" id="4116" /> +<TGConnectingPoint num="26" id="4117" /> +<TGConnectingPoint num="27" id="4118" /> +<TGConnectingPoint num="28" id="4119" /> +<TGConnectingPoint num="29" id="4120" /> +<TGConnectingPoint num="30" id="4121" /> +<TGConnectingPoint num="31" id="4122" /> +<TGConnectingPoint num="32" id="4123" /> +<TGConnectingPoint num="33" id="4124" /> +<TGConnectingPoint num="34" id="4125" /> +<TGConnectingPoint num="35" id="4126" /> +<TGConnectingPoint num="36" id="4127" /> +<TGConnectingPoint num="37" id="4128" /> +<TGConnectingPoint num="38" id="4129" /> +<TGConnectingPoint num="39" id="4130" /> +<breakpoint /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="4142" > +<cdparam x="362" y="355" /> +<sizeparam width="133" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="obs_magnetronStart()" /> +<TGConnectingPoint num="0" id="4132" /> +<TGConnectingPoint num="1" id="4133" /> +<TGConnectingPoint num="2" id="4134" /> +<TGConnectingPoint num="3" id="4135" /> +<TGConnectingPoint num="4" id="4136" /> +<TGConnectingPoint num="5" id="4137" /> +<TGConnectingPoint num="6" id="4138" /> +<TGConnectingPoint num="7" id="4139" /> +<TGConnectingPoint num="8" id="4140" /> +<TGConnectingPoint num="9" id="4141" /> +</COMPONENT> + +<COMPONENT type="5106" id="4183" > +<cdparam x="251" y="240" /> +<sizeparam width="543" height="394" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Heating" /> +<TGConnectingPoint num="0" id="4143" /> +<TGConnectingPoint num="1" id="4144" /> +<TGConnectingPoint num="2" id="4145" /> +<TGConnectingPoint num="3" id="4146" /> +<TGConnectingPoint num="4" id="4147" /> +<TGConnectingPoint num="5" id="4148" /> +<TGConnectingPoint num="6" id="4149" /> +<TGConnectingPoint num="7" id="4150" /> +<TGConnectingPoint num="8" id="4151" /> +<TGConnectingPoint num="9" id="4152" /> +<TGConnectingPoint num="10" id="4153" /> +<TGConnectingPoint num="11" id="4154" /> +<TGConnectingPoint num="12" id="4155" /> +<TGConnectingPoint num="13" id="4156" /> +<TGConnectingPoint num="14" id="4157" /> +<TGConnectingPoint num="15" id="4158" /> +<TGConnectingPoint num="16" id="4159" /> +<TGConnectingPoint num="17" id="4160" /> +<TGConnectingPoint num="18" id="4161" /> +<TGConnectingPoint num="19" id="4162" /> +<TGConnectingPoint num="20" id="4163" /> +<TGConnectingPoint num="21" id="4164" /> +<TGConnectingPoint num="22" id="4165" /> +<TGConnectingPoint num="23" id="4166" /> +<TGConnectingPoint num="24" id="4167" /> +<TGConnectingPoint num="25" id="4168" /> +<TGConnectingPoint num="26" id="4169" /> +<TGConnectingPoint num="27" id="4170" /> +<TGConnectingPoint num="28" id="4171" /> +<TGConnectingPoint num="29" id="4172" /> +<TGConnectingPoint num="30" id="4173" /> +<TGConnectingPoint num="31" id="4174" /> +<TGConnectingPoint num="32" id="4175" /> +<TGConnectingPoint num="33" id="4176" /> +<TGConnectingPoint num="34" id="4177" /> +<TGConnectingPoint num="35" id="4178" /> +<TGConnectingPoint num="36" id="4179" /> +<TGConnectingPoint num="37" id="4180" /> +<TGConnectingPoint num="38" id="4181" /> +<TGConnectingPoint num="39" id="4182" /> +<extraparam> +</extraparam> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="ControlPanel" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="4196" > +<cdparam x="504" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="4192" /> +<TGConnectingPoint num="1" id="4193" /> +<TGConnectingPoint num="2" id="4194" /> +<TGConnectingPoint num="3" id="4195" /> +<P1 x="504" y="232" id="4255" /> +<P2 x="454" y="123" id="4216" /> +<Point x="503" y="254" /> +<Point x="425" y="254" /> +<Point x="426" y="123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4184" > +<father id="4196" num="0" /> +<cdparam x="503" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4185" > +<father id="4196" num="1" /> +<cdparam x="425" y="254" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4186" > +<father id="4196" num="2" /> +<cdparam x="426" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4191" > +<father id="4196" num="3" /> +<cdparam x="465" y="275" /> +<sizeparam width="100" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4187" /> +<TGConnectingPoint num="1" id="4188" /> +<TGConnectingPoint num="2" id="4189" /> +<TGConnectingPoint num="3" id="4190" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4205" > +<cdparam x="504" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="4203" /> +<TGConnectingPoint num="1" id="4204" /> +<P1 x="504" y="148" id="4219" /> +<P2 x="504" y="202" id="4254" /> +<Point x="504" y="175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4197" > +<father id="4205" num="0" /> +<cdparam x="504" y="175" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4202" > +<father id="4205" num="1" /> +<cdparam x="504" y="188" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4198" /> +<TGConnectingPoint num="1" id="4199" /> +<TGConnectingPoint num="2" id="4200" /> +<TGConnectingPoint num="3" id="4201" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4212" > +<cdparam x="385" y="75" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="4211" /> +<P1 x="481" y="74" id="4265" /> +<P2 x="504" y="98" id="4214" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4210" > +<father id="4212" num="0" /> +<cdparam x="385" y="115" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4206" /> +<TGConnectingPoint num="1" id="4207" /> +<TGConnectingPoint num="2" id="4208" /> +<TGConnectingPoint num="3" id="4209" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="4253" > +<cdparam x="454" y="98" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Active" /> +<TGConnectingPoint num="0" id="4213" /> +<TGConnectingPoint num="1" id="4214" /> +<TGConnectingPoint num="2" id="4215" /> +<TGConnectingPoint num="3" id="4216" /> +<TGConnectingPoint num="4" id="4217" /> +<TGConnectingPoint num="5" id="4218" /> +<TGConnectingPoint num="6" id="4219" /> +<TGConnectingPoint num="7" id="4220" /> +<TGConnectingPoint num="8" id="4221" /> +<TGConnectingPoint num="9" id="4222" /> +<TGConnectingPoint num="10" id="4223" /> +<TGConnectingPoint num="11" id="4224" /> +<TGConnectingPoint num="12" id="4225" /> +<TGConnectingPoint num="13" id="4226" /> +<TGConnectingPoint num="14" id="4227" /> +<TGConnectingPoint num="15" id="4228" /> +<TGConnectingPoint num="16" id="4229" /> +<TGConnectingPoint num="17" id="4230" /> +<TGConnectingPoint num="18" id="4231" /> +<TGConnectingPoint num="19" id="4232" /> +<TGConnectingPoint num="20" id="4233" /> +<TGConnectingPoint num="21" id="4234" /> +<TGConnectingPoint num="22" id="4235" /> +<TGConnectingPoint num="23" id="4236" /> +<TGConnectingPoint num="24" id="4237" /> +<TGConnectingPoint num="25" id="4238" /> +<TGConnectingPoint num="26" id="4239" /> +<TGConnectingPoint num="27" id="4240" /> +<TGConnectingPoint num="28" id="4241" /> +<TGConnectingPoint num="29" id="4242" /> +<TGConnectingPoint num="30" id="4243" /> +<TGConnectingPoint num="31" id="4244" /> +<TGConnectingPoint num="32" id="4245" /> +<TGConnectingPoint num="33" id="4246" /> +<TGConnectingPoint num="34" id="4247" /> +<TGConnectingPoint num="35" id="4248" /> +<TGConnectingPoint num="36" id="4249" /> +<TGConnectingPoint num="37" id="4250" /> +<TGConnectingPoint num="38" id="4251" /> +<TGConnectingPoint num="39" id="4252" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5103" id="4264" > +<cdparam x="440" y="207" /> +<sizeparam width="128" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="startButton(duration)" /> +<TGConnectingPoint num="0" id="4254" /> +<TGConnectingPoint num="1" id="4255" /> +<TGConnectingPoint num="2" id="4256" /> +<TGConnectingPoint num="3" id="4257" /> +<TGConnectingPoint num="4" id="4258" /> +<TGConnectingPoint num="5" id="4259" /> +<TGConnectingPoint num="6" id="4260" /> +<TGConnectingPoint num="7" id="4261" /> +<TGConnectingPoint num="8" id="4262" /> +<TGConnectingPoint num="9" id="4263" /> +</COMPONENT> + +<COMPONENT type="5100" id="4266" > +<cdparam x="474" y="54" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4265" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Bell" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="4273" > +<cdparam x="419" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="4272" /> +<P1 x="419" y="209" id="4343" /> +<P2 x="419" y="313" id="4302" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4271" > +<father id="4273" num="0" /> +<cdparam x="429" y="249" /> +<sizeparam width="47" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4267" /> +<TGConnectingPoint num="1" id="4268" /> +<TGConnectingPoint num="2" id="4269" /> +<TGConnectingPoint num="3" id="4270" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="runBell()" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4286" > +<cdparam x="419" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="4282" /> +<TGConnectingPoint num="1" id="4283" /> +<TGConnectingPoint num="2" id="4284" /> +<TGConnectingPoint num="3" id="4285" /> +<P1 x="419" y="363" id="4307" /> +<P2 x="369" y="123" id="4356" /> +<Point x="412" y="419" /> +<Point x="332" y="419" /> +<Point x="332" y="123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4274" > +<father id="4286" num="0" /> +<cdparam x="412" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4275" > +<father id="4286" num="1" /> +<cdparam x="332" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4276" > +<father id="4286" num="2" /> +<cdparam x="332" y="123" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="4281" > +<father id="4286" num="3" /> +<cdparam x="430" y="402" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4277" /> +<TGConnectingPoint num="1" id="4278" /> +<TGConnectingPoint num="2" id="4279" /> +<TGConnectingPoint num="3" id="4280" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4293" > +<cdparam x="420" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="4292" /> +<P1 x="419" y="148" id="4359" /> +<P2 x="419" y="179" id="4342" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4291" > +<father id="4293" num="0" /> +<cdparam x="420" y="191" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4287" /> +<TGConnectingPoint num="1" id="4288" /> +<TGConnectingPoint num="2" id="4289" /> +<TGConnectingPoint num="3" id="4290" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4300" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="4299" /> +<P1 x="407" y="70" id="4394" /> +<P2 x="419" y="98" id="4354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4298" > +<father id="4300" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4294" /> +<TGConnectingPoint num="1" id="4295" /> +<TGConnectingPoint num="2" id="4296" /> +<TGConnectingPoint num="3" id="4297" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="4341" > +<cdparam x="369" y="313" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Ringing" /> +<TGConnectingPoint num="0" id="4301" /> +<TGConnectingPoint num="1" id="4302" /> +<TGConnectingPoint num="2" id="4303" /> +<TGConnectingPoint num="3" id="4304" /> +<TGConnectingPoint num="4" id="4305" /> +<TGConnectingPoint num="5" id="4306" /> +<TGConnectingPoint num="6" id="4307" /> +<TGConnectingPoint num="7" id="4308" /> +<TGConnectingPoint num="8" id="4309" /> +<TGConnectingPoint num="9" id="4310" /> +<TGConnectingPoint num="10" id="4311" /> +<TGConnectingPoint num="11" id="4312" /> +<TGConnectingPoint num="12" id="4313" /> +<TGConnectingPoint num="13" id="4314" /> +<TGConnectingPoint num="14" id="4315" /> +<TGConnectingPoint num="15" id="4316" /> +<TGConnectingPoint num="16" id="4317" /> +<TGConnectingPoint num="17" id="4318" /> +<TGConnectingPoint num="18" id="4319" /> +<TGConnectingPoint num="19" id="4320" /> +<TGConnectingPoint num="20" id="4321" /> +<TGConnectingPoint num="21" id="4322" /> +<TGConnectingPoint num="22" id="4323" /> +<TGConnectingPoint num="23" id="4324" /> +<TGConnectingPoint num="24" id="4325" /> +<TGConnectingPoint num="25" id="4326" /> +<TGConnectingPoint num="26" id="4327" /> +<TGConnectingPoint num="27" id="4328" /> +<TGConnectingPoint num="28" id="4329" /> +<TGConnectingPoint num="29" id="4330" /> +<TGConnectingPoint num="30" id="4331" /> +<TGConnectingPoint num="31" id="4332" /> +<TGConnectingPoint num="32" id="4333" /> +<TGConnectingPoint num="33" id="4334" /> +<TGConnectingPoint num="34" id="4335" /> +<TGConnectingPoint num="35" id="4336" /> +<TGConnectingPoint num="36" id="4337" /> +<TGConnectingPoint num="37" id="4338" /> +<TGConnectingPoint num="38" id="4339" /> +<TGConnectingPoint num="39" id="4340" /> +<extraparam> +<entryCode value="" /> +<entryCode value="printf("\nDRING DRING DRING !!!!\n\n");" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="4352" > +<cdparam x="395" y="184" /> +<sizeparam width="48" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="ring()" /> +<TGConnectingPoint num="0" id="4342" /> +<TGConnectingPoint num="1" id="4343" /> +<TGConnectingPoint num="2" id="4344" /> +<TGConnectingPoint num="3" id="4345" /> +<TGConnectingPoint num="4" id="4346" /> +<TGConnectingPoint num="5" id="4347" /> +<TGConnectingPoint num="6" id="4348" /> +<TGConnectingPoint num="7" id="4349" /> +<TGConnectingPoint num="8" id="4350" /> +<TGConnectingPoint num="9" id="4351" /> +</COMPONENT> + +<COMPONENT type="5106" id="4393" > +<cdparam x="369" y="98" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Active" /> +<TGConnectingPoint num="0" id="4353" /> +<TGConnectingPoint num="1" id="4354" /> +<TGConnectingPoint num="2" id="4355" /> +<TGConnectingPoint num="3" id="4356" /> +<TGConnectingPoint num="4" id="4357" /> +<TGConnectingPoint num="5" id="4358" /> +<TGConnectingPoint num="6" id="4359" /> +<TGConnectingPoint num="7" id="4360" /> +<TGConnectingPoint num="8" id="4361" /> +<TGConnectingPoint num="9" id="4362" /> +<TGConnectingPoint num="10" id="4363" /> +<TGConnectingPoint num="11" id="4364" /> +<TGConnectingPoint num="12" id="4365" /> +<TGConnectingPoint num="13" id="4366" /> +<TGConnectingPoint num="14" id="4367" /> +<TGConnectingPoint num="15" id="4368" /> +<TGConnectingPoint num="16" id="4369" /> +<TGConnectingPoint num="17" id="4370" /> +<TGConnectingPoint num="18" id="4371" /> +<TGConnectingPoint num="19" id="4372" /> +<TGConnectingPoint num="20" id="4373" /> +<TGConnectingPoint num="21" id="4374" /> +<TGConnectingPoint num="22" id="4375" /> +<TGConnectingPoint num="23" id="4376" /> +<TGConnectingPoint num="24" id="4377" /> +<TGConnectingPoint num="25" id="4378" /> +<TGConnectingPoint num="26" id="4379" /> +<TGConnectingPoint num="27" id="4380" /> +<TGConnectingPoint num="28" id="4381" /> +<TGConnectingPoint num="29" id="4382" /> +<TGConnectingPoint num="30" id="4383" /> +<TGConnectingPoint num="31" id="4384" /> +<TGConnectingPoint num="32" id="4385" /> +<TGConnectingPoint num="33" id="4386" /> +<TGConnectingPoint num="34" id="4387" /> +<TGConnectingPoint num="35" id="4388" /> +<TGConnectingPoint num="36" id="4389" /> +<TGConnectingPoint num="37" id="4390" /> +<TGConnectingPoint num="38" id="4391" /> +<TGConnectingPoint num="39" id="4392" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="4395" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4394" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="RemoteControl" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="118" id="4396" > +<cdparam x="516" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from List of all parameters of an Avatar SMD transition to UML Note" value="null" /> +<P1 x="508" y="133" id="4399" /> +<P2 x="661" y="95" id="4469" /> +<AutomaticDrawing data="false" /> +</CONNECTOR> +<CONNECTOR type="5102" id="4403" > +<cdparam x="290" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="4402" /> +<P1 x="309" y="119" id="4529" /> +<P2 x="325" y="163" id="4476" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4401" > +<father id="4403" num="0" /> +<cdparam x="340" y="118" /> +<sizeparam width="168" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4397" /> +<TGConnectingPoint num="1" id="4398" /> +<TGConnectingPoint num="2" id="4399" /> +<TGConnectingPoint num="3" id="4400" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="msg1.data = duration" /> +<actions value="msg = sencrypt(msg1, PSK)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4410" > +<cdparam x="327" y="221" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Send signal" value="null" /> +<TGConnectingPoint num="0" id="4409" /> +<P1 x="325" y="213" id="4481" /> +<P2 x="347" y="291" id="4518" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4408" > +<father id="4410" num="0" /> +<cdparam x="364" y="248" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4404" /> +<TGConnectingPoint num="1" id="4405" /> +<TGConnectingPoint num="2" id="4406" /> +<TGConnectingPoint num="3" id="4407" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4417" > +<cdparam x="347" y="321" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="4416" /> +<P1 x="347" y="321" id="4519" /> +<P2 x="348" y="377" id="4433" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4415" > +<father id="4417" num="0" /> +<cdparam x="347" y="361" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4411" /> +<TGConnectingPoint num="1" id="4412" /> +<TGConnectingPoint num="2" id="4413" /> +<TGConnectingPoint num="3" id="4414" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="4424" > +<cdparam x="373" y="427" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="4423" /> +<P1 x="373" y="427" id="4431" /> +<P2 x="375" y="442" id="4516" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="4422" > +<father id="4424" num="0" /> +<cdparam x="373" y="467" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="4418" /> +<TGConnectingPoint num="1" id="4419" /> +<TGConnectingPoint num="2" id="4420" /> +<TGConnectingPoint num="3" id="4421" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5106" id="4465" > +<cdparam x="323" y="377" /> +<sizeparam width="100" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Msg1Sent" /> +<TGConnectingPoint num="0" id="4425" /> +<TGConnectingPoint num="1" id="4426" /> +<TGConnectingPoint num="2" id="4427" /> +<TGConnectingPoint num="3" id="4428" /> +<TGConnectingPoint num="4" id="4429" /> +<TGConnectingPoint num="5" id="4430" /> +<TGConnectingPoint num="6" id="4431" /> +<TGConnectingPoint num="7" id="4432" /> +<TGConnectingPoint num="8" id="4433" /> +<TGConnectingPoint num="9" id="4434" /> +<TGConnectingPoint num="10" id="4435" /> +<TGConnectingPoint num="11" id="4436" /> +<TGConnectingPoint num="12" id="4437" /> +<TGConnectingPoint num="13" id="4438" /> +<TGConnectingPoint num="14" id="4439" /> +<TGConnectingPoint num="15" id="4440" /> +<TGConnectingPoint num="16" id="4441" /> +<TGConnectingPoint num="17" id="4442" /> +<TGConnectingPoint num="18" id="4443" /> +<TGConnectingPoint num="19" id="4444" /> +<TGConnectingPoint num="20" id="4445" /> +<TGConnectingPoint num="21" id="4446" /> +<TGConnectingPoint num="22" id="4447" /> +<TGConnectingPoint num="23" id="4448" /> +<TGConnectingPoint num="24" id="4449" /> +<TGConnectingPoint num="25" id="4450" /> +<TGConnectingPoint num="26" id="4451" /> +<TGConnectingPoint num="27" id="4452" /> +<TGConnectingPoint num="28" id="4453" /> +<TGConnectingPoint num="29" id="4454" /> +<TGConnectingPoint num="30" id="4455" /> +<TGConnectingPoint num="31" id="4456" /> +<TGConnectingPoint num="32" id="4457" /> +<TGConnectingPoint num="33" id="4458" /> +<TGConnectingPoint num="34" id="4459" /> +<TGConnectingPoint num="35" id="4460" /> +<TGConnectingPoint num="36" id="4461" /> +<TGConnectingPoint num="37" id="4462" /> +<TGConnectingPoint num="38" id="4463" /> +<TGConnectingPoint num="39" id="4464" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="4474" > +<cdparam x="661" y="78" /> +<sizeparam width="251" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="Encrypting data with the pre shared key +" /> +<TGConnectingPoint num="0" id="4466" /> +<TGConnectingPoint num="1" id="4467" /> +<TGConnectingPoint num="2" id="4468" /> +<TGConnectingPoint num="3" id="4469" /> +<TGConnectingPoint num="4" id="4470" /> +<TGConnectingPoint num="5" id="4471" /> +<TGConnectingPoint num="6" id="4472" /> +<TGConnectingPoint num="7" id="4473" /> +<extraparam> +<Line value="Encrypting data with the pre shared key" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5106" id="4515" > +<cdparam x="239" y="163" /> +<sizeparam width="172" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="SendingRemoteOrder" /> +<TGConnectingPoint num="0" id="4475" /> +<TGConnectingPoint num="1" id="4476" /> +<TGConnectingPoint num="2" id="4477" /> +<TGConnectingPoint num="3" id="4478" /> +<TGConnectingPoint num="4" id="4479" /> +<TGConnectingPoint num="5" id="4480" /> +<TGConnectingPoint num="6" id="4481" /> +<TGConnectingPoint num="7" id="4482" /> +<TGConnectingPoint num="8" id="4483" /> +<TGConnectingPoint num="9" id="4484" /> +<TGConnectingPoint num="10" id="4485" /> +<TGConnectingPoint num="11" id="4486" /> +<TGConnectingPoint num="12" id="4487" /> +<TGConnectingPoint num="13" id="4488" /> +<TGConnectingPoint num="14" id="4489" /> +<TGConnectingPoint num="15" id="4490" /> +<TGConnectingPoint num="16" id="4491" /> +<TGConnectingPoint num="17" id="4492" /> +<TGConnectingPoint num="18" id="4493" /> +<TGConnectingPoint num="19" id="4494" /> +<TGConnectingPoint num="20" id="4495" /> +<TGConnectingPoint num="21" id="4496" /> +<TGConnectingPoint num="22" id="4497" /> +<TGConnectingPoint num="23" id="4498" /> +<TGConnectingPoint num="24" id="4499" /> +<TGConnectingPoint num="25" id="4500" /> +<TGConnectingPoint num="26" id="4501" /> +<TGConnectingPoint num="27" id="4502" /> +<TGConnectingPoint num="28" id="4503" /> +<TGConnectingPoint num="29" id="4504" /> +<TGConnectingPoint num="30" id="4505" /> +<TGConnectingPoint num="31" id="4506" /> +<TGConnectingPoint num="32" id="4507" /> +<TGConnectingPoint num="33" id="4508" /> +<TGConnectingPoint num="34" id="4509" /> +<TGConnectingPoint num="35" id="4510" /> +<TGConnectingPoint num="36" id="4511" /> +<TGConnectingPoint num="37" id="4512" /> +<TGConnectingPoint num="38" id="4513" /> +<TGConnectingPoint num="39" id="4514" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5101" id="4517" > +<cdparam x="365" y="447" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="4516" /> +</COMPONENT> + +<COMPONENT type="5103" id="4528" > +<cdparam x="266" y="296" /> +<sizeparam width="163" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="wirelessChannelWrite(msg)" /> +<TGConnectingPoint num="0" id="4518" /> +<TGConnectingPoint num="1" id="4519" /> +<TGConnectingPoint num="2" id="4520" /> +<TGConnectingPoint num="3" id="4521" /> +<TGConnectingPoint num="4" id="4522" /> +<TGConnectingPoint num="5" id="4523" /> +<TGConnectingPoint num="6" id="4524" /> +<TGConnectingPoint num="7" id="4525" /> +<TGConnectingPoint num="8" id="4526" /> +<TGConnectingPoint num="9" id="4527" /> +</COMPONENT> + +<COMPONENT type="5100" id="4530" > +<cdparam x="302" y="99" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="4529" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/Network_Avatar.xml b/preinstallTTool/macos/TTool/modeling/Network_Avatar.xml new file mode 100644 index 0000000000000000000000000000000000000000..e2948836c24fd87a110c2eedf11ceaafaee4a6ec --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/Network_Avatar.xml @@ -0,0 +1,1630 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta1"> + +<Modeling type="AVATAR Design" nameTab="NetworkSystem" > +<AVATARBlockDiagramPanel name="AVATAR Block Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<MainCode value="void __user_init() {"/> +<MainCode value="}"/> +<Optimized value="true" /> +<Validated value="Server;Client;Network;Port1In;Port0In;" /> +<Ignored value="" /> + +<CONNECTOR type="5002" id="2" > +<cdparam x="695" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="1" /> +<P1 x="742" y="196" id="118" /> +<P2 x="862" y="281" id="17" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in port1_in(PDU pdu)" /> +<osd value="out socket_out(PDU pdu)" /> +<isd value="in socket_in(PDU pdu)" /> +<oso value="out port1_out(PDU pdu)" /> +<FIFOType asynchronous="false" size="1024" blocking="false" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="5002" id="4" > +<cdparam x="273" y="178" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Block0 to Block0" value="" /> +<TGConnectingPoint num="0" id="3" /> +<P1 x="212" y="234" id="43" /> +<P2 x="350" y="196" id="117" /> +<AutomaticDrawing data="true" /> +<extraparam> +<iso value="in socket_in(PDU pdu)" /> +<osd value="out port0_out(PDU pdu)" /> +<isd value="in port0_in(PDU pdu)" /> +<oso value="out socket_out(PDU pdu)" /> +<FIFOType asynchronous="true" size="4" blocking="true" private="true" broadcast="false" lossy="false" /> +</extraparam> +</CONNECTOR> +<COMPONENT type="5003" id="13" > +<cdparam x="272" y="452" /> +<sizeparam width="149" height="93" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="DataType0" value="PDU" /> +<TGConnectingPoint num="0" id="5" /> +<TGConnectingPoint num="1" id="6" /> +<TGConnectingPoint num="2" id="7" /> +<TGConnectingPoint num="3" id="8" /> +<TGConnectingPoint num="4" id="9" /> +<TGConnectingPoint num="5" id="10" /> +<TGConnectingPoint num="6" id="11" /> +<TGConnectingPoint num="7" id="12" /> +<extraparam> +<Attribute access="0" id="x" value="5" type="8" typeOther="" /> +<Attribute access="0" id="y" value="10" type="8" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="38" > +<cdparam x="862" y="181" /> +<sizeparam width="183" height="200" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Server" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<TGConnectingPoint num="4" id="18" /> +<TGConnectingPoint num="5" id="19" /> +<TGConnectingPoint num="6" id="20" /> +<TGConnectingPoint num="7" id="21" /> +<TGConnectingPoint num="8" id="22" /> +<TGConnectingPoint num="9" id="23" /> +<TGConnectingPoint num="10" id="24" /> +<TGConnectingPoint num="11" id="25" /> +<TGConnectingPoint num="12" id="26" /> +<TGConnectingPoint num="13" id="27" /> +<TGConnectingPoint num="14" id="28" /> +<TGConnectingPoint num="15" id="29" /> +<TGConnectingPoint num="16" id="30" /> +<TGConnectingPoint num="17" id="31" /> +<TGConnectingPoint num="18" id="32" /> +<TGConnectingPoint num="19" id="33" /> +<TGConnectingPoint num="20" id="34" /> +<TGConnectingPoint num="21" id="35" /> +<TGConnectingPoint num="22" id="36" /> +<TGConnectingPoint num="23" id="37" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +<Method value="gotPDUFromClient(int x)" /> +<Signal value="in socket_in(PDU pdu)" /> +<Signal value="out socket_out(PDU pdu)" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="63" > +<cdparam x="21" y="134" /> +<sizeparam width="191" height="200" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Client" /> +<TGConnectingPoint num="0" id="39" /> +<TGConnectingPoint num="1" id="40" /> +<TGConnectingPoint num="2" id="41" /> +<TGConnectingPoint num="3" id="42" /> +<TGConnectingPoint num="4" id="43" /> +<TGConnectingPoint num="5" id="44" /> +<TGConnectingPoint num="6" id="45" /> +<TGConnectingPoint num="7" id="46" /> +<TGConnectingPoint num="8" id="47" /> +<TGConnectingPoint num="9" id="48" /> +<TGConnectingPoint num="10" id="49" /> +<TGConnectingPoint num="11" id="50" /> +<TGConnectingPoint num="12" id="51" /> +<TGConnectingPoint num="13" id="52" /> +<TGConnectingPoint num="14" id="53" /> +<TGConnectingPoint num="15" id="54" /> +<TGConnectingPoint num="16" id="55" /> +<TGConnectingPoint num="17" id="56" /> +<TGConnectingPoint num="18" id="57" /> +<TGConnectingPoint num="19" id="58" /> +<TGConnectingPoint num="20" id="59" /> +<TGConnectingPoint num="21" id="60" /> +<TGConnectingPoint num="22" id="61" /> +<TGConnectingPoint num="23" id="62" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="x" value="" type="8" typeOther="" /> +<Attribute access="0" id="d" value="14" type="8" typeOther="" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +<Attribute access="0" id="timer" value="" type="9" typeOther="" /> +<Attribute access="0" id="timerValue" value="" type="8" typeOther="" /> +<Method value="gotData(PDU pdu)" /> +<Method value="switchOff()" /> +<Signal value="out socket_out(PDU pdu)" /> +<Signal value="in socket_in(PDU pdu)" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5000" id="138" > +<cdparam x="350" y="22" /> +<sizeparam width="392" height="349" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Block0" value="Network" /> +<TGConnectingPoint num="0" id="114" /> +<TGConnectingPoint num="1" id="115" /> +<TGConnectingPoint num="2" id="116" /> +<TGConnectingPoint num="3" id="117" /> +<TGConnectingPoint num="4" id="118" /> +<TGConnectingPoint num="5" id="119" /> +<TGConnectingPoint num="6" id="120" /> +<TGConnectingPoint num="7" id="121" /> +<TGConnectingPoint num="8" id="122" /> +<TGConnectingPoint num="9" id="123" /> +<TGConnectingPoint num="10" id="124" /> +<TGConnectingPoint num="11" id="125" /> +<TGConnectingPoint num="12" id="126" /> +<TGConnectingPoint num="13" id="127" /> +<TGConnectingPoint num="14" id="128" /> +<TGConnectingPoint num="15" id="129" /> +<TGConnectingPoint num="16" id="130" /> +<TGConnectingPoint num="17" id="131" /> +<TGConnectingPoint num="18" id="132" /> +<TGConnectingPoint num="19" id="133" /> +<TGConnectingPoint num="20" id="134" /> +<TGConnectingPoint num="21" id="135" /> +<TGConnectingPoint num="22" id="136" /> +<TGConnectingPoint num="23" id="137" /> +<extraparam> +<CryptoBlock value="false" /> +<Method value="gotPacket(int x)" /> +<Signal value="in port0_in(PDU pdu)" /> +<Signal value="out port0_out(PDU pdu)" /> +<Signal value="out port1_out(PDU pdu)" /> +<Signal value="in port1_in(PDU pdu)" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5000" id="88" > +<father id="138" num="0" /> +<cdparam x="568" y="156" /> +<sizeparam width="153" height="201" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="239" minY="0" maxY="148" /> +<infoparam name="Block0" value="Port1In" /> +<TGConnectingPoint num="0" id="64" /> +<TGConnectingPoint num="1" id="65" /> +<TGConnectingPoint num="2" id="66" /> +<TGConnectingPoint num="3" id="67" /> +<TGConnectingPoint num="4" id="68" /> +<TGConnectingPoint num="5" id="69" /> +<TGConnectingPoint num="6" id="70" /> +<TGConnectingPoint num="7" id="71" /> +<TGConnectingPoint num="8" id="72" /> +<TGConnectingPoint num="9" id="73" /> +<TGConnectingPoint num="10" id="74" /> +<TGConnectingPoint num="11" id="75" /> +<TGConnectingPoint num="12" id="76" /> +<TGConnectingPoint num="13" id="77" /> +<TGConnectingPoint num="14" id="78" /> +<TGConnectingPoint num="15" id="79" /> +<TGConnectingPoint num="16" id="80" /> +<TGConnectingPoint num="17" id="81" /> +<TGConnectingPoint num="18" id="82" /> +<TGConnectingPoint num="19" id="83" /> +<TGConnectingPoint num="20" id="84" /> +<TGConnectingPoint num="21" id="85" /> +<TGConnectingPoint num="22" id="86" /> +<TGConnectingPoint num="23" id="87" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="d" value="5" type="8" typeOther="" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5000" id="113" > +<father id="138" num="1" /> +<cdparam x="375" y="151" /> +<sizeparam width="162" height="198" minWidth="5" minHeight="2" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="230" minY="0" maxY="151" /> +<infoparam name="Block0" value="Port0In" /> +<TGConnectingPoint num="0" id="89" /> +<TGConnectingPoint num="1" id="90" /> +<TGConnectingPoint num="2" id="91" /> +<TGConnectingPoint num="3" id="92" /> +<TGConnectingPoint num="4" id="93" /> +<TGConnectingPoint num="5" id="94" /> +<TGConnectingPoint num="6" id="95" /> +<TGConnectingPoint num="7" id="96" /> +<TGConnectingPoint num="8" id="97" /> +<TGConnectingPoint num="9" id="98" /> +<TGConnectingPoint num="10" id="99" /> +<TGConnectingPoint num="11" id="100" /> +<TGConnectingPoint num="12" id="101" /> +<TGConnectingPoint num="13" id="102" /> +<TGConnectingPoint num="14" id="103" /> +<TGConnectingPoint num="15" id="104" /> +<TGConnectingPoint num="16" id="105" /> +<TGConnectingPoint num="17" id="106" /> +<TGConnectingPoint num="18" id="107" /> +<TGConnectingPoint num="19" id="108" /> +<TGConnectingPoint num="20" id="109" /> +<TGConnectingPoint num="21" id="110" /> +<TGConnectingPoint num="22" id="111" /> +<TGConnectingPoint num="23" id="112" /> +<extraparam> +<CryptoBlock value="false" /> +<Attribute access="0" id="d" value="5" type="8" typeOther="" /> +<Attribute access="0" id="pdu" value="" type="5" typeOther="PDU" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARBlockDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Server" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="153" > +<cdparam x="429" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="148" /> +<TGConnectingPoint num="1" id="149" /> +<TGConnectingPoint num="2" id="150" /> +<TGConnectingPoint num="3" id="151" /> +<TGConnectingPoint num="4" id="152" /> +<P1 x="407" y="365" id="176" /> +<P2 x="370" y="120" id="194" /> +<Point x="407" y="385" /> +<Point x="299" y="385" /> +<Point x="299" y="100" /> +<Point x="370" y="100" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="139" > +<father id="153" num="0" /> +<cdparam x="407" y="385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="140" > +<father id="153" num="1" /> +<cdparam x="299" y="385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="141" > +<father id="153" num="2" /> +<cdparam x="299" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="142" > +<father id="153" num="3" /> +<cdparam x="370" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="147" > +<father id="153" num="4" /> +<cdparam x="429" y="405" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="143" /> +<TGConnectingPoint num="1" id="144" /> +<TGConnectingPoint num="2" id="145" /> +<TGConnectingPoint num="3" id="146" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="160" > +<cdparam x="429" y="279" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="159" /> +<P1 x="407" y="263" id="228" /> +<P2 x="407" y="335" id="175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="158" > +<father id="160" num="0" /> +<cdparam x="435" y="302" /> +<sizeparam width="145" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="154" /> +<TGConnectingPoint num="1" id="155" /> +<TGConnectingPoint num="2" id="156" /> +<TGConnectingPoint num="3" id="157" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotPDUFromClient(pdu.x)" /> +<actions value="pdu.x = pdu.x + 5" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="167" > +<cdparam x="424" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="166" /> +<P1 x="407" y="170" id="192" /> +<P2 x="407" y="233" id="227" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="165" > +<father id="167" num="0" /> +<cdparam x="424" y="249" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="161" /> +<TGConnectingPoint num="1" id="162" /> +<TGConnectingPoint num="2" id="163" /> +<TGConnectingPoint num="3" id="164" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="174" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="173" /> +<P1 x="407" y="70" id="238" /> +<P2 x="407" y="120" id="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="172" > +<father id="174" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="168" /> +<TGConnectingPoint num="1" id="169" /> +<TGConnectingPoint num="2" id="170" /> +<TGConnectingPoint num="3" id="171" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="185" > +<cdparam x="356" y="340" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="socket_out(pdu)" /> +<TGConnectingPoint num="0" id="175" /> +<TGConnectingPoint num="1" id="176" /> +<TGConnectingPoint num="2" id="177" /> +<TGConnectingPoint num="3" id="178" /> +<TGConnectingPoint num="4" id="179" /> +<TGConnectingPoint num="5" id="180" /> +<TGConnectingPoint num="6" id="181" /> +<TGConnectingPoint num="7" id="182" /> +<TGConnectingPoint num="8" id="183" /> +<TGConnectingPoint num="9" id="184" /> +</COMPONENT> + +<COMPONENT type="5106" id="226" > +<cdparam x="334" y="120" /> +<sizeparam width="146" height="50" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Wait4ClientPacket" /> +<TGConnectingPoint num="0" id="186" /> +<TGConnectingPoint num="1" id="187" /> +<TGConnectingPoint num="2" id="188" /> +<TGConnectingPoint num="3" id="189" /> +<TGConnectingPoint num="4" id="190" /> +<TGConnectingPoint num="5" id="191" /> +<TGConnectingPoint num="6" id="192" /> +<TGConnectingPoint num="7" id="193" /> +<TGConnectingPoint num="8" id="194" /> +<TGConnectingPoint num="9" id="195" /> +<TGConnectingPoint num="10" id="196" /> +<TGConnectingPoint num="11" id="197" /> +<TGConnectingPoint num="12" id="198" /> +<TGConnectingPoint num="13" id="199" /> +<TGConnectingPoint num="14" id="200" /> +<TGConnectingPoint num="15" id="201" /> +<TGConnectingPoint num="16" id="202" /> +<TGConnectingPoint num="17" id="203" /> +<TGConnectingPoint num="18" id="204" /> +<TGConnectingPoint num="19" id="205" /> +<TGConnectingPoint num="20" id="206" /> +<TGConnectingPoint num="21" id="207" /> +<TGConnectingPoint num="22" id="208" /> +<TGConnectingPoint num="23" id="209" /> +<TGConnectingPoint num="24" id="210" /> +<TGConnectingPoint num="25" id="211" /> +<TGConnectingPoint num="26" id="212" /> +<TGConnectingPoint num="27" id="213" /> +<TGConnectingPoint num="28" id="214" /> +<TGConnectingPoint num="29" id="215" /> +<TGConnectingPoint num="30" id="216" /> +<TGConnectingPoint num="31" id="217" /> +<TGConnectingPoint num="32" id="218" /> +<TGConnectingPoint num="33" id="219" /> +<TGConnectingPoint num="34" id="220" /> +<TGConnectingPoint num="35" id="221" /> +<TGConnectingPoint num="36" id="222" /> +<TGConnectingPoint num="37" id="223" /> +<TGConnectingPoint num="38" id="224" /> +<TGConnectingPoint num="39" id="225" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5104" id="237" > +<cdparam x="356" y="238" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="socket_in(pdu)" /> +<TGConnectingPoint num="0" id="227" /> +<TGConnectingPoint num="1" id="228" /> +<TGConnectingPoint num="2" id="229" /> +<TGConnectingPoint num="3" id="230" /> +<TGConnectingPoint num="4" id="231" /> +<TGConnectingPoint num="5" id="232" /> +<TGConnectingPoint num="6" id="233" /> +<TGConnectingPoint num="7" id="234" /> +<TGConnectingPoint num="8" id="235" /> +<TGConnectingPoint num="9" id="236" /> +<accessibility /> +</COMPONENT> + +<COMPONENT type="5100" id="239" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="238" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Client" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="700" > +<cdparam x="763" y="504" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="701" /> +<P1 x="735" y="468" id="691" /> +<P2 x="735" y="530" id="289" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="702" > +<father id="700" num="0" /> +<cdparam x="756" y="501" /> +<sizeparam width="60" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="703" /> +<TGConnectingPoint num="1" id="704" /> +<TGConnectingPoint num="2" id="705" /> +<TGConnectingPoint num="3" id="706" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="switchOff()" /> +<filesToIncludeLine value="" /> +<codeToIncludeLine value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5111" id="689" > +<cdparam x="688" y="443" /> +<sizeparam width="95" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reset timer" value="expire(timer)" /> +<TGConnectingPoint num="0" id="690" /> +<TGConnectingPoint num="1" id="691" /> +<TGConnectingPoint num="2" id="692" /> +<TGConnectingPoint num="3" id="693" /> +<TGConnectingPoint num="4" id="694" /> +<TGConnectingPoint num="5" id="695" /> +<TGConnectingPoint num="6" id="696" /> +<TGConnectingPoint num="7" id="697" /> +<TGConnectingPoint num="8" id="698" /> +<TGConnectingPoint num="9" id="699" /> +</COMPONENT> + +<CONNECTOR type="5102" id="682" > +<cdparam x="468" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="683" /> +<P1 x="423" y="159" id="663" /> +<P2 x="430" y="194" id="411" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="684" > +<father id="682" num="0" /> +<cdparam x="468" y="203" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="685" /> +<TGConnectingPoint num="1" id="686" /> +<TGConnectingPoint num="2" id="687" /> +<TGConnectingPoint num="3" id="688" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5108" id="679" > +<cdparam x="324" y="84" /> +<sizeparam width="199" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="null" /> +<TGConnectingPoint num="0" id="680" /> +<TGConnectingPoint num="1" id="681" /> +<extraparam> +<Data variable="timerValue" minValue="10" maxValue="20" functionId="0" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="5109" id="661" > +<cdparam x="341" y="134" /> +<sizeparam width="165" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Set timer" value="setTimer(timer,timerValue)" /> +<TGConnectingPoint num="0" id="662" /> +<TGConnectingPoint num="1" id="663" /> +<TGConnectingPoint num="2" id="664" /> +<TGConnectingPoint num="3" id="665" /> +<TGConnectingPoint num="4" id="666" /> +<TGConnectingPoint num="5" id="667" /> +<TGConnectingPoint num="6" id="668" /> +<TGConnectingPoint num="7" id="669" /> +<TGConnectingPoint num="8" id="670" /> +<TGConnectingPoint num="9" id="671" /> +</COMPONENT> + +<CONNECTOR type="5102" id="246" > +<cdparam x="414" y="476" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="245" /> +<P1 x="413" y="504" id="400" /> +<P2 x="430" y="545" id="294" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="244" > +<father id="246" num="0" /> +<cdparam x="414" y="516" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="240" /> +<TGConnectingPoint num="1" id="241" /> +<TGConnectingPoint num="2" id="242" /> +<TGConnectingPoint num="3" id="243" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="253" > +<cdparam x="410" y="433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="252" /> +<P1 x="400" y="426" id="335" /> +<P2 x="413" y="474" id="399" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="251" > +<father id="253" num="0" /> +<cdparam x="415" y="446" /> +<sizeparam width="76" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="247" /> +<TGConnectingPoint num="1" id="248" /> +<TGConnectingPoint num="2" id="249" /> +<TGConnectingPoint num="3" id="250" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotData(pdu)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="260" > +<cdparam x="388" y="369" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="259" /> +<P1 x="381" y="368" id="364" /> +<P2 x="400" y="396" id="334" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="258" > +<father id="260" num="0" /> +<cdparam x="388" y="409" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="254" /> +<TGConnectingPoint num="1" id="255" /> +<TGConnectingPoint num="2" id="256" /> +<TGConnectingPoint num="3" id="257" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="267" > +<cdparam x="360" y="253" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to Send signal" value="null" /> +<TGConnectingPoint num="0" id="266" /> +<P1 x="343" y="244" id="345" /> +<P2 x="360" y="266" id="347" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="265" > +<father id="267" num="0" /> +<cdparam x="360" y="293" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="261" /> +<TGConnectingPoint num="1" id="262" /> +<TGConnectingPoint num="2" id="263" /> +<TGConnectingPoint num="3" id="264" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="274" > +<cdparam x="586" y="373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to stop state" value="null" /> +<TGConnectingPoint num="0" id="273" /> +<P1 x="622" y="407" id="414" /> +<P2 x="735" y="438" id="690" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="272" > +<father id="274" num="0" /> +<cdparam x="675" y="426" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="268" /> +<TGConnectingPoint num="1" id="269" /> +<TGConnectingPoint num="2" id="270" /> +<TGConnectingPoint num="3" id="271" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="281" > +<cdparam x="223" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="280" /> +<P1 x="393" y="34" id="291" /> +<P2 x="423" y="79" id="680" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="279" > +<father id="281" num="0" /> +<cdparam x="427" y="56" /> +<sizeparam width="33" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="275" /> +<TGConnectingPoint num="1" id="276" /> +<TGConnectingPoint num="2" id="277" /> +<TGConnectingPoint num="3" id="278" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="x = 5" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="288" > +<cdparam x="404" y="243" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="287" /> +<P1 x="360" y="296" id="348" /> +<P2 x="381" y="328" id="359" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="286" > +<father id="288" num="0" /> +<cdparam x="404" y="283" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="282" /> +<TGConnectingPoint num="1" id="283" /> +<TGConnectingPoint num="2" id="284" /> +<TGConnectingPoint num="3" id="285" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5101" id="290" > +<cdparam x="725" y="535" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="289" /> +</COMPONENT> + +<COMPONENT type="5100" id="292" > +<cdparam x="386" y="14" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="291" /> +</COMPONENT> + +<COMPONENT type="5106" id="450" > +<cdparam x="238" y="194" /> +<sizeparam width="384" height="427" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="Transmit" /> +<TGConnectingPoint num="0" id="410" /> +<TGConnectingPoint num="1" id="411" /> +<TGConnectingPoint num="2" id="412" /> +<TGConnectingPoint num="3" id="413" /> +<TGConnectingPoint num="4" id="414" /> +<TGConnectingPoint num="5" id="415" /> +<TGConnectingPoint num="6" id="416" /> +<TGConnectingPoint num="7" id="417" /> +<TGConnectingPoint num="8" id="418" /> +<TGConnectingPoint num="9" id="419" /> +<TGConnectingPoint num="10" id="420" /> +<TGConnectingPoint num="11" id="421" /> +<TGConnectingPoint num="12" id="422" /> +<TGConnectingPoint num="13" id="423" /> +<TGConnectingPoint num="14" id="424" /> +<TGConnectingPoint num="15" id="425" /> +<TGConnectingPoint num="16" id="426" /> +<TGConnectingPoint num="17" id="427" /> +<TGConnectingPoint num="18" id="428" /> +<TGConnectingPoint num="19" id="429" /> +<TGConnectingPoint num="20" id="430" /> +<TGConnectingPoint num="21" id="431" /> +<TGConnectingPoint num="22" id="432" /> +<TGConnectingPoint num="23" id="433" /> +<TGConnectingPoint num="24" id="434" /> +<TGConnectingPoint num="25" id="435" /> +<TGConnectingPoint num="26" id="436" /> +<TGConnectingPoint num="27" id="437" /> +<TGConnectingPoint num="28" id="438" /> +<TGConnectingPoint num="29" id="439" /> +<TGConnectingPoint num="30" id="440" /> +<TGConnectingPoint num="31" id="441" /> +<TGConnectingPoint num="32" id="442" /> +<TGConnectingPoint num="33" id="443" /> +<TGConnectingPoint num="34" id="444" /> +<TGConnectingPoint num="35" id="445" /> +<TGConnectingPoint num="36" id="446" /> +<TGConnectingPoint num="37" id="447" /> +<TGConnectingPoint num="38" id="448" /> +<TGConnectingPoint num="39" id="449" /> +<accessibility /> +<extraparam> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="5106" id="333" > +<father id="450" num="0" /> +<cdparam x="356" y="545" /> +<sizeparam width="149" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="235" minY="0" maxY="387" /> +<infoparam name="state0" value="WaitForServer" /> +<TGConnectingPoint num="0" id="293" /> +<TGConnectingPoint num="1" id="294" /> +<TGConnectingPoint num="2" id="295" /> +<TGConnectingPoint num="3" id="296" /> +<TGConnectingPoint num="4" id="297" /> +<TGConnectingPoint num="5" id="298" /> +<TGConnectingPoint num="6" id="299" /> +<TGConnectingPoint num="7" id="300" /> +<TGConnectingPoint num="8" id="301" /> +<TGConnectingPoint num="9" id="302" /> +<TGConnectingPoint num="10" id="303" /> +<TGConnectingPoint num="11" id="304" /> +<TGConnectingPoint num="12" id="305" /> +<TGConnectingPoint num="13" id="306" /> +<TGConnectingPoint num="14" id="307" /> +<TGConnectingPoint num="15" id="308" /> +<TGConnectingPoint num="16" id="309" /> +<TGConnectingPoint num="17" id="310" /> +<TGConnectingPoint num="18" id="311" /> +<TGConnectingPoint num="19" id="312" /> +<TGConnectingPoint num="20" id="313" /> +<TGConnectingPoint num="21" id="314" /> +<TGConnectingPoint num="22" id="315" /> +<TGConnectingPoint num="23" id="316" /> +<TGConnectingPoint num="24" id="317" /> +<TGConnectingPoint num="25" id="318" /> +<TGConnectingPoint num="26" id="319" /> +<TGConnectingPoint num="27" id="320" /> +<TGConnectingPoint num="28" id="321" /> +<TGConnectingPoint num="29" id="322" /> +<TGConnectingPoint num="30" id="323" /> +<TGConnectingPoint num="31" id="324" /> +<TGConnectingPoint num="32" id="325" /> +<TGConnectingPoint num="33" id="326" /> +<TGConnectingPoint num="34" id="327" /> +<TGConnectingPoint num="35" id="328" /> +<TGConnectingPoint num="36" id="329" /> +<TGConnectingPoint num="37" id="330" /> +<TGConnectingPoint num="38" id="331" /> +<TGConnectingPoint num="39" id="332" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5104" id="344" > +<father id="450" num="1" /> +<cdparam x="349" y="401" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="301" minY="0" maxY="407" /> +<infoparam name="Send signal" value="socket_in(pdu)" /> +<TGConnectingPoint num="0" id="334" /> +<TGConnectingPoint num="1" id="335" /> +<TGConnectingPoint num="2" id="336" /> +<TGConnectingPoint num="3" id="337" /> +<TGConnectingPoint num="4" id="338" /> +<TGConnectingPoint num="5" id="339" /> +<TGConnectingPoint num="6" id="340" /> +<TGConnectingPoint num="7" id="341" /> +<TGConnectingPoint num="8" id="342" /> +<TGConnectingPoint num="9" id="343" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5100" id="346" > +<father id="450" num="2" /> +<cdparam x="336" y="224" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="369" minY="0" maxY="412" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="345" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5103" id="357" > +<father id="450" num="3" /> +<cdparam x="309" y="271" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="301" minY="0" maxY="407" /> +<infoparam name="Send signal" value="socket_out(pdu)" /> +<TGConnectingPoint num="0" id="347" /> +<TGConnectingPoint num="1" id="348" /> +<TGConnectingPoint num="2" id="349" /> +<TGConnectingPoint num="3" id="350" /> +<TGConnectingPoint num="4" id="351" /> +<TGConnectingPoint num="5" id="352" /> +<TGConnectingPoint num="6" id="353" /> +<TGConnectingPoint num="7" id="354" /> +<TGConnectingPoint num="8" id="355" /> +<TGConnectingPoint num="9" id="356" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="5106" id="398" > +<father id="450" num="4" /> +<cdparam x="305" y="328" /> +<sizeparam width="153" height="40" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="231" minY="0" maxY="387" /> +<infoparam name="state0" value="WaitForServer" /> +<TGConnectingPoint num="0" id="358" /> +<TGConnectingPoint num="1" id="359" /> +<TGConnectingPoint num="2" id="360" /> +<TGConnectingPoint num="3" id="361" /> +<TGConnectingPoint num="4" id="362" /> +<TGConnectingPoint num="5" id="363" /> +<TGConnectingPoint num="6" id="364" /> +<TGConnectingPoint num="7" id="365" /> +<TGConnectingPoint num="8" id="366" /> +<TGConnectingPoint num="9" id="367" /> +<TGConnectingPoint num="10" id="368" /> +<TGConnectingPoint num="11" id="369" /> +<TGConnectingPoint num="12" id="370" /> +<TGConnectingPoint num="13" id="371" /> +<TGConnectingPoint num="14" id="372" /> +<TGConnectingPoint num="15" id="373" /> +<TGConnectingPoint num="16" id="374" /> +<TGConnectingPoint num="17" id="375" /> +<TGConnectingPoint num="18" id="376" /> +<TGConnectingPoint num="19" id="377" /> +<TGConnectingPoint num="20" id="378" /> +<TGConnectingPoint num="21" id="379" /> +<TGConnectingPoint num="22" id="380" /> +<TGConnectingPoint num="23" id="381" /> +<TGConnectingPoint num="24" id="382" /> +<TGConnectingPoint num="25" id="383" /> +<TGConnectingPoint num="26" id="384" /> +<TGConnectingPoint num="27" id="385" /> +<TGConnectingPoint num="28" id="386" /> +<TGConnectingPoint num="29" id="387" /> +<TGConnectingPoint num="30" id="388" /> +<TGConnectingPoint num="31" id="389" /> +<TGConnectingPoint num="32" id="390" /> +<TGConnectingPoint num="33" id="391" /> +<TGConnectingPoint num="34" id="392" /> +<TGConnectingPoint num="35" id="393" /> +<TGConnectingPoint num="36" id="394" /> +<TGConnectingPoint num="37" id="395" /> +<TGConnectingPoint num="38" id="396" /> +<TGConnectingPoint num="39" id="397" /> +<accessibility /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="5103" id="409" > +<father id="450" num="5" /> +<cdparam x="362" y="479" /> +<sizeparam width="102" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="301" minY="0" maxY="407" /> +<infoparam name="Send signal" value="socket_out(pdu)" /> +<TGConnectingPoint num="0" id="399" /> +<TGConnectingPoint num="1" id="400" /> +<TGConnectingPoint num="2" id="401" /> +<TGConnectingPoint num="3" id="402" /> +<TGConnectingPoint num="4" id="403" /> +<TGConnectingPoint num="5" id="404" /> +<TGConnectingPoint num="6" id="405" /> +<TGConnectingPoint num="7" id="406" /> +<TGConnectingPoint num="8" id="407" /> +<TGConnectingPoint num="9" id="408" /> +<accessibility /> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="672" > +<cdparam x="494" y="145" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector" value="null" /> +<TGConnectingPoint num="0" id="673" /> +<P1 x="423" y="109" id="681" /> +<P2 x="423" y="129" id="662" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="674" > +<father id="672" num="0" /> +<cdparam x="494" y="185" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="675" /> +<TGConnectingPoint num="1" id="676" /> +<TGConnectingPoint num="2" id="677" /> +<TGConnectingPoint num="3" id="678" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Network" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="457" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to stop state" value="null" /> +<TGConnectingPoint num="0" id="456" /> +<P1 x="407" y="70" id="460" /> +<P2 x="412" y="88" id="458" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="455" > +<father id="457" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="451" /> +<TGConnectingPoint num="1" id="452" /> +<TGConnectingPoint num="2" id="453" /> +<TGConnectingPoint num="3" id="454" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5101" id="459" > +<cdparam x="402" y="93" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="458" /> +</COMPONENT> + +<COMPONENT type="5100" id="461" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="460" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Port0In" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="468" > +<cdparam x="407" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="467" /> +<P1 x="407" y="70" id="559" /> +<P2 x="441" y="127" id="519" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="466" > +<father id="468" num="0" /> +<cdparam x="407" y="110" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="462" /> +<TGConnectingPoint num="1" id="463" /> +<TGConnectingPoint num="2" id="464" /> +<TGConnectingPoint num="3" id="465" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="481" > +<cdparam x="440" y="325" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="477" /> +<TGConnectingPoint num="1" id="478" /> +<TGConnectingPoint num="2" id="479" /> +<TGConnectingPoint num="3" id="480" /> +<P1 x="440" y="336" id="497" /> +<P2 x="387" y="163" id="521" /> +<Point x="435" y="372" /> +<Point x="315" y="368" /> +<Point x="309" y="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="469" > +<father id="481" num="0" /> +<cdparam x="435" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="470" > +<father id="481" num="1" /> +<cdparam x="315" y="368" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="471" > +<father id="481" num="2" /> +<cdparam x="309" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="476" > +<father id="481" num="3" /> +<cdparam x="440" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="472" /> +<TGConnectingPoint num="1" id="473" /> +<TGConnectingPoint num="2" id="474" /> +<TGConnectingPoint num="3" id="475" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="488" > +<cdparam x="441" y="270" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="487" /> +<P1 x="440" y="265" id="508" /> +<P2 x="440" y="306" id="496" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="486" > +<father id="488" num="0" /> +<cdparam x="472" y="280" /> +<sizeparam width="91" height="32" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="482" /> +<TGConnectingPoint num="1" id="483" /> +<TGConnectingPoint num="2" id="484" /> +<TGConnectingPoint num="3" id="485" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="d" /> +<afterMax value="d" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotPacket(pdu.x)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="495" > +<cdparam x="414" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="494" /> +<P1 x="441" y="200" id="524" /> +<P2 x="440" y="235" id="507" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="493" > +<father id="495" num="0" /> +<cdparam x="414" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="489" /> +<TGConnectingPoint num="1" id="490" /> +<TGConnectingPoint num="2" id="491" /> +<TGConnectingPoint num="3" id="492" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="506" > +<cdparam x="395" y="311" /> +<sizeparam width="91" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port1_out(pdu)" /> +<TGConnectingPoint num="0" id="496" /> +<TGConnectingPoint num="1" id="497" /> +<TGConnectingPoint num="2" id="498" /> +<TGConnectingPoint num="3" id="499" /> +<TGConnectingPoint num="4" id="500" /> +<TGConnectingPoint num="5" id="501" /> +<TGConnectingPoint num="6" id="502" /> +<TGConnectingPoint num="7" id="503" /> +<TGConnectingPoint num="8" id="504" /> +<TGConnectingPoint num="9" id="505" /> +</COMPONENT> + +<COMPONENT type="5104" id="517" > +<cdparam x="395" y="240" /> +<sizeparam width="91" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port0_in(pdu)" /> +<TGConnectingPoint num="0" id="507" /> +<TGConnectingPoint num="1" id="508" /> +<TGConnectingPoint num="2" id="509" /> +<TGConnectingPoint num="3" id="510" /> +<TGConnectingPoint num="4" id="511" /> +<TGConnectingPoint num="5" id="512" /> +<TGConnectingPoint num="6" id="513" /> +<TGConnectingPoint num="7" id="514" /> +<TGConnectingPoint num="8" id="515" /> +<TGConnectingPoint num="9" id="516" /> +</COMPONENT> + +<COMPONENT type="5106" id="558" > +<cdparam x="387" y="127" /> +<sizeparam width="109" height="73" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitForPacket" /> +<TGConnectingPoint num="0" id="518" /> +<TGConnectingPoint num="1" id="519" /> +<TGConnectingPoint num="2" id="520" /> +<TGConnectingPoint num="3" id="521" /> +<TGConnectingPoint num="4" id="522" /> +<TGConnectingPoint num="5" id="523" /> +<TGConnectingPoint num="6" id="524" /> +<TGConnectingPoint num="7" id="525" /> +<TGConnectingPoint num="8" id="526" /> +<TGConnectingPoint num="9" id="527" /> +<TGConnectingPoint num="10" id="528" /> +<TGConnectingPoint num="11" id="529" /> +<TGConnectingPoint num="12" id="530" /> +<TGConnectingPoint num="13" id="531" /> +<TGConnectingPoint num="14" id="532" /> +<TGConnectingPoint num="15" id="533" /> +<TGConnectingPoint num="16" id="534" /> +<TGConnectingPoint num="17" id="535" /> +<TGConnectingPoint num="18" id="536" /> +<TGConnectingPoint num="19" id="537" /> +<TGConnectingPoint num="20" id="538" /> +<TGConnectingPoint num="21" id="539" /> +<TGConnectingPoint num="22" id="540" /> +<TGConnectingPoint num="23" id="541" /> +<TGConnectingPoint num="24" id="542" /> +<TGConnectingPoint num="25" id="543" /> +<TGConnectingPoint num="26" id="544" /> +<TGConnectingPoint num="27" id="545" /> +<TGConnectingPoint num="28" id="546" /> +<TGConnectingPoint num="29" id="547" /> +<TGConnectingPoint num="30" id="548" /> +<TGConnectingPoint num="31" id="549" /> +<TGConnectingPoint num="32" id="550" /> +<TGConnectingPoint num="33" id="551" /> +<TGConnectingPoint num="34" id="552" /> +<TGConnectingPoint num="35" id="553" /> +<TGConnectingPoint num="36" id="554" /> +<TGConnectingPoint num="37" id="555" /> +<TGConnectingPoint num="38" id="556" /> +<TGConnectingPoint num="39" id="557" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="560" > +<cdparam x="400" y="50" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="559" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +<AVATARStateMachineDiagramPanel name="Port1In" minX="10" maxX="1400" minY="10" maxY="900" > +<CONNECTOR type="5102" id="567" > +<cdparam x="478" y="234" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from state0 to Send signal" value="null" /> +<TGConnectingPoint num="0" id="566" /> +<P1 x="505" y="234" id="623" /> +<P2 x="505" y="275" id="606" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="565" > +<father id="567" num="0" /> +<cdparam x="478" y="274" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="561" /> +<TGConnectingPoint num="1" id="562" /> +<TGConnectingPoint num="2" id="563" /> +<TGConnectingPoint num="3" id="564" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="574" > +<cdparam x="505" y="305" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to Send signal" value="null" /> +<TGConnectingPoint num="0" id="573" /> +<P1 x="505" y="305" id="607" /> +<P2 x="505" y="351" id="595" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="572" > +<father id="574" num="0" /> +<cdparam x="515" y="330" /> +<sizeparam width="111" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="568" /> +<TGConnectingPoint num="1" id="569" /> +<TGConnectingPoint num="2" id="570" /> +<TGConnectingPoint num="3" id="571" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="d" /> +<afterMax value="d" /> +<computeMin value="" /> +<computeMax value="" /> +<actions value="gotPacket(pdu.x)" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="587" > +<cdparam x="504" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Send signal to state0" value="null" /> +<TGConnectingPoint num="0" id="583" /> +<TGConnectingPoint num="1" id="584" /> +<TGConnectingPoint num="2" id="585" /> +<TGConnectingPoint num="3" id="586" /> +<P1 x="505" y="381" id="596" /> +<P2 x="451" y="197" id="620" /> +<Point x="356" y="397" /> +<Point x="356" y="163" /> +<Point x="434" y="163" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="575" > +<father id="587" num="0" /> +<cdparam x="356" y="397" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="576" > +<father id="587" num="1" /> +<cdparam x="356" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="577" > +<father id="587" num="2" /> +<cdparam x="434" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="582" > +<father id="587" num="3" /> +<cdparam x="504" y="399" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="578" /> +<TGConnectingPoint num="1" id="579" /> +<TGConnectingPoint num="2" id="580" /> +<TGConnectingPoint num="3" id="581" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="5102" id="594" > +<cdparam x="471" y="104" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to state0" value="null" /> +<TGConnectingPoint num="0" id="593" /> +<P1 x="471" y="104" id="658" /> +<P2 x="505" y="161" id="618" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="592" > +<father id="594" num="0" /> +<cdparam x="471" y="144" /> +<sizeparam width="10" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="List of all parameters of an Avatar SMD transition" value="" /> +<TGConnectingPoint num="0" id="588" /> +<TGConnectingPoint num="1" id="589" /> +<TGConnectingPoint num="2" id="590" /> +<TGConnectingPoint num="3" id="591" /> +<extraparam> +<guard value="[ ]" /> +<afterMin value="" /> +<afterMax value="" /> +<computeMin value="" /> +<computeMax value="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="5103" id="605" > +<cdparam x="457" y="356" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port0_out(pdu)" /> +<TGConnectingPoint num="0" id="595" /> +<TGConnectingPoint num="1" id="596" /> +<TGConnectingPoint num="2" id="597" /> +<TGConnectingPoint num="3" id="598" /> +<TGConnectingPoint num="4" id="599" /> +<TGConnectingPoint num="5" id="600" /> +<TGConnectingPoint num="6" id="601" /> +<TGConnectingPoint num="7" id="602" /> +<TGConnectingPoint num="8" id="603" /> +<TGConnectingPoint num="9" id="604" /> +</COMPONENT> + +<COMPONENT type="5104" id="616" > +<cdparam x="457" y="280" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Send signal" value="port1_in(pdu)" /> +<TGConnectingPoint num="0" id="606" /> +<TGConnectingPoint num="1" id="607" /> +<TGConnectingPoint num="2" id="608" /> +<TGConnectingPoint num="3" id="609" /> +<TGConnectingPoint num="4" id="610" /> +<TGConnectingPoint num="5" id="611" /> +<TGConnectingPoint num="6" id="612" /> +<TGConnectingPoint num="7" id="613" /> +<TGConnectingPoint num="8" id="614" /> +<TGConnectingPoint num="9" id="615" /> +</COMPONENT> + +<COMPONENT type="5106" id="657" > +<cdparam x="451" y="161" /> +<sizeparam width="109" height="73" minWidth="40" minHeight="30" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="state0" value="WaitForPacket" /> +<TGConnectingPoint num="0" id="617" /> +<TGConnectingPoint num="1" id="618" /> +<TGConnectingPoint num="2" id="619" /> +<TGConnectingPoint num="3" id="620" /> +<TGConnectingPoint num="4" id="621" /> +<TGConnectingPoint num="5" id="622" /> +<TGConnectingPoint num="6" id="623" /> +<TGConnectingPoint num="7" id="624" /> +<TGConnectingPoint num="8" id="625" /> +<TGConnectingPoint num="9" id="626" /> +<TGConnectingPoint num="10" id="627" /> +<TGConnectingPoint num="11" id="628" /> +<TGConnectingPoint num="12" id="629" /> +<TGConnectingPoint num="13" id="630" /> +<TGConnectingPoint num="14" id="631" /> +<TGConnectingPoint num="15" id="632" /> +<TGConnectingPoint num="16" id="633" /> +<TGConnectingPoint num="17" id="634" /> +<TGConnectingPoint num="18" id="635" /> +<TGConnectingPoint num="19" id="636" /> +<TGConnectingPoint num="20" id="637" /> +<TGConnectingPoint num="21" id="638" /> +<TGConnectingPoint num="22" id="639" /> +<TGConnectingPoint num="23" id="640" /> +<TGConnectingPoint num="24" id="641" /> +<TGConnectingPoint num="25" id="642" /> +<TGConnectingPoint num="26" id="643" /> +<TGConnectingPoint num="27" id="644" /> +<TGConnectingPoint num="28" id="645" /> +<TGConnectingPoint num="29" id="646" /> +<TGConnectingPoint num="30" id="647" /> +<TGConnectingPoint num="31" id="648" /> +<TGConnectingPoint num="32" id="649" /> +<TGConnectingPoint num="33" id="650" /> +<TGConnectingPoint num="34" id="651" /> +<TGConnectingPoint num="35" id="652" /> +<TGConnectingPoint num="36" id="653" /> +<TGConnectingPoint num="37" id="654" /> +<TGConnectingPoint num="38" id="655" /> +<TGConnectingPoint num="39" id="656" /> +<extraparam> +</extraparam> +</COMPONENT> + +<COMPONENT type="5100" id="659" > +<cdparam x="464" y="84" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="658" /> +</COMPONENT> + + +</AVATARStateMachineDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/ProtocolPatterns.xml b/preinstallTTool/macos/TTool/modeling/ProtocolPatterns.xml new file mode 100755 index 0000000000000000000000000000000000000000..8300c26a88303be50f4fad46ae9a967019f250ca --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/ProtocolPatterns.xml @@ -0,0 +1,3251 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.85beta9r20"> + +<Modeling type="Analysis" nameTab="Non connected protocol" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="502" id="2" > +<cdparam x="315" y="51" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1" /> +</COMPONENT> + +<COMPONENT type="508" id="13" > +<cdparam x="118" y="202" /> +<sizeparam width="93" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="Data Exchange" /> +<TGConnectingPoint num="0" id="3" /> +<TGConnectingPoint num="1" id="4" /> +<TGConnectingPoint num="2" id="5" /> +<TGConnectingPoint num="3" id="6" /> +<TGConnectingPoint num="4" id="7" /> +<TGConnectingPoint num="5" id="8" /> +<TGConnectingPoint num="6" id="9" /> +<TGConnectingPoint num="7" id="10" /> +<TGConnectingPoint num="8" id="11" /> +<TGConnectingPoint num="9" id="12" /> +</COMPONENT> + +<COMPONENT type="508" id="24" > +<cdparam x="223" y="202" /> +<sizeparam width="199" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="Data exchange with desequencing" /> +<TGConnectingPoint num="0" id="14" /> +<TGConnectingPoint num="1" id="15" /> +<TGConnectingPoint num="2" id="16" /> +<TGConnectingPoint num="3" id="17" /> +<TGConnectingPoint num="4" id="18" /> +<TGConnectingPoint num="5" id="19" /> +<TGConnectingPoint num="6" id="20" /> +<TGConnectingPoint num="7" id="21" /> +<TGConnectingPoint num="8" id="22" /> +<TGConnectingPoint num="9" id="23" /> +</COMPONENT> + +<COMPONENT type="508" id="35" > +<cdparam x="430" y="202" /> +<sizeparam width="144" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Reference to an IOD" value="Data exchange with loss" /> +<TGConnectingPoint num="0" id="25" /> +<TGConnectingPoint num="1" id="26" /> +<TGConnectingPoint num="2" id="27" /> +<TGConnectingPoint num="3" id="28" /> +<TGConnectingPoint num="4" id="29" /> +<TGConnectingPoint num="5" id="30" /> +<TGConnectingPoint num="6" id="31" /> +<TGConnectingPoint num="7" id="32" /> +<TGConnectingPoint num="8" id="33" /> +<TGConnectingPoint num="9" id="34" /> +</COMPONENT> + +<COMPONENT type="504" id="40" > +<cdparam x="307" y="82" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +</COMPONENT> + +<COMPONENT type="501" id="56" > +<cdparam x="307" y="132" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="44" /> +<TGConnectingPoint num="1" id="45" /> +<TGConnectingPoint num="2" id="46" /> +<TGConnectingPoint num="3" id="47" /> +<TGConnectingPoint num="4" id="48" /> +<TGConnectingPoint num="5" id="49" /> +<TGConnectingPoint num="6" id="50" /> +<TGConnectingPoint num="7" id="51" /> +<TGConnectingPoint num="8" id="52" /> +<TGConnectingPoint num="9" id="53" /> +<TGConnectingPoint num="10" id="54" /> +<TGConnectingPoint num="11" id="55" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="41" > +<father id="56" num="0" /> +<cdparam x="282" y="142" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="42" > +<father id="56" num="1" /> +<cdparam x="353" y="142" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="43" > +<father id="56" num="2" /> +<cdparam x="327" y="177" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="504" id="61" > +<cdparam x="307" y="253" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="57" /> +<TGConnectingPoint num="1" id="58" /> +<TGConnectingPoint num="2" id="59" /> +<TGConnectingPoint num="3" id="60" /> +</COMPONENT> + +<CONNECTOR type="105" id="62" > +<cdparam x="322" y="71" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="322" y="71" id="1" /> +<P2 x="322" y="82" id="36" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="64" > +<cdparam x="322" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="322" y="112" id="39" /> +<P2 x="322" y="122" id="44" /> +<Point x="322" y="118" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="63" > +<father id="64" num="0" /> +<cdparam x="322" y="118" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="65" > +<cdparam x="282" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="282" y="147" id="45" /> +<P2 x="164" y="197" id="3" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="66" > +<cdparam x="322" y="187" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="322" y="187" id="47" /> +<P2 x="322" y="197" id="14" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="67" > +<cdparam x="362" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="362" y="147" id="46" /> +<P2 x="502" y="197" id="25" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="68" > +<cdparam x="322" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="322" y="242" id="15" /> +<P2 x="322" y="253" id="57" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="69" > +<cdparam x="158" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="164" y="242" id="4" /> +<P2 x="307" y="268" id="58" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="70" > +<cdparam x="508" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="502" y="242" id="26" /> +<P2 x="337" y="268" id="59" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="75" > +<cdparam x="322" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="322" y="283" id="60" /> +<P2 x="337" y="97" id="38" /> +<Point x="322" y="303" /> +<Point x="589" y="303" /> +<Point x="589" y="77" /> +<Point x="337" y="77" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="71" > +<father id="75" num="0" /> +<cdparam x="322" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="72" > +<father id="75" num="1" /> +<cdparam x="589" y="303" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="73" > +<father id="75" num="2" /> +<cdparam x="589" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="74" > +<father id="75" num="3" /> +<cdparam x="337" y="77" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="108" > +<cdparam x="134" y="162" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Sending application" /> +<TGConnectingPoint num="0" id="76" /> +<TGConnectingPoint num="1" id="77" /> +<TGConnectingPoint num="2" id="78" /> +<TGConnectingPoint num="3" id="79" /> +<TGConnectingPoint num="4" id="80" /> +<TGConnectingPoint num="5" id="81" /> +<TGConnectingPoint num="6" id="82" /> +<TGConnectingPoint num="7" id="83" /> +<TGConnectingPoint num="8" id="84" /> +<TGConnectingPoint num="9" id="85" /> +<TGConnectingPoint num="10" id="86" /> +<TGConnectingPoint num="11" id="87" /> +<TGConnectingPoint num="12" id="88" /> +<TGConnectingPoint num="13" id="89" /> +<TGConnectingPoint num="14" id="90" /> +<TGConnectingPoint num="15" id="91" /> +<TGConnectingPoint num="16" id="92" /> +<TGConnectingPoint num="17" id="93" /> +<TGConnectingPoint num="18" id="94" /> +<TGConnectingPoint num="19" id="95" /> +<TGConnectingPoint num="20" id="96" /> +<TGConnectingPoint num="21" id="97" /> +<TGConnectingPoint num="22" id="98" /> +<TGConnectingPoint num="23" id="99" /> +<TGConnectingPoint num="24" id="100" /> +<TGConnectingPoint num="25" id="101" /> +<TGConnectingPoint num="26" id="102" /> +<TGConnectingPoint num="27" id="103" /> +<TGConnectingPoint num="28" id="104" /> +<TGConnectingPoint num="29" id="105" /> +<TGConnectingPoint num="30" id="106" /> +<TGConnectingPoint num="31" id="107" /> +</COMPONENT> + +<COMPONENT type="700" id="141" > +<cdparam x="647" y="184" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Receiving application" /> +<TGConnectingPoint num="0" id="109" /> +<TGConnectingPoint num="1" id="110" /> +<TGConnectingPoint num="2" id="111" /> +<TGConnectingPoint num="3" id="112" /> +<TGConnectingPoint num="4" id="113" /> +<TGConnectingPoint num="5" id="114" /> +<TGConnectingPoint num="6" id="115" /> +<TGConnectingPoint num="7" id="116" /> +<TGConnectingPoint num="8" id="117" /> +<TGConnectingPoint num="9" id="118" /> +<TGConnectingPoint num="10" id="119" /> +<TGConnectingPoint num="11" id="120" /> +<TGConnectingPoint num="12" id="121" /> +<TGConnectingPoint num="13" id="122" /> +<TGConnectingPoint num="14" id="123" /> +<TGConnectingPoint num="15" id="124" /> +<TGConnectingPoint num="16" id="125" /> +<TGConnectingPoint num="17" id="126" /> +<TGConnectingPoint num="18" id="127" /> +<TGConnectingPoint num="19" id="128" /> +<TGConnectingPoint num="20" id="129" /> +<TGConnectingPoint num="21" id="130" /> +<TGConnectingPoint num="22" id="131" /> +<TGConnectingPoint num="23" id="132" /> +<TGConnectingPoint num="24" id="133" /> +<TGConnectingPoint num="25" id="134" /> +<TGConnectingPoint num="26" id="135" /> +<TGConnectingPoint num="27" id="136" /> +<TGConnectingPoint num="28" id="137" /> +<TGConnectingPoint num="29" id="138" /> +<TGConnectingPoint num="30" id="139" /> +<TGConnectingPoint num="31" id="140" /> +</COMPONENT> + +<COMPONENT type="701" id="166" > +<cdparam x="381" y="159" /> +<sizeparam width="92" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange" /> +<TGConnectingPoint num="0" id="142" /> +<TGConnectingPoint num="1" id="143" /> +<TGConnectingPoint num="2" id="144" /> +<TGConnectingPoint num="3" id="145" /> +<TGConnectingPoint num="4" id="146" /> +<TGConnectingPoint num="5" id="147" /> +<TGConnectingPoint num="6" id="148" /> +<TGConnectingPoint num="7" id="149" /> +<TGConnectingPoint num="8" id="150" /> +<TGConnectingPoint num="9" id="151" /> +<TGConnectingPoint num="10" id="152" /> +<TGConnectingPoint num="11" id="153" /> +<TGConnectingPoint num="12" id="154" /> +<TGConnectingPoint num="13" id="155" /> +<TGConnectingPoint num="14" id="156" /> +<TGConnectingPoint num="15" id="157" /> +<TGConnectingPoint num="16" id="158" /> +<TGConnectingPoint num="17" id="159" /> +<TGConnectingPoint num="18" id="160" /> +<TGConnectingPoint num="19" id="161" /> +<TGConnectingPoint num="20" id="162" /> +<TGConnectingPoint num="21" id="163" /> +<TGConnectingPoint num="22" id="164" /> +<TGConnectingPoint num="23" id="165" /> +<extraparam> +<info extension="Characteristic" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="191" > +<cdparam x="444" y="277" /> +<sizeparam width="144" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange with loss" /> +<TGConnectingPoint num="0" id="167" /> +<TGConnectingPoint num="1" id="168" /> +<TGConnectingPoint num="2" id="169" /> +<TGConnectingPoint num="3" id="170" /> +<TGConnectingPoint num="4" id="171" /> +<TGConnectingPoint num="5" id="172" /> +<TGConnectingPoint num="6" id="173" /> +<TGConnectingPoint num="7" id="174" /> +<TGConnectingPoint num="8" id="175" /> +<TGConnectingPoint num="9" id="176" /> +<TGConnectingPoint num="10" id="177" /> +<TGConnectingPoint num="11" id="178" /> +<TGConnectingPoint num="12" id="179" /> +<TGConnectingPoint num="13" id="180" /> +<TGConnectingPoint num="14" id="181" /> +<TGConnectingPoint num="15" id="182" /> +<TGConnectingPoint num="16" id="183" /> +<TGConnectingPoint num="17" id="184" /> +<TGConnectingPoint num="18" id="185" /> +<TGConnectingPoint num="19" id="186" /> +<TGConnectingPoint num="20" id="187" /> +<TGConnectingPoint num="21" id="188" /> +<TGConnectingPoint num="22" id="189" /> +<TGConnectingPoint num="23" id="190" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="216" > +<cdparam x="223" y="284" /> +<sizeparam width="199" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data exchange with desequencing" /> +<TGConnectingPoint num="0" id="192" /> +<TGConnectingPoint num="1" id="193" /> +<TGConnectingPoint num="2" id="194" /> +<TGConnectingPoint num="3" id="195" /> +<TGConnectingPoint num="4" id="196" /> +<TGConnectingPoint num="5" id="197" /> +<TGConnectingPoint num="6" id="198" /> +<TGConnectingPoint num="7" id="199" /> +<TGConnectingPoint num="8" id="200" /> +<TGConnectingPoint num="9" id="201" /> +<TGConnectingPoint num="10" id="202" /> +<TGConnectingPoint num="11" id="203" /> +<TGConnectingPoint num="12" id="204" /> +<TGConnectingPoint num="13" id="205" /> +<TGConnectingPoint num="14" id="206" /> +<TGConnectingPoint num="15" id="207" /> +<TGConnectingPoint num="16" id="208" /> +<TGConnectingPoint num="17" id="209" /> +<TGConnectingPoint num="18" id="210" /> +<TGConnectingPoint num="19" id="211" /> +<TGConnectingPoint num="20" id="212" /> +<TGConnectingPoint num="21" id="213" /> +<TGConnectingPoint num="22" id="214" /> +<TGConnectingPoint num="23" id="215" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="225" > +<cdparam x="215" y="114" /> +<sizeparam width="379" height="230" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Non-connected" /> +<TGConnectingPoint num="0" id="217" /> +<TGConnectingPoint num="1" id="218" /> +<TGConnectingPoint num="2" id="219" /> +<TGConnectingPoint num="3" id="220" /> +<TGConnectingPoint num="4" id="221" /> +<TGConnectingPoint num="5" id="222" /> +<TGConnectingPoint num="6" id="223" /> +<TGConnectingPoint num="7" id="224" /> +</COMPONENT> + +<CONNECTOR type="113" id="226" > +<cdparam x="567" y="297" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="516" y="277" id="167" /> +<P2 x="427" y="199" id="149" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="227" > +<cdparam x="307" y="298" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="322" y="284" id="192" /> +<P2 x="427" y="199" id="145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="228" > +<cdparam x="381" y="179" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="381" y="179" id="143" /> +<P2 x="164" y="197" id="85" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="229" > +<cdparam x="694" y="198" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="647" y="219" id="111" /> +<P2 x="473" y="179" id="144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +</Modeling> + + + + +<Modeling type="Analysis" nameTab="Connected protocol" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="1400" > +<COMPONENT type="501" id="245" > +<cdparam x="287" y="513" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="233" /> +<TGConnectingPoint num="1" id="234" /> +<TGConnectingPoint num="2" id="235" /> +<TGConnectingPoint num="3" id="236" /> +<TGConnectingPoint num="4" id="237" /> +<TGConnectingPoint num="5" id="238" /> +<TGConnectingPoint num="6" id="239" /> +<TGConnectingPoint num="7" id="240" /> +<TGConnectingPoint num="8" id="241" /> +<TGConnectingPoint num="9" id="242" /> +<TGConnectingPoint num="10" id="243" /> +<TGConnectingPoint num="11" id="244" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="230" > +<father id="245" num="0" /> +<cdparam x="262" y="523" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="231" > +<father id="245" num="1" /> +<cdparam x="333" y="523" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="232" > +<father id="245" num="2" /> +<cdparam x="307" y="558" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="501" id="261" > +<cdparam x="460" y="160" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="249" /> +<TGConnectingPoint num="1" id="250" /> +<TGConnectingPoint num="2" id="251" /> +<TGConnectingPoint num="3" id="252" /> +<TGConnectingPoint num="4" id="253" /> +<TGConnectingPoint num="5" id="254" /> +<TGConnectingPoint num="6" id="255" /> +<TGConnectingPoint num="7" id="256" /> +<TGConnectingPoint num="8" id="257" /> +<TGConnectingPoint num="9" id="258" /> +<TGConnectingPoint num="10" id="259" /> +<TGConnectingPoint num="11" id="260" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="246" > +<father id="261" num="0" /> +<cdparam x="435" y="170" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="247" > +<father id="261" num="1" /> +<cdparam x="495" y="170" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="248" > +<father id="261" num="2" /> +<cdparam x="480" y="205" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="508" id="272" > +<cdparam x="329" y="229" /> +<sizeparam width="107" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Connection setup" /> +<TGConnectingPoint num="0" id="262" /> +<TGConnectingPoint num="1" id="263" /> +<TGConnectingPoint num="2" id="264" /> +<TGConnectingPoint num="3" id="265" /> +<TGConnectingPoint num="4" id="266" /> +<TGConnectingPoint num="5" id="267" /> +<TGConnectingPoint num="6" id="268" /> +<TGConnectingPoint num="7" id="269" /> +<TGConnectingPoint num="8" id="270" /> +<TGConnectingPoint num="9" id="271" /> +</COMPONENT> + +<COMPONENT type="504" id="277" > +<cdparam x="460" y="114" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="273" /> +<TGConnectingPoint num="1" id="274" /> +<TGConnectingPoint num="2" id="275" /> +<TGConnectingPoint num="3" id="276" /> +</COMPONENT> + +<COMPONENT type="502" id="279" > +<cdparam x="468" y="84" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="278" /> +</COMPONENT> + +<COMPONENT type="504" id="284" > +<cdparam x="457" y="300" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="280" /> +<TGConnectingPoint num="1" id="281" /> +<TGConnectingPoint num="2" id="282" /> +<TGConnectingPoint num="3" id="283" /> +</COMPONENT> + +<COMPONENT type="508" id="295" > +<cdparam x="102" y="583" /> +<sizeparam width="93" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data Exchange" /> +<TGConnectingPoint num="0" id="285" /> +<TGConnectingPoint num="1" id="286" /> +<TGConnectingPoint num="2" id="287" /> +<TGConnectingPoint num="3" id="288" /> +<TGConnectingPoint num="4" id="289" /> +<TGConnectingPoint num="5" id="290" /> +<TGConnectingPoint num="6" id="291" /> +<TGConnectingPoint num="7" id="292" /> +<TGConnectingPoint num="8" id="293" /> +<TGConnectingPoint num="9" id="294" /> +</COMPONENT> + +<COMPONENT type="508" id="306" > +<cdparam x="203" y="583" /> +<sizeparam width="199" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data exchange with desequencing" /> +<TGConnectingPoint num="0" id="296" /> +<TGConnectingPoint num="1" id="297" /> +<TGConnectingPoint num="2" id="298" /> +<TGConnectingPoint num="3" id="299" /> +<TGConnectingPoint num="4" id="300" /> +<TGConnectingPoint num="5" id="301" /> +<TGConnectingPoint num="6" id="302" /> +<TGConnectingPoint num="7" id="303" /> +<TGConnectingPoint num="8" id="304" /> +<TGConnectingPoint num="9" id="305" /> +</COMPONENT> + +<COMPONENT type="508" id="317" > +<cdparam x="426" y="583" /> +<sizeparam width="144" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data exchange with loss" /> +<TGConnectingPoint num="0" id="307" /> +<TGConnectingPoint num="1" id="308" /> +<TGConnectingPoint num="2" id="309" /> +<TGConnectingPoint num="3" id="310" /> +<TGConnectingPoint num="4" id="311" /> +<TGConnectingPoint num="5" id="312" /> +<TGConnectingPoint num="6" id="313" /> +<TGConnectingPoint num="7" id="314" /> +<TGConnectingPoint num="8" id="315" /> +<TGConnectingPoint num="9" id="316" /> +</COMPONENT> + +<COMPONENT type="504" id="322" > +<cdparam x="287" y="703" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="318" /> +<TGConnectingPoint num="1" id="319" /> +<TGConnectingPoint num="2" id="320" /> +<TGConnectingPoint num="3" id="321" /> +</COMPONENT> + +<COMPONENT type="504" id="327" > +<cdparam x="297" y="392" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="323" /> +<TGConnectingPoint num="1" id="324" /> +<TGConnectingPoint num="2" id="325" /> +<TGConnectingPoint num="3" id="326" /> +</COMPONENT> + +<COMPONENT type="507" id="342" > +<cdparam x="398" y="345" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="328" /> +<TGConnectingPoint num="1" id="329" /> +<TGConnectingPoint num="2" id="330" /> +<TGConnectingPoint num="3" id="331" /> +<TGConnectingPoint num="4" id="332" /> +<TGConnectingPoint num="5" id="333" /> +<TGConnectingPoint num="6" id="334" /> +<TGConnectingPoint num="7" id="335" /> +<TGConnectingPoint num="8" id="336" /> +<TGConnectingPoint num="9" id="337" /> +<TGConnectingPoint num="10" id="338" /> +<TGConnectingPoint num="11" id="339" /> +<TGConnectingPoint num="12" id="340" /> +<TGConnectingPoint num="13" id="341" /> +</COMPONENT> + +<COMPONENT type="508" id="353" > +<cdparam x="437" y="638" /> +<sizeparam width="123" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data retransmission" /> +<TGConnectingPoint num="0" id="343" /> +<TGConnectingPoint num="1" id="344" /> +<TGConnectingPoint num="2" id="345" /> +<TGConnectingPoint num="3" id="346" /> +<TGConnectingPoint num="4" id="347" /> +<TGConnectingPoint num="5" id="348" /> +<TGConnectingPoint num="6" id="349" /> +<TGConnectingPoint num="7" id="350" /> +<TGConnectingPoint num="8" id="351" /> +<TGConnectingPoint num="9" id="352" /> +</COMPONENT> + +<COMPONENT type="508" id="364" > +<cdparam x="254" y="649" /> +<sizeparam width="96" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data reordering" /> +<TGConnectingPoint num="0" id="354" /> +<TGConnectingPoint num="1" id="355" /> +<TGConnectingPoint num="2" id="356" /> +<TGConnectingPoint num="3" id="357" /> +<TGConnectingPoint num="4" id="358" /> +<TGConnectingPoint num="5" id="359" /> +<TGConnectingPoint num="6" id="360" /> +<TGConnectingPoint num="7" id="361" /> +<TGConnectingPoint num="8" id="362" /> +<TGConnectingPoint num="9" id="363" /> +</COMPONENT> + +<COMPONENT type="501" id="380" > +<cdparam x="649" y="387" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="368" /> +<TGConnectingPoint num="1" id="369" /> +<TGConnectingPoint num="2" id="370" /> +<TGConnectingPoint num="3" id="371" /> +<TGConnectingPoint num="4" id="372" /> +<TGConnectingPoint num="5" id="373" /> +<TGConnectingPoint num="6" id="374" /> +<TGConnectingPoint num="7" id="375" /> +<TGConnectingPoint num="8" id="376" /> +<TGConnectingPoint num="9" id="377" /> +<TGConnectingPoint num="10" id="378" /> +<TGConnectingPoint num="11" id="379" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="365" > +<father id="380" num="0" /> +<cdparam x="624" y="397" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="366" > +<father id="380" num="1" /> +<cdparam x="684" y="397" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="367" > +<father id="380" num="2" /> +<cdparam x="669" y="432" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="508" id="391" > +<cdparam x="528" y="470" /> +<sizeparam width="118" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Connection release" /> +<TGConnectingPoint num="0" id="381" /> +<TGConnectingPoint num="1" id="382" /> +<TGConnectingPoint num="2" id="383" /> +<TGConnectingPoint num="3" id="384" /> +<TGConnectingPoint num="4" id="385" /> +<TGConnectingPoint num="5" id="386" /> +<TGConnectingPoint num="6" id="387" /> +<TGConnectingPoint num="7" id="388" /> +<TGConnectingPoint num="8" id="389" /> +<TGConnectingPoint num="9" id="390" /> +</COMPONENT> + +<COMPONENT type="508" id="402" > +<cdparam x="682" y="469" /> +<sizeparam width="114" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Connection broken" /> +<TGConnectingPoint num="0" id="392" /> +<TGConnectingPoint num="1" id="393" /> +<TGConnectingPoint num="2" id="394" /> +<TGConnectingPoint num="3" id="395" /> +<TGConnectingPoint num="4" id="396" /> +<TGConnectingPoint num="5" id="397" /> +<TGConnectingPoint num="6" id="398" /> +<TGConnectingPoint num="7" id="399" /> +<TGConnectingPoint num="8" id="400" /> +<TGConnectingPoint num="9" id="401" /> +</COMPONENT> + +<COMPONENT type="504" id="407" > +<cdparam x="653" y="537" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="403" /> +<TGConnectingPoint num="1" id="404" /> +<TGConnectingPoint num="2" id="405" /> +<TGConnectingPoint num="3" id="406" /> +</COMPONENT> + +<COMPONENT type="508" id="418" > +<cdparam x="354" y="463" /> +<sizeparam width="101" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="QoS negociation" /> +<TGConnectingPoint num="0" id="408" /> +<TGConnectingPoint num="1" id="409" /> +<TGConnectingPoint num="2" id="410" /> +<TGConnectingPoint num="3" id="411" /> +<TGConnectingPoint num="4" id="412" /> +<TGConnectingPoint num="5" id="413" /> +<TGConnectingPoint num="6" id="414" /> +<TGConnectingPoint num="7" id="415" /> +<TGConnectingPoint num="8" id="416" /> +<TGConnectingPoint num="9" id="417" /> +</COMPONENT> + +<COMPONENT type="508" id="429" > +<cdparam x="514" y="228" /> +<sizeparam width="101" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="QoS negociation" /> +<TGConnectingPoint num="0" id="419" /> +<TGConnectingPoint num="1" id="420" /> +<TGConnectingPoint num="2" id="421" /> +<TGConnectingPoint num="3" id="422" /> +<TGConnectingPoint num="4" id="423" /> +<TGConnectingPoint num="5" id="424" /> +<TGConnectingPoint num="6" id="425" /> +<TGConnectingPoint num="7" id="426" /> +<TGConnectingPoint num="8" id="427" /> +<TGConnectingPoint num="9" id="428" /> +</COMPONENT> + +<COMPONENT type="501" id="445" > +<cdparam x="287" y="434" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="433" /> +<TGConnectingPoint num="1" id="434" /> +<TGConnectingPoint num="2" id="435" /> +<TGConnectingPoint num="3" id="436" /> +<TGConnectingPoint num="4" id="437" /> +<TGConnectingPoint num="5" id="438" /> +<TGConnectingPoint num="6" id="439" /> +<TGConnectingPoint num="7" id="440" /> +<TGConnectingPoint num="8" id="441" /> +<TGConnectingPoint num="9" id="442" /> +<TGConnectingPoint num="10" id="443" /> +<TGConnectingPoint num="11" id="444" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="430" > +<father id="445" num="0" /> +<cdparam x="262" y="444" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="431" > +<father id="445" num="1" /> +<cdparam x="322" y="444" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="432" > +<father id="445" num="2" /> +<cdparam x="307" y="479" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="446" > +<cdparam x="438" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="435" y="175" id="250" /> +<P2 x="382" y="224" id="262" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="447" > +<cdparam x="518" y="167" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="515" y="175" id="251" /> +<P2 x="564" y="223" id="419" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="448" > +<cdparam x="474" y="105" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="475" y="104" id="278" /> +<P2 x="475" y="114" id="273" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="449" > +<cdparam x="474" y="144" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="475" y="144" id="276" /> +<P2 x="475" y="150" id="249" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="450" > +<cdparam x="382" y="269" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="382" y="269" id="263" /> +<P2 x="457" y="315" id="281" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="451" > +<cdparam x="565" y="268" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="564" y="268" id="420" /> +<P2 x="487" y="315" id="282" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="452" > +<cdparam x="272" y="528" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="262" y="528" id="234" /> +<P2 x="148" y="578" id="285" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="453" > +<cdparam x="312" y="568" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="302" y="568" id="236" /> +<P2 x="302" y="578" id="296" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="454" > +<cdparam x="352" y="528" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="342" y="528" id="235" /> +<P2 x="498" y="578" id="307" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="455" > +<cdparam x="312" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="302" y="623" id="297" /> +<P2 x="302" y="644" id="354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="456" > +<cdparam x="148" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="148" y="623" id="286" /> +<P2 x="287" y="718" id="319" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="457" > +<cdparam x="498" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="498" y="678" id="344" /> +<P2 x="317" y="718" id="320" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="458" > +<cdparam x="472" y="330" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="472" y="330" id="283" /> +<P2 x="473" y="345" id="328" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="459" > +<cdparam x="307" y="543" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="312" y="422" id="326" /> +<P2 x="302" y="424" id="433" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="462" > +<cdparam x="316" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="473" y="350" id="331" /> +<P2 x="312" y="392" id="323" /> +<Point x="473" y="367" /> +<Point x="312" y="372" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="460" > +<father id="462" num="0" /> +<cdparam x="473" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="461" > +<father id="462" num="1" /> +<cdparam x="312" y="372" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="463" > +<cdparam x="498" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to Reference to an IOD" value="null" /> +<P1 x="498" y="623" id="308" /> +<P2 x="498" y="633" id="343" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="464" > +<cdparam x="312" y="687" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="302" y="689" id="355" /> +<P2 x="302" y="703" id="318" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="469" > +<cdparam x="312" y="733" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="302" y="733" id="321" /> +<P2 x="297" y="407" id="324" /> +<Point x="302" y="745" /> +<Point x="90" y="745" /> +<Point x="90" y="387" /> +<Point x="297" y="387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="465" > +<father id="469" num="0" /> +<cdparam x="302" y="745" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="466" > +<father id="469" num="1" /> +<cdparam x="90" y="745" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="467" > +<father id="469" num="2" /> +<cdparam x="90" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="468" > +<father id="469" num="3" /> +<cdparam x="297" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="470" > +<cdparam x="365" y="350" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to choice" value="null" /> +<P1 x="522" y="350" id="333" /> +<P2 x="664" y="377" id="368" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="471" > +<cdparam x="624" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="624" y="402" id="369" /> +<P2 x="587" y="465" id="381" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="472" > +<cdparam x="704" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="704" y="402" id="370" /> +<P2 x="739" y="464" id="392" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="473" > +<cdparam x="587" y="510" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="587" y="510" id="382" /> +<P2 x="653" y="552" id="404" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="474" > +<cdparam x="739" y="509" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="739" y="509" id="393" /> +<P2 x="683" y="552" id="405" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="479" > +<cdparam x="679" y="560" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="668" y="567" id="406" /> +<P2 x="490" y="129" id="275" /> +<Point x="668" y="580" /> +<Point x="806" y="580" /> +<Point x="806" y="109" /> +<Point x="490" y="109" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="475" > +<father id="479" num="0" /> +<cdparam x="668" y="580" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="476" > +<father id="479" num="1" /> +<cdparam x="806" y="580" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="477" > +<father id="479" num="2" /> +<cdparam x="806" y="109" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="478" > +<father id="479" num="3" /> +<cdparam x="490" y="109" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="480" > +<cdparam x="302" y="489" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="302" y="489" id="436" /> +<P2 x="302" y="503" id="233" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="481" > +<cdparam x="342" y="449" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="342" y="449" id="435" /> +<P2 x="404" y="458" id="408" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="486" > +<cdparam x="404" y="503" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="404" y="503" id="409" /> +<P2 x="327" y="407" id="325" /> +<Point x="404" y="523" /> +<Point x="502" y="523" /> +<Point x="502" y="387" /> +<Point x="327" y="387" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="482" > +<father id="486" num="0" /> +<cdparam x="404" y="523" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="483" > +<father id="486" num="1" /> +<cdparam x="502" y="523" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="484" > +<father id="486" num="2" /> +<cdparam x="502" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="485" > +<father id="486" num="3" /> +<cdparam x="327" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="519" > +<cdparam x="126" y="312" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Sending application" /> +<TGConnectingPoint num="0" id="487" /> +<TGConnectingPoint num="1" id="488" /> +<TGConnectingPoint num="2" id="489" /> +<TGConnectingPoint num="3" id="490" /> +<TGConnectingPoint num="4" id="491" /> +<TGConnectingPoint num="5" id="492" /> +<TGConnectingPoint num="6" id="493" /> +<TGConnectingPoint num="7" id="494" /> +<TGConnectingPoint num="8" id="495" /> +<TGConnectingPoint num="9" id="496" /> +<TGConnectingPoint num="10" id="497" /> +<TGConnectingPoint num="11" id="498" /> +<TGConnectingPoint num="12" id="499" /> +<TGConnectingPoint num="13" id="500" /> +<TGConnectingPoint num="14" id="501" /> +<TGConnectingPoint num="15" id="502" /> +<TGConnectingPoint num="16" id="503" /> +<TGConnectingPoint num="17" id="504" /> +<TGConnectingPoint num="18" id="505" /> +<TGConnectingPoint num="19" id="506" /> +<TGConnectingPoint num="20" id="507" /> +<TGConnectingPoint num="21" id="508" /> +<TGConnectingPoint num="22" id="509" /> +<TGConnectingPoint num="23" id="510" /> +<TGConnectingPoint num="24" id="511" /> +<TGConnectingPoint num="25" id="512" /> +<TGConnectingPoint num="26" id="513" /> +<TGConnectingPoint num="27" id="514" /> +<TGConnectingPoint num="28" id="515" /> +<TGConnectingPoint num="29" id="516" /> +<TGConnectingPoint num="30" id="517" /> +<TGConnectingPoint num="31" id="518" /> +</COMPONENT> + +<COMPONENT type="700" id="552" > +<cdparam x="778" y="316" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Receiving application" /> +<TGConnectingPoint num="0" id="520" /> +<TGConnectingPoint num="1" id="521" /> +<TGConnectingPoint num="2" id="522" /> +<TGConnectingPoint num="3" id="523" /> +<TGConnectingPoint num="4" id="524" /> +<TGConnectingPoint num="5" id="525" /> +<TGConnectingPoint num="6" id="526" /> +<TGConnectingPoint num="7" id="527" /> +<TGConnectingPoint num="8" id="528" /> +<TGConnectingPoint num="9" id="529" /> +<TGConnectingPoint num="10" id="530" /> +<TGConnectingPoint num="11" id="531" /> +<TGConnectingPoint num="12" id="532" /> +<TGConnectingPoint num="13" id="533" /> +<TGConnectingPoint num="14" id="534" /> +<TGConnectingPoint num="15" id="535" /> +<TGConnectingPoint num="16" id="536" /> +<TGConnectingPoint num="17" id="537" /> +<TGConnectingPoint num="18" id="538" /> +<TGConnectingPoint num="19" id="539" /> +<TGConnectingPoint num="20" id="540" /> +<TGConnectingPoint num="21" id="541" /> +<TGConnectingPoint num="22" id="542" /> +<TGConnectingPoint num="23" id="543" /> +<TGConnectingPoint num="24" id="544" /> +<TGConnectingPoint num="25" id="545" /> +<TGConnectingPoint num="26" id="546" /> +<TGConnectingPoint num="27" id="547" /> +<TGConnectingPoint num="28" id="548" /> +<TGConnectingPoint num="29" id="549" /> +<TGConnectingPoint num="30" id="550" /> +<TGConnectingPoint num="31" id="551" /> +</COMPONENT> + +<COMPONENT type="701" id="577" > +<cdparam x="368" y="265" /> +<sizeparam width="81" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data transfer" /> +<TGConnectingPoint num="0" id="553" /> +<TGConnectingPoint num="1" id="554" /> +<TGConnectingPoint num="2" id="555" /> +<TGConnectingPoint num="3" id="556" /> +<TGConnectingPoint num="4" id="557" /> +<TGConnectingPoint num="5" id="558" /> +<TGConnectingPoint num="6" id="559" /> +<TGConnectingPoint num="7" id="560" /> +<TGConnectingPoint num="8" id="561" /> +<TGConnectingPoint num="9" id="562" /> +<TGConnectingPoint num="10" id="563" /> +<TGConnectingPoint num="11" id="564" /> +<TGConnectingPoint num="12" id="565" /> +<TGConnectingPoint num="13" id="566" /> +<TGConnectingPoint num="14" id="567" /> +<TGConnectingPoint num="15" id="568" /> +<TGConnectingPoint num="16" id="569" /> +<TGConnectingPoint num="17" id="570" /> +<TGConnectingPoint num="18" id="571" /> +<TGConnectingPoint num="19" id="572" /> +<TGConnectingPoint num="20" id="573" /> +<TGConnectingPoint num="21" id="574" /> +<TGConnectingPoint num="22" id="575" /> +<TGConnectingPoint num="23" id="576" /> +<extraparam> +<info extension="Parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="602" > +<cdparam x="462" y="355" /> +<sizeparam width="133" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data transfer with loss" /> +<TGConnectingPoint num="0" id="578" /> +<TGConnectingPoint num="1" id="579" /> +<TGConnectingPoint num="2" id="580" /> +<TGConnectingPoint num="3" id="581" /> +<TGConnectingPoint num="4" id="582" /> +<TGConnectingPoint num="5" id="583" /> +<TGConnectingPoint num="6" id="584" /> +<TGConnectingPoint num="7" id="585" /> +<TGConnectingPoint num="8" id="586" /> +<TGConnectingPoint num="9" id="587" /> +<TGConnectingPoint num="10" id="588" /> +<TGConnectingPoint num="11" id="589" /> +<TGConnectingPoint num="12" id="590" /> +<TGConnectingPoint num="13" id="591" /> +<TGConnectingPoint num="14" id="592" /> +<TGConnectingPoint num="15" id="593" /> +<TGConnectingPoint num="16" id="594" /> +<TGConnectingPoint num="17" id="595" /> +<TGConnectingPoint num="18" id="596" /> +<TGConnectingPoint num="19" id="597" /> +<TGConnectingPoint num="20" id="598" /> +<TGConnectingPoint num="21" id="599" /> +<TGConnectingPoint num="22" id="600" /> +<TGConnectingPoint num="23" id="601" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="627" > +<cdparam x="238" y="354" /> +<sizeparam width="188" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data transfer with desequencing" /> +<TGConnectingPoint num="0" id="603" /> +<TGConnectingPoint num="1" id="604" /> +<TGConnectingPoint num="2" id="605" /> +<TGConnectingPoint num="3" id="606" /> +<TGConnectingPoint num="4" id="607" /> +<TGConnectingPoint num="5" id="608" /> +<TGConnectingPoint num="6" id="609" /> +<TGConnectingPoint num="7" id="610" /> +<TGConnectingPoint num="8" id="611" /> +<TGConnectingPoint num="9" id="612" /> +<TGConnectingPoint num="10" id="613" /> +<TGConnectingPoint num="11" id="614" /> +<TGConnectingPoint num="12" id="615" /> +<TGConnectingPoint num="13" id="616" /> +<TGConnectingPoint num="14" id="617" /> +<TGConnectingPoint num="15" id="618" /> +<TGConnectingPoint num="16" id="619" /> +<TGConnectingPoint num="17" id="620" /> +<TGConnectingPoint num="18" id="621" /> +<TGConnectingPoint num="19" id="622" /> +<TGConnectingPoint num="20" id="623" /> +<TGConnectingPoint num="21" id="624" /> +<TGConnectingPoint num="22" id="625" /> +<TGConnectingPoint num="23" id="626" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="652" > +<cdparam x="562" y="171" /> +<sizeparam width="101" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="QoS negociation" /> +<TGConnectingPoint num="0" id="628" /> +<TGConnectingPoint num="1" id="629" /> +<TGConnectingPoint num="2" id="630" /> +<TGConnectingPoint num="3" id="631" /> +<TGConnectingPoint num="4" id="632" /> +<TGConnectingPoint num="5" id="633" /> +<TGConnectingPoint num="6" id="634" /> +<TGConnectingPoint num="7" id="635" /> +<TGConnectingPoint num="8" id="636" /> +<TGConnectingPoint num="9" id="637" /> +<TGConnectingPoint num="10" id="638" /> +<TGConnectingPoint num="11" id="639" /> +<TGConnectingPoint num="12" id="640" /> +<TGConnectingPoint num="13" id="641" /> +<TGConnectingPoint num="14" id="642" /> +<TGConnectingPoint num="15" id="643" /> +<TGConnectingPoint num="16" id="644" /> +<TGConnectingPoint num="17" id="645" /> +<TGConnectingPoint num="18" id="646" /> +<TGConnectingPoint num="19" id="647" /> +<TGConnectingPoint num="20" id="648" /> +<TGConnectingPoint num="21" id="649" /> +<TGConnectingPoint num="22" id="650" /> +<TGConnectingPoint num="23" id="651" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="677" > +<cdparam x="357" y="142" /> +<sizeparam width="107" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection setup" /> +<TGConnectingPoint num="0" id="653" /> +<TGConnectingPoint num="1" id="654" /> +<TGConnectingPoint num="2" id="655" /> +<TGConnectingPoint num="3" id="656" /> +<TGConnectingPoint num="4" id="657" /> +<TGConnectingPoint num="5" id="658" /> +<TGConnectingPoint num="6" id="659" /> +<TGConnectingPoint num="7" id="660" /> +<TGConnectingPoint num="8" id="661" /> +<TGConnectingPoint num="9" id="662" /> +<TGConnectingPoint num="10" id="663" /> +<TGConnectingPoint num="11" id="664" /> +<TGConnectingPoint num="12" id="665" /> +<TGConnectingPoint num="13" id="666" /> +<TGConnectingPoint num="14" id="667" /> +<TGConnectingPoint num="15" id="668" /> +<TGConnectingPoint num="16" id="669" /> +<TGConnectingPoint num="17" id="670" /> +<TGConnectingPoint num="18" id="671" /> +<TGConnectingPoint num="19" id="672" /> +<TGConnectingPoint num="20" id="673" /> +<TGConnectingPoint num="21" id="674" /> +<TGConnectingPoint num="22" id="675" /> +<TGConnectingPoint num="23" id="676" /> +<extraparam> +<info extension="Parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="702" > +<cdparam x="376" y="512" /> +<sizeparam width="97" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection end" /> +<TGConnectingPoint num="0" id="678" /> +<TGConnectingPoint num="1" id="679" /> +<TGConnectingPoint num="2" id="680" /> +<TGConnectingPoint num="3" id="681" /> +<TGConnectingPoint num="4" id="682" /> +<TGConnectingPoint num="5" id="683" /> +<TGConnectingPoint num="6" id="684" /> +<TGConnectingPoint num="7" id="685" /> +<TGConnectingPoint num="8" id="686" /> +<TGConnectingPoint num="9" id="687" /> +<TGConnectingPoint num="10" id="688" /> +<TGConnectingPoint num="11" id="689" /> +<TGConnectingPoint num="12" id="690" /> +<TGConnectingPoint num="13" id="691" /> +<TGConnectingPoint num="14" id="692" /> +<TGConnectingPoint num="15" id="693" /> +<TGConnectingPoint num="16" id="694" /> +<TGConnectingPoint num="17" id="695" /> +<TGConnectingPoint num="18" id="696" /> +<TGConnectingPoint num="19" id="697" /> +<TGConnectingPoint num="20" id="698" /> +<TGConnectingPoint num="21" id="699" /> +<TGConnectingPoint num="22" id="700" /> +<TGConnectingPoint num="23" id="701" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="727" > +<cdparam x="248" y="593" /> +<sizeparam width="118" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection release" /> +<TGConnectingPoint num="0" id="703" /> +<TGConnectingPoint num="1" id="704" /> +<TGConnectingPoint num="2" id="705" /> +<TGConnectingPoint num="3" id="706" /> +<TGConnectingPoint num="4" id="707" /> +<TGConnectingPoint num="5" id="708" /> +<TGConnectingPoint num="6" id="709" /> +<TGConnectingPoint num="7" id="710" /> +<TGConnectingPoint num="8" id="711" /> +<TGConnectingPoint num="9" id="712" /> +<TGConnectingPoint num="10" id="713" /> +<TGConnectingPoint num="11" id="714" /> +<TGConnectingPoint num="12" id="715" /> +<TGConnectingPoint num="13" id="716" /> +<TGConnectingPoint num="14" id="717" /> +<TGConnectingPoint num="15" id="718" /> +<TGConnectingPoint num="16" id="719" /> +<TGConnectingPoint num="17" id="720" /> +<TGConnectingPoint num="18" id="721" /> +<TGConnectingPoint num="19" id="722" /> +<TGConnectingPoint num="20" id="723" /> +<TGConnectingPoint num="21" id="724" /> +<TGConnectingPoint num="22" id="725" /> +<TGConnectingPoint num="23" id="726" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="752" > +<cdparam x="479" y="591" /> +<sizeparam width="114" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Connection broken" /> +<TGConnectingPoint num="0" id="728" /> +<TGConnectingPoint num="1" id="729" /> +<TGConnectingPoint num="2" id="730" /> +<TGConnectingPoint num="3" id="731" /> +<TGConnectingPoint num="4" id="732" /> +<TGConnectingPoint num="5" id="733" /> +<TGConnectingPoint num="6" id="734" /> +<TGConnectingPoint num="7" id="735" /> +<TGConnectingPoint num="8" id="736" /> +<TGConnectingPoint num="9" id="737" /> +<TGConnectingPoint num="10" id="738" /> +<TGConnectingPoint num="11" id="739" /> +<TGConnectingPoint num="12" id="740" /> +<TGConnectingPoint num="13" id="741" /> +<TGConnectingPoint num="14" id="742" /> +<TGConnectingPoint num="15" id="743" /> +<TGConnectingPoint num="16" id="744" /> +<TGConnectingPoint num="17" id="745" /> +<TGConnectingPoint num="18" id="746" /> +<TGConnectingPoint num="19" id="747" /> +<TGConnectingPoint num="20" id="748" /> +<TGConnectingPoint num="21" id="749" /> +<TGConnectingPoint num="22" id="750" /> +<TGConnectingPoint num="23" id="751" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="777" > +<cdparam x="452" y="432" /> +<sizeparam width="123" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data retransmission" /> +<TGConnectingPoint num="0" id="753" /> +<TGConnectingPoint num="1" id="754" /> +<TGConnectingPoint num="2" id="755" /> +<TGConnectingPoint num="3" id="756" /> +<TGConnectingPoint num="4" id="757" /> +<TGConnectingPoint num="5" id="758" /> +<TGConnectingPoint num="6" id="759" /> +<TGConnectingPoint num="7" id="760" /> +<TGConnectingPoint num="8" id="761" /> +<TGConnectingPoint num="9" id="762" /> +<TGConnectingPoint num="10" id="763" /> +<TGConnectingPoint num="11" id="764" /> +<TGConnectingPoint num="12" id="765" /> +<TGConnectingPoint num="13" id="766" /> +<TGConnectingPoint num="14" id="767" /> +<TGConnectingPoint num="15" id="768" /> +<TGConnectingPoint num="16" id="769" /> +<TGConnectingPoint num="17" id="770" /> +<TGConnectingPoint num="18" id="771" /> +<TGConnectingPoint num="19" id="772" /> +<TGConnectingPoint num="20" id="773" /> +<TGConnectingPoint num="21" id="774" /> +<TGConnectingPoint num="22" id="775" /> +<TGConnectingPoint num="23" id="776" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="802" > +<cdparam x="317" y="436" /> +<sizeparam width="96" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data reordering" /> +<TGConnectingPoint num="0" id="778" /> +<TGConnectingPoint num="1" id="779" /> +<TGConnectingPoint num="2" id="780" /> +<TGConnectingPoint num="3" id="781" /> +<TGConnectingPoint num="4" id="782" /> +<TGConnectingPoint num="5" id="783" /> +<TGConnectingPoint num="6" id="784" /> +<TGConnectingPoint num="7" id="785" /> +<TGConnectingPoint num="8" id="786" /> +<TGConnectingPoint num="9" id="787" /> +<TGConnectingPoint num="10" id="788" /> +<TGConnectingPoint num="11" id="789" /> +<TGConnectingPoint num="12" id="790" /> +<TGConnectingPoint num="13" id="791" /> +<TGConnectingPoint num="14" id="792" /> +<TGConnectingPoint num="15" id="793" /> +<TGConnectingPoint num="16" id="794" /> +<TGConnectingPoint num="17" id="795" /> +<TGConnectingPoint num="18" id="796" /> +<TGConnectingPoint num="19" id="797" /> +<TGConnectingPoint num="20" id="798" /> +<TGConnectingPoint num="21" id="799" /> +<TGConnectingPoint num="22" id="800" /> +<TGConnectingPoint num="23" id="801" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="811" > +<cdparam x="200" y="120" /> +<sizeparam width="528" height="552" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Connected" /> +<TGConnectingPoint num="0" id="803" /> +<TGConnectingPoint num="1" id="804" /> +<TGConnectingPoint num="2" id="805" /> +<TGConnectingPoint num="3" id="806" /> +<TGConnectingPoint num="4" id="807" /> +<TGConnectingPoint num="5" id="808" /> +<TGConnectingPoint num="6" id="809" /> +<TGConnectingPoint num="7" id="810" /> +</COMPONENT> + +<CONNECTOR type="113" id="812" > +<cdparam x="570" y="437" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="528" y="355" id="578" /> +<P2 x="408" y="305" id="560" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="813" > +<cdparam x="310" y="438" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="332" y="354" id="603" /> +<P2 x="408" y="305" id="556" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="814" > +<cdparam x="384" y="319" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="368" y="285" id="554" /> +<P2 x="156" y="347" id="496" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="815" > +<cdparam x="697" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="778" y="351" id="522" /> +<P2 x="449" y="285" id="555" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="816" > +<cdparam x="556" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="562" y="191" id="629" /> +<P2 x="464" y="162" id="655" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="817" > +<cdparam x="485" y="587" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="536" y="591" id="728" /> +<P2 x="424" y="552" id="681" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="112" id="818" > +<cdparam x="357" y="596" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="null" /> +<P1 x="307" y="593" id="703" /> +<P2 x="424" y="552" id="685" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="819" > +<cdparam x="650" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="778" y="333" id="521" /> +<P2 x="464" y="162" id="659" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="820" > +<cdparam x="152" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="156" y="329" id="495" /> +<P2 x="357" y="162" id="654" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="821" > +<cdparam x="152" y="337" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="156" y="364" id="497" /> +<P2 x="376" y="532" id="679" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="822" > +<cdparam x="650" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="778" y="386" id="524" /> +<P2 x="473" y="532" id="680" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="823" > +<cdparam x="332" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="332" y="394" id="606" /> +<P2 x="365" y="436" id="778" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="824" > +<cdparam x="523" y="396" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="528" y="395" id="581" /> +<P2 x="513" y="432" id="753" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="825" > +<cdparam x="562" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="562" y="191" id="633" /> +<P2 x="449" y="285" id="559" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</UseCaseDiagramPanel> + +</Modeling> + + + + +<Modeling type="Analysis" nameTab="multicast protocol" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1400" minY="10" maxY="1400" > +<COMPONENT type="501" id="841" > +<cdparam x="447" y="311" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="829" /> +<TGConnectingPoint num="1" id="830" /> +<TGConnectingPoint num="2" id="831" /> +<TGConnectingPoint num="3" id="832" /> +<TGConnectingPoint num="4" id="833" /> +<TGConnectingPoint num="5" id="834" /> +<TGConnectingPoint num="6" id="835" /> +<TGConnectingPoint num="7" id="836" /> +<TGConnectingPoint num="8" id="837" /> +<TGConnectingPoint num="9" id="838" /> +<TGConnectingPoint num="10" id="839" /> +<TGConnectingPoint num="11" id="840" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="826" > +<father id="841" num="0" /> +<cdparam x="402" y="321" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="827" > +<father id="841" num="1" /> +<cdparam x="496" y="321" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="828" > +<father id="841" num="2" /> +<cdparam x="467" y="356" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="507" id="856" > +<cdparam x="437" y="262" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="842" /> +<TGConnectingPoint num="1" id="843" /> +<TGConnectingPoint num="2" id="844" /> +<TGConnectingPoint num="3" id="845" /> +<TGConnectingPoint num="4" id="846" /> +<TGConnectingPoint num="5" id="847" /> +<TGConnectingPoint num="6" id="848" /> +<TGConnectingPoint num="7" id="849" /> +<TGConnectingPoint num="8" id="850" /> +<TGConnectingPoint num="9" id="851" /> +<TGConnectingPoint num="10" id="852" /> +<TGConnectingPoint num="11" id="853" /> +<TGConnectingPoint num="12" id="854" /> +<TGConnectingPoint num="13" id="855" /> +</COMPONENT> + +<COMPONENT type="508" id="867" > +<cdparam x="570" y="299" /> +<sizeparam width="91" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Group deletion" /> +<TGConnectingPoint num="0" id="857" /> +<TGConnectingPoint num="1" id="858" /> +<TGConnectingPoint num="2" id="859" /> +<TGConnectingPoint num="3" id="860" /> +<TGConnectingPoint num="4" id="861" /> +<TGConnectingPoint num="5" id="862" /> +<TGConnectingPoint num="6" id="863" /> +<TGConnectingPoint num="7" id="864" /> +<TGConnectingPoint num="8" id="865" /> +<TGConnectingPoint num="9" id="866" /> +</COMPONENT> + +<COMPONENT type="502" id="869" > +<cdparam x="507" y="78" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="868" /> +</COMPONENT> + +<COMPONENT type="504" id="874" > +<cdparam x="499" y="96" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="870" /> +<TGConnectingPoint num="1" id="871" /> +<TGConnectingPoint num="2" id="872" /> +<TGConnectingPoint num="3" id="873" /> +</COMPONENT> + +<COMPONENT type="504" id="879" > +<cdparam x="447" y="282" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="875" /> +<TGConnectingPoint num="1" id="876" /> +<TGConnectingPoint num="2" id="877" /> +<TGConnectingPoint num="3" id="878" /> +</COMPONENT> + +<COMPONENT type="504" id="884" > +<cdparam x="484" y="488" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="880" /> +<TGConnectingPoint num="1" id="881" /> +<TGConnectingPoint num="2" id="882" /> +<TGConnectingPoint num="3" id="883" /> +</COMPONENT> + +<COMPONENT type="508" id="895" > +<cdparam x="637" y="419" /> +<sizeparam width="78" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Leave group" /> +<TGConnectingPoint num="0" id="885" /> +<TGConnectingPoint num="1" id="886" /> +<TGConnectingPoint num="2" id="887" /> +<TGConnectingPoint num="3" id="888" /> +<TGConnectingPoint num="4" id="889" /> +<TGConnectingPoint num="5" id="890" /> +<TGConnectingPoint num="6" id="891" /> +<TGConnectingPoint num="7" id="892" /> +<TGConnectingPoint num="8" id="893" /> +<TGConnectingPoint num="9" id="894" /> +</COMPONENT> + +<COMPONENT type="501" id="911" > +<cdparam x="499" y="128" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="899" /> +<TGConnectingPoint num="1" id="900" /> +<TGConnectingPoint num="2" id="901" /> +<TGConnectingPoint num="3" id="902" /> +<TGConnectingPoint num="4" id="903" /> +<TGConnectingPoint num="5" id="904" /> +<TGConnectingPoint num="6" id="905" /> +<TGConnectingPoint num="7" id="906" /> +<TGConnectingPoint num="8" id="907" /> +<TGConnectingPoint num="9" id="908" /> +<TGConnectingPoint num="10" id="909" /> +<TGConnectingPoint num="11" id="910" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="896" > +<father id="911" num="0" /> +<cdparam x="474" y="138" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="897" > +<father id="911" num="1" /> +<cdparam x="534" y="138" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="898" > +<father id="911" num="2" /> +<cdparam x="519" y="173" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="508" id="922" > +<cdparam x="496" y="185" /> +<sizeparam width="188" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Group creation with specific QoS" /> +<TGConnectingPoint num="0" id="912" /> +<TGConnectingPoint num="1" id="913" /> +<TGConnectingPoint num="2" id="914" /> +<TGConnectingPoint num="3" id="915" /> +<TGConnectingPoint num="4" id="916" /> +<TGConnectingPoint num="5" id="917" /> +<TGConnectingPoint num="6" id="918" /> +<TGConnectingPoint num="7" id="919" /> +<TGConnectingPoint num="8" id="920" /> +<TGConnectingPoint num="9" id="921" /> +</COMPONENT> + +<COMPONENT type="508" id="933" > +<cdparam x="398" y="185" /> +<sizeparam width="91" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Group creation" /> +<TGConnectingPoint num="0" id="923" /> +<TGConnectingPoint num="1" id="924" /> +<TGConnectingPoint num="2" id="925" /> +<TGConnectingPoint num="3" id="926" /> +<TGConnectingPoint num="4" id="927" /> +<TGConnectingPoint num="5" id="928" /> +<TGConnectingPoint num="6" id="929" /> +<TGConnectingPoint num="7" id="930" /> +<TGConnectingPoint num="8" id="931" /> +<TGConnectingPoint num="9" id="932" /> +</COMPONENT> + +<COMPONENT type="504" id="938" > +<cdparam x="497" y="230" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="934" /> +<TGConnectingPoint num="1" id="935" /> +<TGConnectingPoint num="2" id="936" /> +<TGConnectingPoint num="3" id="937" /> +</COMPONENT> + +<COMPONENT type="508" id="949" > +<cdparam x="382" y="420" /> +<sizeparam width="70" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Join group" /> +<TGConnectingPoint num="0" id="939" /> +<TGConnectingPoint num="1" id="940" /> +<TGConnectingPoint num="2" id="941" /> +<TGConnectingPoint num="3" id="942" /> +<TGConnectingPoint num="4" id="943" /> +<TGConnectingPoint num="5" id="944" /> +<TGConnectingPoint num="6" id="945" /> +<TGConnectingPoint num="7" id="946" /> +<TGConnectingPoint num="8" id="947" /> +<TGConnectingPoint num="9" id="948" /> +</COMPONENT> + +<COMPONENT type="508" id="960" > +<cdparam x="467" y="419" /> +<sizeparam width="165" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Join group with specific QoS" /> +<TGConnectingPoint num="0" id="950" /> +<TGConnectingPoint num="1" id="951" /> +<TGConnectingPoint num="2" id="952" /> +<TGConnectingPoint num="3" id="953" /> +<TGConnectingPoint num="4" id="954" /> +<TGConnectingPoint num="5" id="955" /> +<TGConnectingPoint num="6" id="956" /> +<TGConnectingPoint num="7" id="957" /> +<TGConnectingPoint num="8" id="958" /> +<TGConnectingPoint num="9" id="959" /> +</COMPONENT> + +<COMPONENT type="508" id="971" > +<cdparam x="129" y="401" /> +<sizeparam width="89" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data multicast" /> +<TGConnectingPoint num="0" id="961" /> +<TGConnectingPoint num="1" id="962" /> +<TGConnectingPoint num="2" id="963" /> +<TGConnectingPoint num="3" id="964" /> +<TGConnectingPoint num="4" id="965" /> +<TGConnectingPoint num="5" id="966" /> +<TGConnectingPoint num="6" id="967" /> +<TGConnectingPoint num="7" id="968" /> +<TGConnectingPoint num="8" id="969" /> +<TGConnectingPoint num="9" id="970" /> +</COMPONENT> + +<COMPONENT type="508" id="982" > +<cdparam x="231" y="401" /> +<sizeparam width="141" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data multicast with loss" /> +<TGConnectingPoint num="0" id="972" /> +<TGConnectingPoint num="1" id="973" /> +<TGConnectingPoint num="2" id="974" /> +<TGConnectingPoint num="3" id="975" /> +<TGConnectingPoint num="4" id="976" /> +<TGConnectingPoint num="5" id="977" /> +<TGConnectingPoint num="6" id="978" /> +<TGConnectingPoint num="7" id="979" /> +<TGConnectingPoint num="8" id="980" /> +<TGConnectingPoint num="9" id="981" /> +</COMPONENT> + +<COMPONENT type="501" id="998" > +<cdparam x="447" y="367" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="986" /> +<TGConnectingPoint num="1" id="987" /> +<TGConnectingPoint num="2" id="988" /> +<TGConnectingPoint num="3" id="989" /> +<TGConnectingPoint num="4" id="990" /> +<TGConnectingPoint num="5" id="991" /> +<TGConnectingPoint num="6" id="992" /> +<TGConnectingPoint num="7" id="993" /> +<TGConnectingPoint num="8" id="994" /> +<TGConnectingPoint num="9" id="995" /> +<TGConnectingPoint num="10" id="996" /> +<TGConnectingPoint num="11" id="997" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="983" > +<father id="998" num="0" /> +<cdparam x="422" y="377" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="984" > +<father id="998" num="1" /> +<cdparam x="482" y="377" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="985" > +<father id="998" num="2" /> +<cdparam x="467" y="412" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="504" id="1003" > +<cdparam x="484" y="515" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="999" /> +<TGConnectingPoint num="1" id="1000" /> +<TGConnectingPoint num="2" id="1001" /> +<TGConnectingPoint num="3" id="1002" /> +</COMPONENT> + +<COMPONENT type="501" id="1019" > +<cdparam x="211" y="351" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1007" /> +<TGConnectingPoint num="1" id="1008" /> +<TGConnectingPoint num="2" id="1009" /> +<TGConnectingPoint num="3" id="1010" /> +<TGConnectingPoint num="4" id="1011" /> +<TGConnectingPoint num="5" id="1012" /> +<TGConnectingPoint num="6" id="1013" /> +<TGConnectingPoint num="7" id="1014" /> +<TGConnectingPoint num="8" id="1015" /> +<TGConnectingPoint num="9" id="1016" /> +<TGConnectingPoint num="10" id="1017" /> +<TGConnectingPoint num="11" id="1018" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1004" > +<father id="1019" num="0" /> +<cdparam x="186" y="361" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1005" > +<father id="1019" num="1" /> +<cdparam x="246" y="361" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1006" > +<father id="1019" num="2" /> +<cdparam x="231" y="396" /> +<sizeparam width="9" height="16" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="504" id="1024" > +<cdparam x="211" y="500" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="1020" /> +<TGConnectingPoint num="1" id="1021" /> +<TGConnectingPoint num="2" id="1022" /> +<TGConnectingPoint num="3" id="1023" /> +</COMPONENT> + +<COMPONENT type="508" id="1035" > +<cdparam x="128" y="458" /> +<sizeparam width="196" height="35" minWidth="70" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="Reference to an IOD" value="Data multicast with desequencing" /> +<TGConnectingPoint num="0" id="1025" /> +<TGConnectingPoint num="1" id="1026" /> +<TGConnectingPoint num="2" id="1027" /> +<TGConnectingPoint num="3" id="1028" /> +<TGConnectingPoint num="4" id="1029" /> +<TGConnectingPoint num="5" id="1030" /> +<TGConnectingPoint num="6" id="1031" /> +<TGConnectingPoint num="7" id="1032" /> +<TGConnectingPoint num="8" id="1033" /> +<TGConnectingPoint num="9" id="1034" /> +</COMPONENT> + +<CONNECTOR type="105" id="1040" > +<cdparam x="708" y="413" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="615" y="339" id="858" /> +<P2 x="529" y="111" id="872" /> +<Point x="615" y="359" /> +<Point x="694" y="359" /> +<Point x="694" y="91" /> +<Point x="529" y="91" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1036" > +<father id="1040" num="0" /> +<cdparam x="615" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1037" > +<father id="1040" num="1" /> +<cdparam x="694" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1038" > +<father id="1040" num="2" /> +<cdparam x="694" y="91" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1039" > +<father id="1040" num="3" /> +<cdparam x="529" y="91" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1041" > +<cdparam x="482" y="438" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to parallel / synchro" value="null" /> +<P1 x="486" y="267" id="844" /> +<P2 x="462" y="282" id="875" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1042" > +<cdparam x="583" y="443" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to Reference to an IOD" value="null" /> +<P1 x="561" y="267" id="847" /> +<P2 x="615" y="294" id="857" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1043" > +<cdparam x="510" y="49" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="514" y="98" id="868" /> +<P2 x="514" y="96" id="870" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1044" > +<cdparam x="597" y="91" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to Reference to an IOD" value="null" /> +<P1 x="514" y="126" id="873" /> +<P2 x="514" y="118" id="899" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1045" > +<cdparam x="533" y="314" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to parallel / synchro" value="null" /> +<P1 x="443" y="225" id="924" /> +<P2 x="497" y="245" id="935" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1046" > +<cdparam x="376" y="342" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="462" y="312" id="878" /> +<P2 x="462" y="301" id="829" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1047" > +<cdparam x="519" y="226" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="422" y="382" id="987" /> +<P2 x="417" y="415" id="939" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1048" > +<cdparam x="503" y="435" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="549" y="459" id="951" /> +<P2 x="514" y="503" id="882" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1050" > +<cdparam x="335" y="376" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="422" y="326" id="830" /> +<P2 x="226" y="341" id="1007" /> +<Point x="226" y="326" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1049" > +<father id="1050" num="0" /> +<cdparam x="226" y="326" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1051" > +<cdparam x="606" y="261" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="590" y="225" id="913" /> +<P2 x="527" y="245" id="936" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1052" > +<cdparam x="533" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="554" y="143" id="901" /> +<P2 x="590" y="180" id="912" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1053" > +<cdparam x="453" y="147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="474" y="143" id="900" /> +<P2 x="443" y="180" id="923" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1054" > +<cdparam x="513" y="318" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to parallel / synchro" value="null" /> +<P1 x="512" y="260" id="937" /> +<P2 x="512" y="262" id="842" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1055" > +<cdparam x="480" y="524" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="462" y="366" id="832" /> +<P2 x="462" y="357" id="986" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1056" > +<cdparam x="463" y="403" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="502" y="382" id="988" /> +<P2 x="549" y="414" id="950" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1057" > +<cdparam x="448" y="465" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="417" y="460" id="940" /> +<P2 x="484" y="503" id="881" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1058" > +<cdparam x="531" y="463" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="502" y="326" id="831" /> +<P2 x="676" y="414" id="885" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1059" > +<cdparam x="487" y="670" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="499" y="518" id="883" /> +<P2 x="499" y="515" id="999" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1060" > +<cdparam x="698" y="615" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="676" y="459" id="886" /> +<P2 x="514" y="530" id="1001" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1061" > +<cdparam x="226" y="420" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="226" y="406" id="1010" /> +<P2 x="226" y="453" id="1025" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1062" > +<cdparam x="266" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="266" y="366" id="1009" /> +<P2 x="301" y="396" id="972" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1063" > +<cdparam x="186" y="399" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to an IOD" value="null" /> +<P1 x="186" y="366" id="1008" /> +<P2 x="173" y="396" id="961" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1064" > +<cdparam x="226" y="504" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="226" y="498" id="1026" /> +<P2 x="226" y="500" id="1020" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1067" > +<cdparam x="332" y="446" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="301" y="441" id="973" /> +<P2 x="241" y="515" id="1022" /> +<Point x="351" y="453" /> +<Point x="351" y="515" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1065" > +<father id="1067" num="0" /> +<cdparam x="351" y="453" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1066" > +<father id="1067" num="1" /> +<cdparam x="351" y="515" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1070" > +<cdparam x="124" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to an IOD to junction" value="null" /> +<P1 x="173" y="441" id="962" /> +<P2 x="211" y="515" id="1021" /> +<Point x="118" y="445" /> +<Point x="118" y="515" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1068" > +<father id="1070" num="0" /> +<cdparam x="118" y="445" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1069" > +<father id="1070" num="1" /> +<cdparam x="118" y="515" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="1071" > +<cdparam x="226" y="565" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="226" y="530" id="1023" /> +<P2 x="484" y="530" id="1000" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="105" id="1076" > +<cdparam x="499" y="623" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to junction" value="null" /> +<P1 x="499" y="545" id="1002" /> +<P2 x="447" y="297" id="876" /> +<Point x="499" y="557" /> +<Point x="102" y="557" /> +<Point x="102" y="277" /> +<Point x="447" y="277" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1072" > +<father id="1076" num="0" /> +<cdparam x="499" y="557" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1073" > +<father id="1076" num="1" /> +<cdparam x="102" y="557" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1074" > +<father id="1076" num="2" /> +<cdparam x="102" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1075" > +<father id="1076" num="3" /> +<cdparam x="447" y="277" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</InteractionOverviewDiagramPanel> + +<UseCaseDiagramPanel name="Use Case diagram" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="700" id="1109" > +<cdparam x="143" y="311" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="Sending application" /> +<TGConnectingPoint num="0" id="1077" /> +<TGConnectingPoint num="1" id="1078" /> +<TGConnectingPoint num="2" id="1079" /> +<TGConnectingPoint num="3" id="1080" /> +<TGConnectingPoint num="4" id="1081" /> +<TGConnectingPoint num="5" id="1082" /> +<TGConnectingPoint num="6" id="1083" /> +<TGConnectingPoint num="7" id="1084" /> +<TGConnectingPoint num="8" id="1085" /> +<TGConnectingPoint num="9" id="1086" /> +<TGConnectingPoint num="10" id="1087" /> +<TGConnectingPoint num="11" id="1088" /> +<TGConnectingPoint num="12" id="1089" /> +<TGConnectingPoint num="13" id="1090" /> +<TGConnectingPoint num="14" id="1091" /> +<TGConnectingPoint num="15" id="1092" /> +<TGConnectingPoint num="16" id="1093" /> +<TGConnectingPoint num="17" id="1094" /> +<TGConnectingPoint num="18" id="1095" /> +<TGConnectingPoint num="19" id="1096" /> +<TGConnectingPoint num="20" id="1097" /> +<TGConnectingPoint num="21" id="1098" /> +<TGConnectingPoint num="22" id="1099" /> +<TGConnectingPoint num="23" id="1100" /> +<TGConnectingPoint num="24" id="1101" /> +<TGConnectingPoint num="25" id="1102" /> +<TGConnectingPoint num="26" id="1103" /> +<TGConnectingPoint num="27" id="1104" /> +<TGConnectingPoint num="28" id="1105" /> +<TGConnectingPoint num="29" id="1106" /> +<TGConnectingPoint num="30" id="1107" /> +<TGConnectingPoint num="31" id="1108" /> +</COMPONENT> + +<COMPONENT type="700" id="1142" > +<cdparam x="790" y="334" /> +<sizeparam width="30" height="70" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="actor" value="n Receiving application" /> +<TGConnectingPoint num="0" id="1110" /> +<TGConnectingPoint num="1" id="1111" /> +<TGConnectingPoint num="2" id="1112" /> +<TGConnectingPoint num="3" id="1113" /> +<TGConnectingPoint num="4" id="1114" /> +<TGConnectingPoint num="5" id="1115" /> +<TGConnectingPoint num="6" id="1116" /> +<TGConnectingPoint num="7" id="1117" /> +<TGConnectingPoint num="8" id="1118" /> +<TGConnectingPoint num="9" id="1119" /> +<TGConnectingPoint num="10" id="1120" /> +<TGConnectingPoint num="11" id="1121" /> +<TGConnectingPoint num="12" id="1122" /> +<TGConnectingPoint num="13" id="1123" /> +<TGConnectingPoint num="14" id="1124" /> +<TGConnectingPoint num="15" id="1125" /> +<TGConnectingPoint num="16" id="1126" /> +<TGConnectingPoint num="17" id="1127" /> +<TGConnectingPoint num="18" id="1128" /> +<TGConnectingPoint num="19" id="1129" /> +<TGConnectingPoint num="20" id="1130" /> +<TGConnectingPoint num="21" id="1131" /> +<TGConnectingPoint num="22" id="1132" /> +<TGConnectingPoint num="23" id="1133" /> +<TGConnectingPoint num="24" id="1134" /> +<TGConnectingPoint num="25" id="1135" /> +<TGConnectingPoint num="26" id="1136" /> +<TGConnectingPoint num="27" id="1137" /> +<TGConnectingPoint num="28" id="1138" /> +<TGConnectingPoint num="29" id="1139" /> +<TGConnectingPoint num="30" id="1140" /> +<TGConnectingPoint num="31" id="1141" /> +</COMPONENT> + +<COMPONENT type="701" id="1167" > +<cdparam x="411" y="363" /> +<sizeparam width="89" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data multicast" /> +<TGConnectingPoint num="0" id="1143" /> +<TGConnectingPoint num="1" id="1144" /> +<TGConnectingPoint num="2" id="1145" /> +<TGConnectingPoint num="3" id="1146" /> +<TGConnectingPoint num="4" id="1147" /> +<TGConnectingPoint num="5" id="1148" /> +<TGConnectingPoint num="6" id="1149" /> +<TGConnectingPoint num="7" id="1150" /> +<TGConnectingPoint num="8" id="1151" /> +<TGConnectingPoint num="9" id="1152" /> +<TGConnectingPoint num="10" id="1153" /> +<TGConnectingPoint num="11" id="1154" /> +<TGConnectingPoint num="12" id="1155" /> +<TGConnectingPoint num="13" id="1156" /> +<TGConnectingPoint num="14" id="1157" /> +<TGConnectingPoint num="15" id="1158" /> +<TGConnectingPoint num="16" id="1159" /> +<TGConnectingPoint num="17" id="1160" /> +<TGConnectingPoint num="18" id="1161" /> +<TGConnectingPoint num="19" id="1162" /> +<TGConnectingPoint num="20" id="1163" /> +<TGConnectingPoint num="21" id="1164" /> +<TGConnectingPoint num="22" id="1165" /> +<TGConnectingPoint num="23" id="1166" /> +<extraparam> +<info extension="Parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1192" > +<cdparam x="486" y="463" /> +<sizeparam width="141" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data multicast with loss" /> +<TGConnectingPoint num="0" id="1168" /> +<TGConnectingPoint num="1" id="1169" /> +<TGConnectingPoint num="2" id="1170" /> +<TGConnectingPoint num="3" id="1171" /> +<TGConnectingPoint num="4" id="1172" /> +<TGConnectingPoint num="5" id="1173" /> +<TGConnectingPoint num="6" id="1174" /> +<TGConnectingPoint num="7" id="1175" /> +<TGConnectingPoint num="8" id="1176" /> +<TGConnectingPoint num="9" id="1177" /> +<TGConnectingPoint num="10" id="1178" /> +<TGConnectingPoint num="11" id="1179" /> +<TGConnectingPoint num="12" id="1180" /> +<TGConnectingPoint num="13" id="1181" /> +<TGConnectingPoint num="14" id="1182" /> +<TGConnectingPoint num="15" id="1183" /> +<TGConnectingPoint num="16" id="1184" /> +<TGConnectingPoint num="17" id="1185" /> +<TGConnectingPoint num="18" id="1186" /> +<TGConnectingPoint num="19" id="1187" /> +<TGConnectingPoint num="20" id="1188" /> +<TGConnectingPoint num="21" id="1189" /> +<TGConnectingPoint num="22" id="1190" /> +<TGConnectingPoint num="23" id="1191" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1217" > +<cdparam x="234" y="467" /> +<sizeparam width="196" height="40" minWidth="10" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data multicast with desequencing" /> +<TGConnectingPoint num="0" id="1193" /> +<TGConnectingPoint num="1" id="1194" /> +<TGConnectingPoint num="2" id="1195" /> +<TGConnectingPoint num="3" id="1196" /> +<TGConnectingPoint num="4" id="1197" /> +<TGConnectingPoint num="5" id="1198" /> +<TGConnectingPoint num="6" id="1199" /> +<TGConnectingPoint num="7" id="1200" /> +<TGConnectingPoint num="8" id="1201" /> +<TGConnectingPoint num="9" id="1202" /> +<TGConnectingPoint num="10" id="1203" /> +<TGConnectingPoint num="11" id="1204" /> +<TGConnectingPoint num="12" id="1205" /> +<TGConnectingPoint num="13" id="1206" /> +<TGConnectingPoint num="14" id="1207" /> +<TGConnectingPoint num="15" id="1208" /> +<TGConnectingPoint num="16" id="1209" /> +<TGConnectingPoint num="17" id="1210" /> +<TGConnectingPoint num="18" id="1211" /> +<TGConnectingPoint num="19" id="1212" /> +<TGConnectingPoint num="20" id="1213" /> +<TGConnectingPoint num="21" id="1214" /> +<TGConnectingPoint num="22" id="1215" /> +<TGConnectingPoint num="23" id="1216" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1242" > +<cdparam x="496" y="557" /> +<sizeparam width="123" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data retransmission" /> +<TGConnectingPoint num="0" id="1218" /> +<TGConnectingPoint num="1" id="1219" /> +<TGConnectingPoint num="2" id="1220" /> +<TGConnectingPoint num="3" id="1221" /> +<TGConnectingPoint num="4" id="1222" /> +<TGConnectingPoint num="5" id="1223" /> +<TGConnectingPoint num="6" id="1224" /> +<TGConnectingPoint num="7" id="1225" /> +<TGConnectingPoint num="8" id="1226" /> +<TGConnectingPoint num="9" id="1227" /> +<TGConnectingPoint num="10" id="1228" /> +<TGConnectingPoint num="11" id="1229" /> +<TGConnectingPoint num="12" id="1230" /> +<TGConnectingPoint num="13" id="1231" /> +<TGConnectingPoint num="14" id="1232" /> +<TGConnectingPoint num="15" id="1233" /> +<TGConnectingPoint num="16" id="1234" /> +<TGConnectingPoint num="17" id="1235" /> +<TGConnectingPoint num="18" id="1236" /> +<TGConnectingPoint num="19" id="1237" /> +<TGConnectingPoint num="20" id="1238" /> +<TGConnectingPoint num="21" id="1239" /> +<TGConnectingPoint num="22" id="1240" /> +<TGConnectingPoint num="23" id="1241" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1267" > +<cdparam x="283" y="550" /> +<sizeparam width="96" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Data reordering" /> +<TGConnectingPoint num="0" id="1243" /> +<TGConnectingPoint num="1" id="1244" /> +<TGConnectingPoint num="2" id="1245" /> +<TGConnectingPoint num="3" id="1246" /> +<TGConnectingPoint num="4" id="1247" /> +<TGConnectingPoint num="5" id="1248" /> +<TGConnectingPoint num="6" id="1249" /> +<TGConnectingPoint num="7" id="1250" /> +<TGConnectingPoint num="8" id="1251" /> +<TGConnectingPoint num="9" id="1252" /> +<TGConnectingPoint num="10" id="1253" /> +<TGConnectingPoint num="11" id="1254" /> +<TGConnectingPoint num="12" id="1255" /> +<TGConnectingPoint num="13" id="1256" /> +<TGConnectingPoint num="14" id="1257" /> +<TGConnectingPoint num="15" id="1258" /> +<TGConnectingPoint num="16" id="1259" /> +<TGConnectingPoint num="17" id="1260" /> +<TGConnectingPoint num="18" id="1261" /> +<TGConnectingPoint num="19" id="1262" /> +<TGConnectingPoint num="20" id="1263" /> +<TGConnectingPoint num="21" id="1264" /> +<TGConnectingPoint num="22" id="1265" /> +<TGConnectingPoint num="23" id="1266" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1292" > +<cdparam x="337" y="197" /> +<sizeparam width="91" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Group creation" /> +<TGConnectingPoint num="0" id="1268" /> +<TGConnectingPoint num="1" id="1269" /> +<TGConnectingPoint num="2" id="1270" /> +<TGConnectingPoint num="3" id="1271" /> +<TGConnectingPoint num="4" id="1272" /> +<TGConnectingPoint num="5" id="1273" /> +<TGConnectingPoint num="6" id="1274" /> +<TGConnectingPoint num="7" id="1275" /> +<TGConnectingPoint num="8" id="1276" /> +<TGConnectingPoint num="9" id="1277" /> +<TGConnectingPoint num="10" id="1278" /> +<TGConnectingPoint num="11" id="1279" /> +<TGConnectingPoint num="12" id="1280" /> +<TGConnectingPoint num="13" id="1281" /> +<TGConnectingPoint num="14" id="1282" /> +<TGConnectingPoint num="15" id="1283" /> +<TGConnectingPoint num="16" id="1284" /> +<TGConnectingPoint num="17" id="1285" /> +<TGConnectingPoint num="18" id="1286" /> +<TGConnectingPoint num="19" id="1287" /> +<TGConnectingPoint num="20" id="1288" /> +<TGConnectingPoint num="21" id="1289" /> +<TGConnectingPoint num="22" id="1290" /> +<TGConnectingPoint num="23" id="1291" /> +<extraparam> +<info extension="parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1317" > +<cdparam x="333" y="125" /> +<sizeparam width="91" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Group deletion" /> +<TGConnectingPoint num="0" id="1293" /> +<TGConnectingPoint num="1" id="1294" /> +<TGConnectingPoint num="2" id="1295" /> +<TGConnectingPoint num="3" id="1296" /> +<TGConnectingPoint num="4" id="1297" /> +<TGConnectingPoint num="5" id="1298" /> +<TGConnectingPoint num="6" id="1299" /> +<TGConnectingPoint num="7" id="1300" /> +<TGConnectingPoint num="8" id="1301" /> +<TGConnectingPoint num="9" id="1302" /> +<TGConnectingPoint num="10" id="1303" /> +<TGConnectingPoint num="11" id="1304" /> +<TGConnectingPoint num="12" id="1305" /> +<TGConnectingPoint num="13" id="1306" /> +<TGConnectingPoint num="14" id="1307" /> +<TGConnectingPoint num="15" id="1308" /> +<TGConnectingPoint num="16" id="1309" /> +<TGConnectingPoint num="17" id="1310" /> +<TGConnectingPoint num="18" id="1311" /> +<TGConnectingPoint num="19" id="1312" /> +<TGConnectingPoint num="20" id="1313" /> +<TGConnectingPoint num="21" id="1314" /> +<TGConnectingPoint num="22" id="1315" /> +<TGConnectingPoint num="23" id="1316" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1342" > +<cdparam x="526" y="199" /> +<sizeparam width="74" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Join group" /> +<TGConnectingPoint num="0" id="1318" /> +<TGConnectingPoint num="1" id="1319" /> +<TGConnectingPoint num="2" id="1320" /> +<TGConnectingPoint num="3" id="1321" /> +<TGConnectingPoint num="4" id="1322" /> +<TGConnectingPoint num="5" id="1323" /> +<TGConnectingPoint num="6" id="1324" /> +<TGConnectingPoint num="7" id="1325" /> +<TGConnectingPoint num="8" id="1326" /> +<TGConnectingPoint num="9" id="1327" /> +<TGConnectingPoint num="10" id="1328" /> +<TGConnectingPoint num="11" id="1329" /> +<TGConnectingPoint num="12" id="1330" /> +<TGConnectingPoint num="13" id="1331" /> +<TGConnectingPoint num="14" id="1332" /> +<TGConnectingPoint num="15" id="1333" /> +<TGConnectingPoint num="16" id="1334" /> +<TGConnectingPoint num="17" id="1335" /> +<TGConnectingPoint num="18" id="1336" /> +<TGConnectingPoint num="19" id="1337" /> +<TGConnectingPoint num="20" id="1338" /> +<TGConnectingPoint num="21" id="1339" /> +<TGConnectingPoint num="22" id="1340" /> +<TGConnectingPoint num="23" id="1341" /> +<extraparam> +<info extension="parameters" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1367" > +<cdparam x="593" y="139" /> +<sizeparam width="78" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Leave group" /> +<TGConnectingPoint num="0" id="1343" /> +<TGConnectingPoint num="1" id="1344" /> +<TGConnectingPoint num="2" id="1345" /> +<TGConnectingPoint num="3" id="1346" /> +<TGConnectingPoint num="4" id="1347" /> +<TGConnectingPoint num="5" id="1348" /> +<TGConnectingPoint num="6" id="1349" /> +<TGConnectingPoint num="7" id="1350" /> +<TGConnectingPoint num="8" id="1351" /> +<TGConnectingPoint num="9" id="1352" /> +<TGConnectingPoint num="10" id="1353" /> +<TGConnectingPoint num="11" id="1354" /> +<TGConnectingPoint num="12" id="1355" /> +<TGConnectingPoint num="13" id="1356" /> +<TGConnectingPoint num="14" id="1357" /> +<TGConnectingPoint num="15" id="1358" /> +<TGConnectingPoint num="16" id="1359" /> +<TGConnectingPoint num="17" id="1360" /> +<TGConnectingPoint num="18" id="1361" /> +<TGConnectingPoint num="19" id="1362" /> +<TGConnectingPoint num="20" id="1363" /> +<TGConnectingPoint num="21" id="1364" /> +<TGConnectingPoint num="22" id="1365" /> +<TGConnectingPoint num="23" id="1366" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1392" > +<cdparam x="285" y="278" /> +<sizeparam width="188" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Group creation with specific QoS" /> +<TGConnectingPoint num="0" id="1368" /> +<TGConnectingPoint num="1" id="1369" /> +<TGConnectingPoint num="2" id="1370" /> +<TGConnectingPoint num="3" id="1371" /> +<TGConnectingPoint num="4" id="1372" /> +<TGConnectingPoint num="5" id="1373" /> +<TGConnectingPoint num="6" id="1374" /> +<TGConnectingPoint num="7" id="1375" /> +<TGConnectingPoint num="8" id="1376" /> +<TGConnectingPoint num="9" id="1377" /> +<TGConnectingPoint num="10" id="1378" /> +<TGConnectingPoint num="11" id="1379" /> +<TGConnectingPoint num="12" id="1380" /> +<TGConnectingPoint num="13" id="1381" /> +<TGConnectingPoint num="14" id="1382" /> +<TGConnectingPoint num="15" id="1383" /> +<TGConnectingPoint num="16" id="1384" /> +<TGConnectingPoint num="17" id="1385" /> +<TGConnectingPoint num="18" id="1386" /> +<TGConnectingPoint num="19" id="1387" /> +<TGConnectingPoint num="20" id="1388" /> +<TGConnectingPoint num="21" id="1389" /> +<TGConnectingPoint num="22" id="1390" /> +<TGConnectingPoint num="23" id="1391" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="701" id="1417" > +<cdparam x="483" y="290" /> +<sizeparam width="165" height="40" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Use case" value="Join group with specific QoS" /> +<TGConnectingPoint num="0" id="1393" /> +<TGConnectingPoint num="1" id="1394" /> +<TGConnectingPoint num="2" id="1395" /> +<TGConnectingPoint num="3" id="1396" /> +<TGConnectingPoint num="4" id="1397" /> +<TGConnectingPoint num="5" id="1398" /> +<TGConnectingPoint num="6" id="1399" /> +<TGConnectingPoint num="7" id="1400" /> +<TGConnectingPoint num="8" id="1401" /> +<TGConnectingPoint num="9" id="1402" /> +<TGConnectingPoint num="10" id="1403" /> +<TGConnectingPoint num="11" id="1404" /> +<TGConnectingPoint num="12" id="1405" /> +<TGConnectingPoint num="13" id="1406" /> +<TGConnectingPoint num="14" id="1407" /> +<TGConnectingPoint num="15" id="1408" /> +<TGConnectingPoint num="16" id="1409" /> +<TGConnectingPoint num="17" id="1410" /> +<TGConnectingPoint num="18" id="1411" /> +<TGConnectingPoint num="19" id="1412" /> +<TGConnectingPoint num="20" id="1413" /> +<TGConnectingPoint num="21" id="1414" /> +<TGConnectingPoint num="22" id="1415" /> +<TGConnectingPoint num="23" id="1416" /> +<extraparam> +<info extension="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="702" id="1426" > +<cdparam x="220" y="97" /> +<sizeparam width="481" height="522" minWidth="100" minHeight="100" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="border" value="Multicast" /> +<TGConnectingPoint num="0" id="1418" /> +<TGConnectingPoint num="1" id="1419" /> +<TGConnectingPoint num="2" id="1420" /> +<TGConnectingPoint num="3" id="1421" /> +<TGConnectingPoint num="4" id="1422" /> +<TGConnectingPoint num="5" id="1423" /> +<TGConnectingPoint num="6" id="1424" /> +<TGConnectingPoint num="7" id="1425" /> +</COMPONENT> + +<CONNECTOR type="113" id="1427" > +<cdparam x="1003" y="595" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="556" y="463" id="1168" /> +<P2 x="455" y="403" id="1150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="1428" > +<cdparam x="743" y="596" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="332" y="467" id="1193" /> +<P2 x="455" y="403" id="1146" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1429" > +<cdparam x="385" y="319" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to actor" value="null" /> +<P1 x="411" y="383" id="1144" /> +<P2 x="173" y="346" id="1086" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1430" > +<cdparam x="698" y="338" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="790" y="334" id="1110" /> +<P2 x="600" y="219" id="1320" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1431" > +<cdparam x="153" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="173" y="328" id="1085" /> +<P2 x="337" y="217" id="1269" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1432" > +<cdparam x="765" y="552" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="332" y="507" id="1196" /> +<P2 x="331" y="550" id="1243" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="111" id="1433" > +<cdparam x="956" y="554" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<include>>" /> +<P1 x="556" y="503" id="1171" /> +<P2 x="557" y="557" id="1218" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1434" > +<cdparam x="149" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="173" y="328" id="1097" /> +<P2 x="333" y="145" id="1294" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="1435" > +<cdparam x="548" y="280" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="379" y="278" id="1368" /> +<P2 x="382" y="237" id="1271" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1436" > +<cdparam x="897" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="805" y="334" id="1115" /> +<P2 x="671" y="159" id="1345" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="113" id="1437" > +<cdparam x="603" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Use case to Use case" value="<<extend>>" /> +<P1 x="565" y="290" id="1393" /> +<P2 x="563" y="239" id="1321" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1438" > +<cdparam x="997" y="378" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="790" y="386" id="1113" /> +<P2 x="500" y="383" id="1145" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="110" id="1440" > +<cdparam x="790" y="334" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from actor to Use case" value="null" /> +<P1 x="790" y="334" id="1122" /> +<P2 x="424" y="145" id="1295" /> +<Point x="577" y="174" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1439" > +<father id="1440" num="0" /> +<cdparam x="577" y="174" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</UseCaseDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/Protocol_example1.xml b/preinstallTTool/macos/TTool/modeling/Protocol_example1.xml new file mode 100755 index 0000000000000000000000000000000000000000..328dd98f2995324bab132aaa8e3610e8ecd57dac --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/Protocol_example1.xml @@ -0,0 +1,832 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.80beta3c"> + +<Modeling type="Analysis" nameTab="Analysis" > +<InteractionOverviewDiagramPanel name="Interaction Overview Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="501" id="8" > +<cdparam x="305" y="279" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<TGConnectingPoint num="2" id="6" /> +<TGConnectingPoint num="3" id="7" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1" > +<father id="8" num="0" /> +<cdparam x="230" y="289" /> +<sizeparam width="66" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[client / x<3 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="2" > +<father id="8" num="1" /> +<cdparam x="360" y="289" /> +<sizeparam width="66" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[client / x>2 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="3" > +<father id="8" num="2" /> +<cdparam x="325" y="324" /> +<sizeparam width="79" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[client / x == 1 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="502" id="10" > +<cdparam x="396" y="25" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="9" /> +</COMPONENT> + +<COMPONENT type="506" id="13" > +<cdparam x="390" y="347" /> +<sizeparam width="120" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="ConnectionRelease" /> +<TGConnectingPoint num="0" id="11" /> +<TGConnectingPoint num="1" id="12" /> +</COMPONENT> + +<COMPONENT type="503" id="15" > +<cdparam x="440" y="425" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="14" /> +</COMPONENT> + +<COMPONENT type="506" id="18" > +<cdparam x="195" y="354" /> +<sizeparam width="82" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="DataTransfer" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +</COMPONENT> + +<COMPONENT type="504" id="23" > +<cdparam x="304" y="226" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="19" /> +<TGConnectingPoint num="1" id="20" /> +<TGConnectingPoint num="2" id="21" /> +<TGConnectingPoint num="3" id="22" /> +</COMPONENT> + +<COMPONENT type="506" id="26" > +<cdparam x="351" y="67" /> +<sizeparam width="105" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="ConnectionSetup" /> +<TGConnectingPoint num="0" id="24" /> +<TGConnectingPoint num="1" id="25" /> +</COMPONENT> + +<COMPONENT type="507" id="33" > +<cdparam x="328" y="171" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +<TGConnectingPoint num="2" id="29" /> +<TGConnectingPoint num="3" id="30" /> +<TGConnectingPoint num="4" id="31" /> +<TGConnectingPoint num="5" id="32" /> +</COMPONENT> + +<COMPONENT type="506" id="36" > +<cdparam x="455" y="220" /> +<sizeparam width="112" height="35" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Reference to a SD" value="ConnectionBroken" /> +<TGConnectingPoint num="0" id="34" /> +<TGConnectingPoint num="1" id="35" /> +</COMPONENT> + +<COMPONENT type="503" id="38" > +<cdparam x="501" y="291" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="37" /> +</COMPONENT> + +<CONNECTOR type="105" id="39" > +<cdparam x="367" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="360" y="294" id="6" /> +<P2 x="450" y="342" id="11" /> +</CONNECTOR> +<CONNECTOR type="105" id="40" > +<cdparam x="425" y="183" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to choice" value="null" /> +<P1 x="403" y="45" id="9" /> +<P2 x="403" y="62" id="24" /> +</CONNECTOR> +<CONNECTOR type="105" id="41" > +<cdparam x="450" y="387" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="450" y="387" id="12" /> +<P2 x="450" y="420" id="14" /> +</CONNECTOR> +<CONNECTOR type="105" id="42" > +<cdparam x="287" y="294" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to Reference to a SD" value="null" /> +<P1 x="280" y="294" id="5" /> +<P2 x="236" y="349" id="16" /> +</CONNECTOR> +<CONNECTOR type="105" id="43" > +<cdparam x="320" y="240" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="319" y="256" id="22" /> +<P2 x="320" y="269" id="4" /> +</CONNECTOR> +<CONNECTOR type="105" id="48" > +<cdparam x="236" y="394" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to junction" value="null" /> +<P1 x="236" y="394" id="17" /> +<P2 x="304" y="241" id="20" /> +<Point x="236" y="419" /> +<Point x="177" y="419" /> +<Point x="177" y="200" /> +<Point x="304" y="200" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="44" > +<father id="48" num="0" /> +<cdparam x="236" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="45" > +<father id="48" num="1" /> +<cdparam x="177" y="419" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="46" > +<father id="48" num="2" /> +<cdparam x="177" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="47" > +<father id="48" num="3" /> +<cdparam x="304" y="200" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="105" id="49" > +<cdparam x="403" y="107" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to junction" value="null" /> +<P1 x="403" y="107" id="25" /> +<P2 x="403" y="171" id="27" /> +</CONNECTOR> +<CONNECTOR type="105" id="50" > +<cdparam x="380" y="217" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="353" y="176" id="28" /> +<P2 x="319" y="226" id="19" /> +</CONNECTOR> +<CONNECTOR type="105" id="51" > +<cdparam x="452" y="148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to Reference to a SD" value="null" /> +<P1 x="452" y="176" id="32" /> +<P2 x="511" y="215" id="34" /> +</CONNECTOR> +<CONNECTOR type="105" id="52" > +<cdparam x="511" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Reference to a SD to stop state" value="null" /> +<P1 x="511" y="260" id="35" /> +<P2 x="511" y="286" id="37" /> +</CONNECTOR> + +</InteractionOverviewDiagramPanel> + +<SequenceDiagramPanel name="DataTransfer" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="105" > +<cdparam x="248" y="103" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="56" /> +<TGConnectingPoint num="1" id="57" /> +<TGConnectingPoint num="2" id="58" /> +<TGConnectingPoint num="3" id="59" /> +<TGConnectingPoint num="4" id="60" /> +<TGConnectingPoint num="5" id="61" /> +<TGConnectingPoint num="6" id="62" /> +<TGConnectingPoint num="7" id="63" /> +<TGConnectingPoint num="8" id="64" /> +<TGConnectingPoint num="9" id="65" /> +<TGConnectingPoint num="10" id="66" /> +<TGConnectingPoint num="11" id="67" /> +<TGConnectingPoint num="12" id="68" /> +<TGConnectingPoint num="13" id="69" /> +<TGConnectingPoint num="14" id="70" /> +<TGConnectingPoint num="15" id="71" /> +<TGConnectingPoint num="16" id="72" /> +<TGConnectingPoint num="17" id="73" /> +<TGConnectingPoint num="18" id="74" /> +<TGConnectingPoint num="19" id="75" /> +<TGConnectingPoint num="20" id="76" /> +<TGConnectingPoint num="21" id="77" /> +<TGConnectingPoint num="22" id="78" /> +<TGConnectingPoint num="23" id="79" /> +<TGConnectingPoint num="24" id="80" /> +<TGConnectingPoint num="25" id="81" /> +<TGConnectingPoint num="26" id="82" /> +<TGConnectingPoint num="27" id="83" /> +<TGConnectingPoint num="28" id="84" /> +<TGConnectingPoint num="29" id="85" /> +<TGConnectingPoint num="30" id="86" /> +<TGConnectingPoint num="31" id="87" /> +<TGConnectingPoint num="32" id="88" /> +<TGConnectingPoint num="33" id="89" /> +<TGConnectingPoint num="34" id="90" /> +<TGConnectingPoint num="35" id="91" /> +<TGConnectingPoint num="36" id="92" /> +<TGConnectingPoint num="37" id="93" /> +<TGConnectingPoint num="38" id="94" /> +<TGConnectingPoint num="39" id="95" /> +<TGConnectingPoint num="40" id="96" /> +<TGConnectingPoint num="41" id="97" /> +<TGConnectingPoint num="42" id="98" /> +<TGConnectingPoint num="43" id="99" /> +<TGConnectingPoint num="44" id="100" /> +<TGConnectingPoint num="45" id="101" /> +<TGConnectingPoint num="46" id="102" /> +<TGConnectingPoint num="47" id="103" /> +<TGConnectingPoint num="48" id="104" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="53" > +<father id="105" num="0" /> +<cdparam x="253" y="276" /> +<sizeparam width="50" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="x = x +1" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="603" id="54" > +<father id="105" num="1" /> +<cdparam x="266" y="327" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="478" /> +<infoparam name="setting timer" value="{timer=myTimer, duration=10}" /> +<extraparam> +<Interval timer="myTimer" duration="10" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="605" id="55" > +<father id="105" num="2" /> +<cdparam x="266" y="397" /> +<sizeparam width="15" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="18" maxX="18" minY="-2" maxY="478" /> +<infoparam name="timer expiration" value="{timer=myTimer}" /> +<extraparam> +<Interval timer="myTimer" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="606" id="159" > +<cdparam x="480" y="103" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="110" /> +<TGConnectingPoint num="1" id="111" /> +<TGConnectingPoint num="2" id="112" /> +<TGConnectingPoint num="3" id="113" /> +<TGConnectingPoint num="4" id="114" /> +<TGConnectingPoint num="5" id="115" /> +<TGConnectingPoint num="6" id="116" /> +<TGConnectingPoint num="7" id="117" /> +<TGConnectingPoint num="8" id="118" /> +<TGConnectingPoint num="9" id="119" /> +<TGConnectingPoint num="10" id="120" /> +<TGConnectingPoint num="11" id="121" /> +<TGConnectingPoint num="12" id="122" /> +<TGConnectingPoint num="13" id="123" /> +<TGConnectingPoint num="14" id="124" /> +<TGConnectingPoint num="15" id="125" /> +<TGConnectingPoint num="16" id="126" /> +<TGConnectingPoint num="17" id="127" /> +<TGConnectingPoint num="18" id="128" /> +<TGConnectingPoint num="19" id="129" /> +<TGConnectingPoint num="20" id="130" /> +<TGConnectingPoint num="21" id="131" /> +<TGConnectingPoint num="22" id="132" /> +<TGConnectingPoint num="23" id="133" /> +<TGConnectingPoint num="24" id="134" /> +<TGConnectingPoint num="25" id="135" /> +<TGConnectingPoint num="26" id="136" /> +<TGConnectingPoint num="27" id="137" /> +<TGConnectingPoint num="28" id="138" /> +<TGConnectingPoint num="29" id="139" /> +<TGConnectingPoint num="30" id="140" /> +<TGConnectingPoint num="31" id="141" /> +<TGConnectingPoint num="32" id="142" /> +<TGConnectingPoint num="33" id="143" /> +<TGConnectingPoint num="34" id="144" /> +<TGConnectingPoint num="35" id="145" /> +<TGConnectingPoint num="36" id="146" /> +<TGConnectingPoint num="37" id="147" /> +<TGConnectingPoint num="38" id="148" /> +<TGConnectingPoint num="39" id="149" /> +<TGConnectingPoint num="40" id="150" /> +<TGConnectingPoint num="41" id="151" /> +<TGConnectingPoint num="42" id="152" /> +<TGConnectingPoint num="43" id="153" /> +<TGConnectingPoint num="44" id="154" /> +<TGConnectingPoint num="45" id="155" /> +<TGConnectingPoint num="46" id="156" /> +<TGConnectingPoint num="47" id="157" /> +<TGConnectingPoint num="48" id="158" /> +</COMPONENT> +<SUBCOMPONENT type="601" id="107" > +<father id="159" num="0" /> +<cdparam x="485" y="163" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="106" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="109" > +<father id="159" num="1" /> +<cdparam x="485" y="213" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="108" /> +</SUBCOMPONENT> + +<CONNECTOR type="106" id="160" > +<cdparam x="253" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="getData" /> +<P1 x="253" y="163" id="61" /> +<P2 x="485" y="163" id="115" /> +</CONNECTOR> +<CONNECTOR type="106" id="161" > +<cdparam x="485" y="213" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="data" /> +<P1 x="485" y="213" id="120" /> +<P2 x="253" y="213" id="66" /> +</CONNECTOR> +<CONNECTOR type="109" id="162" > +<cdparam x="495" y="163" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{5..10}" /> +<P1 x="495" y="163" id="106" /> +<P2 x="495" y="213" id="108" /> +<extraparam> +<Interval minConstraint="5" maxConstraint="10" /> +</extraparam> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="ConnectionRelease" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="212" > +<cdparam x="265" y="99" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="163" /> +<TGConnectingPoint num="1" id="164" /> +<TGConnectingPoint num="2" id="165" /> +<TGConnectingPoint num="3" id="166" /> +<TGConnectingPoint num="4" id="167" /> +<TGConnectingPoint num="5" id="168" /> +<TGConnectingPoint num="6" id="169" /> +<TGConnectingPoint num="7" id="170" /> +<TGConnectingPoint num="8" id="171" /> +<TGConnectingPoint num="9" id="172" /> +<TGConnectingPoint num="10" id="173" /> +<TGConnectingPoint num="11" id="174" /> +<TGConnectingPoint num="12" id="175" /> +<TGConnectingPoint num="13" id="176" /> +<TGConnectingPoint num="14" id="177" /> +<TGConnectingPoint num="15" id="178" /> +<TGConnectingPoint num="16" id="179" /> +<TGConnectingPoint num="17" id="180" /> +<TGConnectingPoint num="18" id="181" /> +<TGConnectingPoint num="19" id="182" /> +<TGConnectingPoint num="20" id="183" /> +<TGConnectingPoint num="21" id="184" /> +<TGConnectingPoint num="22" id="185" /> +<TGConnectingPoint num="23" id="186" /> +<TGConnectingPoint num="24" id="187" /> +<TGConnectingPoint num="25" id="188" /> +<TGConnectingPoint num="26" id="189" /> +<TGConnectingPoint num="27" id="190" /> +<TGConnectingPoint num="28" id="191" /> +<TGConnectingPoint num="29" id="192" /> +<TGConnectingPoint num="30" id="193" /> +<TGConnectingPoint num="31" id="194" /> +<TGConnectingPoint num="32" id="195" /> +<TGConnectingPoint num="33" id="196" /> +<TGConnectingPoint num="34" id="197" /> +<TGConnectingPoint num="35" id="198" /> +<TGConnectingPoint num="36" id="199" /> +<TGConnectingPoint num="37" id="200" /> +<TGConnectingPoint num="38" id="201" /> +<TGConnectingPoint num="39" id="202" /> +<TGConnectingPoint num="40" id="203" /> +<TGConnectingPoint num="41" id="204" /> +<TGConnectingPoint num="42" id="205" /> +<TGConnectingPoint num="43" id="206" /> +<TGConnectingPoint num="44" id="207" /> +<TGConnectingPoint num="45" id="208" /> +<TGConnectingPoint num="46" id="209" /> +<TGConnectingPoint num="47" id="210" /> +<TGConnectingPoint num="48" id="211" /> +</COMPONENT> + +<COMPONENT type="606" id="262" > +<cdparam x="526" y="99" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="213" /> +<TGConnectingPoint num="1" id="214" /> +<TGConnectingPoint num="2" id="215" /> +<TGConnectingPoint num="3" id="216" /> +<TGConnectingPoint num="4" id="217" /> +<TGConnectingPoint num="5" id="218" /> +<TGConnectingPoint num="6" id="219" /> +<TGConnectingPoint num="7" id="220" /> +<TGConnectingPoint num="8" id="221" /> +<TGConnectingPoint num="9" id="222" /> +<TGConnectingPoint num="10" id="223" /> +<TGConnectingPoint num="11" id="224" /> +<TGConnectingPoint num="12" id="225" /> +<TGConnectingPoint num="13" id="226" /> +<TGConnectingPoint num="14" id="227" /> +<TGConnectingPoint num="15" id="228" /> +<TGConnectingPoint num="16" id="229" /> +<TGConnectingPoint num="17" id="230" /> +<TGConnectingPoint num="18" id="231" /> +<TGConnectingPoint num="19" id="232" /> +<TGConnectingPoint num="20" id="233" /> +<TGConnectingPoint num="21" id="234" /> +<TGConnectingPoint num="22" id="235" /> +<TGConnectingPoint num="23" id="236" /> +<TGConnectingPoint num="24" id="237" /> +<TGConnectingPoint num="25" id="238" /> +<TGConnectingPoint num="26" id="239" /> +<TGConnectingPoint num="27" id="240" /> +<TGConnectingPoint num="28" id="241" /> +<TGConnectingPoint num="29" id="242" /> +<TGConnectingPoint num="30" id="243" /> +<TGConnectingPoint num="31" id="244" /> +<TGConnectingPoint num="32" id="245" /> +<TGConnectingPoint num="33" id="246" /> +<TGConnectingPoint num="34" id="247" /> +<TGConnectingPoint num="35" id="248" /> +<TGConnectingPoint num="36" id="249" /> +<TGConnectingPoint num="37" id="250" /> +<TGConnectingPoint num="38" id="251" /> +<TGConnectingPoint num="39" id="252" /> +<TGConnectingPoint num="40" id="253" /> +<TGConnectingPoint num="41" id="254" /> +<TGConnectingPoint num="42" id="255" /> +<TGConnectingPoint num="43" id="256" /> +<TGConnectingPoint num="44" id="257" /> +<TGConnectingPoint num="45" id="258" /> +<TGConnectingPoint num="46" id="259" /> +<TGConnectingPoint num="47" id="260" /> +<TGConnectingPoint num="48" id="261" /> +</COMPONENT> + +<CONNECTOR type="106" id="263" > +<cdparam x="270" y="159" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionRelease" /> +<P1 x="270" y="159" id="168" /> +<P2 x="531" y="159" id="218" /> +</CONNECTOR> +<CONNECTOR type="106" id="264" > +<cdparam x="502" y="209" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="Ok" /> +<P1 x="531" y="209" id="223" /> +<P2 x="270" y="209" id="173" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="ConnectionSetup" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="314" > +<cdparam x="227" y="96" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="265" /> +<TGConnectingPoint num="1" id="266" /> +<TGConnectingPoint num="2" id="267" /> +<TGConnectingPoint num="3" id="268" /> +<TGConnectingPoint num="4" id="269" /> +<TGConnectingPoint num="5" id="270" /> +<TGConnectingPoint num="6" id="271" /> +<TGConnectingPoint num="7" id="272" /> +<TGConnectingPoint num="8" id="273" /> +<TGConnectingPoint num="9" id="274" /> +<TGConnectingPoint num="10" id="275" /> +<TGConnectingPoint num="11" id="276" /> +<TGConnectingPoint num="12" id="277" /> +<TGConnectingPoint num="13" id="278" /> +<TGConnectingPoint num="14" id="279" /> +<TGConnectingPoint num="15" id="280" /> +<TGConnectingPoint num="16" id="281" /> +<TGConnectingPoint num="17" id="282" /> +<TGConnectingPoint num="18" id="283" /> +<TGConnectingPoint num="19" id="284" /> +<TGConnectingPoint num="20" id="285" /> +<TGConnectingPoint num="21" id="286" /> +<TGConnectingPoint num="22" id="287" /> +<TGConnectingPoint num="23" id="288" /> +<TGConnectingPoint num="24" id="289" /> +<TGConnectingPoint num="25" id="290" /> +<TGConnectingPoint num="26" id="291" /> +<TGConnectingPoint num="27" id="292" /> +<TGConnectingPoint num="28" id="293" /> +<TGConnectingPoint num="29" id="294" /> +<TGConnectingPoint num="30" id="295" /> +<TGConnectingPoint num="31" id="296" /> +<TGConnectingPoint num="32" id="297" /> +<TGConnectingPoint num="33" id="298" /> +<TGConnectingPoint num="34" id="299" /> +<TGConnectingPoint num="35" id="300" /> +<TGConnectingPoint num="36" id="301" /> +<TGConnectingPoint num="37" id="302" /> +<TGConnectingPoint num="38" id="303" /> +<TGConnectingPoint num="39" id="304" /> +<TGConnectingPoint num="40" id="305" /> +<TGConnectingPoint num="41" id="306" /> +<TGConnectingPoint num="42" id="307" /> +<TGConnectingPoint num="43" id="308" /> +<TGConnectingPoint num="44" id="309" /> +<TGConnectingPoint num="45" id="310" /> +<TGConnectingPoint num="46" id="311" /> +<TGConnectingPoint num="47" id="312" /> +<TGConnectingPoint num="48" id="313" /> +</COMPONENT> + +<COMPONENT type="606" id="364" > +<cdparam x="459" y="96" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="315" /> +<TGConnectingPoint num="1" id="316" /> +<TGConnectingPoint num="2" id="317" /> +<TGConnectingPoint num="3" id="318" /> +<TGConnectingPoint num="4" id="319" /> +<TGConnectingPoint num="5" id="320" /> +<TGConnectingPoint num="6" id="321" /> +<TGConnectingPoint num="7" id="322" /> +<TGConnectingPoint num="8" id="323" /> +<TGConnectingPoint num="9" id="324" /> +<TGConnectingPoint num="10" id="325" /> +<TGConnectingPoint num="11" id="326" /> +<TGConnectingPoint num="12" id="327" /> +<TGConnectingPoint num="13" id="328" /> +<TGConnectingPoint num="14" id="329" /> +<TGConnectingPoint num="15" id="330" /> +<TGConnectingPoint num="16" id="331" /> +<TGConnectingPoint num="17" id="332" /> +<TGConnectingPoint num="18" id="333" /> +<TGConnectingPoint num="19" id="334" /> +<TGConnectingPoint num="20" id="335" /> +<TGConnectingPoint num="21" id="336" /> +<TGConnectingPoint num="22" id="337" /> +<TGConnectingPoint num="23" id="338" /> +<TGConnectingPoint num="24" id="339" /> +<TGConnectingPoint num="25" id="340" /> +<TGConnectingPoint num="26" id="341" /> +<TGConnectingPoint num="27" id="342" /> +<TGConnectingPoint num="28" id="343" /> +<TGConnectingPoint num="29" id="344" /> +<TGConnectingPoint num="30" id="345" /> +<TGConnectingPoint num="31" id="346" /> +<TGConnectingPoint num="32" id="347" /> +<TGConnectingPoint num="33" id="348" /> +<TGConnectingPoint num="34" id="349" /> +<TGConnectingPoint num="35" id="350" /> +<TGConnectingPoint num="36" id="351" /> +<TGConnectingPoint num="37" id="352" /> +<TGConnectingPoint num="38" id="353" /> +<TGConnectingPoint num="39" id="354" /> +<TGConnectingPoint num="40" id="355" /> +<TGConnectingPoint num="41" id="356" /> +<TGConnectingPoint num="42" id="357" /> +<TGConnectingPoint num="43" id="358" /> +<TGConnectingPoint num="44" id="359" /> +<TGConnectingPoint num="45" id="360" /> +<TGConnectingPoint num="46" id="361" /> +<TGConnectingPoint num="47" id="362" /> +<TGConnectingPoint num="48" id="363" /> +</COMPONENT> + +<CONNECTOR type="106" id="365" > +<cdparam x="232" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionReq" /> +<P1 x="232" y="156" id="270" /> +<P2 x="464" y="156" id="320" /> +</CONNECTOR> +<CONNECTOR type="106" id="366" > +<cdparam x="464" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionOK" /> +<P1 x="464" y="206" id="325" /> +<P2 x="232" y="206" id="275" /> +</CONNECTOR> + +</SequenceDiagramPanel> + +<SequenceDiagramPanel name="ConnectionBroken" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="606" id="416" > +<cdparam x="235" y="62" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="client" /> +<TGConnectingPoint num="0" id="367" /> +<TGConnectingPoint num="1" id="368" /> +<TGConnectingPoint num="2" id="369" /> +<TGConnectingPoint num="3" id="370" /> +<TGConnectingPoint num="4" id="371" /> +<TGConnectingPoint num="5" id="372" /> +<TGConnectingPoint num="6" id="373" /> +<TGConnectingPoint num="7" id="374" /> +<TGConnectingPoint num="8" id="375" /> +<TGConnectingPoint num="9" id="376" /> +<TGConnectingPoint num="10" id="377" /> +<TGConnectingPoint num="11" id="378" /> +<TGConnectingPoint num="12" id="379" /> +<TGConnectingPoint num="13" id="380" /> +<TGConnectingPoint num="14" id="381" /> +<TGConnectingPoint num="15" id="382" /> +<TGConnectingPoint num="16" id="383" /> +<TGConnectingPoint num="17" id="384" /> +<TGConnectingPoint num="18" id="385" /> +<TGConnectingPoint num="19" id="386" /> +<TGConnectingPoint num="20" id="387" /> +<TGConnectingPoint num="21" id="388" /> +<TGConnectingPoint num="22" id="389" /> +<TGConnectingPoint num="23" id="390" /> +<TGConnectingPoint num="24" id="391" /> +<TGConnectingPoint num="25" id="392" /> +<TGConnectingPoint num="26" id="393" /> +<TGConnectingPoint num="27" id="394" /> +<TGConnectingPoint num="28" id="395" /> +<TGConnectingPoint num="29" id="396" /> +<TGConnectingPoint num="30" id="397" /> +<TGConnectingPoint num="31" id="398" /> +<TGConnectingPoint num="32" id="399" /> +<TGConnectingPoint num="33" id="400" /> +<TGConnectingPoint num="34" id="401" /> +<TGConnectingPoint num="35" id="402" /> +<TGConnectingPoint num="36" id="403" /> +<TGConnectingPoint num="37" id="404" /> +<TGConnectingPoint num="38" id="405" /> +<TGConnectingPoint num="39" id="406" /> +<TGConnectingPoint num="40" id="407" /> +<TGConnectingPoint num="41" id="408" /> +<TGConnectingPoint num="42" id="409" /> +<TGConnectingPoint num="43" id="410" /> +<TGConnectingPoint num="44" id="411" /> +<TGConnectingPoint num="45" id="412" /> +<TGConnectingPoint num="46" id="413" /> +<TGConnectingPoint num="47" id="414" /> +<TGConnectingPoint num="48" id="415" /> +</COMPONENT> + +<COMPONENT type="606" id="471" > +<cdparam x="467" y="62" /> +<sizeparam width="10" height="500" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="instance" value="server" /> +<TGConnectingPoint num="0" id="422" /> +<TGConnectingPoint num="1" id="423" /> +<TGConnectingPoint num="2" id="424" /> +<TGConnectingPoint num="3" id="425" /> +<TGConnectingPoint num="4" id="426" /> +<TGConnectingPoint num="5" id="427" /> +<TGConnectingPoint num="6" id="428" /> +<TGConnectingPoint num="7" id="429" /> +<TGConnectingPoint num="8" id="430" /> +<TGConnectingPoint num="9" id="431" /> +<TGConnectingPoint num="10" id="432" /> +<TGConnectingPoint num="11" id="433" /> +<TGConnectingPoint num="12" id="434" /> +<TGConnectingPoint num="13" id="435" /> +<TGConnectingPoint num="14" id="436" /> +<TGConnectingPoint num="15" id="437" /> +<TGConnectingPoint num="16" id="438" /> +<TGConnectingPoint num="17" id="439" /> +<TGConnectingPoint num="18" id="440" /> +<TGConnectingPoint num="19" id="441" /> +<TGConnectingPoint num="20" id="442" /> +<TGConnectingPoint num="21" id="443" /> +<TGConnectingPoint num="22" id="444" /> +<TGConnectingPoint num="23" id="445" /> +<TGConnectingPoint num="24" id="446" /> +<TGConnectingPoint num="25" id="447" /> +<TGConnectingPoint num="26" id="448" /> +<TGConnectingPoint num="27" id="449" /> +<TGConnectingPoint num="28" id="450" /> +<TGConnectingPoint num="29" id="451" /> +<TGConnectingPoint num="30" id="452" /> +<TGConnectingPoint num="31" id="453" /> +<TGConnectingPoint num="32" id="454" /> +<TGConnectingPoint num="33" id="455" /> +<TGConnectingPoint num="34" id="456" /> +<TGConnectingPoint num="35" id="457" /> +<TGConnectingPoint num="36" id="458" /> +<TGConnectingPoint num="37" id="459" /> +<TGConnectingPoint num="38" id="460" /> +<TGConnectingPoint num="39" id="461" /> +<TGConnectingPoint num="40" id="462" /> +<TGConnectingPoint num="41" id="463" /> +<TGConnectingPoint num="42" id="464" /> +<TGConnectingPoint num="43" id="465" /> +<TGConnectingPoint num="44" id="466" /> +<TGConnectingPoint num="45" id="467" /> +<TGConnectingPoint num="46" id="468" /> +<TGConnectingPoint num="47" id="469" /> +<TGConnectingPoint num="48" id="470" /> +</COMPONENT> +<SUBCOMPONENT type="602" id="417" > +<father id="471" num="0" /> +<cdparam x="472" y="96" /> +<sizeparam width="105" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="5" maxX="5" minY="10" maxY="470" /> +<infoparam name="action state" value="broke = broke + 1" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="419" > +<father id="471" num="1" /> +<cdparam x="472" y="96" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="418" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="601" id="421" > +<father id="471" num="2" /> +<cdparam x="472" y="172" /> +<sizeparam width="40" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-35" maxX="5" minY="10" maxY="490" /> +<infoparam name="Line of relative time constraint" value="rtc" /> +<TGConnectingPoint num="0" id="420" /> +</SUBCOMPONENT> + +<CONNECTOR type="106" id="472" > +<cdparam x="472" y="172" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from instance to instance" value="connectionBroken" /> +<P1 x="472" y="172" id="432" /> +<P2 x="240" y="172" id="377" /> +</CONNECTOR> +<CONNECTOR type="109" id="473" > +<cdparam x="482" y="96" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="relative time constraint" value="{15..15}" /> +<P1 x="482" y="96" id="418" /> +<P2 x="482" y="172" id="420" /> +<extraparam> +<Interval minConstraint="15" maxConstraint="15" /> +</extraparam> +</CONNECTOR> + +</SequenceDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/README_modeling b/preinstallTTool/macos/TTool/modeling/README_modeling new file mode 100644 index 0000000000000000000000000000000000000000..66f0b9d79e2b9efba42625eece8cb82f3ce72192 --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/README_modeling @@ -0,0 +1,7 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The modeling directory contains a few examples that can be opened and tested with TTool. For more examples, please refer to: +http://labsoc.comelec.enst.fr/turtle/HELP +and then select "examples" in the menu on the left diff --git a/preinstallTTool/macos/TTool/modeling/SmartCardProtocol.xml b/preinstallTTool/macos/TTool/modeling/SmartCardProtocol.xml new file mode 100755 index 0000000000000000000000000000000000000000..d27d1216a41d35290e3d1d1e6d0046305d177e57 --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/SmartCardProtocol.xml @@ -0,0 +1,7420 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.98-beta1"> + +<Modeling type="Diplodocus Methodology" nameTab="DIPLODOCUS_Methodology" > +<DiplodocusMethodologyDiagramPanel name="Diplodocus methodology" minX="10" maxX="1400" minY="10" maxY="900" zoom="0.8" > +<COMPONENT type="6003" id="5" > +<cdparam x="40" y="120" /> +<sizeparam width="160" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Requirements" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +</COMPONENT> + +<COMPONENT type="6002" id="13" > +<cdparam x="438" y="234" /> +<sizeparam width="264" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Mapping" /> +<TGConnectingPoint num="0" id="8" /> +<TGConnectingPoint num="1" id="9" /> +<TGConnectingPoint num="2" id="10" /> +<TGConnectingPoint num="3" id="11" /> +<TGConnectingPoint num="4" id="12" /> +</COMPONENT> +<SUBCOMPONENT type="6005" id="6" > +<father id="13" num="0" /> +<cdparam x="442" y="278" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="605" maxX="605" minY="355" maxY="355" /> +<infoparam name="value " value="Mapping2" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="6005" id="7" > +<father id="13" num="1" /> +<cdparam x="442" y="265" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="605" maxX="605" minY="340" maxY="340" /> +<infoparam name="value " value="Mapping1" /> +</SUBCOMPONENT> + +<COMPONENT type="6001" id="20" > +<cdparam x="600" y="80" /> +<sizeparam width="160" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Architecture" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +<TGConnectingPoint num="2" id="18" /> +<TGConnectingPoint num="3" id="19" /> +</COMPONENT> +<SUBCOMPONENT type="6005" id="14" > +<father id="20" num="0" /> +<cdparam x="604" y="124" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="604" maxX="604" minY="124" maxY="124" /> +<infoparam name="value " value="Architecture2" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="6005" id="15" > +<father id="20" num="1" /> +<cdparam x="604" y="112" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="604" maxX="604" minY="112" maxY="112" /> +<infoparam name="value " value="Architecture1" /> +</SUBCOMPONENT> + +<COMPONENT type="6000" id="26" > +<cdparam x="360" y="80" /> +<sizeparam width="160" height="96" minWidth="10" minHeight="24" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="TGComponent" value="Application" /> +<TGConnectingPoint num="0" id="22" /> +<TGConnectingPoint num="1" id="23" /> +<TGConnectingPoint num="2" id="24" /> +<TGConnectingPoint num="3" id="25" /> +</COMPONENT> +<SUBCOMPONENT type="6005" id="21" > +<father id="26" num="0" /> +<cdparam x="364" y="112" /> +<sizeparam width="8" height="8" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="455" maxX="455" minY="140" maxY="140" /> +<infoparam name="value " value="AppC" /> +</SUBCOMPONENT> + +<CONNECTOR type="6004" id="28" > +<cdparam x="850" y="220" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="27" /> +<P1 x="680" y="176" id="16" /> +<P2 x="596" y="234" id="9" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="6004" id="30" > +<cdparam x="550" y="220" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="<<deriveReqt>>" /> +<TGConnectingPoint num="0" id="29" /> +<P1 x="440" y="176" id="22" /> +<P2 x="543" y="234" id="8" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</DiplodocusMethodologyDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Component Design" nameTab="AppC" > +<TMLComponentTaskDiagramPanel name="TML Component Task Diagram" minX="10" maxX="3400" minY="10" maxY="2400" channels="true" events="true" requests="true" zoom="0.8000000000000013" > +<CONNECTOR type="126" id="31" > +<cdparam x="967" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="126" id="392" /> +<P2 x="639" y="126" id="133" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="33" > +<cdparam x="967" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="831" y="152" id="195" /> +<P2 x="717" y="126" id="397" /> +<Point x="832" y="126" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="32" > +<father id="33" num="0" /> +<cdparam x="832" y="126" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="35" > +<cdparam x="337" y="99" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="417" y="85" id="515" /> +<P2 x="326" y="94" id="98" /> +<Point x="326" y="85" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="34" > +<father id="35" num="0" /> +<cdparam x="326" y="85" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="37" > +<cdparam x="440" y="107" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="515" y="95" id="131" /> +<P2 x="437" y="85" id="520" /> +<Point x="515" y="85" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="36" > +<father id="37" num="0" /> +<cdparam x="515" y="85" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2400" minY="10" maxY="1900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="38" > +<cdparam x="337" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="417" y="295" id="496" /> +<P2 x="387" y="295" id="96" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="39" > +<cdparam x="396" y="285" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="459" y="295" id="129" /> +<P2 x="437" y="295" id="501" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="40" > +<cdparam x="337" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="417" y="235" id="477" /> +<P2 x="387" y="235" id="94" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="41" > +<cdparam x="396" y="236" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="459" y="235" id="127" /> +<P2 x="437" y="235" id="482" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="42" > +<cdparam x="353" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="199" id="463" /> +<P2 x="459" y="199" id="125" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="43" > +<cdparam x="266" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="387" y="199" id="92" /> +<P2 x="417" y="199" id="458" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="44" > +<cdparam x="353" y="181" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="269" id="444" /> +<P2 x="459" y="269" id="123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="45" > +<cdparam x="235" y="186" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="387" y="269" id="90" /> +<P2 x="417" y="269" id="439" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="46" > +<cdparam x="353" y="161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="162" id="539" /> +<P2 x="459" y="162" id="121" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="47" > +<cdparam x="235" y="160" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="387" y="162" id="88" /> +<P2 x="417" y="162" id="534" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="48" > +<cdparam x="787" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="253" id="373" /> +<P2 x="639" y="253" id="119" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="49" > +<cdparam x="867" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="757" y="253" id="189" /> +<P2 x="717" y="253" id="378" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="50" > +<cdparam x="803" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="224" id="359" /> +<P2 x="757" y="224" id="191" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="51" > +<cdparam x="655" y="211" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="639" y="224" id="117" /> +<P2 x="697" y="224" id="354" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="52" > +<cdparam x="803" y="159" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="189" id="340" /> +<P2 x="757" y="189" id="193" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="53" > +<cdparam x="655" y="182" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="639" y="189" id="115" /> +<P2 x="697" y="189" id="335" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="54" > +<cdparam x="655" y="151" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="628" y="306" id="113" /> +<P2 x="697" y="314" id="317" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="55" > +<cdparam x="1028" y="535" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="545" y="304" id="109" /> +<P2 x="545" y="323" id="144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="56" > +<cdparam x="1307" y="853" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="314" id="321" /> +<P2 x="759" y="314" id="187" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="57" > +<cdparam x="1154" y="902" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="633" y="323" id="156" /> +<P2 x="697" y="314" id="316" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="59" > +<cdparam x="1307" y="807" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="434" id="264" /> +<P2 x="826" y="425" id="185" /> +<Point x="826" y="434" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="58" > +<father id="59" num="0" /> +<cdparam x="826" y="434" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="60" > +<cdparam x="1154" y="856" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="664" y="434" id="152" /> +<P2 x="697" y="434" id="259" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="61" > +<cdparam x="1307" y="761" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="413" id="245" /> +<P2 x="759" y="413" id="183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="62" > +<cdparam x="1154" y="811" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="664" y="413" id="150" /> +<P2 x="697" y="413" id="240" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="63" > +<cdparam x="1626" y="770" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="391" id="221" /> +<P2 x="664" y="391" id="148" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="64" > +<cdparam x="1799" y="785" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="759" y="391" id="177" /> +<P2 x="717" y="391" id="226" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="65" > +<cdparam x="1438" y="869" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="664" y="366" id="146" /> +<P2 x="697" y="366" id="278" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="66" > +<cdparam x="1699" y="736" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="717" y="366" id="283" /> +<P2 x="759" y="366" id="179" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="67" > +<cdparam x="1626" y="659" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="697" y="344" id="297" /> +<P2 x="664" y="344" id="154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="68" > +<cdparam x="1799" y="673" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="759" y="344" id="181" /> +<P2 x="717" y="344" id="302" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="69" > +<cdparam x="1304" y="321" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="1014" y="244" id="210" /> +<P2 x="965" y="244" id="175" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="70" > +<cdparam x="1168" y="455" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="965" y="273" id="173" /> +<P2 x="1014" y="273" id="208" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="73" > +<cdparam x="1037" y="180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="965" y="174" id="171" /> +<P2 x="965" y="206" id="169" /> +<Point x="1017" y="174" /> +<Point x="1017" y="206" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="71" > +<father id="73" num="0" /> +<cdparam x="1017" y="174" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="72" > +<father id="73" num="1" /> +<cdparam x="1017" y="206" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="126" id="74" > +<cdparam x="873" y="361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="965" y="304" id="167" /> +<P2 x="1014" y="304" id="206" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="75" > +<cdparam x="361" y="136" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="437" y="128" id="425" /> +<P2 x="461" y="128" id="111" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="126" id="76" > +<cdparam x="306" y="210" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from TGComponent to TGComponent" value="Connector between ports" /> +<P1 x="385" y="128" id="86" /> +<P2 x="417" y="128" id="420" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<COMPONENT type="1205" id="85" > +<cdparam x="978" y="353" /> +<sizeparam width="165" height="84" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="Record component" value="TCP_CTRL" /> +<TGConnectingPoint num="0" id="77" /> +<TGConnectingPoint num="1" id="78" /> +<TGConnectingPoint num="2" id="79" /> +<TGConnectingPoint num="3" id="80" /> +<TGConnectingPoint num="4" id="81" /> +<TGConnectingPoint num="5" id="82" /> +<TGConnectingPoint num="6" id="83" /> +<TGConnectingPoint num="7" id="84" /> +<extraparam> +<Attribute access="2" id="a" value="" type="0" typeOther="" /> +<Attribute access="2" id="state" value="" type="0" typeOther="" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1202" id="108" > +<cdparam x="136" y="104" /> +<sizeparam width="241" height="216" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="TGComponent" value="InterfaceDevice" /> +<TGConnectingPoint num="0" id="100" /> +<TGConnectingPoint num="1" id="101" /> +<TGConnectingPoint num="2" id="102" /> +<TGConnectingPoint num="3" id="103" /> +<TGConnectingPoint num="4" id="104" /> +<TGConnectingPoint num="5" id="105" /> +<TGConnectingPoint num="6" id="106" /> +<TGConnectingPoint num="7" id="107" /> +<extraparam> +<Attribute access="2" id="resetType" value="0" type="0" typeOther="" /> +<Attribute access="2" id="x" value="0" type="0" typeOther="" /> +<Attribute access="2" id="i" value="0" type="0" typeOther="" /> +<Attribute access="2" id="nbOfComputedPackets" value="1" type="0" typeOther="" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1203" id="87" > +<father id="108" num="0" /> +<cdparam x="369" y="120" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="233" minY="-8" maxY="208" /> +<infoparam name="TGComponent" value="Request activation" /> +<TGConnectingPoint num="0" id="86" /> +<extraparam> +<Prop commName="activation" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="89" > +<father id="108" num="1" /> +<cdparam x="367" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event data_Ready" /> +<TGConnectingPoint num="0" id="88" /> +<extraparam> +<Prop commName="data_Ready" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="91" > +<father id="108" num="2" /> +<cdparam x="367" y="259" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event data_Ready_SC" /> +<TGConnectingPoint num="0" id="90" /> +<extraparam> +<Prop commName="data_Ready_SC" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="93" > +<father id="108" num="3" /> +<cdparam x="367" y="189" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Channel fromDtoSC" /> +<TGConnectingPoint num="0" id="92" /> +<extraparam> +<Prop commName="fromDtoSC" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="95" > +<father id="108" num="4" /> +<cdparam x="367" y="225" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Channel fromSCtoD" /> +<TGConnectingPoint num="0" id="94" /> +<extraparam> +<Prop commName="fromSCtoD" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="97" > +<father id="108" num="5" /> +<cdparam x="367" y="285" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event answerToReset, pTSConfirm" /> +<TGConnectingPoint num="0" id="96" /> +<extraparam> +<Prop commName="answerToReset, pTSConfirm" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="99" > +<father id="108" num="6" /> +<cdparam x="316" y="94" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="231" minY="-10" maxY="206" /> +<infoparam name="TGComponent" value="Event reset, pTS" /> +<TGConnectingPoint num="0" id="98" /> +<extraparam> +<Prop commName="reset, pTS" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1200" id="561" > +<cdparam x="427" y="70" /> +<sizeparam width="736" height="390" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="3400" minY="10" maxY="2400" /> +<infoparam name="TGComponent" value="SmartCard" /> +<TGConnectingPoint num="0" id="553" /> +<TGConnectingPoint num="1" id="554" /> +<TGConnectingPoint num="2" id="555" /> +<TGConnectingPoint num="3" id="556" /> +<TGConnectingPoint num="4" id="557" /> +<TGConnectingPoint num="5" id="558" /> +<TGConnectingPoint num="6" id="559" /> +<TGConnectingPoint num="7" id="560" /> +<extraparam> +<info hiddeni="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1202" id="143" > +<father id="561" num="0" /> +<cdparam x="469" y="105" /> +<sizeparam width="160" height="191" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="576" minY="0" maxY="199" /> +<infoparam name="TGComponent" value="SmartCard" /> +<TGConnectingPoint num="0" id="135" /> +<TGConnectingPoint num="1" id="136" /> +<TGConnectingPoint num="2" id="137" /> +<TGConnectingPoint num="3" id="138" /> +<TGConnectingPoint num="4" id="139" /> +<TGConnectingPoint num="5" id="140" /> +<TGConnectingPoint num="6" id="141" /> +<TGConnectingPoint num="7" id="142" /> +<extraparam> +<Attribute access="2" id="resetType" value="0" type="0" typeOther="" /> +<Attribute access="2" id="a" value="0" type="0" typeOther="" /> +<Attribute access="2" id="b" value="0" type="0" typeOther="" /> +<Attribute access="2" id="i" value="0" type="0" typeOther="" /> +<Attribute access="2" id="j" value="0" type="0" typeOther="" /> +<Attribute access="2" id="x" value="0" type="0" typeOther="" /> +<Attribute access="2" id="tcpctrl" value="" type="5" typeOther="TCP_CTRL" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="110" > +<father id="143" num="0" /> +<cdparam x="537" y="288" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="152" minY="-8" maxY="183" /> +<infoparam name="TGComponent" value="Request start_Application" /> +<TGConnectingPoint num="0" id="109" /> +<extraparam> +<Prop commName="start_Application" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="112" > +<father id="143" num="1" /> +<cdparam x="461" y="120" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="152" minY="-8" maxY="183" /> +<infoparam name="TGComponent" value="Request activation" /> +<TGConnectingPoint num="0" id="111" /> +<extraparam> +<Prop commName="activation" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="114" > +<father id="143" num="2" /> +<cdparam x="618" y="286" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Request start_TCP_IP" /> +<TGConnectingPoint num="0" id="113" /> +<extraparam> +<Prop commName="start_TCP_IP" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="116" > +<father id="143" num="3" /> +<cdparam x="619" y="179" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event receive" /> +<TGConnectingPoint num="0" id="115" /> +<extraparam> +<Prop commName="receive" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="118" > +<father id="143" num="4" /> +<cdparam x="619" y="214" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromPtoT" /> +<TGConnectingPoint num="0" id="117" /> +<extraparam> +<Prop commName="fromPtoT" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="120" > +<father id="143" num="5" /> +<cdparam x="619" y="243" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromTtoP" /> +<TGConnectingPoint num="0" id="119" /> +<extraparam> +<Prop commName="fromTtoP" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="122" > +<father id="143" num="6" /> +<cdparam x="459" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event data_Ready" /> +<TGConnectingPoint num="0" id="121" /> +<extraparam> +<Prop commName="data_Ready" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="124" > +<father id="143" num="7" /> +<cdparam x="459" y="259" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event data_Ready_SC" /> +<TGConnectingPoint num="0" id="123" /> +<extraparam> +<Prop commName="data_Ready_SC" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="126" > +<father id="143" num="8" /> +<cdparam x="459" y="189" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromDtoSC0" /> +<TGConnectingPoint num="0" id="125" /> +<extraparam> +<Prop commName="fromDtoSC0" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="128" > +<father id="143" num="9" /> +<cdparam x="459" y="225" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Channel fromSCtoD" /> +<TGConnectingPoint num="0" id="127" /> +<extraparam> +<Prop commName="fromSCtoD" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="130" > +<father id="143" num="10" /> +<cdparam x="459" y="285" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event answerToReset, pTSConfirm" /> +<TGConnectingPoint num="0" id="129" /> +<extraparam> +<Prop commName="answerToReset, pTSConfirm" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="132" > +<father id="143" num="11" /> +<cdparam x="505" y="95" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event reset, pTS" /> +<TGConnectingPoint num="0" id="131" /> +<extraparam> +<Prop commName="reset, pTS" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="134" > +<father id="143" num="12" /> +<cdparam x="619" y="116" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="150" minY="-10" maxY="181" /> +<infoparam name="TGComponent" value="Event send" /> +<TGConnectingPoint num="0" id="133" /> +<extraparam> +<Prop commName="send" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1202" id="166" > +<father id="561" num="1" /> +<cdparam x="464" y="331" /> +<sizeparam width="192" height="116" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="544" minY="0" maxY="274" /> +<infoparam name="TGComponent" value="Application" /> +<TGConnectingPoint num="0" id="158" /> +<TGConnectingPoint num="1" id="159" /> +<TGConnectingPoint num="2" id="160" /> +<TGConnectingPoint num="3" id="161" /> +<TGConnectingPoint num="4" id="162" /> +<TGConnectingPoint num="5" id="163" /> +<TGConnectingPoint num="6" id="164" /> +<TGConnectingPoint num="7" id="165" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="145" > +<father id="166" num="0" /> +<cdparam x="537" y="323" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Request start_Application" /> +<TGConnectingPoint num="0" id="144" /> +<extraparam> +<Prop commName="start_Application" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="147" > +<father id="166" num="1" /> +<cdparam x="648" y="358" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Channel fromAtoT" /> +<TGConnectingPoint num="0" id="146" /> +<extraparam> +<Prop commName="fromAtoT" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="149" > +<father id="166" num="2" /> +<cdparam x="648" y="383" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Event receive_Application" /> +<TGConnectingPoint num="0" id="148" /> +<extraparam> +<Prop commName="receive_Application" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="151" > +<father id="166" num="3" /> +<cdparam x="648" y="405" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Event open, abort, close" /> +<TGConnectingPoint num="0" id="150" /> +<extraparam> +<Prop commName="open, abort, close" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="153" > +<father id="166" num="4" /> +<cdparam x="648" y="426" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Event send_TCP" /> +<TGConnectingPoint num="0" id="152" /> +<extraparam> +<Prop commName="send_TCP" commType="1" origin="true" finite="false" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="155" > +<father id="166" num="5" /> +<cdparam x="648" y="336" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Channel fromTtoA" /> +<TGConnectingPoint num="0" id="154" /> +<extraparam> +<Prop commName="fromTtoA" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="157" > +<father id="166" num="6" /> +<cdparam x="625" y="323" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="184" minY="-8" maxY="108" /> +<infoparam name="TGComponent" value="Request start_TCP_IP" /> +<TGConnectingPoint num="0" id="156" /> +<extraparam> +<Prop commName="start_TCP_IP" commType="2" origin="true" finite="false" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1200" id="419" > +<father id="561" num="2" /> +<cdparam x="707" y="112" /> +<sizeparam width="445" height="336" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="291" minY="0" maxY="54" /> +<infoparam name="TGComponent" value="TCPIP Entities" /> +<TGConnectingPoint num="0" id="411" /> +<TGConnectingPoint num="1" id="412" /> +<TGConnectingPoint num="2" id="413" /> +<TGConnectingPoint num="3" id="414" /> +<TGConnectingPoint num="4" id="415" /> +<TGConnectingPoint num="5" id="416" /> +<TGConnectingPoint num="6" id="417" /> +<TGConnectingPoint num="7" id="418" /> +<extraparam> +<info hiddeni="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1202" id="205" > +<father id="419" num="0" /> +<cdparam x="767" y="162" /> +<sizeparam width="190" height="255" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="255" minY="0" maxY="81" /> +<infoparam name="TGComponent" value="TCPIP" /> +<TGConnectingPoint num="0" id="197" /> +<TGConnectingPoint num="1" id="198" /> +<TGConnectingPoint num="2" id="199" /> +<TGConnectingPoint num="3" id="200" /> +<TGConnectingPoint num="4" id="201" /> +<TGConnectingPoint num="5" id="202" /> +<TGConnectingPoint num="6" id="203" /> +<TGConnectingPoint num="7" id="204" /> +<extraparam> +<Attribute access="2" id="wind" value="64" type="0" typeOther="" /> +<Attribute access="2" id="i" value="" type="0" typeOther="" /> +<Attribute access="2" id="j" value="" type="0" typeOther="" /> +<Attribute access="2" id="a" value="0" type="0" typeOther="" /> +<Attribute access="2" id="b" value="0" type="0" typeOther="" /> +<Attribute access="2" id="tcpctrl" value="" type="5" typeOther="TCP_CTRL" /> +<Attribute access="2" id="seqi" value="0" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="168" > +<father id="205" num="0" /> +<cdparam x="949" y="296" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event stop" /> +<TGConnectingPoint num="0" id="167" /> +<extraparam> +<Prop commName="stop" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="170" > +<father id="205" num="1" /> +<cdparam x="949" y="198" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel temp" /> +<TGConnectingPoint num="0" id="169" /> +<extraparam> +<Prop commName="temp" commType="0" origin="false" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="172" > +<father id="205" num="2" /> +<cdparam x="949" y="166" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel temp" /> +<TGConnectingPoint num="0" id="171" /> +<extraparam> +<Prop commName="temp" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="174" > +<father id="205" num="3" /> +<cdparam x="949" y="265" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Request req_Timer" /> +<TGConnectingPoint num="0" id="173" /> +<extraparam> +<Prop commName="req_Timer" commType="2" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="176" > +<father id="205" num="4" /> +<cdparam x="949" y="236" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event timeOut" /> +<TGConnectingPoint num="0" id="175" /> +<extraparam> +<Prop commName="timeOut" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="178" > +<father id="205" num="5" /> +<cdparam x="759" y="383" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event receive_Application" /> +<TGConnectingPoint num="0" id="177" /> +<extraparam> +<Prop commName="receive_Application" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="180" > +<father id="205" num="6" /> +<cdparam x="759" y="358" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel fromAtoT" /> +<TGConnectingPoint num="0" id="179" /> +<extraparam> +<Prop commName="fromAtoT" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="182" > +<father id="205" num="7" /> +<cdparam x="759" y="336" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Channel fromTtoA" /> +<TGConnectingPoint num="0" id="181" /> +<extraparam> +<Prop commName="fromTtoA" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="184" > +<father id="205" num="8" /> +<cdparam x="759" y="405" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event open, abort, close" /> +<TGConnectingPoint num="0" id="183" /> +<extraparam> +<Prop commName="open, abort, close" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="186" > +<father id="205" num="9" /> +<cdparam x="818" y="409" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Event send_TCP" /> +<TGConnectingPoint num="0" id="185" /> +<extraparam> +<Prop commName="send_TCP" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="188" > +<father id="205" num="10" /> +<cdparam x="759" y="306" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="182" minY="-8" maxY="247" /> +<infoparam name="TGComponent" value="Request start_TCP_IP" /> +<TGConnectingPoint num="0" id="187" /> +<extraparam> +<Prop commName="start_TCP_IP" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="190" > +<father id="205" num="11" /> +<cdparam x="757" y="243" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Channel fromTtoP" /> +<TGConnectingPoint num="0" id="189" /> +<extraparam> +<Prop commName="fromTtoP" commType="0" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="192" > +<father id="205" num="12" /> +<cdparam x="757" y="214" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Channel fromPtoT" /> +<TGConnectingPoint num="0" id="191" /> +<extraparam> +<Prop commName="fromPtoT" commType="0" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="194" > +<father id="205" num="13" /> +<cdparam x="757" y="179" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Event receive" /> +<TGConnectingPoint num="0" id="193" /> +<extraparam> +<Prop commName="receive" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="196" > +<father id="205" num="14" /> +<cdparam x="821" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="180" minY="-10" maxY="245" /> +<infoparam name="TGComponent" value="Event send" /> +<TGConnectingPoint num="0" id="195" /> +<extraparam> +<Prop commName="send" commType="1" origin="true" finite="false" blocking="false" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1202" id="220" > +<father id="419" num="1" /> +<cdparam x="1022" y="219" /> +<sizeparam width="112" height="113" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="333" minY="0" maxY="223" /> +<infoparam name="TGComponent" value="Timer" /> +<TGConnectingPoint num="0" id="212" /> +<TGConnectingPoint num="1" id="213" /> +<TGConnectingPoint num="2" id="214" /> +<TGConnectingPoint num="3" id="215" /> +<TGConnectingPoint num="4" id="216" /> +<TGConnectingPoint num="5" id="217" /> +<TGConnectingPoint num="6" id="218" /> +<TGConnectingPoint num="7" id="219" /> +<extraparam> +<Attribute access="2" id="x" value="0" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="207" > +<father id="220" num="0" /> +<cdparam x="1014" y="296" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="104" minY="-8" maxY="105" /> +<infoparam name="TGComponent" value="Event stop" /> +<TGConnectingPoint num="0" id="206" /> +<extraparam> +<Prop commName="stop" commType="1" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="209" > +<father id="220" num="1" /> +<cdparam x="1014" y="265" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="104" minY="-8" maxY="105" /> +<infoparam name="TGComponent" value="Request req_Timer" /> +<TGConnectingPoint num="0" id="208" /> +<extraparam> +<Prop commName="req_Timer" commType="2" origin="false" finite="false" blocking="true" maxSamples="8" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1203" id="211" > +<father id="220" num="2" /> +<cdparam x="1014" y="236" /> +<sizeparam width="16" height="16" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-8" maxX="104" minY="-8" maxY="105" /> +<infoparam name="TGComponent" value="Event timeOut" /> +<TGConnectingPoint num="0" id="210" /> +<extraparam> +<Prop commName="timeOut" commType="1" origin="true" finite="true" blocking="false" maxSamples="1" widthSamples="4" isLossy="false" isPrex="false" isPostex="false" lossPercentage="0" maxNbOfLoss="-1" dataFlowType="" associatedEvent="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +<Type type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="239" > +<father id="419" num="2" /> +<cdparam x="697" y="381" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="221" /> +<TGConnectingPoint num="1" id="222" /> +<TGConnectingPoint num="2" id="223" /> +<TGConnectingPoint num="3" id="224" /> +<TGConnectingPoint num="4" id="225" /> +<TGConnectingPoint num="5" id="226" /> +<TGConnectingPoint num="6" id="227" /> +<TGConnectingPoint num="7" id="228" /> +<TGConnectingPoint num="8" id="229" /> +<TGConnectingPoint num="9" id="230" /> +<TGConnectingPoint num="10" id="231" /> +<TGConnectingPoint num="11" id="232" /> +<TGConnectingPoint num="12" id="233" /> +<TGConnectingPoint num="13" id="234" /> +<TGConnectingPoint num="14" id="235" /> +<TGConnectingPoint num="15" id="236" /> +<TGConnectingPoint num="16" id="237" /> +<TGConnectingPoint num="17" id="238" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="258" > +<father id="419" num="3" /> +<cdparam x="697" y="403" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="240" /> +<TGConnectingPoint num="1" id="241" /> +<TGConnectingPoint num="2" id="242" /> +<TGConnectingPoint num="3" id="243" /> +<TGConnectingPoint num="4" id="244" /> +<TGConnectingPoint num="5" id="245" /> +<TGConnectingPoint num="6" id="246" /> +<TGConnectingPoint num="7" id="247" /> +<TGConnectingPoint num="8" id="248" /> +<TGConnectingPoint num="9" id="249" /> +<TGConnectingPoint num="10" id="250" /> +<TGConnectingPoint num="11" id="251" /> +<TGConnectingPoint num="12" id="252" /> +<TGConnectingPoint num="13" id="253" /> +<TGConnectingPoint num="14" id="254" /> +<TGConnectingPoint num="15" id="255" /> +<TGConnectingPoint num="16" id="256" /> +<TGConnectingPoint num="17" id="257" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="277" > +<father id="419" num="4" /> +<cdparam x="697" y="424" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="259" /> +<TGConnectingPoint num="1" id="260" /> +<TGConnectingPoint num="2" id="261" /> +<TGConnectingPoint num="3" id="262" /> +<TGConnectingPoint num="4" id="263" /> +<TGConnectingPoint num="5" id="264" /> +<TGConnectingPoint num="6" id="265" /> +<TGConnectingPoint num="7" id="266" /> +<TGConnectingPoint num="8" id="267" /> +<TGConnectingPoint num="9" id="268" /> +<TGConnectingPoint num="10" id="269" /> +<TGConnectingPoint num="11" id="270" /> +<TGConnectingPoint num="12" id="271" /> +<TGConnectingPoint num="13" id="272" /> +<TGConnectingPoint num="14" id="273" /> +<TGConnectingPoint num="15" id="274" /> +<TGConnectingPoint num="16" id="275" /> +<TGConnectingPoint num="17" id="276" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="296" > +<father id="419" num="5" /> +<cdparam x="697" y="356" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="278" /> +<TGConnectingPoint num="1" id="279" /> +<TGConnectingPoint num="2" id="280" /> +<TGConnectingPoint num="3" id="281" /> +<TGConnectingPoint num="4" id="282" /> +<TGConnectingPoint num="5" id="283" /> +<TGConnectingPoint num="6" id="284" /> +<TGConnectingPoint num="7" id="285" /> +<TGConnectingPoint num="8" id="286" /> +<TGConnectingPoint num="9" id="287" /> +<TGConnectingPoint num="10" id="288" /> +<TGConnectingPoint num="11" id="289" /> +<TGConnectingPoint num="12" id="290" /> +<TGConnectingPoint num="13" id="291" /> +<TGConnectingPoint num="14" id="292" /> +<TGConnectingPoint num="15" id="293" /> +<TGConnectingPoint num="16" id="294" /> +<TGConnectingPoint num="17" id="295" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="315" > +<father id="419" num="6" /> +<cdparam x="697" y="334" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="297" /> +<TGConnectingPoint num="1" id="298" /> +<TGConnectingPoint num="2" id="299" /> +<TGConnectingPoint num="3" id="300" /> +<TGConnectingPoint num="4" id="301" /> +<TGConnectingPoint num="5" id="302" /> +<TGConnectingPoint num="6" id="303" /> +<TGConnectingPoint num="7" id="304" /> +<TGConnectingPoint num="8" id="305" /> +<TGConnectingPoint num="9" id="306" /> +<TGConnectingPoint num="10" id="307" /> +<TGConnectingPoint num="11" id="308" /> +<TGConnectingPoint num="12" id="309" /> +<TGConnectingPoint num="13" id="310" /> +<TGConnectingPoint num="14" id="311" /> +<TGConnectingPoint num="15" id="312" /> +<TGConnectingPoint num="16" id="313" /> +<TGConnectingPoint num="17" id="314" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="334" > +<father id="419" num="7" /> +<cdparam x="697" y="304" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="316" /> +<TGConnectingPoint num="1" id="317" /> +<TGConnectingPoint num="2" id="318" /> +<TGConnectingPoint num="3" id="319" /> +<TGConnectingPoint num="4" id="320" /> +<TGConnectingPoint num="5" id="321" /> +<TGConnectingPoint num="6" id="322" /> +<TGConnectingPoint num="7" id="323" /> +<TGConnectingPoint num="8" id="324" /> +<TGConnectingPoint num="9" id="325" /> +<TGConnectingPoint num="10" id="326" /> +<TGConnectingPoint num="11" id="327" /> +<TGConnectingPoint num="12" id="328" /> +<TGConnectingPoint num="13" id="329" /> +<TGConnectingPoint num="14" id="330" /> +<TGConnectingPoint num="15" id="331" /> +<TGConnectingPoint num="16" id="332" /> +<TGConnectingPoint num="17" id="333" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="353" > +<father id="419" num="8" /> +<cdparam x="697" y="179" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="335" /> +<TGConnectingPoint num="1" id="336" /> +<TGConnectingPoint num="2" id="337" /> +<TGConnectingPoint num="3" id="338" /> +<TGConnectingPoint num="4" id="339" /> +<TGConnectingPoint num="5" id="340" /> +<TGConnectingPoint num="6" id="341" /> +<TGConnectingPoint num="7" id="342" /> +<TGConnectingPoint num="8" id="343" /> +<TGConnectingPoint num="9" id="344" /> +<TGConnectingPoint num="10" id="345" /> +<TGConnectingPoint num="11" id="346" /> +<TGConnectingPoint num="12" id="347" /> +<TGConnectingPoint num="13" id="348" /> +<TGConnectingPoint num="14" id="349" /> +<TGConnectingPoint num="15" id="350" /> +<TGConnectingPoint num="16" id="351" /> +<TGConnectingPoint num="17" id="352" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="372" > +<father id="419" num="9" /> +<cdparam x="697" y="214" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="354" /> +<TGConnectingPoint num="1" id="355" /> +<TGConnectingPoint num="2" id="356" /> +<TGConnectingPoint num="3" id="357" /> +<TGConnectingPoint num="4" id="358" /> +<TGConnectingPoint num="5" id="359" /> +<TGConnectingPoint num="6" id="360" /> +<TGConnectingPoint num="7" id="361" /> +<TGConnectingPoint num="8" id="362" /> +<TGConnectingPoint num="9" id="363" /> +<TGConnectingPoint num="10" id="364" /> +<TGConnectingPoint num="11" id="365" /> +<TGConnectingPoint num="12" id="366" /> +<TGConnectingPoint num="13" id="367" /> +<TGConnectingPoint num="14" id="368" /> +<TGConnectingPoint num="15" id="369" /> +<TGConnectingPoint num="16" id="370" /> +<TGConnectingPoint num="17" id="371" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="391" > +<father id="419" num="10" /> +<cdparam x="697" y="243" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="373" /> +<TGConnectingPoint num="1" id="374" /> +<TGConnectingPoint num="2" id="375" /> +<TGConnectingPoint num="3" id="376" /> +<TGConnectingPoint num="4" id="377" /> +<TGConnectingPoint num="5" id="378" /> +<TGConnectingPoint num="6" id="379" /> +<TGConnectingPoint num="7" id="380" /> +<TGConnectingPoint num="8" id="381" /> +<TGConnectingPoint num="9" id="382" /> +<TGConnectingPoint num="10" id="383" /> +<TGConnectingPoint num="11" id="384" /> +<TGConnectingPoint num="12" id="385" /> +<TGConnectingPoint num="13" id="386" /> +<TGConnectingPoint num="14" id="387" /> +<TGConnectingPoint num="15" id="388" /> +<TGConnectingPoint num="16" id="389" /> +<TGConnectingPoint num="17" id="390" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="410" > +<father id="419" num="11" /> +<cdparam x="697" y="116" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="435" minY="-10" maxY="326" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="392" /> +<TGConnectingPoint num="1" id="393" /> +<TGConnectingPoint num="2" id="394" /> +<TGConnectingPoint num="3" id="395" /> +<TGConnectingPoint num="4" id="396" /> +<TGConnectingPoint num="5" id="397" /> +<TGConnectingPoint num="6" id="398" /> +<TGConnectingPoint num="7" id="399" /> +<TGConnectingPoint num="8" id="400" /> +<TGConnectingPoint num="9" id="401" /> +<TGConnectingPoint num="10" id="402" /> +<TGConnectingPoint num="11" id="403" /> +<TGConnectingPoint num="12" id="404" /> +<TGConnectingPoint num="13" id="405" /> +<TGConnectingPoint num="14" id="406" /> +<TGConnectingPoint num="15" id="407" /> +<TGConnectingPoint num="16" id="408" /> +<TGConnectingPoint num="17" id="409" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="438" > +<father id="561" num="3" /> +<cdparam x="417" y="118" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="420" /> +<TGConnectingPoint num="1" id="421" /> +<TGConnectingPoint num="2" id="422" /> +<TGConnectingPoint num="3" id="423" /> +<TGConnectingPoint num="4" id="424" /> +<TGConnectingPoint num="5" id="425" /> +<TGConnectingPoint num="6" id="426" /> +<TGConnectingPoint num="7" id="427" /> +<TGConnectingPoint num="8" id="428" /> +<TGConnectingPoint num="9" id="429" /> +<TGConnectingPoint num="10" id="430" /> +<TGConnectingPoint num="11" id="431" /> +<TGConnectingPoint num="12" id="432" /> +<TGConnectingPoint num="13" id="433" /> +<TGConnectingPoint num="14" id="434" /> +<TGConnectingPoint num="15" id="435" /> +<TGConnectingPoint num="16" id="436" /> +<TGConnectingPoint num="17" id="437" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="457" > +<father id="561" num="4" /> +<cdparam x="417" y="259" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="439" /> +<TGConnectingPoint num="1" id="440" /> +<TGConnectingPoint num="2" id="441" /> +<TGConnectingPoint num="3" id="442" /> +<TGConnectingPoint num="4" id="443" /> +<TGConnectingPoint num="5" id="444" /> +<TGConnectingPoint num="6" id="445" /> +<TGConnectingPoint num="7" id="446" /> +<TGConnectingPoint num="8" id="447" /> +<TGConnectingPoint num="9" id="448" /> +<TGConnectingPoint num="10" id="449" /> +<TGConnectingPoint num="11" id="450" /> +<TGConnectingPoint num="12" id="451" /> +<TGConnectingPoint num="13" id="452" /> +<TGConnectingPoint num="14" id="453" /> +<TGConnectingPoint num="15" id="454" /> +<TGConnectingPoint num="16" id="455" /> +<TGConnectingPoint num="17" id="456" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="476" > +<father id="561" num="5" /> +<cdparam x="417" y="189" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="458" /> +<TGConnectingPoint num="1" id="459" /> +<TGConnectingPoint num="2" id="460" /> +<TGConnectingPoint num="3" id="461" /> +<TGConnectingPoint num="4" id="462" /> +<TGConnectingPoint num="5" id="463" /> +<TGConnectingPoint num="6" id="464" /> +<TGConnectingPoint num="7" id="465" /> +<TGConnectingPoint num="8" id="466" /> +<TGConnectingPoint num="9" id="467" /> +<TGConnectingPoint num="10" id="468" /> +<TGConnectingPoint num="11" id="469" /> +<TGConnectingPoint num="12" id="470" /> +<TGConnectingPoint num="13" id="471" /> +<TGConnectingPoint num="14" id="472" /> +<TGConnectingPoint num="15" id="473" /> +<TGConnectingPoint num="16" id="474" /> +<TGConnectingPoint num="17" id="475" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="495" > +<father id="561" num="6" /> +<cdparam x="417" y="225" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="477" /> +<TGConnectingPoint num="1" id="478" /> +<TGConnectingPoint num="2" id="479" /> +<TGConnectingPoint num="3" id="480" /> +<TGConnectingPoint num="4" id="481" /> +<TGConnectingPoint num="5" id="482" /> +<TGConnectingPoint num="6" id="483" /> +<TGConnectingPoint num="7" id="484" /> +<TGConnectingPoint num="8" id="485" /> +<TGConnectingPoint num="9" id="486" /> +<TGConnectingPoint num="10" id="487" /> +<TGConnectingPoint num="11" id="488" /> +<TGConnectingPoint num="12" id="489" /> +<TGConnectingPoint num="13" id="490" /> +<TGConnectingPoint num="14" id="491" /> +<TGConnectingPoint num="15" id="492" /> +<TGConnectingPoint num="16" id="493" /> +<TGConnectingPoint num="17" id="494" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="514" > +<father id="561" num="7" /> +<cdparam x="417" y="285" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="496" /> +<TGConnectingPoint num="1" id="497" /> +<TGConnectingPoint num="2" id="498" /> +<TGConnectingPoint num="3" id="499" /> +<TGConnectingPoint num="4" id="500" /> +<TGConnectingPoint num="5" id="501" /> +<TGConnectingPoint num="6" id="502" /> +<TGConnectingPoint num="7" id="503" /> +<TGConnectingPoint num="8" id="504" /> +<TGConnectingPoint num="9" id="505" /> +<TGConnectingPoint num="10" id="506" /> +<TGConnectingPoint num="11" id="507" /> +<TGConnectingPoint num="12" id="508" /> +<TGConnectingPoint num="13" id="509" /> +<TGConnectingPoint num="14" id="510" /> +<TGConnectingPoint num="15" id="511" /> +<TGConnectingPoint num="16" id="512" /> +<TGConnectingPoint num="17" id="513" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="533" > +<father id="561" num="8" /> +<cdparam x="417" y="75" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="515" /> +<TGConnectingPoint num="1" id="516" /> +<TGConnectingPoint num="2" id="517" /> +<TGConnectingPoint num="3" id="518" /> +<TGConnectingPoint num="4" id="519" /> +<TGConnectingPoint num="5" id="520" /> +<TGConnectingPoint num="6" id="521" /> +<TGConnectingPoint num="7" id="522" /> +<TGConnectingPoint num="8" id="523" /> +<TGConnectingPoint num="9" id="524" /> +<TGConnectingPoint num="10" id="525" /> +<TGConnectingPoint num="11" id="526" /> +<TGConnectingPoint num="12" id="527" /> +<TGConnectingPoint num="13" id="528" /> +<TGConnectingPoint num="14" id="529" /> +<TGConnectingPoint num="15" id="530" /> +<TGConnectingPoint num="16" id="531" /> +<TGConnectingPoint num="17" id="532" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="1201" id="552" > +<father id="561" num="9" /> +<cdparam x="417" y="152" /> +<sizeparam width="20" height="20" minWidth="1" minHeight="1" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-10" maxX="726" minY="-10" maxY="380" /> +<infoparam name="TGComponent" value="MyName" /> +<TGConnectingPoint num="0" id="534" /> +<TGConnectingPoint num="1" id="535" /> +<TGConnectingPoint num="2" id="536" /> +<TGConnectingPoint num="3" id="537" /> +<TGConnectingPoint num="4" id="538" /> +<TGConnectingPoint num="5" id="539" /> +<TGConnectingPoint num="6" id="540" /> +<TGConnectingPoint num="7" id="541" /> +<TGConnectingPoint num="8" id="542" /> +<TGConnectingPoint num="9" id="543" /> +<TGConnectingPoint num="10" id="544" /> +<TGConnectingPoint num="11" id="545" /> +<TGConnectingPoint num="12" id="546" /> +<TGConnectingPoint num="13" id="547" /> +<TGConnectingPoint num="14" id="548" /> +<TGConnectingPoint num="15" id="549" /> +<TGConnectingPoint num="16" id="550" /> +<TGConnectingPoint num="17" id="551" /> +</SUBCOMPONENT> + + +</TMLComponentTaskDiagramPanel> + +<TMLActivityDiagramPanel name="InterfaceDevice" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1012" id="569" > +<cdparam x="553" y="376" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="565" /> +<TGConnectingPoint num="1" id="566" /> +<TGConnectingPoint num="2" id="567" /> +<TGConnectingPoint num="3" id="568" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="562" > +<father id="569" num="0" /> +<cdparam x="528" y="386" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="563" > +<father id="569" num="1" /> +<cdparam x="588" y="386" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="564" > +<father id="569" num="2" /> +<cdparam x="573" y="421" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="577" > +<cdparam x="644" y="517" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="573" /> +<TGConnectingPoint num="1" id="574" /> +<TGConnectingPoint num="2" id="575" /> +<TGConnectingPoint num="3" id="576" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="570" > +<father id="577" num="0" /> +<cdparam x="599" y="527" /> +<sizeparam width="52" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ x==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="571" > +<father id="577" num="1" /> +<cdparam x="679" y="527" /> +<sizeparam width="14" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="572" > +<father id="577" num="2" /> +<cdparam x="664" y="562" /> +<sizeparam width="42" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ x>0 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="579" > +<cdparam x="221" y="37" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="578" /> +</COMPONENT> + +<COMPONENT type="1007" id="582" > +<cdparam x="188" y="137" /> +<sizeparam width="81" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send request" value="activation()" /> +<TGConnectingPoint num="0" id="580" /> +<TGConnectingPoint num="1" id="581" /> +<extraparam> +<Data requestName="activation" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="585" > +<cdparam x="202" y="237" /> +<sizeparam width="53" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="reset()" /> +<TGConnectingPoint num="0" id="583" /> +<TGConnectingPoint num="1" id="584" /> +<extraparam> +<Data eventName="reset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="588" > +<cdparam x="167" y="288" /> +<sizeparam width="120" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="answerToReset() " /> +<TGConnectingPoint num="0" id="586" /> +<TGConnectingPoint num="1" id="587" /> +<extraparam> +<Data eventName="answerToReset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="591" > +<cdparam x="207" y="337" /> +<sizeparam width="43" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="pTS()" /> +<TGConnectingPoint num="0" id="589" /> +<TGConnectingPoint num="1" id="590" /> +<extraparam> +<Data eventName="pTS" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="594" > +<cdparam x="356" y="165" /> +<sizeparam width="94" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="pTSConfirm() " /> +<TGConnectingPoint num="0" id="592" /> +<TGConnectingPoint num="1" id="593" /> +<breakpoint /> +<extraparam> +<Data eventName="pTSConfirm" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="603" > +<cdparam x="367" y="222" /> +<sizeparam width="114" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="data exchange +" /> +<TGConnectingPoint num="0" id="595" /> +<TGConnectingPoint num="1" id="596" /> +<TGConnectingPoint num="2" id="597" /> +<TGConnectingPoint num="3" id="598" /> +<TGConnectingPoint num="4" id="599" /> +<TGConnectingPoint num="5" id="600" /> +<TGConnectingPoint num="6" id="601" /> +<TGConnectingPoint num="7" id="602" /> +<extraparam> +<Line value="data exchange" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="606" > +<cdparam x="429" y="448" /> +<sizeparam width="94" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromDtoSC(1)" /> +<TGConnectingPoint num="0" id="604" /> +<TGConnectingPoint num="1" id="605" /> +<extraparam> +<Data channelName="fromDtoSC" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="609" > +<cdparam x="430" y="507" /> +<sizeparam width="93" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="data_Ready()" /> +<TGConnectingPoint num="0" id="607" /> +<TGConnectingPoint num="1" id="608" /> +<extraparam> +<Data eventName="data_Ready" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="611" > +<cdparam x="466" y="570" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="610" /> +</COMPONENT> + +<COMPONENT type="1017" id="614" > +<cdparam x="588" y="447" /> +<sizeparam width="142" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="notified event" value="x=?data_Ready_SC()" /> +<TGConnectingPoint num="0" id="612" /> +<TGConnectingPoint num="1" id="613" /> +<extraparam> +<Data eventName="data_Ready_SC" variable="x" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="616" > +<cdparam x="569" y="577" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="615" /> +</COMPONENT> + +<COMPONENT type="1009" id="619" > +<cdparam x="610" y="700" /> +<sizeparam width="98" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="read channel" value="fromSCtoD(1) " /> +<TGConnectingPoint num="0" id="617" /> +<TGConnectingPoint num="1" id="618" /> +<extraparam> +<Data channelName="fromSCtoD" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="622" > +<cdparam x="600" y="619" /> +<sizeparam width="119" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="data_Ready_SC() " /> +<TGConnectingPoint num="0" id="620" /> +<TGConnectingPoint num="1" id="621" /> +<accessibility /> +<extraparam> +<Data eventName="data_Ready_SC" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="624" > +<cdparam x="649" y="774" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="623" /> +</COMPONENT> + +<COMPONENT type="1014" id="628" > +<cdparam x="300" y="287" /> +<sizeparam width="268" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="for loop" value="for(i=0;i<nbOfComputedPackets;i = i +1)" /> +<TGConnectingPoint num="0" id="625" /> +<TGConnectingPoint num="1" id="626" /> +<TGConnectingPoint num="2" id="627" /> +<extraparam> +<Data init="i=0" condition="i<nbOfComputedPackets" increment="i = i +1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="630" > +<cdparam x="382" y="380" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="629" /> +</COMPONENT> + +<CONNECTOR type="115" id="635" > +<cdparam x="78" y="363" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to wait event" value="null" /> +<P1 x="228" y="362" id="590" /> +<P2 x="403" y="160" id="592" /> +<Point x="228" y="383" /> +<Point x="307" y="383" /> +<Point x="307" y="140" /> +<Point x="403" y="140" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="631" > +<father id="635" num="0" /> +<cdparam x="228" y="383" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="632" > +<father id="635" num="1" /> +<cdparam x="307" y="383" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="633" > +<father id="635" num="2" /> +<cdparam x="307" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="634" > +<father id="635" num="3" /> +<cdparam x="403" y="140" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="115" id="636" > +<cdparam x="228" y="57" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send request" value="null" /> +<P1 x="228" y="57" id="578" /> +<P2 x="228" y="132" id="580" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="637" > +<cdparam x="228" y="162" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to send event" value="null" /> +<P1 x="228" y="162" id="581" /> +<P2 x="228" y="232" id="583" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="638" > +<cdparam x="228" y="284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to send event" value="null" /> +<P1 x="227" y="313" id="587" /> +<P2 x="228" y="332" id="589" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="639" > +<cdparam x="528" y="391" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to write channel" value="null" /> +<P1 x="528" y="391" id="566" /> +<P2 x="476" y="443" id="604" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="640" > +<cdparam x="476" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="476" y="473" id="605" /> +<P2 x="476" y="502" id="607" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="641" > +<cdparam x="471" y="529" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="476" y="532" id="608" /> +<P2 x="476" y="565" id="610" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="642" > +<cdparam x="619" y="532" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="619" y="532" id="574" /> +<P2 x="579" y="572" id="615" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="643" > +<cdparam x="580" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to notified event" value="null" /> +<P1 x="608" y="391" id="567" /> +<P2 x="659" y="442" id="612" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="644" > +<cdparam x="659" y="472" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from notified event to choice" value="null" /> +<P1 x="659" y="472" id="613" /> +<P2 x="659" y="507" id="573" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="645" > +<cdparam x="659" y="572" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="659" y="572" id="576" /> +<P2 x="659" y="614" id="620" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="646" > +<cdparam x="670" y="644" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="659" y="644" id="621" /> +<P2 x="659" y="695" id="617" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="647" > +<cdparam x="659" y="725" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to stop state" value="null" /> +<P1 x="659" y="725" id="618" /> +<P2 x="659" y="769" id="623" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="648" > +<cdparam x="491" y="302" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to choice" value="null" /> +<P1 x="568" y="301" id="626" /> +<P2 x="568" y="366" id="565" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="649" > +<cdparam x="403" y="190" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to for loop" value="null" /> +<P1 x="403" y="190" id="593" /> +<P2 x="434" y="282" id="625" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="650" > +<cdparam x="437" y="313" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to stop state" value="null" /> +<P1 x="434" y="312" id="627" /> +<P2 x="392" y="375" id="629" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="651" > +<cdparam x="228" y="262" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to wait event" value="null" /> +<P1 x="228" y="262" id="584" /> +<P2 x="227" y="283" id="586" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="Timer" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1012" id="659" > +<cdparam x="509" y="222" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="655" /> +<TGConnectingPoint num="1" id="656" /> +<TGConnectingPoint num="2" id="657" /> +<TGConnectingPoint num="3" id="658" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="652" > +<father id="659" num="0" /> +<cdparam x="464" y="232" /> +<sizeparam width="51" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ x==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="653" > +<father id="659" num="1" /> +<cdparam x="544" y="234" /> +<sizeparam width="41" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ x>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="654" > +<father id="659" num="2" /> +<cdparam x="529" y="267" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="661" > +<cdparam x="517" y="87" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="660" /> +</COMPONENT> + +<COMPONENT type="1001" id="663" > +<cdparam x="417" y="367" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="662" /> +</COMPONENT> + +<COMPONENT type="1008" id="666" > +<cdparam x="396" y="299" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="timeOut()" /> +<TGConnectingPoint num="0" id="664" /> +<TGConnectingPoint num="1" id="665" /> +<extraparam> +<Data eventName="timeOut" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="669" > +<cdparam x="599" y="300" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="stop() " /> +<TGConnectingPoint num="0" id="667" /> +<TGConnectingPoint num="1" id="668" /> +<extraparam> +<Data eventName="stop" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="671" > +<cdparam x="612" y="365" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="670" /> +</COMPONENT> + +<COMPONENT type="1017" id="674" > +<cdparam x="489" y="150" /> +<sizeparam width="70" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="notified event" value="x=?stop()" /> +<TGConnectingPoint num="0" id="672" /> +<TGConnectingPoint num="1" id="673" /> +<extraparam> +<Data eventName="stop" variable="x" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="115" id="675" > +<cdparam x="427" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="427" y="324" id="665" /> +<P2 x="427" y="362" id="662" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="676" > +<cdparam x="622" y="325" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to stop state" value="null" /> +<P1 x="622" y="325" id="668" /> +<P2 x="622" y="360" id="670" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="677" > +<cdparam x="524" y="107" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to notified event" value="null" /> +<P1 x="524" y="107" id="660" /> +<P2 x="524" y="145" id="672" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="678" > +<cdparam x="524" y="175" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from notified event to choice" value="null" /> +<P1 x="524" y="175" id="673" /> +<P2 x="524" y="212" id="655" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="679" > +<cdparam x="484" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="484" y="237" id="656" /> +<P2 x="427" y="294" id="664" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="680" > +<cdparam x="564" y="237" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="564" y="237" id="657" /> +<P2 x="622" y="295" id="667" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="TCPIP" minX="10" maxX="2900" minY="10" maxY="1900" > +<COMPONENT type="1012" id="688" > +<cdparam x="2086" y="1378" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="684" /> +<TGConnectingPoint num="1" id="685" /> +<TGConnectingPoint num="2" id="686" /> +<TGConnectingPoint num="3" id="687" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="681" > +<father id="688" num="0" /> +<cdparam x="2061" y="1388" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="682" > +<father id="688" num="1" /> +<cdparam x="2121" y="1388" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="683" > +<father id="688" num="2" /> +<cdparam x="2106" y="1426" /> +<sizeparam width="124" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==10 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="696" > +<cdparam x="2262" y="951" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="692" /> +<TGConnectingPoint num="1" id="693" /> +<TGConnectingPoint num="2" id="694" /> +<TGConnectingPoint num="3" id="695" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="689" > +<father id="696" num="0" /> +<cdparam x="2212" y="961" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==1 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="690" > +<father id="696" num="1" /> +<cdparam x="2297" y="961" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ tcpctrl.state ==3 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="691" > +<father id="696" num="2" /> +<cdparam x="2282" y="996" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ else ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="704" > +<cdparam x="1981" y="1346" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="700" /> +<TGConnectingPoint num="1" id="701" /> +<TGConnectingPoint num="2" id="702" /> +<TGConnectingPoint num="3" id="703" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="697" > +<father id="704" num="0" /> +<cdparam x="1934" y="1356" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==5 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="698" > +<father id="704" num="1" /> +<cdparam x="2016" y="1356" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="699" > +<father id="704" num="2" /> +<cdparam x="2001" y="1391" /> +<sizeparam width="120" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state == 7 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="712" > +<cdparam x="1811" y="1269" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="708" /> +<TGConnectingPoint num="1" id="709" /> +<TGConnectingPoint num="2" id="710" /> +<TGConnectingPoint num="3" id="711" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="705" > +<father id="712" num="0" /> +<cdparam x="1762" y="1279" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==4 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="706" > +<father id="712" num="1" /> +<cdparam x="1846" y="1279" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="707" > +<father id="712" num="2" /> +<cdparam x="1831" y="1314" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==2 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="720" > +<cdparam x="1716" y="1141" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="716" /> +<TGConnectingPoint num="1" id="717" /> +<TGConnectingPoint num="2" id="718" /> +<TGConnectingPoint num="3" id="719" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="713" > +<father id="720" num="0" /> +<cdparam x="1691" y="1151" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="714" > +<father id="720" num="1" /> +<cdparam x="1751" y="1151" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="715" > +<father id="720" num="2" /> +<cdparam x="1736" y="1186" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="724" > +<cdparam x="1524" y="1254" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="722" /> +<TGConnectingPoint num="1" id="723" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="721" > +<father id="724" num="0" /> +<cdparam x="1539" y="1274" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="728" > +<cdparam x="1524" y="1064" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="726" /> +<TGConnectingPoint num="1" id="727" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="725" > +<father id="728" num="0" /> +<cdparam x="1538" y="1088" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="736" > +<cdparam x="1592" y="1006" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="732" /> +<TGConnectingPoint num="1" id="733" /> +<TGConnectingPoint num="2" id="734" /> +<TGConnectingPoint num="3" id="735" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="729" > +<father id="736" num="0" /> +<cdparam x="1542" y="1016" /> +<sizeparam width="124" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state == 4 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="730" > +<father id="736" num="1" /> +<cdparam x="1627" y="1016" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="731" > +<father id="736" num="2" /> +<cdparam x="1612" y="1051" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="744" > +<cdparam x="1713" y="875" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="740" /> +<TGConnectingPoint num="1" id="741" /> +<TGConnectingPoint num="2" id="742" /> +<TGConnectingPoint num="3" id="743" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="737" > +<father id="744" num="0" /> +<cdparam x="1688" y="885" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="738" > +<father id="744" num="1" /> +<cdparam x="1748" y="885" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="739" > +<father id="744" num="2" /> +<cdparam x="1733" y="920" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="748" > +<cdparam x="1636" y="1235" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="746" /> +<TGConnectingPoint num="1" id="747" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="745" > +<father id="748" num="0" /> +<cdparam x="1655" y="1254" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="752" > +<cdparam x="2213" y="1059" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="750" /> +<TGConnectingPoint num="1" id="751" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="749" > +<father id="752" num="0" /> +<cdparam x="2200" y="1083" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="756" > +<cdparam x="2336" y="1024" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="754" /> +<TGConnectingPoint num="1" id="755" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="753" > +<father id="756" num="0" /> +<cdparam x="2312" y="1044" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="764" > +<cdparam x="1193" y="1020" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="760" /> +<TGConnectingPoint num="1" id="761" /> +<TGConnectingPoint num="2" id="762" /> +<TGConnectingPoint num="3" id="763" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="757" > +<father id="764" num="0" /> +<cdparam x="1168" y="1030" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="758" > +<father id="764" num="1" /> +<cdparam x="1228" y="1030" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="759" > +<father id="764" num="2" /> +<cdparam x="1213" y="1065" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==6 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="768" > +<cdparam x="1203" y="1107" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="766" /> +<TGConnectingPoint num="1" id="767" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="765" > +<father id="768" num="0" /> +<cdparam x="1218" y="1127" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="776" > +<cdparam x="557" y="712" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="772" /> +<TGConnectingPoint num="1" id="773" /> +<TGConnectingPoint num="2" id="774" /> +<TGConnectingPoint num="3" id="775" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="769" > +<father id="776" num="0" /> +<cdparam x="514" y="722" /> +<sizeparam width="120" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state == 1 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="770" > +<father id="776" num="1" /> +<cdparam x="592" y="722" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="771" > +<father id="776" num="2" /> +<cdparam x="577" y="757" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="780" > +<cdparam x="717" y="694" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="778" /> +<TGConnectingPoint num="1" id="779" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="777" > +<father id="780" num="0" /> +<cdparam x="732" y="714" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="784" > +<cdparam x="938" y="1025" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="782" /> +<TGConnectingPoint num="1" id="783" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="781" > +<father id="784" num="0" /> +<cdparam x="953" y="1045" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="792" > +<cdparam x="1034" y="939" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="788" /> +<TGConnectingPoint num="1" id="789" /> +<TGConnectingPoint num="2" id="790" /> +<TGConnectingPoint num="3" id="791" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="785" > +<father id="792" num="0" /> +<cdparam x="989" y="949" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==4 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="786" > +<father id="792" num="1" /> +<cdparam x="1070" y="949" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="787" > +<father id="792" num="2" /> +<cdparam x="1054" y="984" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state == 5]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="796" > +<cdparam x="795" y="1009" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="794" /> +<TGConnectingPoint num="1" id="795" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="793" > +<father id="796" num="0" /> +<cdparam x="818" y="1031" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="804" > +<cdparam x="828" y="869" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="800" /> +<TGConnectingPoint num="1" id="801" /> +<TGConnectingPoint num="2" id="802" /> +<TGConnectingPoint num="3" id="803" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="797" > +<father id="804" num="0" /> +<cdparam x="753" y="885" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="798" > +<father id="804" num="1" /> +<cdparam x="863" y="879" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="799" > +<father id="804" num="2" /> +<cdparam x="848" y="914" /> +<sizeparam width="112" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state==0 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="808" > +<cdparam x="341" y="764" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="806" /> +<TGConnectingPoint num="1" id="807" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="805" > +<father id="808" num="0" /> +<cdparam x="354" y="785" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="812" > +<cdparam x="127" y="794" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="810" /> +<TGConnectingPoint num="1" id="811" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="809" > +<father id="812" num="0" /> +<cdparam x="146" y="818" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="820" > +<cdparam x="993" y="780" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="816" /> +<TGConnectingPoint num="1" id="817" /> +<TGConnectingPoint num="2" id="818" /> +<TGConnectingPoint num="3" id="819" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="813" > +<father id="820" num="0" /> +<cdparam x="949" y="793" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="814" > +<father id="820" num="1" /> +<cdparam x="1028" y="790" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="815" > +<father id="820" num="2" /> +<cdparam x="1013" y="825" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="824" > +<cdparam x="1003" y="701" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="822" /> +<TGConnectingPoint num="1" id="823" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="821" > +<father id="824" num="0" /> +<cdparam x="1018" y="721" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="828" > +<cdparam x="434" y="783" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="826" /> +<TGConnectingPoint num="1" id="827" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="825" > +<father id="828" num="0" /> +<cdparam x="449" y="802" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="832" > +<cdparam x="225" y="863" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="830" /> +<TGConnectingPoint num="1" id="831" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="829" > +<father id="832" num="0" /> +<cdparam x="245" y="885" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1013" id="836" > +<cdparam x="1044" y="1057" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="execI" value="null" /> +<TGConnectingPoint num="0" id="834" /> +<TGConnectingPoint num="1" id="835" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="833" > +<father id="836" num="0" /> +<cdparam x="1059" y="1077" /> +<sizeparam width="8" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="b" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="844" > +<cdparam x="173" y="486" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="840" /> +<TGConnectingPoint num="1" id="841" /> +<TGConnectingPoint num="2" id="842" /> +<TGConnectingPoint num="3" id="843" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="837" > +<father id="844" num="0" /> +<cdparam x="98" y="496" /> +<sizeparam width="112" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="838" > +<father id="844" num="1" /> +<cdparam x="208" y="496" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="839" > +<father id="844" num="2" /> +<cdparam x="193" y="531" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="852" > +<cdparam x="359" y="192" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="848" /> +<TGConnectingPoint num="1" id="849" /> +<TGConnectingPoint num="2" id="850" /> +<TGConnectingPoint num="3" id="851" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="845" > +<father id="852" num="0" /> +<cdparam x="317" y="202" /> +<sizeparam width="81" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.a>0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="846" > +<father id="852" num="1" /> +<cdparam x="394" y="202" /> +<sizeparam width="91" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ tcpctrl.a==0 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="847" > +<father id="852" num="2" /> +<cdparam x="379" y="237" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="860" > +<cdparam x="449" y="582" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="856" /> +<TGConnectingPoint num="1" id="857" /> +<TGConnectingPoint num="2" id="858" /> +<TGConnectingPoint num="3" id="859" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="853" > +<father id="860" num="0" /> +<cdparam x="398" y="592" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state ==9 ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="854" > +<father id="860" num="1" /> +<cdparam x="500" y="599" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="855" > +<father id="860" num="2" /> +<cdparam x="469" y="627" /> +<sizeparam width="252" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ (tcpctrl.state ==2) or (tcpctrl.state ==4) ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1012" id="868" > +<cdparam x="274" y="564" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="864" /> +<TGConnectingPoint num="1" id="865" /> +<TGConnectingPoint num="2" id="866" /> +<TGConnectingPoint num="3" id="867" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="861" > +<father id="868" num="0" /> +<cdparam x="228" y="574" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ tcpctrl.state == 1]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="862" > +<father id="868" num="1" /> +<cdparam x="317" y="584" /> +<sizeparam width="39" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ else ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="863" > +<father id="868" num="2" /> +<cdparam x="294" y="613" /> +<sizeparam width="116" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ tcpctrl.state ==4 ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="870" > +<cdparam x="227" y="27" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="869" /> +</COMPONENT> + +<COMPONENT type="301" id="879" > +<cdparam x="59" y="131" /> +<sizeparam width="92" height="185" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="0: closed +1: Listen +2: SYN rcvd +3: SYN sent +4: Estab +5: Fin wait1 +6: Fin wait2 +7: closing +8: Time wait +9: close wait +10:last ack +" /> +<TGConnectingPoint num="0" id="871" /> +<TGConnectingPoint num="1" id="872" /> +<TGConnectingPoint num="2" id="873" /> +<TGConnectingPoint num="3" id="874" /> +<TGConnectingPoint num="4" id="875" /> +<TGConnectingPoint num="5" id="876" /> +<TGConnectingPoint num="6" id="877" /> +<TGConnectingPoint num="7" id="878" /> +<extraparam> +<Line value="0: closed" /> +<Line value="1: Listen" /> +<Line value="2: SYN rcvd" /> +<Line value="3: SYN sent" /> +<Line value="4: Estab" /> +<Line value="5: Fin wait1" /> +<Line value="6: Fin wait2" /> +<Line value="7: closing" /> +<Line value="8: Time wait" /> +<Line value="9: close wait" /> +<Line value="10:last ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="882" > +<cdparam x="76" y="549" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =1" /> +<TGConnectingPoint num="0" id="880" /> +<TGConnectingPoint num="1" id="881" /> +</COMPONENT> + +<COMPONENT type="1001" id="884" > +<cdparam x="116" y="615" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="883" /> +</COMPONENT> + +<COMPONENT type="1009" id="887" > +<cdparam x="967" y="585" /> +<sizeparam width="83" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="fromPtoT(1) " /> +<TGConnectingPoint num="0" id="885" /> +<TGConnectingPoint num="1" id="886" /> +<extraparam> +<Data channelName="fromPtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1014" id="891" > +<cdparam x="149" y="79" /> +<sizeparam width="170" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="for loop" value="for(i=0;(tcpctrl.a==0);i = i)" /> +<TGConnectingPoint num="0" id="888" /> +<TGConnectingPoint num="1" id="889" /> +<TGConnectingPoint num="2" id="890" /> +<extraparam> +<Data init="i=0" condition="(tcpctrl.a==0)" increment="i = i" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="893" > +<cdparam x="224" y="207" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="892" /> +</COMPONENT> + +<COMPONENT type="1011" id="896" > +<cdparam x="186" y="144" /> +<sizeparam width="96" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state=0" /> +<TGConnectingPoint num="0" id="894" /> +<TGConnectingPoint num="1" id="895" /> +</COMPONENT> + +<COMPONENT type="1017" id="899" > +<cdparam x="316" y="133" /> +<sizeparam width="116" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="notified event" value="tcpctrl.a=?abort()" /> +<TGConnectingPoint num="0" id="897" /> +<TGConnectingPoint num="1" id="898" /> +<extraparam> +<Data eventName="abort" variable="tcpctrl.a" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="902" > +<cdparam x="692" y="589" /> +<sizeparam width="60" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="temp(1) " /> +<TGConnectingPoint num="0" id="900" /> +<TGConnectingPoint num="1" id="901" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="905" > +<cdparam x="689" y="534" /> +<sizeparam width="67" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="timeOut() " /> +<TGConnectingPoint num="0" id="903" /> +<TGConnectingPoint num="1" id="904" /> +<extraparam> +<Data eventName="timeOut" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="908" > +<cdparam x="977" y="528" /> +<sizeparam width="63" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="receive() " /> +<TGConnectingPoint num="0" id="906" /> +<TGConnectingPoint num="1" id="907" /> +<extraparam> +<Data eventName="receive" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="911" > +<cdparam x="439" y="492" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="close() " /> +<TGConnectingPoint num="0" id="909" /> +<TGConnectingPoint num="1" id="910" /> +<extraparam> +<Data eventName="close" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="914" > +<cdparam x="250" y="468" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="send_TCP() " /> +<TGConnectingPoint num="0" id="912" /> +<TGConnectingPoint num="1" id="913" /> +<extraparam> +<Data eventName="send_TCP" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="917" > +<cdparam x="163" y="419" /> +<sizeparam width="51" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="open() " /> +<TGConnectingPoint num="0" id="915" /> +<TGConnectingPoint num="1" id="916" /> +<breakpoint /> +<extraparam> +<Data eventName="open" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1018" id="928" > +<cdparam x="449" y="267" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="select" value="null" /> +<TGConnectingPoint num="0" id="918" /> +<TGConnectingPoint num="1" id="919" /> +<TGConnectingPoint num="2" id="920" /> +<TGConnectingPoint num="3" id="921" /> +<TGConnectingPoint num="4" id="922" /> +<TGConnectingPoint num="5" id="923" /> +<TGConnectingPoint num="6" id="924" /> +<TGConnectingPoint num="7" id="925" /> +<TGConnectingPoint num="8" id="926" /> +<TGConnectingPoint num="9" id="927" /> +<breakpoint /> +</COMPONENT> + +<COMPONENT type="1001" id="930" > +<cdparam x="226" y="529" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="929" /> +</COMPONENT> + +<COMPONENT type="1001" id="932" > +<cdparam x="343" y="614" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="931" /> +</COMPONENT> + +<COMPONENT type="1010" id="935" > +<cdparam x="275" y="228" /> +<sizeparam width="53" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="wait event" value="abort() " /> +<TGConnectingPoint num="0" id="933" /> +<TGConnectingPoint num="1" id="934" /> +<extraparam> +<Data eventName="abort" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="937" > +<cdparam x="291" y="290" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="936" /> +</COMPONENT> + +<COMPONENT type="301" id="946" > +<cdparam x="602" y="86" /> +<sizeparam width="360" height="80" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="b est le nombre d'instructions necessaires pour paquetiser +ou depaquitiser un paquet TCP + +On prend b=1 comme exemple +" /> +<TGConnectingPoint num="0" id="938" /> +<TGConnectingPoint num="1" id="939" /> +<TGConnectingPoint num="2" id="940" /> +<TGConnectingPoint num="3" id="941" /> +<TGConnectingPoint num="4" id="942" /> +<TGConnectingPoint num="5" id="943" /> +<TGConnectingPoint num="6" id="944" /> +<TGConnectingPoint num="7" id="945" /> +<extraparam> +<Line value="b est le nombre d'instructions necessaires pour paquetiser" /> +<Line value="ou depaquitiser un paquet TCP" /> +<Line value="" /> +<Line value="On prend b=1 comme exemple" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="949" > +<cdparam x="188" y="808" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="fromAtoT(1) " /> +<TGConnectingPoint num="0" id="947" /> +<TGConnectingPoint num="1" id="948" /> +<extraparam> +<Data channelName="fromAtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="952" > +<cdparam x="191" y="1002" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="950" /> +<TGConnectingPoint num="1" id="951" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="954" > +<cdparam x="219" y="1237" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="953" /> +</COMPONENT> + +<COMPONENT type="1011" id="957" > +<cdparam x="388" y="1032" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =5" /> +<TGConnectingPoint num="0" id="955" /> +<TGConnectingPoint num="1" id="956" /> +</COMPONENT> + +<COMPONENT type="1001" id="959" > +<cdparam x="428" y="1213" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="958" /> +</COMPONENT> + +<COMPONENT type="1011" id="962" > +<cdparam x="84" y="1041" /> +<sizeparam width="96" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state=3" /> +<TGConnectingPoint num="0" id="960" /> +<TGConnectingPoint num="1" id="961" /> +</COMPONENT> + +<COMPONENT type="1006" id="965" > +<cdparam x="93" y="938" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="963" /> +<TGConnectingPoint num="1" id="964" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="968" > +<cdparam x="292" y="1026" /> +<sizeparam width="108" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =10" /> +<TGConnectingPoint num="0" id="966" /> +<TGConnectingPoint num="1" id="967" /> +</COMPONENT> + +<COMPONENT type="1001" id="970" > +<cdparam x="334" y="1229" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="969" /> +</COMPONENT> + +<COMPONENT type="1006" id="973" > +<cdparam x="400" y="941" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="971" /> +<TGConnectingPoint num="1" id="972" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="976" > +<cdparam x="307" y="900" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="974" /> +<TGConnectingPoint num="1" id="975" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="978" > +<cdparam x="789" y="1270" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="977" /> +</COMPONENT> + +<COMPONENT type="301" id="987" > +<cdparam x="998" y="850" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Fin +" /> +<TGConnectingPoint num="0" id="979" /> +<TGConnectingPoint num="1" id="980" /> +<TGConnectingPoint num="2" id="981" /> +<TGConnectingPoint num="3" id="982" /> +<TGConnectingPoint num="4" id="983" /> +<TGConnectingPoint num="5" id="984" /> +<TGConnectingPoint num="6" id="985" /> +<TGConnectingPoint num="7" id="986" /> +<extraparam> +<Line value="Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="990" > +<cdparam x="678" y="965" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =1" /> +<TGConnectingPoint num="0" id="988" /> +<TGConnectingPoint num="1" id="989" /> +</COMPONENT> + +<COMPONENT type="1001" id="992" > +<cdparam x="718" y="1032" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="991" /> +</COMPONENT> + +<COMPONENT type="1006" id="995" > +<cdparam x="761" y="1086" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="993" /> +<TGConnectingPoint num="1" id="994" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1004" > +<cdparam x="781" y="950" /> +<sizeparam width="89" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Active Open +" /> +<TGConnectingPoint num="0" id="996" /> +<TGConnectingPoint num="1" id="997" /> +<TGConnectingPoint num="2" id="998" /> +<TGConnectingPoint num="3" id="999" /> +<TGConnectingPoint num="4" id="1000" /> +<TGConnectingPoint num="5" id="1001" /> +<TGConnectingPoint num="6" id="1002" /> +<TGConnectingPoint num="7" id="1003" /> +<extraparam> +<Line value="Active Open" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1013" > +<cdparam x="715" y="907" /> +<sizeparam width="97" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Passive Open +" /> +<TGConnectingPoint num="0" id="1005" /> +<TGConnectingPoint num="1" id="1006" /> +<TGConnectingPoint num="2" id="1007" /> +<TGConnectingPoint num="3" id="1008" /> +<TGConnectingPoint num="4" id="1009" /> +<TGConnectingPoint num="5" id="1010" /> +<TGConnectingPoint num="6" id="1011" /> +<TGConnectingPoint num="7" id="1012" /> +<extraparam> +<Line value="Passive Open" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1016" > +<cdparam x="749" y="1193" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =3" /> +<TGConnectingPoint num="0" id="1014" /> +<TGConnectingPoint num="1" id="1015" /> +</COMPONENT> + +<COMPONENT type="1011" id="1019" > +<cdparam x="446" y="768" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1017" /> +<TGConnectingPoint num="1" id="1018" /> +</COMPONENT> + +<COMPONENT type="1001" id="1021" > +<cdparam x="486" y="830" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1020" /> +</COMPONENT> + +<COMPONENT type="1006" id="1024" > +<cdparam x="904" y="1123" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1022" /> +<TGConnectingPoint num="1" id="1023" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1033" > +<cdparam x="884" y="1068" /> +<sizeparam width="108" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of Fin +" /> +<TGConnectingPoint num="0" id="1025" /> +<TGConnectingPoint num="1" id="1026" /> +<TGConnectingPoint num="2" id="1027" /> +<TGConnectingPoint num="3" id="1028" /> +<TGConnectingPoint num="4" id="1029" /> +<TGConnectingPoint num="5" id="1030" /> +<TGConnectingPoint num="6" id="1031" /> +<TGConnectingPoint num="7" id="1032" /> +<extraparam> +<Line value="send Ack of Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1036" > +<cdparam x="893" y="1234" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =9" /> +<TGConnectingPoint num="0" id="1034" /> +<TGConnectingPoint num="1" id="1035" /> +</COMPONENT> + +<COMPONENT type="1001" id="1038" > +<cdparam x="933" y="1311" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1037" /> +</COMPONENT> + +<COMPONENT type="1006" id="1041" > +<cdparam x="1010" y="1155" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1039" /> +<TGConnectingPoint num="1" id="1040" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1050" > +<cdparam x="1000" y="1094" /> +<sizeparam width="108" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of Fin +" /> +<TGConnectingPoint num="0" id="1042" /> +<TGConnectingPoint num="1" id="1043" /> +<TGConnectingPoint num="2" id="1044" /> +<TGConnectingPoint num="3" id="1045" /> +<TGConnectingPoint num="4" id="1046" /> +<TGConnectingPoint num="5" id="1047" /> +<TGConnectingPoint num="6" id="1048" /> +<TGConnectingPoint num="7" id="1049" /> +<extraparam> +<Line value="send Ack of Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1053" > +<cdparam x="999" y="1266" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =7" /> +<TGConnectingPoint num="0" id="1051" /> +<TGConnectingPoint num="1" id="1052" /> +</COMPONENT> + +<COMPONENT type="1001" id="1055" > +<cdparam x="1039" y="1341" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1054" /> +</COMPONENT> + +<COMPONENT type="1006" id="1058" > +<cdparam x="683" y="758" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1056" /> +<TGConnectingPoint num="1" id="1057" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1060" > +<cdparam x="712" y="865" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1059" /> +</COMPONENT> + +<COMPONENT type="1007" id="1063" > +<cdparam x="93" y="1100" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1061" /> +<TGConnectingPoint num="1" id="1062" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1066" > +<cdparam x="104" y="1167" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1064" /> +<TGConnectingPoint num="1" id="1065" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1068" > +<cdparam x="122" y="1236" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1067" /> +</COMPONENT> + +<COMPONENT type="1007" id="1071" > +<cdparam x="190" y="1102" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1069" /> +<TGConnectingPoint num="1" id="1070" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1074" > +<cdparam x="201" y="1169" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1072" /> +<TGConnectingPoint num="1" id="1073" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1077" > +<cdparam x="307" y="1106" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1075" /> +<TGConnectingPoint num="1" id="1076" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1080" > +<cdparam x="318" y="1173" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1078" /> +<TGConnectingPoint num="1" id="1079" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1083" > +<cdparam x="399" y="1090" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1081" /> +<TGConnectingPoint num="1" id="1082" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1086" > +<cdparam x="410" y="1159" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1084" /> +<TGConnectingPoint num="1" id="1085" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1089" > +<cdparam x="72" y="861" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1087" /> +<TGConnectingPoint num="1" id="1088" /> +</COMPONENT> + +<COMPONENT type="1011" id="1092" > +<cdparam x="170" y="940" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1090" /> +<TGConnectingPoint num="1" id="1091" /> +</COMPONENT> + +<COMPONENT type="1011" id="1095" > +<cdparam x="379" y="865" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1093" /> +<TGConnectingPoint num="1" id="1094" /> +</COMPONENT> + +<COMPONENT type="1011" id="1098" > +<cdparam x="286" y="831" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1096" /> +<TGConnectingPoint num="1" id="1097" /> +</COMPONENT> + +<COMPONENT type="1008" id="1101" > +<cdparam x="206" y="1052" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1099" /> +<TGConnectingPoint num="1" id="1100" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1104" > +<cdparam x="323" y="962" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1102" /> +<TGConnectingPoint num="1" id="1103" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1107" > +<cdparam x="415" y="983" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1105" /> +<TGConnectingPoint num="1" id="1106" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1110" > +<cdparam x="109" y="986" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1108" /> +<TGConnectingPoint num="1" id="1109" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1113" > +<cdparam x="699" y="813" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1111" /> +<TGConnectingPoint num="1" id="1112" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1116" > +<cdparam x="775" y="1141" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1114" /> +<TGConnectingPoint num="1" id="1115" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1119" > +<cdparam x="920" y="1178" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1117" /> +<TGConnectingPoint num="1" id="1118" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1122" > +<cdparam x="1026" y="1211" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1120" /> +<TGConnectingPoint num="1" id="1121" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1124" > +<cdparam x="612" y="762" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1123" /> +</COMPONENT> + +<COMPONENT type="1001" id="1126" > +<cdparam x="899" y="922" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1125" /> +</COMPONENT> + +<COMPONENT type="1006" id="1129" > +<cdparam x="1169" y="1214" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1127" /> +<TGConnectingPoint num="1" id="1128" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1138" > +<cdparam x="1159" y="1153" /> +<sizeparam width="108" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of Fin +" /> +<TGConnectingPoint num="0" id="1130" /> +<TGConnectingPoint num="1" id="1131" /> +<TGConnectingPoint num="2" id="1132" /> +<TGConnectingPoint num="3" id="1133" /> +<TGConnectingPoint num="4" id="1134" /> +<TGConnectingPoint num="5" id="1135" /> +<TGConnectingPoint num="6" id="1136" /> +<TGConnectingPoint num="7" id="1137" /> +<extraparam> +<Line value="send Ack of Fin" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1141" > +<cdparam x="1158" y="1295" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =8" /> +<TGConnectingPoint num="0" id="1139" /> +<TGConnectingPoint num="1" id="1140" /> +</COMPONENT> + +<COMPONENT type="1001" id="1143" > +<cdparam x="1197" y="1471" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1142" /> +</COMPONENT> + +<COMPONENT type="1011" id="1146" > +<cdparam x="1157" y="1402" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1144" /> +<TGConnectingPoint num="1" id="1145" /> +</COMPONENT> + +<COMPONENT type="1008" id="1149" > +<cdparam x="1185" y="1351" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1147" /> +<TGConnectingPoint num="1" id="1148" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1151" > +<cdparam x="1277" y="1070" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1150" /> +</COMPONENT> + +<COMPONENT type="1001" id="1153" > +<cdparam x="1519" y="1457" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1152" /> +</COMPONENT> + +<COMPONENT type="1006" id="1156" > +<cdparam x="1489" y="1132" /> +<sizeparam width="80" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoA(1)" /> +<TGConnectingPoint num="0" id="1154" /> +<TGConnectingPoint num="1" id="1155" /> +<extraparam> +<Data channelName="fromTtoA" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1159" > +<cdparam x="1490" y="1348" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1157" /> +<TGConnectingPoint num="1" id="1158" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1162" > +<cdparam x="1710" y="1026" /> +<sizeparam width="43" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="stop()" /> +<TGConnectingPoint num="0" id="1160" /> +<TGConnectingPoint num="1" id="1161" /> +<extraparam> +<Data eventName="stop" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1171" > +<cdparam x="1759" y="1192" /> +<sizeparam width="86" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Correct ack +" /> +<TGConnectingPoint num="0" id="1163" /> +<TGConnectingPoint num="1" id="1164" /> +<TGConnectingPoint num="2" id="1165" /> +<TGConnectingPoint num="3" id="1166" /> +<TGConnectingPoint num="4" id="1167" /> +<TGConnectingPoint num="5" id="1168" /> +<TGConnectingPoint num="6" id="1169" /> +<TGConnectingPoint num="7" id="1170" /> +<extraparam> +<Line value="Correct ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1180" > +<cdparam x="1635" y="1168" /> +<sizeparam width="71" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="false ack +" /> +<TGConnectingPoint num="0" id="1172" /> +<TGConnectingPoint num="1" id="1173" /> +<TGConnectingPoint num="2" id="1174" /> +<TGConnectingPoint num="3" id="1175" /> +<TGConnectingPoint num="4" id="1176" /> +<TGConnectingPoint num="5" id="1177" /> +<TGConnectingPoint num="6" id="1178" /> +<TGConnectingPoint num="7" id="1179" /> +<extraparam> +<Line value="false ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1183" > +<cdparam x="1602" y="1299" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1181" /> +<TGConnectingPoint num="1" id="1182" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1185" > +<cdparam x="1632" y="1468" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1184" /> +</COMPONENT> + +<COMPONENT type="301" id="1194" > +<cdparam x="1469" y="1295" /> +<sizeparam width="127" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="return acknowldge +" /> +<TGConnectingPoint num="0" id="1186" /> +<TGConnectingPoint num="1" id="1187" /> +<TGConnectingPoint num="2" id="1188" /> +<TGConnectingPoint num="3" id="1189" /> +<TGConnectingPoint num="4" id="1190" /> +<TGConnectingPoint num="5" id="1191" /> +<TGConnectingPoint num="6" id="1192" /> +<TGConnectingPoint num="7" id="1193" /> +<extraparam> +<Line value="return acknowldge" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1203" > +<cdparam x="1620" y="927" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="data +" /> +<TGConnectingPoint num="0" id="1195" /> +<TGConnectingPoint num="1" id="1196" /> +<TGConnectingPoint num="2" id="1197" /> +<TGConnectingPoint num="3" id="1198" /> +<TGConnectingPoint num="4" id="1199" /> +<TGConnectingPoint num="5" id="1200" /> +<TGConnectingPoint num="6" id="1201" /> +<TGConnectingPoint num="7" id="1202" /> +<extraparam> +<Line value="data" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1206" > +<cdparam x="1506" y="1405" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1204" /> +<TGConnectingPoint num="1" id="1205" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1209" > +<cdparam x="1619" y="1348" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1207" /> +<TGConnectingPoint num="1" id="1208" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1212" > +<cdparam x="1614" y="1404" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1210" /> +<TGConnectingPoint num="1" id="1211" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1214" > +<cdparam x="1730" y="1335" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1213" /> +</COMPONENT> + +<COMPONENT type="1011" id="1217" > +<cdparam x="1776" y="1349" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =4" /> +<TGConnectingPoint num="0" id="1215" /> +<TGConnectingPoint num="1" id="1216" /> +</COMPONENT> + +<COMPONENT type="1001" id="1219" > +<cdparam x="1818" y="1457" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1218" /> +</COMPONENT> + +<COMPONENT type="1011" id="1222" > +<cdparam x="1870" y="1411" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =6" /> +<TGConnectingPoint num="0" id="1220" /> +<TGConnectingPoint num="1" id="1221" /> +</COMPONENT> + +<COMPONENT type="1001" id="1224" > +<cdparam x="1910" y="1481" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1223" /> +</COMPONENT> + +<COMPONENT type="1001" id="1226" > +<cdparam x="1986" y="1543" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1225" /> +</COMPONENT> + +<COMPONENT type="1011" id="1229" > +<cdparam x="2051" y="1466" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1227" /> +<TGConnectingPoint num="1" id="1228" /> +</COMPONENT> + +<COMPONENT type="1001" id="1231" > +<cdparam x="2091" y="1537" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1230" /> +</COMPONENT> + +<COMPONENT type="1011" id="1234" > +<cdparam x="1946" y="1493" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =0" /> +<TGConnectingPoint num="0" id="1232" /> +<TGConnectingPoint num="1" id="1233" /> +</COMPONENT> + +<COMPONENT type="1011" id="1237" > +<cdparam x="1946" y="1434" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =8" /> +<TGConnectingPoint num="0" id="1235" /> +<TGConnectingPoint num="1" id="1236" /> +</COMPONENT> + +<COMPONENT type="301" id="1246" > +<cdparam x="1825" y="889" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="Syn +" /> +<TGConnectingPoint num="0" id="1238" /> +<TGConnectingPoint num="1" id="1239" /> +<TGConnectingPoint num="2" id="1240" /> +<TGConnectingPoint num="3" id="1241" /> +<TGConnectingPoint num="4" id="1242" /> +<TGConnectingPoint num="5" id="1243" /> +<TGConnectingPoint num="6" id="1244" /> +<TGConnectingPoint num="7" id="1245" /> +<extraparam> +<Line value="Syn" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1255" > +<cdparam x="1707" y="945" /> +<sizeparam width="50" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="ack +" /> +<TGConnectingPoint num="0" id="1247" /> +<TGConnectingPoint num="1" id="1248" /> +<TGConnectingPoint num="2" id="1249" /> +<TGConnectingPoint num="3" id="1250" /> +<TGConnectingPoint num="4" id="1251" /> +<TGConnectingPoint num="5" id="1252" /> +<TGConnectingPoint num="6" id="1253" /> +<TGConnectingPoint num="7" id="1254" /> +<extraparam> +<Line value="ack" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1258" > +<cdparam x="2179" y="1198" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1256" /> +<TGConnectingPoint num="1" id="1257" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1260" > +<cdparam x="2207" y="1483" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1259" /> +</COMPONENT> + +<COMPONENT type="1007" id="1263" > +<cdparam x="2178" y="1298" /> +<sizeparam width="78" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send request" value="req_Timer()" /> +<TGConnectingPoint num="0" id="1261" /> +<TGConnectingPoint num="1" id="1262" /> +<extraparam> +<Data requestName="req_Timer" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1266" > +<cdparam x="2189" y="1365" /> +<sizeparam width="56" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="temp(1)" /> +<TGConnectingPoint num="0" id="1264" /> +<TGConnectingPoint num="1" id="1265" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1269" > +<cdparam x="2158" y="1136" /> +<sizeparam width="121" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="seqi = seqi + wind" /> +<TGConnectingPoint num="0" id="1267" /> +<TGConnectingPoint num="1" id="1268" /> +</COMPONENT> + +<COMPONENT type="1008" id="1272" > +<cdparam x="2194" y="1248" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1270" /> +<TGConnectingPoint num="1" id="1271" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1275" > +<cdparam x="2167" y="1424" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =2" /> +<TGConnectingPoint num="0" id="1273" /> +<TGConnectingPoint num="1" id="1274" /> +</COMPONENT> + +<COMPONENT type="1006" id="1278" > +<cdparam x="2302" y="1122" /> +<sizeparam width="79" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="write channel" value="fromTtoP(1)" /> +<TGConnectingPoint num="0" id="1276" /> +<TGConnectingPoint num="1" id="1277" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1287" > +<cdparam x="2283" y="1065" /> +<sizeparam width="114" height="35" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="UML Note" value="send Ack of SYN +" /> +<TGConnectingPoint num="0" id="1279" /> +<TGConnectingPoint num="1" id="1280" /> +<TGConnectingPoint num="2" id="1281" /> +<TGConnectingPoint num="3" id="1282" /> +<TGConnectingPoint num="4" id="1283" /> +<TGConnectingPoint num="5" id="1284" /> +<TGConnectingPoint num="6" id="1285" /> +<TGConnectingPoint num="7" id="1286" /> +<extraparam> +<Line value="send Ack of SYN" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1011" id="1290" > +<cdparam x="2291" y="1267" /> +<sizeparam width="100" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="action state" value="tcpctrl.state =2" /> +<TGConnectingPoint num="0" id="1288" /> +<TGConnectingPoint num="1" id="1289" /> +</COMPONENT> + +<COMPONENT type="1001" id="1292" > +<cdparam x="2330" y="1324" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1291" /> +</COMPONENT> + +<COMPONENT type="1008" id="1295" > +<cdparam x="2318" y="1199" /> +<sizeparam width="46" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="send()" /> +<TGConnectingPoint num="0" id="1293" /> +<TGConnectingPoint num="1" id="1294" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1297" > +<cdparam x="1649" y="1057" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1296" /> +</COMPONENT> + +<COMPONENT type="1001" id="1299" > +<cdparam x="2168" y="1421" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1298" /> +</COMPONENT> + +<COMPONENT type="1001" id="1301" > +<cdparam x="2268" y="1039" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1300" /> +</COMPONENT> + +<COMPONENT type="1008" id="1304" > +<cdparam x="1465" y="1192" /> +<sizeparam width="129" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="send event" value="receive_Application()" /> +<TGConnectingPoint num="0" id="1302" /> +<TGConnectingPoint num="1" id="1303" /> +<extraparam> +<Data eventName="receive_Application" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="1307" > +<cdparam x="1701" y="1086" /> +<sizeparam width="60" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="2900" minY="10" maxY="1900" /> +<infoparam name="read channel" value="temp(1) " /> +<TGConnectingPoint num="0" id="1305" /> +<TGConnectingPoint num="1" id="1306" /> +<extraparam> +<Data channelName="temp" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<CONNECTOR type="115" id="1308" > +<cdparam x="1048" y="795" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1048" y="795" id="818" /> +<P2 x="1728" y="865" id="740" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1309" > +<cdparam x="1048" y="795" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1089" y="954" id="790" /> +<P2 x="1208" y="1010" id="760" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1310" > +<cdparam x="1008" y="610" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to execI" value="null" /> +<P1 x="1008" y="610" id="886" /> +<P2 x="1008" y="696" id="822" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1311" > +<cdparam x="722" y="614" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to execI" value="null" /> +<P1 x="722" y="614" id="901" /> +<P2 x="722" y="689" id="778" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1312" > +<cdparam x="504" y="597" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="504" y="597" id="858" /> +<P2 x="572" y="702" id="772" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1313" > +<cdparam x="464" y="637" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="464" y="637" id="859" /> +<P2 x="439" y="778" id="826" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1314" > +<cdparam x="424" y="597" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="424" y="597" id="857" /> +<P2 x="346" y="759" id="806" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1315" > +<cdparam x="289" y="619" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to read channel" value="null" /> +<P1 x="289" y="619" id="867" /> +<P2 x="230" y="803" id="947" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1316" > +<cdparam x="249" y="579" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="249" y="579" id="865" /> +<P2 x="132" y="789" id="810" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1317" > +<cdparam x="371" y="93" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to notified event" value="null" /> +<P1 x="319" y="93" id="889" /> +<P2 x="374" y="128" id="897" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1318" > +<cdparam x="234" y="169" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="234" y="169" id="895" /> +<P2 x="234" y="202" id="892" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1319" > +<cdparam x="234" y="104" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to action state" value="null" /> +<P1 x="234" y="104" id="890" /> +<P2 x="234" y="139" id="894" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1320" > +<cdparam x="234" y="47" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to for loop" value="null" /> +<P1 x="234" y="47" id="869" /> +<P2 x="234" y="74" id="888" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1321" > +<cdparam x="425" y="162" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from notified event to choice" value="null" /> +<P1 x="374" y="158" id="898" /> +<P2 x="374" y="182" id="848" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1322" > +<cdparam x="564" y="482" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="464" y="322" id="924" /> +<P2 x="722" y="529" id="903" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1323" > +<cdparam x="722" y="559" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="722" y="559" id="904" /> +<P2 x="722" y="584" id="900" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1324" > +<cdparam x="604" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="504" y="282" id="920" /> +<P2 x="1008" y="523" id="906" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1325" > +<cdparam x="1007" y="553" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="1008" y="553" id="907" /> +<P2 x="1008" y="580" id="885" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1326" > +<cdparam x="524" y="442" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="464" y="322" id="921" /> +<P2 x="464" y="487" id="909" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1327" > +<cdparam x="330" y="428" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="424" y="282" id="922" /> +<P2 x="289" y="463" id="912" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1328" > +<cdparam x="318" y="520" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to choice" value="null" /> +<P1 x="289" y="493" id="913" /> +<P2 x="289" y="554" id="864" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1329" > +<cdparam x="160" y="481" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="148" y="501" id="841" /> +<P2 x="126" y="544" id="880" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1330" > +<cdparam x="290" y="388" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="424" y="282" id="919" /> +<P2 x="188" y="414" id="915" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1331" > +<cdparam x="229" y="467" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to choice" value="null" /> +<P1 x="188" y="444" id="916" /> +<P2 x="188" y="476" id="840" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1332" > +<cdparam x="228" y="501" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="228" y="501" id="842" /> +<P2 x="236" y="524" id="929" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1333" > +<cdparam x="334" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to wait event" value="null" /> +<P1 x="334" y="207" id="849" /> +<P2 x="301" y="223" id="933" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1334" > +<cdparam x="301" y="253" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to stop state" value="null" /> +<P1 x="301" y="253" id="934" /> +<P2 x="301" y="285" id="936" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1335" > +<cdparam x="464" y="517" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to choice" value="null" /> +<P1 x="464" y="517" id="910" /> +<P2 x="464" y="572" id="856" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1336" > +<cdparam x="329" y="579" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="329" y="579" id="866" /> +<P2 x="353" y="609" id="931" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1337" > +<cdparam x="126" y="574" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="126" y="574" id="881" /> +<P2 x="126" y="610" id="883" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1338" > +<cdparam x="414" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to select" value="null" /> +<P1 x="414" y="207" id="850" /> +<P2 x="464" y="257" id="918" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1339" > +<cdparam x="230" y="833" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to execI" value="null" /> +<P1 x="230" y="833" id="948" /> +<P2 x="230" y="858" id="830" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1340" > +<cdparam x="716" y="749" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="968" y="795" id="817" /> +<P2 x="843" y="859" id="800" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1341" > +<cdparam x="720" y="1074" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="728" y="990" id="989" /> +<P2 x="728" y="1027" id="991" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1342" > +<cdparam x="733" y="899" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="803" y="884" id="801" /> +<P2 x="728" y="960" id="988" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1343" > +<cdparam x="800" y="938" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="843" y="924" id="803" /> +<P2 x="800" y="1004" id="794" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1344" > +<cdparam x="800" y="1057" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="800" y="1044" id="795" /> +<P2 x="800" y="1081" id="993" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1345" > +<cdparam x="132" y="886" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="132" y="886" id="1088" /> +<P2 x="132" y="933" id="963" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1346" > +<cdparam x="943" y="1061" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="943" y="1060" id="783" /> +<P2 x="943" y="1118" id="1022" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1347" > +<cdparam x="1049" y="1093" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1049" y="1092" id="835" /> +<P2 x="1049" y="1150" id="1039" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1348" > +<cdparam x="1049" y="994" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1049" y="994" id="791" /> +<P2 x="1049" y="1052" id="834" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1349" > +<cdparam x="696" y="742" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="722" y="729" id="779" /> +<P2 x="722" y="753" id="1056" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1350" > +<cdparam x="132" y="1125" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="132" y="1125" id="1062" /> +<P2 x="132" y="1162" id="1064" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1351" > +<cdparam x="132" y="1192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="132" y="1192" id="1065" /> +<P2 x="132" y="1231" id="1067" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1352" > +<cdparam x="132" y="1066" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send request" value="null" /> +<P1 x="132" y="1066" id="961" /> +<P2 x="132" y="1095" id="1061" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1353" > +<cdparam x="229" y="1127" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="229" y="1127" id="1070" /> +<P2 x="229" y="1164" id="1072" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1354" > +<cdparam x="346" y="1131" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="346" y="1131" id="1076" /> +<P2 x="346" y="1168" id="1078" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1355" > +<cdparam x="346" y="1051" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send request" value="null" /> +<P1 x="346" y="1051" id="967" /> +<P2 x="346" y="1101" id="1075" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1356" > +<cdparam x="437" y="1118" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="438" y="1115" id="1082" /> +<P2 x="438" y="1154" id="1084" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1357" > +<cdparam x="438" y="1057" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send request" value="null" /> +<P1 x="438" y="1057" id="956" /> +<P2 x="438" y="1085" id="1081" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1358" > +<cdparam x="132" y="808" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="132" y="829" id="811" /> +<P2 x="132" y="856" id="1087" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1359" > +<cdparam x="230" y="898" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="230" y="898" id="831" /> +<P2 x="230" y="935" id="1090" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1360" > +<cdparam x="230" y="965" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="230" y="965" id="1091" /> +<P2 x="230" y="997" id="950" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1361" > +<cdparam x="346" y="799" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="346" y="799" id="807" /> +<P2 x="346" y="826" id="1096" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1362" > +<cdparam x="346" y="856" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="346" y="856" id="1097" /> +<P2 x="346" y="895" id="974" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1363" > +<cdparam x="439" y="818" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="439" y="818" id="827" /> +<P2 x="439" y="860" id="1093" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1364" > +<cdparam x="439" y="890" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="439" y="890" id="1094" /> +<P2 x="439" y="936" id="971" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1365" > +<cdparam x="132" y="963" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="132" y="963" id="964" /> +<P2 x="132" y="981" id="1108" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1366" > +<cdparam x="132" y="1011" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="132" y="1011" id="1109" /> +<P2 x="132" y="1036" id="960" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1367" > +<cdparam x="230" y="1027" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="230" y="1027" id="951" /> +<P2 x="229" y="1047" id="1099" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1368" > +<cdparam x="228" y="1088" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send request" value="null" /> +<P1 x="229" y="1077" id="1100" /> +<P2 x="229" y="1097" id="1069" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1369" > +<cdparam x="346" y="925" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="346" y="925" id="975" /> +<P2 x="346" y="957" id="1102" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1370" > +<cdparam x="348" y="987" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="346" y="987" id="1103" /> +<P2 x="346" y="1021" id="966" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1371" > +<cdparam x="439" y="966" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="439" y="966" id="972" /> +<P2 x="438" y="978" id="1105" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1372" > +<cdparam x="438" y="1008" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="438" y="1008" id="1106" /> +<P2 x="438" y="1027" id="955" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1373" > +<cdparam x="722" y="783" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="722" y="783" id="1057" /> +<P2 x="722" y="808" id="1111" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1374" > +<cdparam x="722" y="838" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="722" y="838" id="1112" /> +<P2 x="722" y="860" id="1059" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1375" > +<cdparam x="800" y="1111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="800" y="1111" id="994" /> +<P2 x="798" y="1136" id="1114" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1376" > +<cdparam x="798" y="1166" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="798" y="1166" id="1115" /> +<P2 x="799" y="1188" id="1014" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1377" > +<cdparam x="943" y="1148" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="943" y="1148" id="1023" /> +<P2 x="943" y="1173" id="1117" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1378" > +<cdparam x="950" y="1201" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="943" y="1203" id="1118" /> +<P2 x="943" y="1229" id="1034" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1379" > +<cdparam x="1049" y="1180" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1049" y="1180" id="1040" /> +<P2 x="1049" y="1206" id="1120" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1380" > +<cdparam x="1049" y="1223" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="1049" y="1236" id="1121" /> +<P2 x="1049" y="1261" id="1051" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1381" > +<cdparam x="883" y="884" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="883" y="884" id="802" /> +<P2 x="909" y="917" id="1125" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1382" > +<cdparam x="612" y="727" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="612" y="727" id="774" /> +<P2 x="622" y="757" id="1123" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1383" > +<cdparam x="532" y="727" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="532" y="727" id="773" /> +<P2 x="496" y="763" id="1017" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1384" > +<cdparam x="799" y="1218" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="799" y="1218" id="1015" /> +<P2 x="799" y="1265" id="977" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1385" > +<cdparam x="1009" y="954" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1009" y="954" id="789" /> +<P2 x="943" y="1020" id="782" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1386" > +<cdparam x="229" y="1194" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="229" y="1194" id="1073" /> +<P2 x="229" y="1232" id="953" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1387" > +<cdparam x="346" y="1198" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="346" y="1198" id="1079" /> +<P2 x="344" y="1224" id="969" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1388" > +<cdparam x="438" y="1184" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="438" y="1184" id="1085" /> +<P2 x="438" y="1208" id="958" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1389" > +<cdparam x="496" y="793" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="496" y="793" id="1018" /> +<P2 x="496" y="825" id="1020" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1390" > +<cdparam x="943" y="1259" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="943" y="1259" id="1035" /> +<P2 x="943" y="1306" id="1037" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1391" > +<cdparam x="1008" y="736" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to choice" value="null" /> +<P1 x="1008" y="736" id="823" /> +<P2 x="1008" y="770" id="816" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1392" > +<cdparam x="1008" y="835" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1008" y="835" id="819" /> +<P2 x="1049" y="929" id="788" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1393" > +<cdparam x="1049" y="1291" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1049" y="1291" id="1052" /> +<P2 x="1049" y="1336" id="1054" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1394" > +<cdparam x="1208" y="1152" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1208" y="1142" id="767" /> +<P2 x="1208" y="1209" id="1127" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1395" > +<cdparam x="1208" y="1239" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to action state" value="null" /> +<P1 x="1208" y="1239" id="1128" /> +<P2 x="1208" y="1290" id="1139" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1396" > +<cdparam x="1208" y="1320" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to send event" value="null" /> +<P1 x="1208" y="1320" id="1140" /> +<P2 x="1208" y="1346" id="1147" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1397" > +<cdparam x="1206" y="1385" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to action state" value="null" /> +<P1 x="1208" y="1376" id="1148" /> +<P2 x="1207" y="1397" id="1144" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1398" > +<cdparam x="1206" y="1088" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1208" y="1075" id="763" /> +<P2 x="1208" y="1102" id="766" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1399" > +<cdparam x="1248" y="1035" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="1248" y="1035" id="762" /> +<P2 x="1287" y="1065" id="1150" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1400" > +<cdparam x="1207" y="1427" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1207" y="1427" id="1145" /> +<P2 x="1207" y="1466" id="1142" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1401" > +<cdparam x="1553" y="1019" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1567" y="1021" id="733" /> +<P2 x="1529" y="1059" id="726" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1402" > +<cdparam x="1529" y="1324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1529" y="1289" id="723" /> +<P2 x="1529" y="1343" id="1157" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1403" > +<cdparam x="1684" y="929" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="1728" y="930" id="743" /> +<P2 x="1731" y="1021" id="1160" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1404" > +<cdparam x="1615" y="1283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1641" y="1270" id="747" /> +<P2 x="1641" y="1294" id="1181" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1405" > +<cdparam x="1641" y="1324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1641" y="1324" id="1182" /> +<P2 x="1642" y="1343" id="1207" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1406" > +<cdparam x="1529" y="1373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1529" y="1373" id="1158" /> +<P2 x="1529" y="1400" id="1204" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1407" > +<cdparam x="1529" y="1422" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="1529" y="1430" id="1205" /> +<P2 x="1529" y="1452" id="1152" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1408" > +<cdparam x="1642" y="1373" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="1642" y="1373" id="1208" /> +<P2 x="1642" y="1399" id="1210" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1409" > +<cdparam x="1956" y="1361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="1956" y="1361" id="701" /> +<P2 x="1920" y="1406" id="1220" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1410" > +<cdparam x="2100" y="1490" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="2101" y="1491" id="1228" /> +<P2 x="2101" y="1532" id="1230" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1411" > +<cdparam x="1996" y="1401" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="1996" y="1401" id="703" /> +<P2 x="1996" y="1429" id="1235" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1412" > +<cdparam x="1996" y="1459" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="1996" y="1459" id="1236" /> +<P2 x="1996" y="1488" id="1232" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1413" > +<cdparam x="2021" y="1038" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="2237" y="966" id="693" /> +<P2 x="2218" y="1054" id="750" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1414" > +<cdparam x="2217" y="1323" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to write channel" value="null" /> +<P1 x="2217" y="1323" id="1262" /> +<P2 x="2217" y="1360" id="1264" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1415" > +<cdparam x="2218" y="1094" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to action state" value="null" /> +<P1 x="2218" y="1094" id="751" /> +<P2 x="2218" y="1131" id="1267" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1416" > +<cdparam x="2218" y="1161" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to write channel" value="null" /> +<P1 x="2218" y="1161" id="1268" /> +<P2 x="2218" y="1193" id="1256" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1417" > +<cdparam x="2218" y="1223" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="2218" y="1223" id="1257" /> +<P2 x="2217" y="1243" id="1270" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1418" > +<cdparam x="2216" y="1284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send request" value="null" /> +<P1 x="2217" y="1273" id="1271" /> +<P2 x="2217" y="1293" id="1261" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1419" > +<cdparam x="2217" y="1390" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to action state" value="null" /> +<P1 x="2217" y="1390" id="1265" /> +<P2 x="2217" y="1419" id="1273" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1420" > +<cdparam x="2341" y="1060" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="2341" y="1059" id="755" /> +<P2 x="2341" y="1117" id="1276" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1421" > +<cdparam x="1529" y="1099" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from execI to write channel" value="null" /> +<P1 x="1529" y="1099" id="727" /> +<P2 x="1529" y="1127" id="1154" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1422" > +<cdparam x="2101" y="1433" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="2101" y="1433" id="687" /> +<P2 x="2101" y="1461" id="1227" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1423" > +<cdparam x="2158" y="1460" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="2141" y="1393" id="686" /> +<P2 x="2178" y="1416" id="1298" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1424" > +<cdparam x="1688" y="890" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1688" y="890" id="741" /> +<P2 x="1607" y="996" id="732" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1425" > +<cdparam x="1768" y="890" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1768" y="890" id="742" /> +<P2 x="2277" y="941" id="692" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1426" > +<cdparam x="2317" y="966" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="2317" y="966" id="694" /> +<P2 x="2341" y="1019" id="754" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1427" > +<cdparam x="2341" y="1147" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="2341" y="1147" id="1277" /> +<P2 x="2341" y="1194" id="1293" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1428" > +<cdparam x="2341" y="1224" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send event" value="null" /> +<P1 x="2341" y="1224" id="1294" /> +<P2 x="2341" y="1262" id="1288" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1429" > +<cdparam x="1731" y="1051" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to choice" value="null" /> +<P1 x="1731" y="1051" id="1161" /> +<P2 x="1731" y="1081" id="1305" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1430" > +<cdparam x="1647" y="1021" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="1647" y="1021" id="734" /> +<P2 x="1659" y="1052" id="1296" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1431" > +<cdparam x="1826" y="1324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="1826" y="1324" id="711" /> +<P2 x="1826" y="1344" id="1215" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1432" > +<cdparam x="1826" y="1374" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1826" y="1374" id="1216" /> +<P2 x="1828" y="1452" id="1218" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1433" > +<cdparam x="1786" y="1284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="1786" y="1284" id="709" /> +<P2 x="1740" y="1330" id="1213" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1434" > +<cdparam x="1920" y="1436" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1920" y="1436" id="1221" /> +<P2 x="1920" y="1476" id="1223" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1435" > +<cdparam x="1996" y="1518" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="1996" y="1518" id="1233" /> +<P2 x="1996" y="1538" id="1225" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1436" > +<cdparam x="2036" y="1361" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="2036" y="1361" id="702" /> +<P2 x="2101" y="1368" id="684" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1437" > +<cdparam x="1866" y="1284" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1866" y="1284" id="710" /> +<P2 x="1996" y="1336" id="700" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1438" > +<cdparam x="2341" y="1292" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="2341" y="1292" id="1289" /> +<P2 x="2340" y="1319" id="1291" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1439" > +<cdparam x="2217" y="1449" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="2217" y="1449" id="1274" /> +<P2 x="2217" y="1478" id="1259" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1440" > +<cdparam x="2277" y="1006" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to stop state" value="null" /> +<P1 x="2277" y="1006" id="695" /> +<P2 x="2278" y="1034" id="1300" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1441" > +<cdparam x="1642" y="1429" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="1642" y="1429" id="1211" /> +<P2 x="1642" y="1463" id="1184" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1442" > +<cdparam x="1529" y="1157" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="1529" y="1157" id="1155" /> +<P2 x="1529" y="1187" id="1302" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1443" > +<cdparam x="1529" y="1217" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to execI" value="null" /> +<P1 x="1529" y="1217" id="1303" /> +<P2 x="1529" y="1249" id="722" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1444" > +<cdparam x="1691" y="1156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to execI" value="null" /> +<P1 x="1691" y="1156" id="717" /> +<P2 x="1641" y="1230" id="746" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1445" > +<cdparam x="1771" y="1156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to choice" value="null" /> +<P1 x="1771" y="1156" id="718" /> +<P2 x="1826" y="1259" id="708" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1446" > +<cdparam x="1731" y="1111" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to choice" value="null" /> +<P1 x="1731" y="1111" id="1306" /> +<P2 x="1731" y="1131" id="716" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="Application" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1012" id="1454" > +<cdparam x="491" y="277" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="1450" /> +<TGConnectingPoint num="1" id="1451" /> +<TGConnectingPoint num="2" id="1452" /> +<TGConnectingPoint num="3" id="1453" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="1447" > +<father id="1454" num="0" /> +<cdparam x="466" y="287" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1448" > +<father id="1454" num="1" /> +<cdparam x="526" y="287" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1449" > +<father id="1454" num="2" /> +<cdparam x="511" y="322" /> +<sizeparam width="12" height="15" minWidth="10" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="1000" id="1456" > +<cdparam x="501" y="91" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1455" /> +</COMPONENT> + +<COMPONENT type="1008" id="1459" > +<cdparam x="485" y="129" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="open()" /> +<TGConnectingPoint num="0" id="1457" /> +<TGConnectingPoint num="1" id="1458" /> +<extraparam> +<Data eventName="open" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1462" > +<cdparam x="468" y="178" /> +<sizeparam width="80" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromAtoT(1)" /> +<TGConnectingPoint num="0" id="1460" /> +<TGConnectingPoint num="1" id="1461" /> +<extraparam> +<Data channelName="fromAtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1465" > +<cdparam x="470" y="226" /> +<sizeparam width="75" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="send_TCP()" /> +<TGConnectingPoint num="0" id="1463" /> +<TGConnectingPoint num="1" id="1464" /> +<extraparam> +<Data eventName="send_TCP" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1467" > +<cdparam x="576" y="388" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1466" /> +</COMPONENT> + +<COMPONENT type="1008" id="1470" > +<cdparam x="562" y="329" /> +<sizeparam width="49" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="abort()" /> +<TGConnectingPoint num="0" id="1468" /> +<TGConnectingPoint num="1" id="1469" /> +<extraparam> +<Data eventName="abort" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1473" > +<cdparam x="409" y="337" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="close()" /> +<TGConnectingPoint num="0" id="1471" /> +<TGConnectingPoint num="1" id="1472" /> +<extraparam> +<Data eventName="close" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1475" > +<cdparam x="422" y="386" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1474" /> +</COMPONENT> + +<CONNECTOR type="115" id="1476" > +<cdparam x="509" y="94" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to send event" value="null" /> +<P1 x="508" y="111" id="1455" /> +<P2 x="508" y="124" id="1457" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1477" > +<cdparam x="508" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="508" y="154" id="1458" /> +<P2 x="508" y="173" id="1460" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1478" > +<cdparam x="508" y="222" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to send event" value="null" /> +<P1 x="508" y="203" id="1461" /> +<P2 x="507" y="221" id="1463" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1479" > +<cdparam x="586" y="354" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="586" y="354" id="1469" /> +<P2 x="586" y="383" id="1466" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1480" > +<cdparam x="508" y="298" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to choice" value="null" /> +<P1 x="507" y="251" id="1464" /> +<P2 x="506" y="267" id="1450" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1481" > +<cdparam x="470" y="348" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="466" y="292" id="1451" /> +<P2 x="432" y="332" id="1471" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1482" > +<cdparam x="432" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to stop state" value="null" /> +<P1 x="432" y="362" id="1472" /> +<P2 x="432" y="381" id="1474" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1483" > +<cdparam x="550" y="348" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to send event" value="null" /> +<P1 x="546" y="292" id="1452" /> +<P2 x="586" y="324" id="1468" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +<TMLActivityDiagramPanel name="SmartCard" minX="10" maxX="1400" minY="10" maxY="900" > +<COMPONENT type="1000" id="1485" > +<cdparam x="159" y="66" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="1484" /> +</COMPONENT> + +<COMPONENT type="1010" id="1488" > +<cdparam x="138" y="129" /> +<sizeparam width="57" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="reset() " /> +<TGConnectingPoint num="0" id="1486" /> +<TGConnectingPoint num="1" id="1487" /> +<accessibility /> +<extraparam> +<Data eventName="reset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1491" > +<cdparam x="108" y="182" /> +<sizeparam width="116" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="answerToReset()" /> +<TGConnectingPoint num="0" id="1489" /> +<TGConnectingPoint num="1" id="1490" /> +<extraparam> +<Data eventName="answerToReset" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="1494" > +<cdparam x="143" y="237" /> +<sizeparam width="47" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="pTS() " /> +<TGConnectingPoint num="0" id="1492" /> +<TGConnectingPoint num="1" id="1493" /> +<extraparam> +<Data eventName="pTS" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1497" > +<cdparam x="121" y="308" /> +<sizeparam width="90" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="pTSConfirm()" /> +<TGConnectingPoint num="0" id="1495" /> +<TGConnectingPoint num="1" id="1496" /> +<extraparam> +<Data eventName="pTSConfirm" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="301" id="1506" > +<cdparam x="376" y="98" /> +<sizeparam width="249" height="65" minWidth="50" minHeight="20" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="UML Note" value="The first two layers of the OSI model +are used to communicate between +the smart card and the terminal +" /> +<TGConnectingPoint num="0" id="1498" /> +<TGConnectingPoint num="1" id="1499" /> +<TGConnectingPoint num="2" id="1500" /> +<TGConnectingPoint num="3" id="1501" /> +<TGConnectingPoint num="4" id="1502" /> +<TGConnectingPoint num="5" id="1503" /> +<TGConnectingPoint num="6" id="1504" /> +<TGConnectingPoint num="7" id="1505" /> +<extraparam> +<Line value="The first two layers of the OSI model " /> +<Line value="are used to communicate between " /> +<Line value="the smart card and the terminal" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1509" > +<cdparam x="250" y="97" /> +<sizeparam width="96" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send request" value="start_TCP_IP()" /> +<TGConnectingPoint num="0" id="1507" /> +<TGConnectingPoint num="1" id="1508" /> +<extraparam> +<Data requestName="start_TCP_IP" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1007" id="1512" > +<cdparam x="236" y="148" /> +<sizeparam width="125" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send request" value="start_Application()" /> +<TGConnectingPoint num="0" id="1510" /> +<TGConnectingPoint num="1" id="1511" /> +<extraparam> +<Data requestName="start_Application" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1514" > +<cdparam x="515" y="428" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1513" /> +</COMPONENT> + +<COMPONENT type="1008" id="1517" > +<cdparam x="305" y="350" /> +<sizeparam width="115" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="data_Ready_SC()" /> +<TGConnectingPoint num="0" id="1515" /> +<TGConnectingPoint num="1" id="1516" /> +<extraparam> +<Data eventName="data_Ready_SC" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1519" > +<cdparam x="352" y="426" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1518" /> +</COMPONENT> + +<COMPONENT type="1009" id="1522" > +<cdparam x="318" y="308" /> +<sizeparam width="88" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="read channel" value="fromTtoP(1) " /> +<TGConnectingPoint num="0" id="1520" /> +<TGConnectingPoint num="1" id="1521" /> +<extraparam> +<Data channelName="fromTtoP" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="1525" > +<cdparam x="335" y="264" /> +<sizeparam width="55" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="send() " /> +<TGConnectingPoint num="0" id="1523" /> +<TGConnectingPoint num="1" id="1524" /> +<extraparam> +<Data eventName="send" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1528" > +<cdparam x="315" y="392" /> +<sizeparam width="94" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromSCtoD(1)" /> +<TGConnectingPoint num="0" id="1526" /> +<TGConnectingPoint num="1" id="1527" /> +<extraparam> +<Data channelName="fromSCtoD" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1008" id="1531" > +<cdparam x="493" y="350" /> +<sizeparam width="65" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="send event" value="receive()" /> +<TGConnectingPoint num="0" id="1529" /> +<TGConnectingPoint num="1" id="1530" /> +<extraparam> +<Data eventName="receive" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1009" id="1534" > +<cdparam x="472" y="311" /> +<sizeparam width="106" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="read channel" value="fromDtoSC0(1) " /> +<TGConnectingPoint num="0" id="1532" /> +<TGConnectingPoint num="1" id="1533" /> +<extraparam> +<Data channelName="fromDtoSC0" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1006" id="1537" > +<cdparam x="483" y="387" /> +<sizeparam width="84" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="write channel" value="fromPtoT(1)" /> +<TGConnectingPoint num="0" id="1535" /> +<TGConnectingPoint num="1" id="1536" /> +<extraparam> +<Data channelName="fromPtoT" nbOfSamples="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1010" id="1540" > +<cdparam x="477" y="268" /> +<sizeparam width="97" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="wait event" value="data_Ready() " /> +<TGConnectingPoint num="0" id="1538" /> +<TGConnectingPoint num="1" id="1539" /> +<breakpoint /> +<extraparam> +<Data eventName="data_Ready" nbOfParams="5" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1014" id="1544" > +<cdparam x="236" y="202" /> +<sizeparam width="124" height="20" minWidth="30" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="for loop" value="for(j=0;x==0;j = j)" /> +<TGConnectingPoint num="0" id="1541" /> +<TGConnectingPoint num="1" id="1542" /> +<TGConnectingPoint num="2" id="1543" /> +<extraparam> +<Data init="j=0" condition="x==0" increment="j = j" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1001" id="1546" > +<cdparam x="297" y="231" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="1545" /> +</COMPONENT> + +<COMPONENT type="1018" id="1557" > +<cdparam x="424" y="226" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="select" value="null" /> +<TGConnectingPoint num="0" id="1547" /> +<TGConnectingPoint num="1" id="1548" /> +<TGConnectingPoint num="2" id="1549" /> +<TGConnectingPoint num="3" id="1550" /> +<TGConnectingPoint num="4" id="1551" /> +<TGConnectingPoint num="5" id="1552" /> +<TGConnectingPoint num="6" id="1553" /> +<TGConnectingPoint num="7" id="1554" /> +<TGConnectingPoint num="8" id="1555" /> +<TGConnectingPoint num="9" id="1556" /> +</COMPONENT> + +<CONNECTOR type="115" id="1562" > +<cdparam x="111" y="331" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to send request" value="null" /> +<P1 x="166" y="333" id="1496" /> +<P2 x="298" y="92" id="1507" /> +<Point x="166" y="351" /> +<Point x="231" y="351" /> +<Point x="231" y="72" /> +<Point x="298" y="72" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="1558" > +<father id="1562" num="0" /> +<cdparam x="166" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1559" > +<father id="1562" num="1" /> +<cdparam x="231" y="351" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1560" > +<father id="1562" num="2" /> +<cdparam x="231" y="72" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="1561" > +<father id="1562" num="3" /> +<cdparam x="298" y="72" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="1400" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="115" id="1563" > +<cdparam x="166" y="64" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to wait event" value="null" /> +<P1 x="166" y="86" id="1484" /> +<P2 x="166" y="124" id="1486" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1564" > +<cdparam x="166" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to send event" value="null" /> +<P1 x="166" y="154" id="1487" /> +<P2 x="166" y="177" id="1489" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1565" > +<cdparam x="312" y="133" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to send request" value="null" /> +<P1 x="298" y="122" id="1508" /> +<P2 x="298" y="143" id="1510" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1566" > +<cdparam x="355" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="362" y="289" id="1524" /> +<P2 x="362" y="303" id="1520" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1567" > +<cdparam x="355" y="365" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to send event" value="null" /> +<P1 x="362" y="333" id="1521" /> +<P2 x="362" y="345" id="1515" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1568" > +<cdparam x="355" y="417" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="362" y="375" id="1516" /> +<P2 x="362" y="387" id="1526" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1569" > +<cdparam x="355" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="362" y="417" id="1527" /> +<P2 x="362" y="421" id="1518" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1570" > +<cdparam x="541" y="358" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from read channel to send event" value="null" /> +<P1 x="525" y="336" id="1533" /> +<P2 x="525" y="345" id="1529" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1571" > +<cdparam x="540" y="402" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to write channel" value="null" /> +<P1 x="525" y="375" id="1530" /> +<P2 x="525" y="382" id="1535" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1572" > +<cdparam x="543" y="305" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to read channel" value="null" /> +<P1 x="525" y="293" id="1539" /> +<P2 x="525" y="306" id="1532" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1573" > +<cdparam x="540" y="464" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from write channel to stop state" value="null" /> +<P1 x="525" y="412" id="1536" /> +<P2 x="525" y="423" id="1513" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1574" > +<cdparam x="298" y="173" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send request to for loop" value="null" /> +<P1 x="298" y="173" id="1511" /> +<P2 x="298" y="197" id="1541" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1575" > +<cdparam x="328" y="232" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to stop state" value="null" /> +<P1 x="298" y="227" id="1543" /> +<P2 x="307" y="226" id="1545" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1576" > +<cdparam x="395" y="283" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from select to wait event" value="null" /> +<P1 x="399" y="241" id="1548" /> +<P2 x="362" y="259" id="1523" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1577" > +<cdparam x="543" y="341" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from select to wait event" value="null" /> +<P1 x="479" y="241" id="1549" /> +<P2 x="525" y="263" id="1538" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1578" > +<cdparam x="391" y="282" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from for loop to select" value="null" /> +<P1 x="360" y="216" id="1542" /> +<P2 x="439" y="216" id="1547" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1579" > +<cdparam x="164" y="262" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from wait event to send event" value="null" /> +<P1 x="166" y="262" id="1493" /> +<P2 x="166" y="303" id="1495" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="115" id="1580" > +<cdparam x="166" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="600" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from send event to wait event" value="null" /> +<P1 x="166" y="207" id="1490" /> +<P2 x="166" y="232" id="1492" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TMLActivityDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Architecture1" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1100" id="1605" > +<cdparam x="51" y="90" /> +<sizeparam width="459" height="321" minWidth="150" minHeight="150" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="cpu0" value="name" /> +<TGConnectingPoint num="0" id="1581" /> +<TGConnectingPoint num="1" id="1582" /> +<TGConnectingPoint num="2" id="1583" /> +<TGConnectingPoint num="3" id="1584" /> +<TGConnectingPoint num="4" id="1585" /> +<TGConnectingPoint num="5" id="1586" /> +<TGConnectingPoint num="6" id="1587" /> +<TGConnectingPoint num="7" id="1588" /> +<TGConnectingPoint num="8" id="1589" /> +<TGConnectingPoint num="9" id="1590" /> +<TGConnectingPoint num="10" id="1591" /> +<TGConnectingPoint num="11" id="1592" /> +<TGConnectingPoint num="12" id="1593" /> +<TGConnectingPoint num="13" id="1594" /> +<TGConnectingPoint num="14" id="1595" /> +<TGConnectingPoint num="15" id="1596" /> +<TGConnectingPoint num="16" id="1597" /> +<TGConnectingPoint num="17" id="1598" /> +<TGConnectingPoint num="18" id="1599" /> +<TGConnectingPoint num="19" id="1600" /> +<TGConnectingPoint num="20" id="1601" /> +<TGConnectingPoint num="21" id="1602" /> +<TGConnectingPoint num="22" id="1603" /> +<TGConnectingPoint num="23" id="1604" /> +<extraparam> +<info stereotype="CPURRPB" nodeName="cpu0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="1" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="99" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Architecture2" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1105" id="1630" > +<cdparam x="290" y="308" /> +<sizeparam width="189" height="131" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Memory0" value="name" /> +<TGConnectingPoint num="0" id="1606" /> +<TGConnectingPoint num="1" id="1607" /> +<TGConnectingPoint num="2" id="1608" /> +<TGConnectingPoint num="3" id="1609" /> +<TGConnectingPoint num="4" id="1610" /> +<TGConnectingPoint num="5" id="1611" /> +<TGConnectingPoint num="6" id="1612" /> +<TGConnectingPoint num="7" id="1613" /> +<TGConnectingPoint num="8" id="1614" /> +<TGConnectingPoint num="9" id="1615" /> +<TGConnectingPoint num="10" id="1616" /> +<TGConnectingPoint num="11" id="1617" /> +<TGConnectingPoint num="12" id="1618" /> +<TGConnectingPoint num="13" id="1619" /> +<TGConnectingPoint num="14" id="1620" /> +<TGConnectingPoint num="15" id="1621" /> +<TGConnectingPoint num="16" id="1622" /> +<TGConnectingPoint num="17" id="1623" /> +<TGConnectingPoint num="18" id="1624" /> +<TGConnectingPoint num="19" id="1625" /> +<TGConnectingPoint num="20" id="1626" /> +<TGConnectingPoint num="21" id="1627" /> +<TGConnectingPoint num="22" id="1628" /> +<TGConnectingPoint num="23" id="1629" /> +<extraparam> +<info stereotype="MEMORY" nodeName="Memory0" /> +<attributes byteDataSize="4" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1102" id="1655" > +<cdparam x="259" y="219" /> +<sizeparam width="250" height="50" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Bus0" value="name" /> +<TGConnectingPoint num="0" id="1631" /> +<TGConnectingPoint num="1" id="1632" /> +<TGConnectingPoint num="2" id="1633" /> +<TGConnectingPoint num="3" id="1634" /> +<TGConnectingPoint num="4" id="1635" /> +<TGConnectingPoint num="5" id="1636" /> +<TGConnectingPoint num="6" id="1637" /> +<TGConnectingPoint num="7" id="1638" /> +<TGConnectingPoint num="8" id="1639" /> +<TGConnectingPoint num="9" id="1640" /> +<TGConnectingPoint num="10" id="1641" /> +<TGConnectingPoint num="11" id="1642" /> +<TGConnectingPoint num="12" id="1643" /> +<TGConnectingPoint num="13" id="1644" /> +<TGConnectingPoint num="14" id="1645" /> +<TGConnectingPoint num="15" id="1646" /> +<TGConnectingPoint num="16" id="1647" /> +<TGConnectingPoint num="17" id="1648" /> +<TGConnectingPoint num="18" id="1649" /> +<TGConnectingPoint num="19" id="1650" /> +<TGConnectingPoint num="20" id="1651" /> +<TGConnectingPoint num="21" id="1652" /> +<TGConnectingPoint num="22" id="1653" /> +<TGConnectingPoint num="23" id="1654" /> +<extraparam> +<info stereotype="BUS" nodeName="Bus0" /> +<attributes byteDataSize="4" arbitrationPolicy="0" sliceTime="10000" pipelineSize="1" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1680" > +<cdparam x="555" y="177" /> +<sizeparam width="174" height="135" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW2" value="name" /> +<TGConnectingPoint num="0" id="1656" /> +<TGConnectingPoint num="1" id="1657" /> +<TGConnectingPoint num="2" id="1658" /> +<TGConnectingPoint num="3" id="1659" /> +<TGConnectingPoint num="4" id="1660" /> +<TGConnectingPoint num="5" id="1661" /> +<TGConnectingPoint num="6" id="1662" /> +<TGConnectingPoint num="7" id="1663" /> +<TGConnectingPoint num="8" id="1664" /> +<TGConnectingPoint num="9" id="1665" /> +<TGConnectingPoint num="10" id="1666" /> +<TGConnectingPoint num="11" id="1667" /> +<TGConnectingPoint num="12" id="1668" /> +<TGConnectingPoint num="13" id="1669" /> +<TGConnectingPoint num="14" id="1670" /> +<TGConnectingPoint num="15" id="1671" /> +<TGConnectingPoint num="16" id="1672" /> +<TGConnectingPoint num="17" id="1673" /> +<TGConnectingPoint num="18" id="1674" /> +<TGConnectingPoint num="19" id="1675" /> +<TGConnectingPoint num="20" id="1676" /> +<TGConnectingPoint num="21" id="1677" /> +<TGConnectingPoint num="22" id="1678" /> +<TGConnectingPoint num="23" id="1679" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW2" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1705" > +<cdparam x="37" y="181" /> +<sizeparam width="165" height="126" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW1" value="name" /> +<TGConnectingPoint num="0" id="1681" /> +<TGConnectingPoint num="1" id="1682" /> +<TGConnectingPoint num="2" id="1683" /> +<TGConnectingPoint num="3" id="1684" /> +<TGConnectingPoint num="4" id="1685" /> +<TGConnectingPoint num="5" id="1686" /> +<TGConnectingPoint num="6" id="1687" /> +<TGConnectingPoint num="7" id="1688" /> +<TGConnectingPoint num="8" id="1689" /> +<TGConnectingPoint num="9" id="1690" /> +<TGConnectingPoint num="10" id="1691" /> +<TGConnectingPoint num="11" id="1692" /> +<TGConnectingPoint num="12" id="1693" /> +<TGConnectingPoint num="13" id="1694" /> +<TGConnectingPoint num="14" id="1695" /> +<TGConnectingPoint num="15" id="1696" /> +<TGConnectingPoint num="16" id="1697" /> +<TGConnectingPoint num="17" id="1698" /> +<TGConnectingPoint num="18" id="1699" /> +<TGConnectingPoint num="19" id="1700" /> +<TGConnectingPoint num="20" id="1701" /> +<TGConnectingPoint num="21" id="1702" /> +<TGConnectingPoint num="22" id="1703" /> +<TGConnectingPoint num="23" id="1704" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW1" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1730" > +<cdparam x="250" y="27" /> +<sizeparam width="268" height="144" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="CPU0" value="name" /> +<TGConnectingPoint num="0" id="1706" /> +<TGConnectingPoint num="1" id="1707" /> +<TGConnectingPoint num="2" id="1708" /> +<TGConnectingPoint num="3" id="1709" /> +<TGConnectingPoint num="4" id="1710" /> +<TGConnectingPoint num="5" id="1711" /> +<TGConnectingPoint num="6" id="1712" /> +<TGConnectingPoint num="7" id="1713" /> +<TGConnectingPoint num="8" id="1714" /> +<TGConnectingPoint num="9" id="1715" /> +<TGConnectingPoint num="10" id="1716" /> +<TGConnectingPoint num="11" id="1717" /> +<TGConnectingPoint num="12" id="1718" /> +<TGConnectingPoint num="13" id="1719" /> +<TGConnectingPoint num="14" id="1720" /> +<TGConnectingPoint num="15" id="1721" /> +<TGConnectingPoint num="16" id="1722" /> +<TGConnectingPoint num="17" id="1723" /> +<TGConnectingPoint num="18" id="1724" /> +<TGConnectingPoint num="19" id="1725" /> +<TGConnectingPoint num="20" id="1726" /> +<TGConnectingPoint num="21" id="1727" /> +<TGConnectingPoint num="22" id="1728" /> +<TGConnectingPoint num="23" id="1729" /> +<extraparam> +<info stereotype="CPURR" nodeName="CPU0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> + +<CONNECTOR type="125" id="1731" > +<cdparam x="383" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Memory0 to Bus0" value="{info}" /> +<P1 x="384" y="308" id="1607" /> +<P2 x="384" y="269" id="1637" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1732" > +<cdparam x="171" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU1 to Bus0" value="{info}" /> +<P1 x="202" y="244" id="1685" /> +<P2 x="259" y="244" id="1634" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1733" > +<cdparam x="643" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU2 to Bus0" value="{info}" /> +<P1 x="555" y="244" id="1659" /> +<P2 x="509" y="244" id="1635" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1734" > +<cdparam x="369" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU0 to Bus0" value="{info}" /> +<P1 x="384" y="171" id="1712" /> +<P2 x="384" y="219" id="1632" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Mapping1" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1100" id="1804" > +<cdparam x="51" y="90" /> +<sizeparam width="459" height="321" minWidth="150" minHeight="150" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="cpu0" value="name" /> +<TGConnectingPoint num="0" id="1780" /> +<TGConnectingPoint num="1" id="1781" /> +<TGConnectingPoint num="2" id="1782" /> +<TGConnectingPoint num="3" id="1783" /> +<TGConnectingPoint num="4" id="1784" /> +<TGConnectingPoint num="5" id="1785" /> +<TGConnectingPoint num="6" id="1786" /> +<TGConnectingPoint num="7" id="1787" /> +<TGConnectingPoint num="8" id="1788" /> +<TGConnectingPoint num="9" id="1789" /> +<TGConnectingPoint num="10" id="1790" /> +<TGConnectingPoint num="11" id="1791" /> +<TGConnectingPoint num="12" id="1792" /> +<TGConnectingPoint num="13" id="1793" /> +<TGConnectingPoint num="14" id="1794" /> +<TGConnectingPoint num="15" id="1795" /> +<TGConnectingPoint num="16" id="1796" /> +<TGConnectingPoint num="17" id="1797" /> +<TGConnectingPoint num="18" id="1798" /> +<TGConnectingPoint num="19" id="1799" /> +<TGConnectingPoint num="20" id="1800" /> +<TGConnectingPoint num="21" id="1801" /> +<TGConnectingPoint num="22" id="1802" /> +<TGConnectingPoint num="23" id="1803" /> +<extraparam> +<info stereotype="CPURRPB" nodeName="cpu0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="1" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="99" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1743" > +<father id="1804" num="0" /> +<cdparam x="226" y="304" /> +<sizeparam width="109" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="350" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::Timer" /> +<TGConnectingPoint num="0" id="1735" /> +<TGConnectingPoint num="1" id="1736" /> +<TGConnectingPoint num="2" id="1737" /> +<TGConnectingPoint num="3" id="1738" /> +<TGConnectingPoint num="4" id="1739" /> +<TGConnectingPoint num="5" id="1740" /> +<TGConnectingPoint num="6" id="1741" /> +<TGConnectingPoint num="7" id="1742" /> +<extraparam> +<info value="AppC::Timer" taskName="Timer" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1752" > +<father id="1804" num="1" /> +<cdparam x="290" y="234" /> +<sizeparam width="139" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="320" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::Application" /> +<TGConnectingPoint num="0" id="1744" /> +<TGConnectingPoint num="1" id="1745" /> +<TGConnectingPoint num="2" id="1746" /> +<TGConnectingPoint num="3" id="1747" /> +<TGConnectingPoint num="4" id="1748" /> +<TGConnectingPoint num="5" id="1749" /> +<TGConnectingPoint num="6" id="1750" /> +<TGConnectingPoint num="7" id="1751" /> +<extraparam> +<info value="AppC::Application" taskName="Application" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1761" > +<father id="1804" num="2" /> +<cdparam x="96" y="246" /> +<sizeparam width="108" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="351" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::TCPIP" /> +<TGConnectingPoint num="0" id="1753" /> +<TGConnectingPoint num="1" id="1754" /> +<TGConnectingPoint num="2" id="1755" /> +<TGConnectingPoint num="3" id="1756" /> +<TGConnectingPoint num="4" id="1757" /> +<TGConnectingPoint num="5" id="1758" /> +<TGConnectingPoint num="6" id="1759" /> +<TGConnectingPoint num="7" id="1760" /> +<extraparam> +<info value="AppC::TCPIP" taskName="TCPIP" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1770" > +<father id="1804" num="3" /> +<cdparam x="291" y="153" /> +<sizeparam width="136" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="323" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::SmartCard" /> +<TGConnectingPoint num="0" id="1762" /> +<TGConnectingPoint num="1" id="1763" /> +<TGConnectingPoint num="2" id="1764" /> +<TGConnectingPoint num="3" id="1765" /> +<TGConnectingPoint num="4" id="1766" /> +<TGConnectingPoint num="5" id="1767" /> +<TGConnectingPoint num="6" id="1768" /> +<TGConnectingPoint num="7" id="1769" /> +<extraparam> +<info value="AppC::SmartCard" taskName="SmartCard" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1779" > +<father id="1804" num="4" /> +<cdparam x="92" y="154" /> +<sizeparam width="163" height="50" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="296" minY="0" maxY="271" /> +<infoparam name="TGComponent" value="AppC::InterfaceDevice" /> +<TGConnectingPoint num="0" id="1771" /> +<TGConnectingPoint num="1" id="1772" /> +<TGConnectingPoint num="2" id="1773" /> +<TGConnectingPoint num="3" id="1774" /> +<TGConnectingPoint num="4" id="1775" /> +<TGConnectingPoint num="5" id="1776" /> +<TGConnectingPoint num="6" id="1777" /> +<TGConnectingPoint num="7" id="1778" /> +<extraparam> +<info value="AppC::InterfaceDevice" taskName="InterfaceDevice" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +<Modeling type="TML Architecture" nameTab="Mapping2" > +<TMLArchiDiagramPanel name="DIPLODOCUS architecture and mapping Diagram" minX="10" maxX="1400" minY="10" maxY="900" attributes="0" masterClockFrequency="200" > +<COMPONENT type="1105" id="1829" > +<cdparam x="290" y="308" /> +<sizeparam width="189" height="131" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Memory0" value="name" /> +<TGConnectingPoint num="0" id="1805" /> +<TGConnectingPoint num="1" id="1806" /> +<TGConnectingPoint num="2" id="1807" /> +<TGConnectingPoint num="3" id="1808" /> +<TGConnectingPoint num="4" id="1809" /> +<TGConnectingPoint num="5" id="1810" /> +<TGConnectingPoint num="6" id="1811" /> +<TGConnectingPoint num="7" id="1812" /> +<TGConnectingPoint num="8" id="1813" /> +<TGConnectingPoint num="9" id="1814" /> +<TGConnectingPoint num="10" id="1815" /> +<TGConnectingPoint num="11" id="1816" /> +<TGConnectingPoint num="12" id="1817" /> +<TGConnectingPoint num="13" id="1818" /> +<TGConnectingPoint num="14" id="1819" /> +<TGConnectingPoint num="15" id="1820" /> +<TGConnectingPoint num="16" id="1821" /> +<TGConnectingPoint num="17" id="1822" /> +<TGConnectingPoint num="18" id="1823" /> +<TGConnectingPoint num="19" id="1824" /> +<TGConnectingPoint num="20" id="1825" /> +<TGConnectingPoint num="21" id="1826" /> +<TGConnectingPoint num="22" id="1827" /> +<TGConnectingPoint num="23" id="1828" /> +<extraparam> +<info stereotype="MEMORY" nodeName="Memory0" /> +<attributes byteDataSize="4" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1102" id="1854" > +<cdparam x="259" y="219" /> +<sizeparam width="250" height="50" minWidth="100" minHeight="50" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="Bus0" value="name" /> +<TGConnectingPoint num="0" id="1830" /> +<TGConnectingPoint num="1" id="1831" /> +<TGConnectingPoint num="2" id="1832" /> +<TGConnectingPoint num="3" id="1833" /> +<TGConnectingPoint num="4" id="1834" /> +<TGConnectingPoint num="5" id="1835" /> +<TGConnectingPoint num="6" id="1836" /> +<TGConnectingPoint num="7" id="1837" /> +<TGConnectingPoint num="8" id="1838" /> +<TGConnectingPoint num="9" id="1839" /> +<TGConnectingPoint num="10" id="1840" /> +<TGConnectingPoint num="11" id="1841" /> +<TGConnectingPoint num="12" id="1842" /> +<TGConnectingPoint num="13" id="1843" /> +<TGConnectingPoint num="14" id="1844" /> +<TGConnectingPoint num="15" id="1845" /> +<TGConnectingPoint num="16" id="1846" /> +<TGConnectingPoint num="17" id="1847" /> +<TGConnectingPoint num="18" id="1848" /> +<TGConnectingPoint num="19" id="1849" /> +<TGConnectingPoint num="20" id="1850" /> +<TGConnectingPoint num="21" id="1851" /> +<TGConnectingPoint num="22" id="1852" /> +<TGConnectingPoint num="23" id="1853" /> +<extraparam> +<info stereotype="BUS" nodeName="Bus0" /> +<attributes byteDataSize="4" arbitrationPolicy="0" sliceTime="10000" pipelineSize="1" clockRatio="1" /> +</extraparam> +</COMPONENT> + +<COMPONENT type="1100" id="1888" > +<cdparam x="555" y="177" /> +<sizeparam width="174" height="135" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW2" value="name" /> +<TGConnectingPoint num="0" id="1864" /> +<TGConnectingPoint num="1" id="1865" /> +<TGConnectingPoint num="2" id="1866" /> +<TGConnectingPoint num="3" id="1867" /> +<TGConnectingPoint num="4" id="1868" /> +<TGConnectingPoint num="5" id="1869" /> +<TGConnectingPoint num="6" id="1870" /> +<TGConnectingPoint num="7" id="1871" /> +<TGConnectingPoint num="8" id="1872" /> +<TGConnectingPoint num="9" id="1873" /> +<TGConnectingPoint num="10" id="1874" /> +<TGConnectingPoint num="11" id="1875" /> +<TGConnectingPoint num="12" id="1876" /> +<TGConnectingPoint num="13" id="1877" /> +<TGConnectingPoint num="14" id="1878" /> +<TGConnectingPoint num="15" id="1879" /> +<TGConnectingPoint num="16" id="1880" /> +<TGConnectingPoint num="17" id="1881" /> +<TGConnectingPoint num="18" id="1882" /> +<TGConnectingPoint num="19" id="1883" /> +<TGConnectingPoint num="20" id="1884" /> +<TGConnectingPoint num="21" id="1885" /> +<TGConnectingPoint num="22" id="1886" /> +<TGConnectingPoint num="23" id="1887" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW2" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1863" > +<father id="1888" num="0" /> +<cdparam x="585" y="229" /> +<sizeparam width="109" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="65" minY="0" maxY="95" /> +<infoparam name="TGComponent" value="AppC::Timer" /> +<TGConnectingPoint num="0" id="1855" /> +<TGConnectingPoint num="1" id="1856" /> +<TGConnectingPoint num="2" id="1857" /> +<TGConnectingPoint num="3" id="1858" /> +<TGConnectingPoint num="4" id="1859" /> +<TGConnectingPoint num="5" id="1860" /> +<TGConnectingPoint num="6" id="1861" /> +<TGConnectingPoint num="7" id="1862" /> +<extraparam> +<info value="AppC::Timer" taskName="Timer" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1100" id="1922" > +<cdparam x="37" y="181" /> +<sizeparam width="165" height="126" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="HW1" value="name" /> +<TGConnectingPoint num="0" id="1898" /> +<TGConnectingPoint num="1" id="1899" /> +<TGConnectingPoint num="2" id="1900" /> +<TGConnectingPoint num="3" id="1901" /> +<TGConnectingPoint num="4" id="1902" /> +<TGConnectingPoint num="5" id="1903" /> +<TGConnectingPoint num="6" id="1904" /> +<TGConnectingPoint num="7" id="1905" /> +<TGConnectingPoint num="8" id="1906" /> +<TGConnectingPoint num="9" id="1907" /> +<TGConnectingPoint num="10" id="1908" /> +<TGConnectingPoint num="11" id="1909" /> +<TGConnectingPoint num="12" id="1910" /> +<TGConnectingPoint num="13" id="1911" /> +<TGConnectingPoint num="14" id="1912" /> +<TGConnectingPoint num="15" id="1913" /> +<TGConnectingPoint num="16" id="1914" /> +<TGConnectingPoint num="17" id="1915" /> +<TGConnectingPoint num="18" id="1916" /> +<TGConnectingPoint num="19" id="1917" /> +<TGConnectingPoint num="20" id="1918" /> +<TGConnectingPoint num="21" id="1919" /> +<TGConnectingPoint num="22" id="1920" /> +<TGConnectingPoint num="23" id="1921" /> +<extraparam> +<info stereotype="CPURR" nodeName="HW1" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1897" > +<father id="1922" num="0" /> +<cdparam x="30" y="226" /> +<sizeparam width="172" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="-7" minY="0" maxY="86" /> +<infoparam name="TGComponent" value="AppC::InterfaceDevice" /> +<TGConnectingPoint num="0" id="1889" /> +<TGConnectingPoint num="1" id="1890" /> +<TGConnectingPoint num="2" id="1891" /> +<TGConnectingPoint num="3" id="1892" /> +<TGConnectingPoint num="4" id="1893" /> +<TGConnectingPoint num="5" id="1894" /> +<TGConnectingPoint num="6" id="1895" /> +<TGConnectingPoint num="7" id="1896" /> +<extraparam> +<info value="AppC::InterfaceDevice" taskName="InterfaceDevice" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="1100" id="1974" > +<cdparam x="250" y="27" /> +<sizeparam width="268" height="144" minWidth="150" minHeight="100" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1400" minY="10" maxY="900" /> +<infoparam name="CPU0" value="name" /> +<TGConnectingPoint num="0" id="1950" /> +<TGConnectingPoint num="1" id="1951" /> +<TGConnectingPoint num="2" id="1952" /> +<TGConnectingPoint num="3" id="1953" /> +<TGConnectingPoint num="4" id="1954" /> +<TGConnectingPoint num="5" id="1955" /> +<TGConnectingPoint num="6" id="1956" /> +<TGConnectingPoint num="7" id="1957" /> +<TGConnectingPoint num="8" id="1958" /> +<TGConnectingPoint num="9" id="1959" /> +<TGConnectingPoint num="10" id="1960" /> +<TGConnectingPoint num="11" id="1961" /> +<TGConnectingPoint num="12" id="1962" /> +<TGConnectingPoint num="13" id="1963" /> +<TGConnectingPoint num="14" id="1964" /> +<TGConnectingPoint num="15" id="1965" /> +<TGConnectingPoint num="16" id="1966" /> +<TGConnectingPoint num="17" id="1967" /> +<TGConnectingPoint num="18" id="1968" /> +<TGConnectingPoint num="19" id="1969" /> +<TGConnectingPoint num="20" id="1970" /> +<TGConnectingPoint num="21" id="1971" /> +<TGConnectingPoint num="22" id="1972" /> +<TGConnectingPoint num="23" id="1973" /> +<extraparam> +<info stereotype="CPURR" nodeName="CPU0" /> +<attributes nbOfCores="1" byteDataSize="4" schedulingPolicy="0" sliceTime="10000" goIdleTime="10" maxConsecutiveIdleCycles="10" pipelineSize="5" taskSwitchingTime="20" branchingPredictionPenalty="2" cacheMiss="5" execiTime="1" execcTime="1" clockRatio="1" MECType=""/> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="1101" id="1931" > +<father id="1974" num="0" /> +<cdparam x="258" y="61" /> +<sizeparam width="109" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="159" minY="0" maxY="104" /> +<infoparam name="TGComponent" value="AppC::TCPIP" /> +<TGConnectingPoint num="0" id="1923" /> +<TGConnectingPoint num="1" id="1924" /> +<TGConnectingPoint num="2" id="1925" /> +<TGConnectingPoint num="3" id="1926" /> +<TGConnectingPoint num="4" id="1927" /> +<TGConnectingPoint num="5" id="1928" /> +<TGConnectingPoint num="6" id="1929" /> +<TGConnectingPoint num="7" id="1930" /> +<extraparam> +<info value="AppC::TCPIP" taskName="TCPIP" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1940" > +<father id="1974" num="1" /> +<cdparam x="313" y="110" /> +<sizeparam width="144" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="124" minY="0" maxY="104" /> +<infoparam name="TGComponent" value="AppC::Application" /> +<TGConnectingPoint num="0" id="1932" /> +<TGConnectingPoint num="1" id="1933" /> +<TGConnectingPoint num="2" id="1934" /> +<TGConnectingPoint num="3" id="1935" /> +<TGConnectingPoint num="4" id="1936" /> +<TGConnectingPoint num="5" id="1937" /> +<TGConnectingPoint num="6" id="1938" /> +<TGConnectingPoint num="7" id="1939" /> +<extraparam> +<info value="AppC::Application" taskName="Application" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="1101" id="1949" > +<father id="1974" num="2" /> +<cdparam x="373" y="61" /> +<sizeparam width="141" height="40" minWidth="75" minHeight="0" maxWidth="2000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="127" minY="0" maxY="104" /> +<infoparam name="TGComponent" value="AppC::SmartCard" /> +<TGConnectingPoint num="0" id="1941" /> +<TGConnectingPoint num="1" id="1942" /> +<TGConnectingPoint num="2" id="1943" /> +<TGConnectingPoint num="3" id="1944" /> +<TGConnectingPoint num="4" id="1945" /> +<TGConnectingPoint num="5" id="1946" /> +<TGConnectingPoint num="6" id="1947" /> +<TGConnectingPoint num="7" id="1948" /> +<extraparam> +<info value="AppC::SmartCard" taskName="SmartCard" referenceTaskName="AppC" priority="0" operation="" fatherComponentMECType="" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="125" id="1975" > +<cdparam x="383" y="317" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Memory0 to Bus0" value="{info}" /> +<P1 x="384" y="308" id="1806" /> +<P2 x="384" y="269" id="1836" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1976" > +<cdparam x="171" y="250" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU1 to Bus0" value="{info}" /> +<P1 x="202" y="244" id="1902" /> +<P2 x="259" y="244" id="1833" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1977" > +<cdparam x="643" y="260" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU2 to Bus0" value="{info}" /> +<P1 x="555" y="244" id="1867" /> +<P2 x="509" y="244" id="1834" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> +<CONNECTOR type="125" id="1978" > +<cdparam x="369" y="112" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from CPU0 to Bus0" value="{info}" /> +<P1 x="384" y="171" id="1956" /> +<P2 x="384" y="219" id="1831" /> +<AutomaticDrawing data="true" /> +<extraparam> +<info priority="0" /> +</extraparam> +</CONNECTOR> + +</TMLArchiDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/WebV01.xml b/preinstallTTool/macos/TTool/modeling/WebV01.xml new file mode 100755 index 0000000000000000000000000000000000000000..9273c0075a0f138d6d344d7db4635c2cb62ffecc --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/WebV01.xml @@ -0,0 +1,1850 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.92-beta1"> + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1900" minY="10" maxY="900" attributes="true" gates="true" synchro="true" > +<COMPONENT type="201" id="35" > +<cdparam x="18" y="225" /> +<sizeparam width="152" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="WebClient" /> +<TGConnectingPoint num="0" id="27" /> +<TGConnectingPoint num="1" id="28" /> +<TGConnectingPoint num="2" id="29" /> +<TGConnectingPoint num="3" id="30" /> +<TGConnectingPoint num="4" id="31" /> +<TGConnectingPoint num="5" id="32" /> +<TGConnectingPoint num="6" id="33" /> +<TGConnectingPoint num="7" id="34" /> +<extraparam> +<Start isStart="false" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="7" > +<father id="35" num="0" /> +<cdparam x="18" y="255" /> +<sizeparam width="152" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ id : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<TGConnectingPoint num="2" id="3" /> +<TGConnectingPoint num="3" id="4" /> +<TGConnectingPoint num="4" id="5" /> +<TGConnectingPoint num="5" id="6" /> +<extraparam> +<Attribute access="2" id="id" value="" type="0" typeOther="" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="10" > +<father id="35" num="1" /> +<cdparam x="18" y="301" /> +<sizeparam width="152" height="62" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="152" minDesiredHeight="62" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tclass gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="8" /> +<TGConnectingPoint num="1" id="9" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="17" > +<father id="35" num="2" /> +<cdparam x="18" y="363" /> +<sizeparam width="152" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="138" maxY="138" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="11" /> +<TGConnectingPoint num="1" id="12" /> +<TGConnectingPoint num="2" id="13" /> +<TGConnectingPoint num="3" id="14" /> +<TGConnectingPoint num="4" id="15" /> +<TGConnectingPoint num="5" id="16" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="26" > +<father id="35" num="3" /> +<cdparam x="18" y="393" /> +<sizeparam width="152" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="168" maxY="168" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="18" /> +<TGConnectingPoint num="1" id="19" /> +<TGConnectingPoint num="2" id="20" /> +<TGConnectingPoint num="3" id="21" /> +<TGConnectingPoint num="4" id="22" /> +<TGConnectingPoint num="5" id="23" /> +<TGConnectingPoint num="6" id="24" /> +<TGConnectingPoint num="7" id="25" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="70" > +<cdparam x="950" y="262" /> +<sizeparam width="186" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="WebServer" /> +<TGConnectingPoint num="0" id="62" /> +<TGConnectingPoint num="1" id="63" /> +<TGConnectingPoint num="2" id="64" /> +<TGConnectingPoint num="3" id="65" /> +<TGConnectingPoint num="4" id="66" /> +<TGConnectingPoint num="5" id="67" /> +<TGConnectingPoint num="6" id="68" /> +<TGConnectingPoint num="7" id="69" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="42" > +<father id="70" num="0" /> +<cdparam x="950" y="292" /> +<sizeparam width="186" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="186" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ computing_delay = 6 : Natural; ++ id : Natural; +" /> +<TGConnectingPoint num="0" id="36" /> +<TGConnectingPoint num="1" id="37" /> +<TGConnectingPoint num="2" id="38" /> +<TGConnectingPoint num="3" id="39" /> +<TGConnectingPoint num="4" id="40" /> +<TGConnectingPoint num="5" id="41" /> +<extraparam> +<Attribute access="2" id="computing_delay" value="6" type="0" typeOther="" /> +<Attribute access="2" id="id" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="45" > +<father id="70" num="1" /> +<cdparam x="950" y="338" /> +<sizeparam width="186" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tclass gates" value="+ getRequest : InGate; ++ sendData : OutGate; +" /> +<TGConnectingPoint num="0" id="43" /> +<TGConnectingPoint num="1" id="44" /> +<extraparam> +<Attribute access="2" id="getRequest" value="" type="3" typeOther="" /> +<Attribute access="2" id="sendData" value="" type="2" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="52" > +<father id="70" num="2" /> +<cdparam x="950" y="384" /> +<sizeparam width="186" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="122" maxY="122" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="46" /> +<TGConnectingPoint num="1" id="47" /> +<TGConnectingPoint num="2" id="48" /> +<TGConnectingPoint num="3" id="49" /> +<TGConnectingPoint num="4" id="50" /> +<TGConnectingPoint num="5" id="51" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="61" > +<father id="70" num="3" /> +<cdparam x="950" y="414" /> +<sizeparam width="186" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="152" maxY="152" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="53" /> +<TGConnectingPoint num="1" id="54" /> +<TGConnectingPoint num="2" id="55" /> +<TGConnectingPoint num="3" id="56" /> +<TGConnectingPoint num="4" id="57" /> +<TGConnectingPoint num="5" id="58" /> +<TGConnectingPoint num="6" id="59" /> +<TGConnectingPoint num="7" id="60" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="105" > +<cdparam x="206" y="60" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tobject" value="cl1_WebClient" /> +<TGConnectingPoint num="0" id="97" /> +<TGConnectingPoint num="1" id="98" /> +<TGConnectingPoint num="2" id="99" /> +<TGConnectingPoint num="3" id="100" /> +<TGConnectingPoint num="4" id="101" /> +<TGConnectingPoint num="5" id="102" /> +<TGConnectingPoint num="6" id="103" /> +<TGConnectingPoint num="7" id="104" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="WebClient" /> +<FirstName name="cl1" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="77" > +<father id="105" num="0" /> +<cdparam x="206" y="90" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ id = 1 : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="71" /> +<TGConnectingPoint num="1" id="72" /> +<TGConnectingPoint num="2" id="73" /> +<TGConnectingPoint num="3" id="74" /> +<TGConnectingPoint num="4" id="75" /> +<TGConnectingPoint num="5" id="76" /> +<extraparam> +<Attribute access="2" id="id" value="1" type="0" typeOther="" set="true" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="80" > +<father id="105" num="1" /> +<cdparam x="206" y="136" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tobject gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="78" /> +<TGConnectingPoint num="1" id="79" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" set="false" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" set="false" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="87" > +<father id="105" num="2" /> +<cdparam x="206" y="166" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="106" maxY="106" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="81" /> +<TGConnectingPoint num="1" id="82" /> +<TGConnectingPoint num="2" id="83" /> +<TGConnectingPoint num="3" id="84" /> +<TGConnectingPoint num="4" id="85" /> +<TGConnectingPoint num="5" id="86" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="96" > +<father id="105" num="3" /> +<cdparam x="206" y="196" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="136" maxY="136" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="88" /> +<TGConnectingPoint num="1" id="89" /> +<TGConnectingPoint num="2" id="90" /> +<TGConnectingPoint num="3" id="91" /> +<TGConnectingPoint num="4" id="92" /> +<TGConnectingPoint num="5" id="93" /> +<TGConnectingPoint num="6" id="94" /> +<TGConnectingPoint num="7" id="95" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="140" > +<cdparam x="204" y="420" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tobject" value="cl3_WebClient" /> +<TGConnectingPoint num="0" id="132" /> +<TGConnectingPoint num="1" id="133" /> +<TGConnectingPoint num="2" id="134" /> +<TGConnectingPoint num="3" id="135" /> +<TGConnectingPoint num="4" id="136" /> +<TGConnectingPoint num="5" id="137" /> +<TGConnectingPoint num="6" id="138" /> +<TGConnectingPoint num="7" id="139" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="WebClient" /> +<FirstName name="cl3" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="112" > +<father id="140" num="0" /> +<cdparam x="204" y="450" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ id = 3 : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="106" /> +<TGConnectingPoint num="1" id="107" /> +<TGConnectingPoint num="2" id="108" /> +<TGConnectingPoint num="3" id="109" /> +<TGConnectingPoint num="4" id="110" /> +<TGConnectingPoint num="5" id="111" /> +<extraparam> +<Attribute access="2" id="id" value="3" type="0" typeOther="" set="true" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="115" > +<father id="140" num="1" /> +<cdparam x="204" y="496" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tobject gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="113" /> +<TGConnectingPoint num="1" id="114" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" set="false" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" set="false" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="122" > +<father id="140" num="2" /> +<cdparam x="204" y="526" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="106" maxY="106" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="116" /> +<TGConnectingPoint num="1" id="117" /> +<TGConnectingPoint num="2" id="118" /> +<TGConnectingPoint num="3" id="119" /> +<TGConnectingPoint num="4" id="120" /> +<TGConnectingPoint num="5" id="121" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="131" > +<father id="140" num="3" /> +<cdparam x="204" y="556" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="136" maxY="136" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="123" /> +<TGConnectingPoint num="1" id="124" /> +<TGConnectingPoint num="2" id="125" /> +<TGConnectingPoint num="3" id="126" /> +<TGConnectingPoint num="4" id="127" /> +<TGConnectingPoint num="5" id="128" /> +<TGConnectingPoint num="6" id="129" /> +<TGConnectingPoint num="7" id="130" /> +</SUBCOMPONENT> + +<COMPONENT type="207" id="175" > +<cdparam x="204" y="239" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tobject" value="cl2_WebClient" /> +<TGConnectingPoint num="0" id="167" /> +<TGConnectingPoint num="1" id="168" /> +<TGConnectingPoint num="2" id="169" /> +<TGConnectingPoint num="3" id="170" /> +<TGConnectingPoint num="4" id="171" /> +<TGConnectingPoint num="5" id="172" /> +<TGConnectingPoint num="6" id="173" /> +<TGConnectingPoint num="7" id="174" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="true" /> +<MasterTClass name="WebClient" /> +<FirstName name="cl2" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="147" > +<father id="175" num="0" /> +<cdparam x="204" y="269" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="46" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="TObject attribute setting" value="+ id = 2 : Natural; ++ id_received : Natural; +" /> +<TGConnectingPoint num="0" id="141" /> +<TGConnectingPoint num="1" id="142" /> +<TGConnectingPoint num="2" id="143" /> +<TGConnectingPoint num="3" id="144" /> +<TGConnectingPoint num="4" id="145" /> +<TGConnectingPoint num="5" id="146" /> +<extraparam> +<Attribute access="2" id="id" value="2" type="0" typeOther="" set="true" /> +<Attribute access="2" id="id_received" value="" type="0" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="150" > +<father id="175" num="1" /> +<cdparam x="204" y="315" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="76" maxY="76" /> +<infoparam name="Tobject gates" value="+ sendRequest : OutGate; ++ getData : InGate; +- dataReceived : Gate; +" /> +<TGConnectingPoint num="0" id="148" /> +<TGConnectingPoint num="1" id="149" /> +<extraparam> +<Attribute access="2" id="sendRequest" value="" type="2" typeOther="" set="false" /> +<Attribute access="2" id="getData" value="" type="3" typeOther="" set="false" /> +<Attribute access="0" id="dataReceived" value="" type="1" typeOther="" set="false" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="157" > +<father id="175" num="2" /> +<cdparam x="204" y="345" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="106" maxY="106" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="151" /> +<TGConnectingPoint num="1" id="152" /> +<TGConnectingPoint num="2" id="153" /> +<TGConnectingPoint num="3" id="154" /> +<TGConnectingPoint num="4" id="155" /> +<TGConnectingPoint num="5" id="156" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="166" > +<father id="175" num="3" /> +<cdparam x="204" y="375" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="136" maxY="136" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="158" /> +<TGConnectingPoint num="1" id="159" /> +<TGConnectingPoint num="2" id="160" /> +<TGConnectingPoint num="3" id="161" /> +<TGConnectingPoint num="4" id="162" /> +<TGConnectingPoint num="5" id="163" /> +<TGConnectingPoint num="6" id="164" /> +<TGConnectingPoint num="7" id="165" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="210" > +<cdparam x="633" y="198" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Medium" /> +<TGConnectingPoint num="0" id="202" /> +<TGConnectingPoint num="1" id="203" /> +<TGConnectingPoint num="2" id="204" /> +<TGConnectingPoint num="3" id="205" /> +<TGConnectingPoint num="4" id="206" /> +<TGConnectingPoint num="5" id="207" /> +<TGConnectingPoint num="6" id="208" /> +<TGConnectingPoint num="7" id="209" /> +<extraparam> +<Start isStart="true" /> +<Observer isObserver="false" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="182" > +<father id="210" num="0" /> +<cdparam x="633" y="228" /> +<sizeparam width="150" height="62" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="62" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="30" maxY="30" /> +<infoparam name="Tclass attributes" value="+ tr_delay = 10 : Natural; ++ id1 : Natural; ++ id2 : Natural; +" /> +<TGConnectingPoint num="0" id="176" /> +<TGConnectingPoint num="1" id="177" /> +<TGConnectingPoint num="2" id="178" /> +<TGConnectingPoint num="3" id="179" /> +<TGConnectingPoint num="4" id="180" /> +<TGConnectingPoint num="5" id="181" /> +<extraparam> +<Attribute access="2" id="tr_delay" value="10" type="0" typeOther="" /> +<Attribute access="2" id="id1" value="" type="0" typeOther="" /> +<Attribute access="2" id="id2" value="" type="0" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="185" > +<father id="210" num="1" /> +<cdparam x="633" y="290" /> +<sizeparam width="150" height="142" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="142" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="92" maxY="92" /> +<infoparam name="Tclass gates" value="+ port1_i : InGate; ++ port2_i : InGate; ++ port3_i : InGate; ++ port1_o : OutGate; ++ port2_o : OutGate; ++ port3_o : OutGate; ++ port_i : InGate; ++ port_o : OutGate; +" /> +<TGConnectingPoint num="0" id="183" /> +<TGConnectingPoint num="1" id="184" /> +<extraparam> +<Attribute access="2" id="port1_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port2_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port3_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port1_o" value="" type="2" typeOther="" /> +<Attribute access="2" id="port2_o" value="" type="2" typeOther="" /> +<Attribute access="2" id="port3_o" value="" type="2" typeOther="" /> +<Attribute access="2" id="port_i" value="" type="3" typeOther="" /> +<Attribute access="2" id="port_o" value="" type="2" typeOther="" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="192" > +<father id="210" num="2" /> +<cdparam x="633" y="432" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="234" maxY="234" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="186" /> +<TGConnectingPoint num="1" id="187" /> +<TGConnectingPoint num="2" id="188" /> +<TGConnectingPoint num="3" id="189" /> +<TGConnectingPoint num="4" id="190" /> +<TGConnectingPoint num="5" id="191" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="201" > +<father id="210" num="3" /> +<cdparam x="633" y="462" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" maxWidth="1000" maxHeight="2000" minDesiredWidth="150" minDesiredHeight="30" /> +<hidden value="false" /> +<cdrectangleparam minX="0" maxX="0" minY="264" maxY="264" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="193" /> +<TGConnectingPoint num="1" id="194" /> +<TGConnectingPoint num="2" id="195" /> +<TGConnectingPoint num="3" id="196" /> +<TGConnectingPoint num="4" id="197" /> +<TGConnectingPoint num="5" id="198" /> +<TGConnectingPoint num="6" id="199" /> +<TGConnectingPoint num="7" id="200" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="224" > +<cdparam x="457" y="142" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between cl1_WebClient and Medium" value="Synchro" /> +<TGConnectingPoint num="0" id="212" /> +<TGConnectingPoint num="1" id="213" /> +<TGConnectingPoint num="2" id="214" /> +<TGConnectingPoint num="3" id="215" /> +<TGConnectingPoint num="4" id="216" /> +<TGConnectingPoint num="5" id="217" /> +<TGConnectingPoint num="6" id="218" /> +<TGConnectingPoint num="7" id="219" /> +<TGConnectingPoint num="8" id="220" /> +<TGConnectingPoint num="9" id="221" /> +<TGConnectingPoint num="10" id="222" /> +<TGConnectingPoint num="11" id="223" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="211" > +<father id="224" num="0" /> +<cdparam x="383" y="101" /> +<sizeparam width="263" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="105" g1="sendRequest" t2="210" g2="port1_i" /> +<Synchro t1="105" g1="getData" t2="210" g2="port1_o" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="238" > +<cdparam x="443" y="303" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between cl2_WebClient and Medium" value="Synchro" /> +<TGConnectingPoint num="0" id="226" /> +<TGConnectingPoint num="1" id="227" /> +<TGConnectingPoint num="2" id="228" /> +<TGConnectingPoint num="3" id="229" /> +<TGConnectingPoint num="4" id="230" /> +<TGConnectingPoint num="5" id="231" /> +<TGConnectingPoint num="6" id="232" /> +<TGConnectingPoint num="7" id="233" /> +<TGConnectingPoint num="8" id="234" /> +<TGConnectingPoint num="9" id="235" /> +<TGConnectingPoint num="10" id="236" /> +<TGConnectingPoint num="11" id="237" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="225" > +<father id="238" num="0" /> +<cdparam x="360" y="380" /> +<sizeparam width="263" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="175" g1="sendRequest" t2="210" g2="port2_i" /> +<Synchro t1="175" g1="getData" t2="210" g2="port2_o" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="252" > +<cdparam x="442" y="436" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between cl3_WebClient and Medium" value="Synchro" /> +<TGConnectingPoint num="0" id="240" /> +<TGConnectingPoint num="1" id="241" /> +<TGConnectingPoint num="2" id="242" /> +<TGConnectingPoint num="3" id="243" /> +<TGConnectingPoint num="4" id="244" /> +<TGConnectingPoint num="5" id="245" /> +<TGConnectingPoint num="6" id="246" /> +<TGConnectingPoint num="7" id="247" /> +<TGConnectingPoint num="8" id="248" /> +<TGConnectingPoint num="9" id="249" /> +<TGConnectingPoint num="10" id="250" /> +<TGConnectingPoint num="11" id="251" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="239" > +<father id="252" num="0" /> +<cdparam x="439" y="558" /> +<sizeparam width="263" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="140" g1="sendRequest" t2="210" g2="port3_i" /> +<Synchro t1="140" g1="getData" t2="210" g2="port3_o" /> +</extraparam> +</SUBCOMPONENT> + +<COMPONENT type="205" id="266" > +<cdparam x="816" y="274" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Medium and WebServer" value="Synchro" /> +<TGConnectingPoint num="0" id="254" /> +<TGConnectingPoint num="1" id="255" /> +<TGConnectingPoint num="2" id="256" /> +<TGConnectingPoint num="3" id="257" /> +<TGConnectingPoint num="4" id="258" /> +<TGConnectingPoint num="5" id="259" /> +<TGConnectingPoint num="6" id="260" /> +<TGConnectingPoint num="7" id="261" /> +<TGConnectingPoint num="8" id="262" /> +<TGConnectingPoint num="9" id="263" /> +<TGConnectingPoint num="10" id="264" /> +<TGConnectingPoint num="11" id="265" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="253" > +<father id="266" num="0" /> +<cdparam x="818" y="233" /> +<sizeparam width="229" height="36" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="210" g1="port_i" t2="70" g2="sendData" /> +<Synchro t1="210" g1="port_o" t2="70" g2="getRequest" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="268" > +<cdparam x="354" y="159" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tobject gates to Tclass attributes" value="null" /> +<TGConnectingPoint num="0" id="267" /> +<P1 x="356" y="151" id="79" /> +<P2 x="633" y="259" id="176" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="270" > +<cdparam x="354" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="269" /> +<P1 x="354" y="360" id="152" /> +<P2 x="633" y="361" id="183" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="272" > +<cdparam x="353" y="528" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to Tclass operations" value="null" /> +<TGConnectingPoint num="0" id="271" /> +<P1 x="354" y="541" id="117" /> +<P2 x="633" y="447" id="186" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="102" id="274" > +<cdparam x="711" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="273" /> +<P1 x="783" y="361" id="184" /> +<P2 x="950" y="361" id="43" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="275" > +<cdparam x="458" y="208" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tobject gates to synchro composition operator" value="null" /> +<P1 x="494" y="205" id="267" /> +<P2 x="507" y="167" id="214" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="276" > +<cdparam x="493" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to synchro composition operator" value="null" /> +<P1 x="493" y="360" id="269" /> +<P2 x="493" y="328" id="228" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="277" > +<cdparam x="493" y="496" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass operations to synchro composition operator" value="null" /> +<P1 x="493" y="494" id="271" /> +<P2 x="492" y="461" id="242" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="103" id="278" > +<cdparam x="866" y="362" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="866" y="361" id="273" /> +<P2 x="866" y="299" id="256" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="WebClient" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="280" > +<cdparam x="417" y="123" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="279" /> +</COMPONENT> + +<COMPONENT type="15" id="291" > +<cdparam x="307" y="217" /> +<sizeparam width="98" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="sendRequest!id" /> +<TGConnectingPoint num="0" id="281" /> +<TGConnectingPoint num="1" id="282" /> +<TGConnectingPoint num="2" id="283" /> +<TGConnectingPoint num="3" id="284" /> +<TGConnectingPoint num="4" id="285" /> +<TGConnectingPoint num="5" id="286" /> +<TGConnectingPoint num="6" id="287" /> +<TGConnectingPoint num="7" id="288" /> +<TGConnectingPoint num="8" id="289" /> +<TGConnectingPoint num="9" id="290" /> +</COMPONENT> + +<COMPONENT type="13" id="293" > +<cdparam x="346" y="274" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="292" /> +</COMPONENT> + +<COMPONENT type="12" id="309" > +<cdparam x="349" y="171" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="295" /> +<TGConnectingPoint num="1" id="296" /> +<TGConnectingPoint num="2" id="297" /> +<TGConnectingPoint num="3" id="298" /> +<TGConnectingPoint num="4" id="299" /> +<TGConnectingPoint num="5" id="300" /> +<TGConnectingPoint num="6" id="301" /> +<TGConnectingPoint num="7" id="302" /> +<TGConnectingPoint num="8" id="303" /> +<TGConnectingPoint num="9" id="304" /> +<TGConnectingPoint num="10" id="305" /> +<TGConnectingPoint num="11" id="306" /> +<TGConnectingPoint num="12" id="307" /> +<TGConnectingPoint num="13" id="308" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="294" > +<father id="309" num="0" /> +<cdparam x="499" y="168" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="115" maxX="150" minY="-3" maxY="-3" /> +<infoparam name="list of synchronization gates" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="320" > +<cdparam x="437" y="275" /> +<sizeparam width="123" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="getData?id_received" /> +<TGConnectingPoint num="0" id="310" /> +<TGConnectingPoint num="1" id="311" /> +<TGConnectingPoint num="2" id="312" /> +<TGConnectingPoint num="3" id="313" /> +<TGConnectingPoint num="4" id="314" /> +<TGConnectingPoint num="5" id="315" /> +<TGConnectingPoint num="6" id="316" /> +<TGConnectingPoint num="7" id="317" /> +<TGConnectingPoint num="8" id="318" /> +<TGConnectingPoint num="9" id="319" /> +</COMPONENT> + +<COMPONENT type="17" id="343" > +<cdparam x="482" y="218" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="321" /> +<TGConnectingPoint num="1" id="322" /> +<TGConnectingPoint num="2" id="323" /> +<TGConnectingPoint num="3" id="324" /> +<TGConnectingPoint num="4" id="325" /> +<TGConnectingPoint num="5" id="326" /> +<TGConnectingPoint num="6" id="327" /> +<TGConnectingPoint num="7" id="328" /> +<TGConnectingPoint num="8" id="329" /> +<TGConnectingPoint num="9" id="330" /> +<TGConnectingPoint num="10" id="331" /> +<TGConnectingPoint num="11" id="332" /> +<TGConnectingPoint num="12" id="333" /> +<TGConnectingPoint num="13" id="334" /> +<TGConnectingPoint num="14" id="335" /> +<TGConnectingPoint num="15" id="336" /> +<TGConnectingPoint num="16" id="337" /> +<TGConnectingPoint num="17" id="338" /> +<TGConnectingPoint num="18" id="339" /> +<TGConnectingPoint num="19" id="340" /> +<TGConnectingPoint num="20" id="341" /> +<TGConnectingPoint num="21" id="342" /> +</COMPONENT> + +<COMPONENT type="19" id="359" > +<cdparam x="485" y="325" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="347" /> +<TGConnectingPoint num="1" id="348" /> +<TGConnectingPoint num="2" id="349" /> +<TGConnectingPoint num="3" id="350" /> +<TGConnectingPoint num="4" id="351" /> +<TGConnectingPoint num="5" id="352" /> +<TGConnectingPoint num="6" id="353" /> +<TGConnectingPoint num="7" id="354" /> +<TGConnectingPoint num="8" id="355" /> +<TGConnectingPoint num="9" id="356" /> +<TGConnectingPoint num="10" id="357" /> +<TGConnectingPoint num="11" id="358" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="344" > +<father id="359" num="0" /> +<cdparam x="410" y="335" /> +<sizeparam width="127" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[not(id_received == id) ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="345" > +<father id="359" num="1" /> +<cdparam x="540" y="335" /> +<sizeparam width="102" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[id_received == id ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="346" > +<father id="359" num="2" /> +<cdparam x="505" y="370" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="370" > +<cdparam x="529" y="403" /> +<sizeparam width="85" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="dataReceived" /> +<TGConnectingPoint num="0" id="360" /> +<TGConnectingPoint num="1" id="361" /> +<TGConnectingPoint num="2" id="362" /> +<TGConnectingPoint num="3" id="363" /> +<TGConnectingPoint num="4" id="364" /> +<TGConnectingPoint num="5" id="365" /> +<TGConnectingPoint num="6" id="366" /> +<TGConnectingPoint num="7" id="367" /> +<TGConnectingPoint num="8" id="368" /> +<TGConnectingPoint num="9" id="369" /> +</COMPONENT> + +<CONNECTOR type="101" id="371" > +<cdparam x="290" y="129" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to action state" value="null" /> +<P1 x="424" y="143" id="279" /> +<P2 x="424" y="171" id="297" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="372" > +<cdparam x="374" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to action state" value="null" /> +<P1 x="374" y="176" id="300" /> +<P2 x="356" y="212" id="281" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="373" > +<cdparam x="356" y="242" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="356" y="242" id="282" /> +<P2 x="356" y="269" id="292" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="374" > +<cdparam x="473" y="176" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="473" y="176" id="304" /> +<P2 x="497" y="218" id="321" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="375" > +<cdparam x="497" y="248" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="497" y="248" id="324" /> +<P2 x="498" y="270" id="310" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="379" > +<cdparam x="460" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to junction" value="null" /> +<P1 x="460" y="340" id="348" /> +<P2 x="482" y="233" id="322" /> +<Point x="422" y="367" /> +<Point x="398" y="346" /> +<Point x="402" y="264" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="376" > +<father id="379" num="0" /> +<cdparam x="422" y="367" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="377" > +<father id="379" num="1" /> +<cdparam x="398" y="346" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="378" > +<father id="379" num="2" /> +<cdparam x="402" y="264" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="380" > +<cdparam x="540" y="340" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="540" y="340" id="349" /> +<P2 x="571" y="398" id="360" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="381" > +<cdparam x="498" y="300" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to choice" value="null" /> +<P1 x="498" y="300" id="311" /> +<P2 x="500" y="315" id="347" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="385" > +<cdparam x="571" y="428" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="571" y="428" id="361" /> +<P2 x="512" y="233" id="323" /> +<Point x="565" y="460" /> +<Point x="715" y="462" /> +<Point x="717" y="262" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="382" > +<father id="385" num="0" /> +<cdparam x="565" y="460" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="383" > +<father id="385" num="1" /> +<cdparam x="715" y="462" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="384" > +<father id="385" num="2" /> +<cdparam x="717" y="262" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="WebServer" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="387" > +<cdparam x="357" y="138" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="386" /> +</COMPONENT> + +<COMPONENT type="17" id="410" > +<cdparam x="349" y="177" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="388" /> +<TGConnectingPoint num="1" id="389" /> +<TGConnectingPoint num="2" id="390" /> +<TGConnectingPoint num="3" id="391" /> +<TGConnectingPoint num="4" id="392" /> +<TGConnectingPoint num="5" id="393" /> +<TGConnectingPoint num="6" id="394" /> +<TGConnectingPoint num="7" id="395" /> +<TGConnectingPoint num="8" id="396" /> +<TGConnectingPoint num="9" id="397" /> +<TGConnectingPoint num="10" id="398" /> +<TGConnectingPoint num="11" id="399" /> +<TGConnectingPoint num="12" id="400" /> +<TGConnectingPoint num="13" id="401" /> +<TGConnectingPoint num="14" id="402" /> +<TGConnectingPoint num="15" id="403" /> +<TGConnectingPoint num="16" id="404" /> +<TGConnectingPoint num="17" id="405" /> +<TGConnectingPoint num="18" id="406" /> +<TGConnectingPoint num="19" id="407" /> +<TGConnectingPoint num="20" id="408" /> +<TGConnectingPoint num="21" id="409" /> +</COMPONENT> + +<COMPONENT type="15" id="421" > +<cdparam x="319" y="235" /> +<sizeparam width="91" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="getRequest?id" /> +<TGConnectingPoint num="0" id="411" /> +<TGConnectingPoint num="1" id="412" /> +<TGConnectingPoint num="2" id="413" /> +<TGConnectingPoint num="3" id="414" /> +<TGConnectingPoint num="4" id="415" /> +<TGConnectingPoint num="5" id="416" /> +<TGConnectingPoint num="6" id="417" /> +<TGConnectingPoint num="7" id="418" /> +<TGConnectingPoint num="8" id="419" /> +<TGConnectingPoint num="9" id="420" /> +</COMPONENT> + +<COMPONENT type="11" id="433" > +<cdparam x="359" y="286" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="423" /> +<TGConnectingPoint num="1" id="424" /> +<TGConnectingPoint num="2" id="425" /> +<TGConnectingPoint num="3" id="426" /> +<TGConnectingPoint num="4" id="427" /> +<TGConnectingPoint num="5" id="428" /> +<TGConnectingPoint num="6" id="429" /> +<TGConnectingPoint num="7" id="430" /> +<TGConnectingPoint num="8" id="431" /> +<TGConnectingPoint num="9" id="432" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="422" > +<father id="433" num="0" /> +<cdparam x="374" y="306" /> +<sizeparam width="94" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="computing_delay" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="444" > +<cdparam x="326" y="352" /> +<sizeparam width="77" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="sendData!id" /> +<TGConnectingPoint num="0" id="434" /> +<TGConnectingPoint num="1" id="435" /> +<TGConnectingPoint num="2" id="436" /> +<TGConnectingPoint num="3" id="437" /> +<TGConnectingPoint num="4" id="438" /> +<TGConnectingPoint num="5" id="439" /> +<TGConnectingPoint num="6" id="440" /> +<TGConnectingPoint num="7" id="441" /> +<TGConnectingPoint num="8" id="442" /> +<TGConnectingPoint num="9" id="443" /> +</COMPONENT> + +<CONNECTOR type="101" id="445" > +<cdparam x="364" y="158" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to junction" value="null" /> +<P1 x="364" y="158" id="386" /> +<P2 x="364" y="177" id="388" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="446" > +<cdparam x="369" y="261" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="364" y="260" id="412" /> +<P2 x="364" y="281" id="423" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="447" > +<cdparam x="369" y="324" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="364" y="321" id="424" /> +<P2 x="364" y="347" id="434" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="448" > +<cdparam x="364" y="207" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="364" y="207" id="391" /> +<P2 x="364" y="230" id="411" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="452" > +<cdparam x="369" y="377" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="364" y="377" id="435" /> +<P2 x="349" y="192" id="389" /> +<Point x="364" y="407" /> +<Point x="308" y="407" /> +<Point x="308" y="192" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="449" > +<father id="452" num="0" /> +<cdparam x="364" y="407" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="450" > +<father id="452" num="1" /> +<cdparam x="308" y="407" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="451" > +<father id="452" num="2" /> +<cdparam x="308" y="192" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Medium" minX="10" maxX="1900" minY="10" maxY="900" java="false" > +<COMPONENT type="14" id="454" > +<cdparam x="454" y="93" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="453" /> +</COMPONENT> + +<COMPONENT type="12" id="470" > +<cdparam x="386" y="163" /> +<sizeparam width="150" height="5" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="parallel / synchro" value="null" /> +<TGConnectingPoint num="0" id="456" /> +<TGConnectingPoint num="1" id="457" /> +<TGConnectingPoint num="2" id="458" /> +<TGConnectingPoint num="3" id="459" /> +<TGConnectingPoint num="4" id="460" /> +<TGConnectingPoint num="5" id="461" /> +<TGConnectingPoint num="6" id="462" /> +<TGConnectingPoint num="7" id="463" /> +<TGConnectingPoint num="8" id="464" /> +<TGConnectingPoint num="9" id="465" /> +<TGConnectingPoint num="10" id="466" /> +<TGConnectingPoint num="11" id="467" /> +<TGConnectingPoint num="12" id="468" /> +<TGConnectingPoint num="13" id="469" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="455" > +<father id="470" num="0" /> +<cdparam x="536" y="160" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="115" maxX="150" minY="-3" maxY="-3" /> +<infoparam name="list of synchronization gates" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="19" id="486" > +<cdparam x="315" y="271" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="choice" value="null" /> +<TGConnectingPoint num="0" id="474" /> +<TGConnectingPoint num="1" id="475" /> +<TGConnectingPoint num="2" id="476" /> +<TGConnectingPoint num="3" id="477" /> +<TGConnectingPoint num="4" id="478" /> +<TGConnectingPoint num="5" id="479" /> +<TGConnectingPoint num="6" id="480" /> +<TGConnectingPoint num="7" id="481" /> +<TGConnectingPoint num="8" id="482" /> +<TGConnectingPoint num="9" id="483" /> +<TGConnectingPoint num="10" id="484" /> +<TGConnectingPoint num="11" id="485" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="471" > +<father id="486" num="0" /> +<cdparam x="290" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="-20" minY="10" maxY="35" /> +<infoparam name="guard 1" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="472" > +<father id="486" num="1" /> +<cdparam x="350" y="281" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="35" maxX="55" minY="10" maxY="35" /> +<infoparam name="guard 2" value="[ ]" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="473" > +<father id="486" num="2" /> +<cdparam x="335" y="316" /> +<sizeparam width="9" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="20" maxX="40" minY="45" maxY="70" /> +<infoparam name="guard 3" value="[ ]" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="509" > +<cdparam x="316" y="214" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="487" /> +<TGConnectingPoint num="1" id="488" /> +<TGConnectingPoint num="2" id="489" /> +<TGConnectingPoint num="3" id="490" /> +<TGConnectingPoint num="4" id="491" /> +<TGConnectingPoint num="5" id="492" /> +<TGConnectingPoint num="6" id="493" /> +<TGConnectingPoint num="7" id="494" /> +<TGConnectingPoint num="8" id="495" /> +<TGConnectingPoint num="9" id="496" /> +<TGConnectingPoint num="10" id="497" /> +<TGConnectingPoint num="11" id="498" /> +<TGConnectingPoint num="12" id="499" /> +<TGConnectingPoint num="13" id="500" /> +<TGConnectingPoint num="14" id="501" /> +<TGConnectingPoint num="15" id="502" /> +<TGConnectingPoint num="16" id="503" /> +<TGConnectingPoint num="17" id="504" /> +<TGConnectingPoint num="18" id="505" /> +<TGConnectingPoint num="19" id="506" /> +<TGConnectingPoint num="20" id="507" /> +<TGConnectingPoint num="21" id="508" /> +</COMPONENT> + +<COMPONENT type="15" id="520" > +<cdparam x="193" y="380" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port1_i?id1" /> +<TGConnectingPoint num="0" id="510" /> +<TGConnectingPoint num="1" id="511" /> +<TGConnectingPoint num="2" id="512" /> +<TGConnectingPoint num="3" id="513" /> +<TGConnectingPoint num="4" id="514" /> +<TGConnectingPoint num="5" id="515" /> +<TGConnectingPoint num="6" id="516" /> +<TGConnectingPoint num="7" id="517" /> +<TGConnectingPoint num="8" id="518" /> +<TGConnectingPoint num="9" id="519" /> +</COMPONENT> + +<COMPONENT type="15" id="531" > +<cdparam x="401" y="381" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port3_i?id1" /> +<TGConnectingPoint num="0" id="521" /> +<TGConnectingPoint num="1" id="522" /> +<TGConnectingPoint num="2" id="523" /> +<TGConnectingPoint num="3" id="524" /> +<TGConnectingPoint num="4" id="525" /> +<TGConnectingPoint num="5" id="526" /> +<TGConnectingPoint num="6" id="527" /> +<TGConnectingPoint num="7" id="528" /> +<TGConnectingPoint num="8" id="529" /> +<TGConnectingPoint num="9" id="530" /> +</COMPONENT> + +<COMPONENT type="15" id="542" > +<cdparam x="294" y="381" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port2_i?id1" /> +<TGConnectingPoint num="0" id="532" /> +<TGConnectingPoint num="1" id="533" /> +<TGConnectingPoint num="2" id="534" /> +<TGConnectingPoint num="3" id="535" /> +<TGConnectingPoint num="4" id="536" /> +<TGConnectingPoint num="5" id="537" /> +<TGConnectingPoint num="6" id="538" /> +<TGConnectingPoint num="7" id="539" /> +<TGConnectingPoint num="8" id="540" /> +<TGConnectingPoint num="9" id="541" /> +</COMPONENT> + +<COMPONENT type="17" id="565" > +<cdparam x="315" y="444" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="543" /> +<TGConnectingPoint num="1" id="544" /> +<TGConnectingPoint num="2" id="545" /> +<TGConnectingPoint num="3" id="546" /> +<TGConnectingPoint num="4" id="547" /> +<TGConnectingPoint num="5" id="548" /> +<TGConnectingPoint num="6" id="549" /> +<TGConnectingPoint num="7" id="550" /> +<TGConnectingPoint num="8" id="551" /> +<TGConnectingPoint num="9" id="552" /> +<TGConnectingPoint num="10" id="553" /> +<TGConnectingPoint num="11" id="554" /> +<TGConnectingPoint num="12" id="555" /> +<TGConnectingPoint num="13" id="556" /> +<TGConnectingPoint num="14" id="557" /> +<TGConnectingPoint num="15" id="558" /> +<TGConnectingPoint num="16" id="559" /> +<TGConnectingPoint num="17" id="560" /> +<TGConnectingPoint num="18" id="561" /> +<TGConnectingPoint num="19" id="562" /> +<TGConnectingPoint num="20" id="563" /> +<TGConnectingPoint num="21" id="564" /> +</COMPONENT> + +<COMPONENT type="11" id="577" > +<cdparam x="326" y="497" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="567" /> +<TGConnectingPoint num="1" id="568" /> +<TGConnectingPoint num="2" id="569" /> +<TGConnectingPoint num="3" id="570" /> +<TGConnectingPoint num="4" id="571" /> +<TGConnectingPoint num="5" id="572" /> +<TGConnectingPoint num="6" id="573" /> +<TGConnectingPoint num="7" id="574" /> +<TGConnectingPoint num="8" id="575" /> +<TGConnectingPoint num="9" id="576" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="566" > +<father id="577" num="0" /> +<cdparam x="341" y="517" /> +<sizeparam width="43" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="tr_delay" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="588" > +<cdparam x="300" y="557" /> +<sizeparam width="65" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port_o!id1" /> +<TGConnectingPoint num="0" id="578" /> +<TGConnectingPoint num="1" id="579" /> +<TGConnectingPoint num="2" id="580" /> +<TGConnectingPoint num="3" id="581" /> +<TGConnectingPoint num="4" id="582" /> +<TGConnectingPoint num="5" id="583" /> +<TGConnectingPoint num="6" id="584" /> +<TGConnectingPoint num="7" id="585" /> +<TGConnectingPoint num="8" id="586" /> +<TGConnectingPoint num="9" id="587" /> +</COMPONENT> + +<COMPONENT type="15" id="599" > +<cdparam x="535" y="271" /> +<sizeparam width="65" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port_i?id2" /> +<TGConnectingPoint num="0" id="589" /> +<TGConnectingPoint num="1" id="590" /> +<TGConnectingPoint num="2" id="591" /> +<TGConnectingPoint num="3" id="592" /> +<TGConnectingPoint num="4" id="593" /> +<TGConnectingPoint num="5" id="594" /> +<TGConnectingPoint num="6" id="595" /> +<TGConnectingPoint num="7" id="596" /> +<TGConnectingPoint num="8" id="597" /> +<TGConnectingPoint num="9" id="598" /> +</COMPONENT> + +<COMPONENT type="17" id="622" > +<cdparam x="552" y="226" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="600" /> +<TGConnectingPoint num="1" id="601" /> +<TGConnectingPoint num="2" id="602" /> +<TGConnectingPoint num="3" id="603" /> +<TGConnectingPoint num="4" id="604" /> +<TGConnectingPoint num="5" id="605" /> +<TGConnectingPoint num="6" id="606" /> +<TGConnectingPoint num="7" id="607" /> +<TGConnectingPoint num="8" id="608" /> +<TGConnectingPoint num="9" id="609" /> +<TGConnectingPoint num="10" id="610" /> +<TGConnectingPoint num="11" id="611" /> +<TGConnectingPoint num="12" id="612" /> +<TGConnectingPoint num="13" id="613" /> +<TGConnectingPoint num="14" id="614" /> +<TGConnectingPoint num="15" id="615" /> +<TGConnectingPoint num="16" id="616" /> +<TGConnectingPoint num="17" id="617" /> +<TGConnectingPoint num="18" id="618" /> +<TGConnectingPoint num="19" id="619" /> +<TGConnectingPoint num="20" id="620" /> +<TGConnectingPoint num="21" id="621" /> +</COMPONENT> + +<COMPONENT type="11" id="634" > +<cdparam x="562" y="324" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="624" /> +<TGConnectingPoint num="1" id="625" /> +<TGConnectingPoint num="2" id="626" /> +<TGConnectingPoint num="3" id="627" /> +<TGConnectingPoint num="4" id="628" /> +<TGConnectingPoint num="5" id="629" /> +<TGConnectingPoint num="6" id="630" /> +<TGConnectingPoint num="7" id="631" /> +<TGConnectingPoint num="8" id="632" /> +<TGConnectingPoint num="9" id="633" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="623" > +<father id="634" num="0" /> +<cdparam x="577" y="344" /> +<sizeparam width="43" height="16" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="tr_delay" /> +</SUBCOMPONENT> + +<COMPONENT type="17" id="657" > +<cdparam x="552" y="387" /> +<sizeparam width="30" height="30" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="junction" value="" /> +<TGConnectingPoint num="0" id="635" /> +<TGConnectingPoint num="1" id="636" /> +<TGConnectingPoint num="2" id="637" /> +<TGConnectingPoint num="3" id="638" /> +<TGConnectingPoint num="4" id="639" /> +<TGConnectingPoint num="5" id="640" /> +<TGConnectingPoint num="6" id="641" /> +<TGConnectingPoint num="7" id="642" /> +<TGConnectingPoint num="8" id="643" /> +<TGConnectingPoint num="9" id="644" /> +<TGConnectingPoint num="10" id="645" /> +<TGConnectingPoint num="11" id="646" /> +<TGConnectingPoint num="12" id="647" /> +<TGConnectingPoint num="13" id="648" /> +<TGConnectingPoint num="14" id="649" /> +<TGConnectingPoint num="15" id="650" /> +<TGConnectingPoint num="16" id="651" /> +<TGConnectingPoint num="17" id="652" /> +<TGConnectingPoint num="18" id="653" /> +<TGConnectingPoint num="19" id="654" /> +<TGConnectingPoint num="20" id="655" /> +<TGConnectingPoint num="21" id="656" /> +</COMPONENT> + +<COMPONENT type="15" id="668" > +<cdparam x="531" y="448" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port1_o!id2" /> +<TGConnectingPoint num="0" id="658" /> +<TGConnectingPoint num="1" id="659" /> +<TGConnectingPoint num="2" id="660" /> +<TGConnectingPoint num="3" id="661" /> +<TGConnectingPoint num="4" id="662" /> +<TGConnectingPoint num="5" id="663" /> +<TGConnectingPoint num="6" id="664" /> +<TGConnectingPoint num="7" id="665" /> +<TGConnectingPoint num="8" id="666" /> +<TGConnectingPoint num="9" id="667" /> +</COMPONENT> + +<COMPONENT type="15" id="679" > +<cdparam x="531" y="542" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port3_o!id2" /> +<TGConnectingPoint num="0" id="669" /> +<TGConnectingPoint num="1" id="670" /> +<TGConnectingPoint num="2" id="671" /> +<TGConnectingPoint num="3" id="672" /> +<TGConnectingPoint num="4" id="673" /> +<TGConnectingPoint num="5" id="674" /> +<TGConnectingPoint num="6" id="675" /> +<TGConnectingPoint num="7" id="676" /> +<TGConnectingPoint num="8" id="677" /> +<TGConnectingPoint num="9" id="678" /> +</COMPONENT> + +<COMPONENT type="15" id="690" > +<cdparam x="531" y="501" /> +<sizeparam width="72" height="20" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="port2_o!id2" /> +<TGConnectingPoint num="0" id="680" /> +<TGConnectingPoint num="1" id="681" /> +<TGConnectingPoint num="2" id="682" /> +<TGConnectingPoint num="3" id="683" /> +<TGConnectingPoint num="4" id="684" /> +<TGConnectingPoint num="5" id="685" /> +<TGConnectingPoint num="6" id="686" /> +<TGConnectingPoint num="7" id="687" /> +<TGConnectingPoint num="8" id="688" /> +<TGConnectingPoint num="9" id="689" /> +</COMPONENT> + +<CONNECTOR type="101" id="691" > +<cdparam x="410" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="411" y="168" id="461" /> +<P2 x="331" y="214" id="487" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="692" > +<cdparam x="331" y="244" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to choice" value="null" /> +<P1 x="331" y="244" id="490" /> +<P2 x="330" y="261" id="474" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="693" > +<cdparam x="290" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="290" y="286" id="475" /> +<P2 x="229" y="375" id="510" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="694" > +<cdparam x="330" y="326" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="330" y="326" id="477" /> +<P2 x="330" y="376" id="532" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="695" > +<cdparam x="370" y="286" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from choice to action state" value="null" /> +<P1 x="370" y="286" id="476" /> +<P2 x="437" y="376" id="521" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="696" > +<cdparam x="332" y="475" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to deterministic delay" value="null" /> +<P1 x="330" y="474" id="546" /> +<P2 x="331" y="492" id="567" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="697" > +<cdparam x="333" y="533" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="331" y="532" id="568" /> +<P2 x="332" y="552" id="578" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="701" > +<cdparam x="332" y="582" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="332" y="582" id="579" /> +<P2 x="316" y="229" id="488" /> +<Point x="332" y="615" /> +<Point x="158" y="615" /> +<Point x="158" y="229" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="698" > +<father id="701" num="0" /> +<cdparam x="332" y="615" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="699" > +<father id="701" num="1" /> +<cdparam x="158" y="615" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="700" > +<father id="701" num="2" /> +<cdparam x="158" y="229" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="702" > +<cdparam x="229" y="405" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="229" y="405" id="511" /> +<P2 x="315" y="459" id="544" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="703" > +<cdparam x="330" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="330" y="406" id="533" /> +<P2 x="330" y="444" id="543" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="704" > +<cdparam x="437" y="406" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="437" y="406" id="522" /> +<P2 x="345" y="459" id="545" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="705" > +<cdparam x="567" y="296" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to deterministic delay" value="null" /> +<P1 x="567" y="296" id="590" /> +<P2 x="567" y="319" id="624" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="706" > +<cdparam x="575" y="246" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="567" y="256" id="603" /> +<P2 x="567" y="266" id="589" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="707" > +<cdparam x="567" y="359" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to junction" value="null" /> +<P1 x="567" y="359" id="625" /> +<P2 x="567" y="387" id="635" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="708" > +<cdparam x="567" y="417" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from junction to action state" value="null" /> +<P1 x="567" y="417" id="638" /> +<P2 x="567" y="443" id="658" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="709" > +<cdparam x="567" y="473" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="567" y="473" id="659" /> +<P2 x="567" y="496" id="680" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="710" > +<cdparam x="567" y="526" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to action state" value="null" /> +<P1 x="567" y="526" id="681" /> +<P2 x="567" y="537" id="669" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="714" > +<cdparam x="567" y="567" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to junction" value="null" /> +<P1 x="567" y="567" id="670" /> +<P2 x="582" y="241" id="602" /> +<Point x="567" y="599" /> +<Point x="664" y="599" /> +<Point x="664" y="241" /> +<AutomaticDrawing data="true" /> +</CONNECTOR><SUBCOMPONENT type="-1" id="711" > +<father id="714" num="0" /> +<cdparam x="567" y="599" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="712" > +<father id="714" num="1" /> +<cdparam x="664" y="599" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="713" > +<father id="714" num="2" /> +<cdparam x="664" y="241" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<hidden value="false" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="point " value="null" /> +</SUBCOMPONENT> + +<CONNECTOR type="101" id="715" > +<cdparam x="510" y="168" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from parallel / synchro to junction" value="null" /> +<P1 x="510" y="168" id="465" /> +<P2 x="567" y="226" id="600" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> +<CONNECTOR type="101" id="716" > +<cdparam x="519" y="100" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" maxWidth="1000" maxHeight="2000" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to parallel / synchro" value="null" /> +<P1 x="461" y="113" id="453" /> +<P2 x="461" y="163" id="458" /> +<AutomaticDrawing data="true" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/modeling/manual-HW.xml b/preinstallTTool/macos/TTool/modeling/manual-HW.xml new file mode 100755 index 0000000000000000000000000000000000000000..c519b092369c827bab2d52c240c159e0c7621c87 --- /dev/null +++ b/preinstallTTool/macos/TTool/modeling/manual-HW.xml @@ -0,0 +1,321 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> + +<TURTLEGMODELING version="0.80beta3c"> + +<Modeling type="Design" nameTab="Design" > +<TClassDiagramPanel name="Class Diagram" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="201" id="21" > +<cdparam x="442" y="107" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Greetings" /> +<TGConnectingPoint num="0" id="16" /> +<TGConnectingPoint num="1" id="17" /> +<TGConnectingPoint num="2" id="18" /> +<TGConnectingPoint num="3" id="19" /> +<TGConnectingPoint num="4" id="20" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="3" > +<father id="21" num="0" /> +<cdparam x="442" y="138" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="" /> +<TGConnectingPoint num="0" id="1" /> +<TGConnectingPoint num="1" id="2" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="6" > +<father id="21" num="1" /> +<cdparam x="442" y="169" /> +<sizeparam width="150" height="46" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="46" /> +<cdrectangleparam minX="0" maxX="0" minY="62" maxY="62" /> +<infoparam name="Tclass gates" value="+ HelloWorld : OutGate; ++ DoIt : InGate; +" /> +<TGConnectingPoint num="0" id="4" /> +<TGConnectingPoint num="1" id="5" /> +<extraparam> +<Attribute access="2" id="HelloWorld" value="" type="2" /> +<Attribute access="2" id="DoIt" value="" type="3" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="9" > +<father id="21" num="2" /> +<cdparam x="442" y="214" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="107" maxY="107" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="7" /> +<TGConnectingPoint num="1" id="8" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="15" > +<father id="21" num="3" /> +<cdparam x="442" y="245" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="138" maxY="138" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="10" /> +<TGConnectingPoint num="1" id="11" /> +<TGConnectingPoint num="2" id="12" /> +<TGConnectingPoint num="3" id="13" /> +<TGConnectingPoint num="4" id="14" /> +</SUBCOMPONENT> + +<COMPONENT type="201" id="42" > +<cdparam x="84" y="115" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="0" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="Tclass" value="Controller" /> +<TGConnectingPoint num="0" id="37" /> +<TGConnectingPoint num="1" id="38" /> +<TGConnectingPoint num="2" id="39" /> +<TGConnectingPoint num="3" id="40" /> +<TGConnectingPoint num="4" id="41" /> +<extraparam> +<Start isStart="true" /> +</extraparam> +</COMPONENT> +<SUBCOMPONENT type="-1" id="24" > +<father id="42" num="0" /> +<cdparam x="84" y="146" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="31" maxY="31" /> +<infoparam name="Tclass attributes" value="" /> +<TGConnectingPoint num="0" id="22" /> +<TGConnectingPoint num="1" id="23" /> +<extraparam> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="27" > +<father id="42" num="1" /> +<cdparam x="84" y="177" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="62" maxY="62" /> +<infoparam name="Tclass gates" value="+ DoIt : OutGate; +" /> +<TGConnectingPoint num="0" id="25" /> +<TGConnectingPoint num="1" id="26" /> +<extraparam> +<Attribute access="2" id="DoIt" value="" type="2" /> +</extraparam> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="30" > +<father id="42" num="2" /> +<cdparam x="84" y="208" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="93" maxY="93" /> +<infoparam name="Tclass operations" value="" /> +<TGConnectingPoint num="0" id="28" /> +<TGConnectingPoint num="1" id="29" /> +</SUBCOMPONENT> +<SUBCOMPONENT type="-1" id="36" > +<father id="42" num="3" /> +<cdparam x="84" y="239" /> +<sizeparam width="150" height="30" minWidth="150" minHeight="30" minDesiredWidth="150" minDesiredHeight="30" /> +<cdrectangleparam minX="0" maxX="0" minY="124" maxY="124" /> +<infoparam name="Tclass activity Diagram" value="" /> +<TGConnectingPoint num="0" id="31" /> +<TGConnectingPoint num="1" id="32" /> +<TGConnectingPoint num="2" id="33" /> +<TGConnectingPoint num="3" id="34" /> +<TGConnectingPoint num="4" id="35" /> +</SUBCOMPONENT> + +<COMPONENT type="205" id="48" > +<cdparam x="288" y="91" /> +<sizeparam width="100" height="25" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="synchro composition operator between Controller and Greetings" value="Synchro" /> +<TGConnectingPoint num="0" id="44" /> +<TGConnectingPoint num="1" id="45" /> +<TGConnectingPoint num="2" id="46" /> +<TGConnectingPoint num="3" id="47" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="43" > +<father id="48" num="0" /> +<cdparam x="244" y="148" /> +<sizeparam width="36" height="18" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="OCL formula listing all synchronization gates" value="" /> +<extraparam> +<Synchro t1="42" g1="DoIt" t2="21" g2="DoIt" /> +</extraparam> +</SUBCOMPONENT> + +<CONNECTOR type="102" id="50" > +<cdparam x="248" y="184" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to Tclass gates" value="null" /> +<TGConnectingPoint num="0" id="49" /> +<P1 x="234" y="192" id="26" /> +<P2 x="442" y="192" id="4" /> +</CONNECTOR> +<CONNECTOR type="103" id="51" > +<cdparam x="338" y="191" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from Tclass gates to synchro composition operator" value="null" /> +<P1 x="338" y="192" id="49" /> +<P2 x="338" y="116" id="46" /> +</CONNECTOR> + +</TClassDiagramPanel> + +<TActivityDiagramPanel name="Greetings" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="53" > +<cdparam x="144" y="13" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="52" /> +</COMPONENT> + +<COMPONENT type="18" id="57" > +<cdparam x="152" y="100" /> +<sizeparam width="8" height="32" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="non deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="55" /> +<TGConnectingPoint num="1" id="56" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="54" > +<father id="57" num="0" /> +<cdparam x="165" y="120" /> +<sizeparam width="14" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="8" maxX="18" minY="11" maxY="31" /> +<infoparam name="value of the latency" value="20" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="60" > +<cdparam x="118" y="159" /> +<sizeparam width="71" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="HelloWorld" /> +<TGConnectingPoint num="0" id="58" /> +<TGConnectingPoint num="1" id="59" /> +</COMPONENT> + +<COMPONENT type="13" id="62" > +<cdparam x="143" y="207" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="61" /> +</COMPONENT> + +<COMPONENT type="15" id="65" > +<cdparam x="136" y="55" /> +<sizeparam width="32" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="DoIt" /> +<TGConnectingPoint num="0" id="63" /> +<TGConnectingPoint num="1" id="64" /> +</COMPONENT> + +<CONNECTOR type="101" id="66" > +<cdparam x="155" y="40" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to non deterministic delay" value="null" /> +<P1 x="151" y="33" id="52" /> +<P2 x="152" y="50" id="63" /> +</CONNECTOR> +<CONNECTOR type="101" id="67" > +<cdparam x="156" y="106" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from non deterministic delay to action state" value="null" /> +<P1 x="152" y="137" id="56" /> +<P2 x="153" y="154" id="58" /> +</CONNECTOR> +<CONNECTOR type="101" id="68" > +<cdparam x="156" y="154" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="153" y="184" id="59" /> +<P2 x="153" y="202" id="61" /> +</CONNECTOR> +<CONNECTOR type="101" id="69" > +<cdparam x="229" y="70" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to non deterministic delay" value="null" /> +<P1 x="152" y="80" id="64" /> +<P2 x="152" y="95" id="55" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +<TActivityDiagramPanel name="Controller" minX="10" maxX="1900" minY="10" maxY="900" > +<COMPONENT type="14" id="71" > +<cdparam x="122" y="24" /> +<sizeparam width="15" height="15" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="start state" value="null" /> +<TGConnectingPoint num="0" id="70" /> +</COMPONENT> + +<COMPONENT type="11" id="75" > +<cdparam x="124" y="72" /> +<sizeparam width="10" height="30" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="deterministic delay" value="null" /> +<TGConnectingPoint num="0" id="73" /> +<TGConnectingPoint num="1" id="74" /> +</COMPONENT> +<SUBCOMPONENT type="-1" id="72" > +<father id="75" num="0" /> +<cdparam x="139" y="92" /> +<sizeparam width="7" height="16" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="-75" maxX="30" minY="10" maxY="30" /> +<infoparam name="value of the delay" value="2" /> +</SUBCOMPONENT> + +<COMPONENT type="15" id="78" > +<cdparam x="113" y="131" /> +<sizeparam width="32" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="action state" value="DoIt" /> +<TGConnectingPoint num="0" id="76" /> +<TGConnectingPoint num="1" id="77" /> +</COMPONENT> + +<COMPONENT type="13" id="80" > +<cdparam x="119" y="178" /> +<sizeparam width="20" height="20" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<cdrectangleparam minX="10" maxX="1900" minY="10" maxY="900" /> +<infoparam name="stop state" value="null" /> +<TGConnectingPoint num="0" id="79" /> +</COMPONENT> + +<CONNECTOR type="101" id="81" > +<cdparam x="129" y="44" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from start state to deterministic delay" value="null" /> +<P1 x="129" y="44" id="70" /> +<P2 x="129" y="67" id="73" /> +</CONNECTOR> +<CONNECTOR type="101" id="82" > +<cdparam x="130" y="105" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from deterministic delay to action state" value="null" /> +<P1 x="129" y="107" id="74" /> +<P2 x="129" y="126" id="76" /> +</CONNECTOR> +<CONNECTOR type="101" id="83" > +<cdparam x="129" y="156" /> +<sizeparam width="0" height="0" minWidth="0" minHeight="0" minDesiredWidth="0" minDesiredHeight="0" /> +<infoparam name="connector from action state to stop state" value="null" /> +<P1 x="129" y="156" id="77" /> +<P2 x="129" y="173" id="79" /> +</CONNECTOR> + +</TActivityDiagramPanel> + +</Modeling> + + + + +</TURTLEGMODELING> \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/nc/README_nc b/preinstallTTool/macos/TTool/nc/README_nc new file mode 100644 index 0000000000000000000000000000000000000000..b1b28aaac55bfbb1dfa15e0d8cb92f8221a264bd --- /dev/null +++ b/preinstallTTool/macos/TTool/nc/README_nc @@ -0,0 +1,6 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +Directory generally configured as the one for saving network-calculus xml files. + diff --git a/preinstallTTool/macos/TTool/proverif/pvspec b/preinstallTTool/macos/TTool/proverif/pvspec new file mode 100644 index 0000000000000000000000000000000000000000..9634a4ad4efa14f696ae33f91a1bb41ab5b4a73f --- /dev/null +++ b/preinstallTTool/macos/TTool/proverif/pvspec @@ -0,0 +1,120 @@ +(* Generated proverif specification *) + +(* Boolean return types *) +data true/0. +data false/0. + +(* Functions data *) +data UNKNOWN/0. + +(* Public key cryptography *) +fun pk/1. +fun aencrypt/2. +reduc adecrypt(aencrypt(x,pk(y)),y) = x. + +fun sign/2. +fun verifySign/3. +equation verifySign(m, sign(m,sk), pk(sk))=true. + +(* Certificates *) +fun cert/2. +fun verifyCert/2. +equation verifyCert(cert(epk, sign(epk, sk)), pk(sk))=true. +reduc getpk(cert(epk, sign(epk,sk))) = epk. + +(* Symmetric key cryptography *) +fun sencrypt/2. +reduc sdecrypt(sencrypt(x,k),k) = x. + +(* MAC *) +fun MAC/2. +reduc verifyMAC(m, k, MAC(m, k)) = true. + +(* HASH *) +fun hash/1. + +(* CONCAT *) +fun concat/5. +reduc get1(concat(m1, m2, m3, m4, m5))= m1. +reduc get2(concat(m1, m2, m3, m4, m5))= m2. +reduc get3(concat(m1, m2, m3, m4, m5))= m3. +reduc get4(concat(m1, m2, m3, m4, m5))= m4. +reduc get5(concat(m1, m2, m3, m4, m5))= m5. + + +(* Channel *) +free ch. + +(* Channel *) +private free chprivate. + +(* Data *) + +(* Secrecy Assumptions *) + +(* Queries *) +private free RemoteControl__duration. +query attacker:RemoteControl__duration. + +query ev:enteringState__RemoteControl__Msg1Sent(). +query ev:enteringState__RemoteControl__SendingRemoteOrder(). +query ev:enteringState__MicroWaveOven__Running(). +query ev:enteringState__WirelessInterface__gotDecryptedOrder(). +query ev:enteringState__WirelessInterface__gotWirelessOrder(). + +(* Authenticity *) +query evinj:authenticity__WirelessInterface__gotDecryptedOrder__msg2__data__1(m__93482) ==> evinj:authenticity__RemoteControl__SendingRemoteOrder__msg__data__1(m__93482). + + +let RemoteControl__0 = + let duration = RemoteControl__duration in + new msg1__data; + let PSK__data = RemoteControl__PSK__data in + new msg__data; + let msg1__data = duration in + let msg__data= sencrypt(msg1__data, PSK__data) in + RemoteControl__1. + +let RemoteControl__1 = + event enteringState__RemoteControl__SendingRemoteOrder(); + event authenticity__RemoteControl__SendingRemoteOrder__msg__data__1(msg__data); + out(ch, msg__data); + RemoteControl__2. + +let RemoteControl__2 = + event enteringState__RemoteControl__Msg1Sent(); + 0. + +let MicroWaveOven__0 = + MicroWaveOven__1. + +let MicroWaveOven__1 = + event enteringState__MicroWaveOven__Running(). + +let RemotelyControlledMicrowave__0 = + 0. + +let WirelessInterface__0 = + new msg2__data; + let PSK__data = RemoteControl__PSK__data in + new selectedDuration; + new msg3__data; + in(ch, msg2__data); + WirelessInterface__1. + +let WirelessInterface__1 = + event enteringState__WirelessInterface__gotWirelessOrder(); + let msg3__data= sdecrypt(msg2__data, PSK__data) in + let selectedDuration = msg3__data in + WirelessInterface__2. + +let WirelessInterface__2 = + event enteringState__WirelessInterface__gotDecryptedOrder(); + event authenticity__WirelessInterface__gotDecryptedOrder__msg2__data__1(msg2__data); + out(chprivate, selectedDuration); + 0. + +process + new RemoteControl__PSK__data; +(! +((RemoteControl__0) | (MicroWaveOven__0) | (RemotelyControlledMicrowave__0) | (WirelessInterface__0))) diff --git a/preinstallTTool/macos/TTool/simulators/c++2/Makefile b/preinstallTTool/macos/TTool/simulators/c++2/Makefile new file mode 100755 index 0000000000000000000000000000000000000000..6d27829930cd2f6a37f2340469690824ad298e7c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/Makefile @@ -0,0 +1,35 @@ +TARGET_ARCH = linux + +CC = g++ -g +#CC = test2.sh +#CC = /packages/gcc_3.2.2/bin/g++32 +OPT = -O3 -pthread +# Solaris +#LOPT = -O1 -pthread -ldl -lnsl -lsocket +#Linux +LOPT = -O3 -ldl +LTHREAD = -pthread + +DEBUG = -g +PROFILE = -pg +OTHER = -Wall +SOLARIS_SPECIFIC = -lsocket -lnsl +TRY = -Wno-deprecated +#make = $(OPT) $(OTHER) $(TRY) +LFLAGS = $(LOPT) $(OTHER) $(TRY) +LFLAGS_SOLARIS = $(LFLAGS) $(SOLARIS_SPECIFIC) +CFLAGS = $(OTHER) +OBJDIR = lib +OS := $(shell uname) + +MODULE = run +include Makefile.src +SRCS_base = app/TMLTask.cpp app/TMLCommand.cpp TMLTransaction.cpp app/TMLChannel.cpp arch/SingleCoreCPU.cpp app/TMLWriteCommand.cpp app/TMLWriteMultCommand.cpp app/TMLStateChannel.cpp app/TMLbrbwChannel.cpp app/TMLnbrnbwChannel.cpp app/TMLbrnbwChannel.cpp app/TMLReadCommand.cpp app/TMLExeciCommand.cpp app/TMLExeciRangeCommand.cpp app/TMLActionCommand.cpp app/TMLChoiceCommand.cpp app/TMLRandomChoiceCommand.cpp app/TMLWaitCommand.cpp app/TMLSendCommand.cpp app/TMLSelectCommand.cpp app/TMLRequestCommand.cpp app/TMLNotifiedCommand.cpp app/TMLRandomCommand.cpp app/TMLStopCommand.cpp arch/Bus.cpp definitions.cpp arch/Bridge.cpp arch/Memory.cpp Comment.cpp sim/Server.cpp sim/ServerLocal.cpp sim/Simulator.cpp sim/SimComponents.cpp sim/ServerIF.cpp evt/ListenersSimCmd.cpp arch/PrioScheduler.cpp arch/RRScheduler.cpp arch/RRPrioScheduler.cpp arch/WorkloadSource.cpp TEPE/AliasConstraint.cpp TEPE/EqConstraint.cpp TEPE/FSMConstraint.cpp TEPE/PropertyConstraint.cpp TEPE/PropertyStateConstraint.cpp TEPE/PropLabConstraint.cpp TEPE/PropRelConstraint.cpp TEPE/SignalConstraint.cpp TEPE/ThreeSigConstraint.cpp TEPE/TimeMMConstraint.cpp TEPE/TimeTConstraint.cpp TEPE/TwoSigConstraint.cpp + +SRCS_base_DIR = src_simulator +SRCS_generated = . + +OBJS_simulator = $(SRCS_base:%.cpp=lib/%.o) +OBJS = $(SRCS:%.cpp=lib/%.o) + +include Makefile.defs diff --git a/preinstallTTool/macos/TTool/simulators/c++2/Makefile.defs b/preinstallTTool/macos/TTool/simulators/c++2/Makefile.defs new file mode 100644 index 0000000000000000000000000000000000000000..1dc3a66358f9a6314a72346f69ec3f3c9ac69afc --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/Makefile.defs @@ -0,0 +1,44 @@ +## Variable that points to SystemC installation path + + +INCDIR = -I. -I.. -I$(SRCS_base_DIR) -I$(SRCS_base_DIR)/app -I$(SRCS_base_DIR)/arch -I$(SRCS_base_DIR)/evt -I$(SRCS_base_DIR)/sim -I$(SRCS_base_DIR)/TEPE +LIBDIR = -L. -L.. +LIBS = -lm $(EXTRA_LIBS) + +EXE = $(MODULE).x + +.SUFFIXES: .cpp .o .x + + +$(EXE): makedir $(OBJS) $(OBJS_simulator) + echo Making target +ifeq ($(OS), SunOS) + $(CC) $(LFLAGS_SOLARIS) -lsocket $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_simulator) $(LIBS) 2>&1 | c++filt + endif +ifneq ($(OS), SunOS) + $(CC) $(LFLAGS) $(LTHREAD) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_simulator) $(LIBS) 2>&1 | c++filt +endif + +makedir: + echo Making directories + mkdir -p ./lib/app + mkdir -p ./lib/arch + mkdir -p ./lib/TEPE + mkdir -p ./lib/evt + mkdir -p ./lib/sim + +$(OBJDIR)/%.o: $(SRCS_base_DIR)/%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +#$(OBJDIR)/evt/ListenersSimCmd.o: $(SRCS_base_DIR)/evt/ListenersSimCmd.cpp +# $(CC) $(CFLAGS) $(INCDIR) -o - ldl $@ -c $< + +$(OBJDIR)/%.o: ./%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +clean:: + rm -f $(OBJS_simulator) $(OBJS) *~ $(EXE) core + +ultraclean: clean + rm -f Makefile.deps + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/lib/README b/preinstallTTool/macos/TTool/simulators/c++2/lib/README new file mode 100644 index 0000000000000000000000000000000000000000..be110e6ec98dbe7763f322e6949c409130fcc05d --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/lib/README @@ -0,0 +1 @@ +This directory contains object-files generated by the "make" command executed on upper level folder diff --git a/preinstallTTool/macos/TTool/simulators/c++2/schedstyle.css b/preinstallTTool/macos/TTool/simulators/c++2/schedstyle.css new file mode 100755 index 0000000000000000000000000000000000000000..4a2dbd77f9a03147885ce51b51116def6fc055a1 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/schedstyle.css @@ -0,0 +1,55 @@ +table{ + border-collapse: collapse; + empty-cells: show; + margin: 0.4cm; +} + +td{ + padding: 10px 5px; + border: 1px solid black; +} + +th{ + padding: 5px; + border-left: 1px dotted black; + border-right: 1px dotted black; +} + +.sc{ + border-style: none; + padding: 0px; +} + +h2 { + border-bottom: 1px solid #666; +} + +h2 span { + position: relative; + left: -0.3em; + bottom: -0.6em; + padding: 1px 0.5em; + border-style: solid; + border-width: 1px 1px 1px 0.8em; + border-color: #666 #666 #666 #008; + background-color: #ddd; +} + +.space{border-style: none;} +.not{background-color: white;} +.t1{background-color: yellow;} +.t2{background-color: purple;} +.t3{background-color: red;} +.t4{background-color: silver;} +.t5{background-color: teal;} +.t6{background-color: aqua;} +.t7{background-color: olive;} +.t8{background-color: navy;} +.t9{background-color: maroon;} +.t10{background-color: lime;} +.t11{background-color: green;} +.t12{background-color: gray;} +.t13{background-color: fuchsia;} +.t14{background-color: blue;} +.t15{background-color: black;} +.t16{background-color: white;} \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Comment.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Comment.cpp new file mode 100644 index 0000000000000000000000000000000000000000..49422cae1e503bf7cccfac7b81339285ce6de58b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Comment.cpp @@ -0,0 +1,57 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<Comment.h> + +MemPool<Comment> Comment::memPool(BLOCK_SIZE_COMMENT); + +Comment::Comment(TMLTime iTime, TMLCommand* iCommand, unsigned int iActionCode):_time(iTime), _command(iCommand), _actionCode(iActionCode){} + +void * Comment::operator new(size_t size){ + return memPool.pmalloc(size); +} + +void Comment::operator delete(void *p, size_t size){ + memPool.pfree(p, size); +} + +void Comment::reset(){ + memPool.reset(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Comment.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Comment.h new file mode 100644 index 0000000000000000000000000000000000000000..8508218104f33efb0e26c78a31dbfd921e49a51c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Comment.h @@ -0,0 +1,81 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef CommentH +#define CommentH + +#include <MemPool.h> + +///Class which encapsulates a comment concerning the control flow or task execution +class Comment{ +public: + ///Constructor + /** + \param iTime Time when the message occurred + \param iCommand Pointer to the command which created the comment, 0 if comment was created by a task + \param iActionCode Code specifying the comment message + */ + Comment(TMLTime iTime, TMLCommand* iCommand, unsigned int iActionCode); + ///New operator + /** + \param size Size of memory chunk to be allocated + \return Pointer to the allocated chunk of memory + */ + static void * operator new(size_t size); + ///Delete operator + /** + \param p Pointer to the memory chunk to be deallocated + \param size Size of memory chunk to be deallocated + */ + static void operator delete(void *p, size_t size); + + static void reset(); + + ///Time when the massage occurred + TMLTime _time; + ///Pointer to the command which created the comment, 0 if comment was created by a task + TMLCommand* _command; + ///Code specifying the comment message + unsigned int _actionCode; +private: + ///Memory pool for comments + static MemPool<Comment> memPool; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/HashAlgo.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/HashAlgo.h new file mode 100644 index 0000000000000000000000000000000000000000..886c4c9ee6975b76b9326842e4e9be4e5e2ff22e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/HashAlgo.h @@ -0,0 +1,156 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef JenkinsHashH +#define JenkinsHashH + +#define rot(x,k) (((x)<<(k)) | ((x)>>(32-(k)))) + +#define imix(a,b,c) \ +{ \ + b -= a; c ^= rot(b, 4); c += b; \ + a -= c; b ^= rot(a, 19); b += a; \ + c -= b; a ^= rot(c, 16); a += c; \ + b -= a; c ^= rot(b,8); c += b; \ + a -= c; b ^= rot(a,6); b += a; \ + c -= b; a ^= rot(c, 4); a += c; \ +} + +#define mix(a,b,c) \ +{ \ + a -= c; a ^= rot(c, 4); c += b; \ + b -= a; b ^= rot(a, 6); a += c; \ + c -= b; c ^= rot(b, 8); b += a; \ + a -= c; a ^= rot(c,16); c += b; \ + b -= a; b ^= rot(a,19); a += c; \ + c -= b; c ^= rot(b, 4); b += a; \ +} + +#define ifinal(a,b,c) \ +{ \ + b += rot(a,14); b ^= a;\ + a += rot(c,4); a ^= c;\ + c += rot(b,16); c ^= b;\ + b += rot(a,25); b ^= a;\ + a += rot(c,11); a ^= c;\ + c += rot(b,14); c ^= b;\ +} + +#define final(a,b,c) \ +{ \ + c ^= b; c -= rot(b,14); \ + a ^= c; a -= rot(c,11); \ + b ^= a; b -= rot(a,25); \ + c ^= b; c -= rot(b,16); \ + a ^= c; a -= rot(c,4); \ + b ^= a; b -= rot(a,14); \ + c ^= b; c -= rot(b,24); \ +} + +///Class which encapsulates a comment concerning the control flow or task execution +class HashAlgo{ +public: + + HashAlgo()/*: _bufferSize(0), _buffer(0), _bufferPos(0)*/{ + init(0,0); + } + + HashAlgo(HashValueType iInitVal, HashValueType iLength /*, iBufferSize=0*/)/*: _bufferSize(iBufferSize), _buffer(0), _bufferPos(0)*/{ + init(iInitVal, iLength); + //if (_bufferSize!=0) _buffer = new HashValueType[_bufferSize]; + //memset(_buffer, 0, _bufferSize*sizeof(HashValueType)); + } + + ~HashAlgo(){ + //if (_bufferSize!=0) delete [] _buffer; + } + + void init(HashValueType iInitVal, HashValueType iLength){ + _a = _b = _c = 0xdeadbeef + (((HashValueType)iLength)<<2) + iInitVal; + _state = 0; + _finalized = false; + } + + void addValue(HashValueType iVal){ + //std::cout << "++++++++++++++++++++ Added value: " << iVal << std::endl; + _finalized = false; + switch(_state){ + case 0: _a+= iVal; break; + case 1: _b+= iVal; break; + case 2: _c+= iVal; mix(_a,_b,_c); + } + _state = (_state==2)?0 : _state+1; + } + + /*void removeValue(HashValueType iVal){ + if(_finalized){ + ifinal(_a, _b, _c); + _finalized=false; + } + switch(_state){ + case 1: _a-= iVal; break; + case 2: _b-= iVal; break; + case 0: imix(_a,_b,_c); _c-= iVal; + } + _state = (_state==0)?2 : _state-1; + }*/ + + HashValueType getHash() const{ + if (!_finalized){ + _result = _c; + if(_state!=0){ + HashValueType aA = _a, aB=_b; + final(aA, aB, _result); + _finalized=true; + } + } + return _result; + } + + protected: + HashValueType _a,_b,_c; + mutable HashValueType _result; + char _state; + mutable bool _finalized; + //unsigned int _bufferSize; + //HashValueType * _buffer; + //unsigned int _bufferPos; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPool.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPool.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7c992dcdadb61229972f579a78fb9b4484b45424 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPool.cpp @@ -0,0 +1,116 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<MemPool.h> +#include<TMLTransaction.h> +#include<Comment.h> +#include<Parameter.h> + +///Generic Memory pool class + +template <typename T> +MemPool<T>::MemPool(unsigned int iBlockSize):_headFreeList(0), _blockSize(iBlockSize){ + //std::cerr << "Construct Mem Pool ********\n"; +} + +template <typename T> +void* MemPool<T>::pmalloc(unsigned int n){ + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR malloc********\n"; + return ::operator new(n); + } + //std::cerr << "ALLOC in MemPool " << this << "--------------\n"; + T* aHead = _headFreeList; + if (aHead){ + _headFreeList = *(reinterpret_cast<T**>(aHead)); + }else{ + T** aAdr; + T* newBlock = static_cast<T*>(::operator new(_blockSize * sizeof(T))); + _chunkList.push_back(newBlock); + for (unsigned int i = 1; i < _blockSize-1; ++i){ + aAdr = reinterpret_cast<T**>(&newBlock[i]); + *aAdr = &newBlock[i+1]; + } + aAdr = reinterpret_cast<T**>(&newBlock[_blockSize-1]); + *aAdr = 0; + aHead = newBlock; + _headFreeList = &newBlock[1]; + } + return aHead; +} + +template <typename T> +void MemPool<T>::pfree(void *p, unsigned int n){ + //std::cerr << "DELETE in MemPool--------------\n"; + if (p == 0) return; + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR delete********\n"; + ::operator delete(p); + return; + } + T* aDelObj = static_cast<T*>(p); + T** aAdr = reinterpret_cast<T**>(aDelObj); + //std::cerr << "Lets crash\n"; + *aAdr = _headFreeList; + //std::cerr << "Not crashed\n"; + _headFreeList = aDelObj; +} + +template <typename T> +void MemPool<T>::reset(){ + _headFreeList=0; + for(typename std::list<T*>::iterator i=_chunkList.begin(); i != _chunkList.end(); ++i) ::operator delete(*i); + _chunkList.clear(); +} + +template <typename T> +MemPool<T>::~MemPool(){ + reset(); +} + +/*template class MemPool<TMLTransaction>; +template class MemPool<Comment>; +template class MemPool<SizedParameter<ParamType, 0> >; +template class MemPool<SizedParameter<ParamType, 1> >; +template class MemPool<SizedParameter<ParamType, 2> >; +template class MemPool<SizedParameter<ParamType, 3> >; +template class MemPool<SizedParameter<ParamType, 4> >; +template class MemPool<SizedParameter<ParamType, 5> >; +template class MemPool<SizedParameter<ParamType, 6> >;*/ diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPool.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPool.h new file mode 100644 index 0000000000000000000000000000000000000000..c3ba20c45fc6c9bf42733b34963c5b5dca6ab7b5 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPool.h @@ -0,0 +1,124 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MemPoolH +#define MemPoolH + +#include <definitions.h> + +///Generic Memory pool +template <typename T> +class MemPool { +public: + ///Constructor + /** + \param iBlockSize Size of chunks to be allocated + */ + MemPool(unsigned int iBlockSize) :_headFreeList(0), _blockSize(iBlockSize){} + //MemPool(); + ///Allocation method + /** + \param n Size of memory chunk to be allocated + \return Pointer to the allocated chunk of memory + */ + void* pmalloc(unsigned int n){ + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR malloc********\n"; + return ::operator new(n); + } + //std::cerr << "ALLOC in MemPool " << this << "--------------\n"; + T* aHead = _headFreeList; + if (aHead){ + _headFreeList = *(reinterpret_cast<T**>(aHead)); + }else{ + T** aAdr; + T* newBlock = static_cast<T*>(::operator new(_blockSize * sizeof(T))); + _chunkList.push_back(newBlock); + for (unsigned int i = 1; i < _blockSize-1; ++i){ + aAdr = reinterpret_cast<T**>(&newBlock[i]); + *aAdr = &newBlock[i+1]; + } + aAdr = reinterpret_cast<T**>(&newBlock[_blockSize-1]); + *aAdr = 0; + aHead = newBlock; + _headFreeList = &newBlock[1]; + } + return aHead; + } + + ///Deallocation method + /** + \param p Pointer to the memory chunk to be deallocated + \param n Size of memory chunk to be deallocated + */ + void pfree(void *p, unsigned int n){ + //std::cerr << "DELETE in MemPool--------------\n"; + if (p == 0) return; + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR delete********\n"; + ::operator delete(p); + return; + } + T* aDelObj = static_cast<T*>(p); + T** aAdr = reinterpret_cast<T**>(aDelObj); + //std::cerr << "Lets crash\n"; + *aAdr = _headFreeList; + //std::cerr << "Not crashed\n"; + _headFreeList = aDelObj; + } + ///Reset memory pool, deallocate all memory chunks + void reset(){ + _headFreeList=0; + for(typename std::list<T*>::iterator i=_chunkList.begin(); i != _chunkList.end(); ++i) ::operator delete(*i); + _chunkList.clear(); + } + ///Destructor + ~MemPool(){ + reset(); + } +private: + ///Head pointer of the free list + T* _headFreeList; + ///Size of chunks to be allocated + unsigned int _blockSize; + ///List containing allocated memory chunks + std::list<T*> _chunkList; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPoolNoDel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPoolNoDel.h new file mode 100644 index 0000000000000000000000000000000000000000..2872ac723f9f3c5cb81c13b484992f0f8f0d5772 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/MemPoolNoDel.h @@ -0,0 +1,122 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MemPoolNoDelH +#define MemPoolNoDelH + +#include <definitions.h> + +///Generic Memory pool without delete functionality +template <typename T> +class MemPoolNoDel { +public: + ///Constructor + /** + \param iChunkSize Size of chunks to be allocated + */ + MemPoolNoDel(unsigned int iChunkSize): _currChunk(0), _currPos(0), _chunkSize(iChunkSize), _currPosInList(_chunkList.end()){} + ///Allocation method + /** + \param n Size of memory chunk to be allocated + \return Pointer to the allocated chunk of memory + */ + void* pmalloc(unsigned int n){ + if (n != sizeof(T)){ + std::cerr << "MemPool ERROR malloc********\n"; + return ::operator new(n); + } + if (_currChunk==0 || _currPos==_chunkSize){ + if (_currPosInList != _chunkList.end()) _currPosInList++; + if (_currPosInList == _chunkList.end()){ + //std::cout << "Reallocate size=" << _chunkList.size() << "\n" ; + _currChunk = static_cast<T*>(::operator new(_chunkSize * sizeof(T))); + _chunkList.push_back(_currChunk); + _currPosInList = _chunkList.end(); + }else{ + //std::cout << "Next List pos size=" << _chunkList.size() << "\n" ; + _currChunk = *_currPosInList; + } + _currPos=0; + } + + //std::cout << "Allocated adr: " << &_currChunk[_currPos] << "\n"; + return &_currChunk[_currPos++]; + } + + ///Deallocation method + /** + \param p Pointer to the memory chunk to be deallocated + \param n Size of memory chunk to be deallocated + */ + void pfree(void *p, unsigned int n){ + //if (p == 0) return; + if (p!=0 && n != sizeof(T)){ + std::cerr << "MemPool ERROR delete********\n"; + ::operator delete(p); + return; + } + } + ///Reset memory pool, deallocate all memory chunks + void reset(){ + _currPosInList = _chunkList.begin(); + if (_currPosInList==_chunkList.end()) + _currChunk=0; + else + _currChunk = *_currPosInList; + _currPos=0; + } + + ///Destructor + ~MemPoolNoDel(){ + for(typename std::list<T*>::const_iterator i=_chunkList.begin(); i != _chunkList.end(); ++i) ::operator delete(*i); + } +private: + ///Current memory chunk to be used + T* _currChunk; + ///Next free position in current chunk + unsigned int _currPos; + ///Size of chunks to be allocated + unsigned int _chunkSize; + ///List containing allocated memory chunks + std::list<T*> _chunkList; + ///Position in List + typename std::list<T*>::iterator _currPosInList; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Serializable.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Serializable.h new file mode 100644 index 0000000000000000000000000000000000000000..c7f0efbf315d0c619549569b001e80cf75fc1d41 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/Serializable.h @@ -0,0 +1,63 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SerializableH +#define SerializableH +///Interface prividing the basic means to serialize and deserialize objects +class Serializable{ +public: + ///Serializes the object + /** + \param s Reference to an instance of an output stream + \return A reference to the same output stream + */ + virtual std::ostream& writeObject(std::ostream& s) = 0; + ///Deserializes the object + /** + \param s Reference to an instance of an input stream + \return A reference to the same input stream + */ + virtual std::istream& readObject(std::istream& s) = 0; + ///Resets a simulation component to its initial state + virtual void reset()=0; + ///Destructor + virtual ~Serializable(){} +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..85662ead74f1ffa3df4ab7fd094be2215d27c1d3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.cpp @@ -0,0 +1,58 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <AliasConstraint.h> + +AliasConstraint::AliasConstraint(ID iID): TwoSigConstraint(iID, false){ +} + +void AliasConstraint::evalInput(){ + //if (_rightConstr==0) std::cout << "Not connected\n"; + //if (_s1Notified==UNDEF) std::cout << "s1 undef\n"; + //if (_s2Notified==UNDEF) std::cout << "s2 undef\n"; + //if (!( _s1Notified==UNDEF || _s2Notified==UNDEF || _rightConstr==0)){ + if (!( _s1Notified==UNDEF || _s2Notified==UNDEF)){ + //std::cout << "Allright\n"; + //(_rightConstr->*_ntfFuncSigOut)(_s1Notified==TRUE || _s2Notified==TRUE); + notifyRightConstraints(_s1Notified==TRUE || _s2Notified==TRUE); + notifiedReset(); + }//else + //std::cout << "Something is wrong\n"; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..9dcbb967e53630324e5a624c91ddebd6d31e3d64 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/AliasConstraint.h @@ -0,0 +1,57 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef AliasConstraintH +#define AliasConstraintH +#include <TwoSigConstraint.h> + +///Class representing the TEPE Alias Constraint +class AliasConstraint: public TwoSigConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + */ + AliasConstraint(ID iID); + +protected: + void evalInput(); +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8a1f9ddf37270e4dcd538929ef234f18001ddb29 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.cpp @@ -0,0 +1,113 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EqConstraint.h> + +EqConstraint::EqConstraint(ID iID, PropType iType, bool iIncludeBounds): SignalConstraint(iID, iIncludeBounds), PropertyStateConstraint(iType), _eqResult(true), _propReported(false){ +} + +void EqConstraint::notifiedReset(){ + SignalConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void EqConstraint::reset(){ + PropertyStateConstraint::reset(); + _propReported=false; +} + +std::ostream& EqConstraint::writeObject(std::ostream& s){ + unsigned char aTmp = (_eqResult)?1:0; + if (_propReported) aTmp |=2; + PropertyStateConstraint::writeObject(s); + WRITE_STREAM(s, aTmp); + return s; +} + +std::istream& EqConstraint::readObject(std::istream& s){ + unsigned char aTmp; + PropertyStateConstraint::readObject(s); + READ_STREAM(s, aTmp); + _eqResult = ((aTmp & 1)!=0); + _propReported = ((aTmp & 2)!=0); + return s; +} + + +void EqConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF)){ + if(_enabledNotified==TRUE){ //early enable + _constrEnabled = (_disabledNotified==FALSE); + _propReported = false; //why do we need that? --> failure may otherwise not be reported if _eqResult==true + } + + bool aRelevantEqResult=_eqResult; + if (_s1Notified==TRUE){ //sigout and enable/disable notifications for connected operators + //_eqResult = ! _eqResult; + if (_eqResult){ + _eqResult=false; + notifyRightConstraints(false); + }else{ + _eqResult=true; + notifyRightConstraints(true); + } + }else{ + notifyRightConstraints(false); + } + if (_includeBounds ) aRelevantEqResult=_eqResult; + + std::cout << "Enabled: " << _constrEnabled << " eqresult: " << _eqResult << " reported: " << _propReported <<"\n"; + if (_constrEnabled && (!aRelevantEqResult) && (!_propReported)){ //report failure + reportPropOccurrence(false); + std::cout << "Report occurrence of Eq: 0\n"; + _propReported = true; + } + if (_disabledNotified==TRUE){ //disable, report success + //std::cout << " DIsable*********************************************\n"; + if (!_propReported){ + reportPropOccurrence(true); + //std::cout << "Report occurrence of Eq: 1\n"; + }//else + //std::cout << "Prop occurrence suppressed\n"; + reset(); + } + notifiedReset(); + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..7367614675864189579125b4862de6a50a9e2b36 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/EqConstraint.h @@ -0,0 +1,67 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EqConstraintH +#define EqConstraintH +#include <SignalConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing a TEPE equation constraint +class EqConstraint: public SignalConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + EqConstraint(ID iID, PropType iType, bool iIncludeBounds); + void notifiedReset(); + void reset(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Result of equation + bool _eqResult; + ///Indiactes whether the property occurrence has already been reported + bool _propReported; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eff31245daf0b9e62d8afa21442f643a08f13cea --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.cpp @@ -0,0 +1,119 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <FSMConstraint.h> + +FSMConstraint::FSMConstraint(ID iID, PropType iType, bool iIncludeBounds): ThreeSigConstraint(iID, iIncludeBounds), PropertyStateConstraint(iType), _state(0){ +} + +void FSMConstraint::notifiedReset(){ + ThreeSigConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void FSMConstraint::reset(){ + PropertyStateConstraint::reset(); + _state=0; +} + +std::ostream& FSMConstraint::writeObject(std::ostream& s){ + PropertyStateConstraint::writeObject(s); + std::cout << "_state written " << _state << "\n"; + WRITE_STREAM(s, _state); + return s; +} + +std::istream& FSMConstraint::readObject(std::istream& s){ + PropertyStateConstraint::readObject(s); + READ_STREAM(s, _state); + std::cout << "_state read " << _state << "\n"; + return s; +} + +void FSMConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF || _sfNotified==UNDEF || _s2Notified==UNDEF)){ + //std::cout << "_notificationMask=15\n"; + if(_enabledNotified==TRUE && _includeBounds){ + //std::cout << "_enabledNotified && _includeBounds\n"; + _constrEnabled=true; + } + if (_disabledNotified==TRUE && !_includeBounds) _constrEnabled=false; + unsigned int aEnableFlag=0; + bool aSigOutFlag=false, aPropResult=true; + if(_constrEnabled){ + //std::cout << "_constrEnabled\n"; + if( _s1Notified==TRUE) aPropResult &= moveToNextState(1, &aEnableFlag, &aSigOutFlag); + if( _sfNotified==TRUE) aPropResult &= moveToNextState(3, &aEnableFlag, &aSigOutFlag); + if( _s2Notified==TRUE) aPropResult &= moveToNextState(2, &aEnableFlag, &aSigOutFlag); + } + _constrEnabled |= (_enabledNotified==TRUE); + if (_disabledNotified==TRUE){ + std::cout << "DISABLE============================= " << _state << "\n"; + //aEnableFlag |=1; + if (_state!=0) aEnableFlag |=1; + //if (_state!=0) reportPropOccurrence(false); + aPropResult &= (_state==0); + //if (_state!=0) std::cout << "Violation detected!!!\n"; + reset(); + } + notifiedReset(); + if (_aboveConstr!=0) _aboveConstr[0]->notifyEnable(aEnableFlag); + //if (_rightConstr!=0) (_rightConstr->*_ntfFuncSigOut)(aSigOutFlag); + notifyRightConstraints(aSigOutFlag); + //if (aSigOutFlag || !aPropResult) reportPropOccurrence(aPropResult); + if (aSigOutFlag || ((aEnableFlag & 1)!=0 && !aPropResult) ){ + //if (aSigOutFlag || (aEnableFlag & 1)!=0){ + std::cout << "Report occurrence of FSM: " << aPropResult << "\n"; + reportPropOccurrence(aPropResult); + } + //std::cout << "... violation: " << _propViolation << "\n"; + }//else + //std::cout << "_notificationMask=" << _notificationMask << "\n"; +} + +bool FSMConstraint::moveToNextState(unsigned int iSignal, unsigned int * iEnableFlag, bool * iSigOutFlag){ + unsigned int aTabEntry = _transTable[iSignal + (_state << 2)]; + //if ((aTabEntry & 1) !=0) reportPropViolation(); + //if ((aTabEntry & 1) !=0) reportPropOccurrence(false); + *iEnableFlag |= ((aTabEntry>>1) & 3); + *iSigOutFlag |= ((aTabEntry & 8)!=0); + _state = (aTabEntry >> 4); + //std::cout << "State: " << _state << " enable: " << ((aTabEntry>>1) & 3) << " sigout: " << ((aTabEntry & 8)!=0) << " violation: " << _propViolation << "\n"; + return ((aTabEntry & 1) ==0); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..ad4f8b6ebb81ee72606223f088dcc836f7cdb0c6 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/FSMConstraint.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef FSMConstraintH +#define FSMConstraintH +#include <ThreeSigConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing a TEPE constraint whose behavior is described with an FSM +class FSMConstraint: public ThreeSigConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + FSMConstraint(ID iID, PropType iType, bool iIncludeBounds); + void notifiedReset(); + void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Reads the transition table and deduces the next state, iEnableFlag and iSigOutFlag as a function of the received input signals + /** + \param iSignal Signal Code between 1 and 3 for first, second, and failure signal + \param iEnableFlag Enable flag of the constraint + \param iSigOutFlag Flag indicating whether an output signal is sent + \return False if the property was violated, true otherwise + */ + bool moveToNextState(unsigned int iSignal, unsigned int * iEnableFlag, bool * iSigOutFlag); + ///Transition table of FSM + const unsigned int* _transTable; + ///Current state of FSM + unsigned int _state; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/LogConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/LogConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..339bb4d34b819910b5c83cb26e96bc797d830cc8 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/LogConstraint.h @@ -0,0 +1,61 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef LogConstraintH +#define LogConstraintH +#include <FSMConstraint.h> + +///Class representing a TEPE Logical Constraint +class LogConstraint: public FSMConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + LogConstraint(ID iID, PropType iType, bool iIncludeBounds): FSMConstraint(iID, iType, iIncludeBounds){ + _transTable=_transTableLog; + } +protected: + ///Transition table of state machine + static const unsigned int _transTableLog[20]; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..abaac3c8ae5be670eb83817e4312f9569ad62dc2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.cpp @@ -0,0 +1,90 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <PropLabConstraint.h> + +PropLabConstraint::PropLabConstraint(PropLabType iType): _type(iType), _property(_type==LIVENESS || _type == NREACHABILITY){ +} + +bool PropLabConstraint::evalProp(){ + switch (_type){ + case LIVENESS: + _property &= _aboveConstr[0]->evalProp(); + break; + case NLIVENESS: + _property |= (!_aboveConstr[0]->evalProp()); + break; + case REACHABILITY: + _property |= (_aboveConstr[0]->evalProp()); + break; + case NREACHABILITY: + _property &= (!_aboveConstr[0]->evalProp()); + break; + } + return _property; +} + +void PropLabConstraint::forceDisable(){ + _aboveConstr[0]->forceDisable(); +} + +void PropLabConstraint::notifyEnable(unsigned int iSigState){ + _aboveConstr[0]->notifyEnable(iSigState); +} + +std::ostream& PropLabConstraint::writeObject(std::ostream& s){ + //unsigned char aTmp = (_property)?1:0; + //WRITE_STREAM(s, aTmp); + std::cout << "PropLabConstraint::writeObject"; + _aboveConstr[0]->writeObject(s); + return s; +} + +std::istream& PropLabConstraint::readObject(std::istream& s){ + //unsigned char aTmp; + //READ_STREAM(s, aTmp); + //_property = (aTmp ==1); + std::cout << "PropLabConstraint::readObject"; + _aboveConstr[0]->readObject(s); + return s; +} + +void PropLabConstraint::reset(){ +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..4d2f0d365c89abc7a6594570ef28728f62a5b089 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropLabConstraint.h @@ -0,0 +1,67 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropLabConstraintH +#define PropLabConstraintH +#include <PropertyConstraint.h> + +typedef enum{LIVENESS, NLIVENESS, REACHABILITY, NREACHABILITY} PropLabType; + +///Class representing a TEPE property label constraint +class PropLabConstraint: public PropertyConstraint{ +public: + ///Constructor + /** + \param iType Path quantifier: LIVENESS, NLIVENESS, REACHABILITY, NREACHABILITY + */ + PropLabConstraint(PropLabType iType); + bool evalProp(); + void forceDisable(); + void notifyEnable(unsigned int iSigState); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); +protected: + ///Path quantifier: LIVENESS, NLIVENESS, REACHABILITY, NREACHABILITY + PropLabType _type; + ///Current value of the property for all explored paths + bool _property; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..062011494f4ec348adf242b4bce7b07c45749a3c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.cpp @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <PropRelConstraint.h> + +PropRelConstraint::PropRelConstraint(PropRelType iType): _type(iType){ +} + +bool PropRelConstraint::evalProp(){ + bool aProperty; + switch (_type){ + case AND: + aProperty=true; + for (unsigned int i=0;i <_noAboveConstr && aProperty; i++) + aProperty &= _aboveConstr[i]->evalProp(); + break; + case OR: + aProperty=false; + for (unsigned int i=0;i <_noAboveConstr && !aProperty; i++) + aProperty |= _aboveConstr[i]->evalProp(); + break; + } + return aProperty; +} + +void PropRelConstraint::forceDisable(){ + for (unsigned int i=0;i <_noAboveConstr; i++) _aboveConstr[i]->forceDisable(); +} + +void PropRelConstraint::notifyEnable(unsigned int iSigState){ + for (unsigned int i=0;i <_noAboveConstr; i++) _aboveConstr[i]->notifyEnable(iSigState); +} + +//std::ostream& PropRelConstraint::writeObject(std::ostream& s){ +// return s; +//} + +//std::istream& PropRelConstraint::readObject(std::istream& s){ +// return s; +//} + +void PropRelConstraint::reset(){ +} \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..ba32a8f37eb50777f118ce520e7c6331024e7333 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropRelConstraint.h @@ -0,0 +1,63 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropRelConstraintH +#define PropRelConstraintH +#include <PropertyConstraint.h> + +typedef enum{AND, OR} PropRelType; + +///Class representing a TEPE Property Logics Constraint +class PropRelConstraint: public PropertyConstraint{ +public: + ///Constructor + /** + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + */ + PropRelConstraint(PropRelType iType); + bool evalProp(); + void forceDisable(); + void notifyEnable(unsigned int iSigState); + void reset(); +protected: + ///Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + PropRelType _type; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..791574c7ab8b000e09cea27c2854002aa012b840 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.cpp @@ -0,0 +1,68 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <PropertyConstraint.h> + +PropertyConstraint::PropertyConstraint():_aboveConstr(0), _noAboveConstr(0){ +} + +PropertyConstraint::~PropertyConstraint(){ + if (_aboveConstr!=0){ + for (unsigned int i=0; i<_noAboveConstr; i++) + delete _aboveConstr[i]; + delete [] _aboveConstr; + } +} + +std::ostream& PropertyConstraint::writeObject(std::ostream& s){ + for (unsigned int i=0; i<_noAboveConstr; i++) + _aboveConstr[i]->writeObject(s); + return s; +} + +std::istream& PropertyConstraint::readObject(std::istream& s){ + for (unsigned int i=0; i<_noAboveConstr; i++) + _aboveConstr[i]->readObject(s); + return s; +} + +void PropertyConstraint::connectEnaOut(PropertyConstraint** aAboveConstr, unsigned int iNoAboveConstr){ + _aboveConstr = aAboveConstr; + _noAboveConstr = iNoAboveConstr; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..67101b4a357bae5bc0137635f249d89d7a8a9a56 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyConstraint.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropertyConstraintH +#define PropertyConstraintH + +#include <definitions.h> +#include <Serializable.h> + +///Class representing TEPE constraints that provide a property input/output +class PropertyConstraint: public Serializable{ +public: + ///Constructor + PropertyConstraint(); + ///Destructor + virtual ~PropertyConstraint(); + ///Determines the current property value of the constraint + /** + \return Property value of the constraint + */ + virtual bool evalProp()=0; + ///Instantaneous deactivation of the constraint + virtual void forceDisable()=0; + ///Notify the enable input signal + /** + \param iSigState Indicates whether the signal was notified + */ + virtual void notifyEnable(unsigned int iSigState)=0; + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + ///Connects the enable ouput to the enable input of another constraint + /** + \param aAboveConstr Target constraints to be connected to the enable output + \param iNoAboveConstr Number of target constraints + */ + void connectEnaOut(PropertyConstraint** aAboveConstr, unsigned int iNoAboveConstr); +protected: + ///Target constraints that are connected to the enable output + PropertyConstraint** _aboveConstr; + ///Number of target constraints + unsigned int _noAboveConstr; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2d0430f97bd93f2b72cbbfdbf1e520e280443c2f --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.cpp @@ -0,0 +1,125 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <PropertyStateConstraint.h> +#include <SignalConstraint.h> + +PropertyStateConstraint::PropertyStateConstraint(PropType iType): _type(iType), _constrEnabled(false), _enabledNotified(UNDEF), _disabledNotified(UNDEF), _property(_type==GENERAL || _type == NFINALLY){ +} + +bool PropertyStateConstraint::evalProp(){ + if (_aboveConstr==0) + return _property; + else + return _aboveConstr[0]->evalProp() && _property; +} + +void PropertyStateConstraint::notifyEnable(unsigned int iSigState){ + _disabledNotified = ((iSigState & 1)==0)? FALSE:TRUE; + _enabledNotified = ((iSigState & 2)==0)? FALSE:TRUE; + SignalConstraint* testSig= dynamic_cast<SignalConstraint*>(this); + if (testSig!=0){ + switch (iSigState){ + case 1: + std::cout << testSig->getID() << ": -d\n"; + break; + case 2: + std::cout << testSig->getID() << ": e-\n"; + break; + case 3: + std::cout << testSig->getID() << ": ed\n"; + break; + default: ; + } + } + evalInput(); +} + +void PropertyStateConstraint::notifiedReset(){ + _enabledNotified=UNDEF; + _disabledNotified=UNDEF; +} + +void PropertyStateConstraint::reset(){ + _constrEnabled=false; +} + +void PropertyStateConstraint::forceDisable(){ + _constrEnabled=false; + std::cout << "Force disable was called\n"; + if (_aboveConstr!=0) _aboveConstr[0]->forceDisable(); + +} + +std::ostream& PropertyStateConstraint::writeObject(std::ostream& s){ + unsigned char aTmp = (_property)?1:0; + std::cout << "_property written " << _property << "\n"; + if (_constrEnabled) aTmp |= 2; + WRITE_STREAM(s, aTmp); + PropertyConstraint::writeObject(s); + return s; +} + +std::istream& PropertyStateConstraint::readObject(std::istream& s){ + unsigned char aTmp; + READ_STREAM(s, aTmp); + _property = ((aTmp & 1) !=0); + std::cout << "_property read " << _property << "\n"; + _constrEnabled = ((aTmp & 2) !=0); + PropertyConstraint::readObject(s); + return s; +} + +void PropertyStateConstraint::reportPropOccurrence(bool iProp){ + switch (_type){ + case GENERAL: + _property &= iProp; + break; + case NGENERAL: + _property |= !iProp; + break; + case FINALLY: + _property |= iProp; + break; + case NFINALLY: + _property &= !iProp; + break; + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..fbc5e08d836b83ee8e9a38d003bdc979cf7eed79 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/PropertyStateConstraint.h @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef PropertyStateConstraintH +#define PropertyStateConstraintH +#include <PropertyConstraint.h> + +typedef enum{GENERAL, NGENERAL, FINALLY, NFINALLY} PropType; + +///Class representing a stateful TEPE constraint +class PropertyStateConstraint: public PropertyConstraint{ +public: + ///Constructor + /** + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + */ + PropertyStateConstraint(PropType iType); + bool evalProp(); + void notifyEnable(unsigned int iSigState); + ///Reset function to be called after a simulation round, thus upon advance of simulation time + virtual void notifiedReset(); + virtual void reset(); + void forceDisable(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); +protected: + ///Logics that evaluates the input signals, updates the internal state of the constraint and generates output signals + virtual void evalInput()=0; + ///Is called to report a(n) (un)successfull property occurrence + /** + \param iProp Property value + */ + void reportPropOccurrence(bool iProp); + ///Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + PropType _type; + ///Constraint enabled flag + bool _constrEnabled; + ///State of enable input signal + Tristate _enabledNotified; + ///State of disable input signal + Tristate _disabledNotified; +private: + ///Current value of the property for the current path to be explored + bool _property; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SeqConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SeqConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..8abed2ddc88e3087340f83de7f0d6e35c7d5c6f3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SeqConstraint.h @@ -0,0 +1,62 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SeqConstraintH +#define SeqConstraintH +#include <FSMConstraint.h> + +///Class representing a TEPE Sequence Constraint +class SeqConstraint: public FSMConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + SeqConstraint(ID iID, PropType iType, bool iIncludeBounds): FSMConstraint(iID, iType, iIncludeBounds){ + _transTable=_transTableSeq; + } + +protected: + ///Transition table of state machine + static const unsigned int _transTableSeq[12]; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ccdcad96d8b9fa253c913192b2229677b600c7ab --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.cpp @@ -0,0 +1,95 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <SignalConstraint.h> +#include <PropertyConstraint.h> + +SignalConstraint::SignalConstraint(ID iID, bool iIncludeBounds): _ID(iID), _s1Notified(UNDEF), /*_ntfFuncSigOut(0), _rightConstr(0),*/ _includeBounds(iIncludeBounds){ +} + +SignalConstraint::~SignalConstraint(){ + /*std::cout << "SignalConstraint Destructor\n"; + for(SignalNotificationList::const_iterator i=_rightConstraints.begin(); i != _rightConstraints.end(); ++i){ + if (dynamic_cast<PropertyConstraint*>(i->first)==0){ + delete i->first; + std::cout << "Delete done\n"; + } + }*/ +} + +void SignalConstraint::notifyS1(bool iSigState){ + //_s1Notified = iSigState; + //_notificationMask |=1; + if (iSigState) + std::cout << _ID << ": s1 ok\n"; + else + std::cout << _ID << ": s1 --\n"; + _s1Notified = (iSigState)?TRUE:FALSE; + evalInput(); +} + +void SignalConstraint::notifyS2(bool iSigState){} + +void SignalConstraint::notifySf(bool iSigState){} + +void SignalConstraint::connectSigOut(SignalConstraint* iRightConstr, NtfSigFuncPointer iNotFunc){ + //_ntfFuncSigOut = iNotFunc; + //_rightConstr = iRightConstr; + _rightConstraints.push_back(std::pair<SignalConstraint*, NtfSigFuncPointer>(iRightConstr, iNotFunc)); +} + +void SignalConstraint::notifiedReset(){ + //_notificationMask=0; + _s1Notified = UNDEF; +} + +void SignalConstraint::notifyRightConstraints(bool iSigState){ + for(SignalNotificationList::const_iterator i=_rightConstraints.begin(); i != _rightConstraints.end(); ++i){ + ((i->first)->*(i->second))(iSigState); + } +} + +ID SignalConstraint::getID(){ + return _ID; +} + +//void SignalConstraint::setSimTime(TMLTime iSimTime){ +// _simTime = iSimTime; +//} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..2783096f866509ee098e88c54fed018030e1a7f5 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/SignalConstraint.h @@ -0,0 +1,100 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SignalConstraintH +#define SignalConstraintH + +#include <definitions.h> + +class SignalConstraint; + +class SignalConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + SignalConstraint(ID iID, bool iIncludeBounds); + ///Destructor + virtual ~SignalConstraint(); + ///Notify the first input signal + /** + \param iSigState Indicates whether the signal was notified + */ + void notifyS1(bool iSigState); + ///Notify the second input signal + /** + \param iSigState Indicates whether the signal was notified + */ + virtual void notifyS2(bool iSigState); + ///Notify the negated (failure) input signal + /** + \param iSigState Indicates whether the signal was notified + */ + virtual void notifySf(bool iSigState); + ///Connects the signal ouput to the input of another constraint + /** + \param iRightConstr Target constraint to be connected to the signal output + \param iNotFunc Notification function of the target constraint + */ + void connectSigOut(SignalConstraint* iRightConstr, NtfSigFuncPointer iNotFunc); + /// + virtual void notifiedReset(); + ///Returns the ID of the constraint + /** + \return ID of the constraint + */ + ID getID(); + //static void setSimTime(TMLTime iSimTime); +protected: + virtual void evalInput()=0; + void notifyRightConstraints(bool iSigState); + ID _ID; + ///State of first input signal + Tristate _s1Notified; + ///Constraint connected to signal output + SignalNotificationList _rightConstraints; + ///Indicates whether the verification interval is open or closed (on both sides in each case) + bool _includeBounds; + ///Simulation time + static TMLTime _simTime; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..da46e07fcc9fd6c26ff5052b56526120ddb8bf3d --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.cpp @@ -0,0 +1,60 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ThreeSigConstraint.h> + +ThreeSigConstraint::ThreeSigConstraint(ID iID, bool iIncludeBounds): TwoSigConstraint(iID, iIncludeBounds), _sfNotified(UNDEF){ +} + +void ThreeSigConstraint::notifySf(bool iSigState){ + //_sfNotified = iSigState; + //_notificationMask |=4; + if (iSigState) + std::cout << _ID << ": sf ok\n"; + else + std::cout << _ID << ": sf --\n"; + _sfNotified = (iSigState)?TRUE:FALSE; + evalInput(); +} + +void ThreeSigConstraint::notifiedReset(){ + TwoSigConstraint::notifiedReset(); + _sfNotified=UNDEF; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..024aeae4e53009e91f4344f554464657b4793e88 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/ThreeSigConstraint.h @@ -0,0 +1,56 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ThreeSigConstraintH +#define ThreeSigConstraintH +#include <TwoSigConstraint.h> + +///Class representing any TEPE constraint with 3 input signals +class ThreeSigConstraint: public TwoSigConstraint{ +public: + ///Constructor + ThreeSigConstraint(ID iID, bool iIncludeBounds); + void notifySf(bool iSigState); + virtual void notifiedReset(); +protected: + ///State of the negated input (failure) signal + Tristate _sfNotified; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..251a5b1ade7ef2c6dbaf847ebd3477e4b94722b8 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.cpp @@ -0,0 +1,115 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TimeMMConstraint.h> +#include <SchedulableDevice.h> + +TimeMMConstraint::TimeMMConstraint(ID iID, PropType iType, TMLTime iTmin, TMLTime iTmax, bool iRetrigger, bool iIncludeBounds): TwoSigConstraint(iID, iIncludeBounds), PropertyStateConstraint(iType), _tmin(iTmin), _tmax(iTmax), _retrigger(iRetrigger), _s1Time(-1){ +} + +void TimeMMConstraint::notifiedReset(){ + TwoSigConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void TimeMMConstraint::reset(){ + PropertyStateConstraint::reset(); + _s1Time=-1; +} + +std::ostream& TimeMMConstraint::writeObject(std::ostream& s){ + PropertyStateConstraint::writeObject(s); + WRITE_STREAM(s, _s1Time); + return s; +} + +std::istream& TimeMMConstraint::readObject(std::istream& s){ + PropertyStateConstraint::readObject(s); + READ_STREAM(s, _s1Time); + return s; +} + +void TimeMMConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF || _s2Notified==UNDEF)){ + if(_enabledNotified==TRUE && _includeBounds){ + std::cout << "_enabledNotified && _includeBounds\n"; + _constrEnabled=true; + } + unsigned int aEnaFlag=0; + bool aSigOut=false; + if (_disabledNotified==TRUE && !_includeBounds) _constrEnabled=false; + if(_constrEnabled){ + if (_s1Notified==TRUE){ + if (_s1Time==-1){ + _s1Time = SchedulableDevice::getSimulatedTime(); + aEnaFlag |=2; + }else{ + if (_retrigger){ + std::cout << "retrigger!!!\n"; + _s1Time = SchedulableDevice::getSimulatedTime(); + } + } + } + if (_s1Time!=-1){ + //if (_simTime-_s1Time>_tmax) reportPropViolation(); + if (SchedulableDevice::getSimulatedTime() - _s1Time>_tmax) reportPropOccurrence(false); + + if (_s2Notified==TRUE){ + aEnaFlag |=1; + std::cout << "s2 notified _simTime " << SchedulableDevice::getSimulatedTime() << " _s1Time " << _s1Time << "\n"; + //if (_simTime-_s1Time<_tmin) reportPropViolation(); + if (SchedulableDevice::getSimulatedTime() - _s1Time<=_tmax) reportPropOccurrence(SchedulableDevice::getSimulatedTime() - _s1Time >= _tmin); + aSigOut=true; + _s1Time=-1; + } + } + + } + _constrEnabled |= (_enabledNotified==TRUE); + if (_disabledNotified==TRUE){ + if (_s1Time!=-1) aEnaFlag |=1; //NEW to investigate + reset(); + } + notifiedReset(); + if (_aboveConstr!=0) _aboveConstr[0]->notifyEnable(aEnaFlag); + //if (_rightConstr!=0) (_rightConstr->*_ntfFuncSigOut)(aSigOut); + notifyRightConstraints(aSigOut); + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..b7fa3d77f2ad4576f3227a142fc38bdb5237b3fc --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeMMConstraint.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TimeMMConstraintH +#define TimeMMConstraintH +#include <TwoSigConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing the TEPE Time Constraint with one input signal and one time value +class TimeMMConstraint: public TwoSigConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iType Temporal quantifier: GENERAL, NGENERAL, FINALLY, NFINALLY + \param iTmin Minimum time to elapse between the two input signals + \param iTmax Maximum time to elapse between the two input signals + \param iRetrigger Indicates whether a sencond occurrence of the first input signals retriggers the timer + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + TimeMMConstraint(ID iID, PropType iType, TMLTime iTmin, TMLTime iTmax, bool iRetrigger, bool iIncludeBounds); + void notifiedReset(); + void reset(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Minimum time to elapse between the two input signals + TMLTime _tmin; + ///Maximum time to elapse between the two input signals + TMLTime _tmax; + ///Indicates whether a sencond occurrence of the first input signals retriggers the timer + bool _retrigger; + ///Time of occurrence of the first input signal + TMLTime _s1Time; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..45afea1d6bfeabd5b26862ed16a872b82ee5276f --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.cpp @@ -0,0 +1,105 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TimeTConstraint.h> +#include <SchedulableDevice.h> + +TimeTConstraint::TimeTConstraint(ID iID, TMLTime iT, bool iRetrigger, bool iIncludeBounds): SignalConstraint(iID, iIncludeBounds), PropertyStateConstraint (GENERAL), _t(iT), _retrigger(iRetrigger), _s1Time(-1){ +} + +void TimeTConstraint::notifiedReset(){ + SignalConstraint::notifiedReset(); + PropertyStateConstraint::notifiedReset(); +} + +void TimeTConstraint::reset(){ + PropertyStateConstraint::reset(); + _s1Time=-1; +} + +std::ostream& TimeTConstraint::writeObject(std::ostream& s){ + PropertyStateConstraint::writeObject(s); + WRITE_STREAM(s, _s1Time); + return s; +} + +std::istream& TimeTConstraint::readObject(std::istream& s){ + PropertyStateConstraint::readObject(s); + READ_STREAM(s, _s1Time); + return s; +} + +void TimeTConstraint::evalInput(){ + if (!(_enabledNotified==UNDEF || _s1Notified==UNDEF)){ + if(_enabledNotified==TRUE && _includeBounds){ + //std::cout << "_enabledNotified && _includeBounds\n"; + _constrEnabled=true; + } + unsigned int aEnaFlag=0; + bool aSigOut=false; + if (_disabledNotified==TRUE && !_includeBounds) _constrEnabled=false; + if(_constrEnabled){ + if (_s1Notified==TRUE){ + if (_s1Time==-1){ + _s1Time = SchedulableDevice::getSimulatedTime(); + aEnaFlag |=2; + }else{ + if (_retrigger) _s1Time = SchedulableDevice::getSimulatedTime(); + } + } + if (_s1Time!=-1 && SchedulableDevice::getSimulatedTime() -_s1Time>=_t){ + if (SchedulableDevice::getSimulatedTime() - _s1Time > _t && _aboveConstr!=0) _aboveConstr[0]->forceDisable(); + aEnaFlag |=1; + aSigOut=true; + _s1Time=-1; + } + + } + _constrEnabled |= (_enabledNotified==TRUE); + if (_disabledNotified==TRUE){ + if (_s1Time!=-1) aEnaFlag |=1; //NEW to investigate + reset(); + } + notifiedReset(); + if (_aboveConstr!=0) _aboveConstr[0]->notifyEnable(aEnaFlag); + //if (_rightConstr!=0) (_rightConstr->*_ntfFuncSigOut)(aSigOut); + notifyRightConstraints(aSigOut); + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..48d192bfc65096da14d495623be9c9f93da24878 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TimeTConstraint.h @@ -0,0 +1,70 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TimeTConstraintH +#define TimeTConstraintH +#include <SignalConstraint.h> +#include <PropertyStateConstraint.h> + +///Class representing the TEPE Time Constraint with one input signal and one time value +class TimeTConstraint: public SignalConstraint, public PropertyStateConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iT Time that the property must hold + \param iRetrigger Indicates whether a sencond occurrence of the first input signals retriggers the timer + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + TimeTConstraint(ID iID, TMLTime iT, bool iRetrigger, bool iIncludeBounds); + void notifiedReset(); + void reset(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); +protected: + void evalInput(); + ///Time that the property must hold + TMLTime _t; + ///Indicates whether a sencond occurrence of the first input signals retriggers the timer + bool _retrigger; + ///Time of occurrence of the first input signal + TMLTime _s1Time; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a6c449db4174ee03f421b0df8ddd7fa3aa4aef0e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.cpp @@ -0,0 +1,61 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TwoSigConstraint.h> + +TwoSigConstraint::TwoSigConstraint(ID iID, bool iIncludeBounds): SignalConstraint(iID, iIncludeBounds), _s2Notified(UNDEF){ +} + +void TwoSigConstraint::notifyS2(bool iSigState){ + //_s2Notified = iSigState; + //_notificationMask |=2; + if (iSigState) + std::cout << _ID << ": s2 ok\n"; + else + std::cout << _ID << ": s2 --\n"; + _s2Notified = (iSigState)?TRUE:FALSE; + evalInput(); +} + +void TwoSigConstraint::notifiedReset(){ + //_notificationMask=0; + SignalConstraint::notifiedReset(); + _s2Notified = UNDEF; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.h new file mode 100644 index 0000000000000000000000000000000000000000..1c292e0c065fcd41b77b3f3a21eb631fe6653878 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TEPE/TwoSigConstraint.h @@ -0,0 +1,60 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TwoSigConstraintH +#define TwoSigConstraintH +#include <SignalConstraint.h> + +///Class representing any TEPE constraint with 2 input signals +class TwoSigConstraint: public SignalConstraint{ +public: + ///Constructor + /** + \param iID ID of the constraint + \param iIncludeBounds Indicates whether the verification interval is open or closed (on both sides in each case) + */ + TwoSigConstraint(ID iID, bool iIncludeBounds); + void notifyS2(bool iSigState); + virtual void notifiedReset(); +protected: + ///State of second input signal + Tristate _s2Notified; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TMLTransaction.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TMLTransaction.cpp new file mode 100755 index 0000000000000000000000000000000000000000..4050a0cec058dd2ff6472144de00ac87faa10be3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TMLTransaction.cpp @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLTransaction.h> +#include <TMLTask.h> +#include <CPU.h> +#include <TMLCommand.h> + +MemPoolNoDel<TMLTransaction> TMLTransaction::memPool(BLOCK_SIZE_TRANS); + + +TMLTransaction::TMLTransaction():_runnableTime(0), _startTime(0), _length(0), _virtualLength(0), _command(0), +#ifdef PENALTIES_ENABLED + _idlePenalty(0), _taskSwitchingPenalty(0), //, _branchingPenalty(0), +#endif +_channel(0),_stateID(0) { +} + +TMLTransaction::TMLTransaction(TMLCommand* iCommand, TMLLength iVirtualLength, TMLTime iRunnableTime, TMLChannel* iChannel):_runnableTime(iRunnableTime), _startTime(0), _length(0), _virtualLength(iVirtualLength), _command(iCommand), +#ifdef PENALTIES_ENABLED + _idlePenalty(0), _taskSwitchingPenalty(0), //, _branchingPenalty(0), +#endif +_channel(iChannel),_stateID(0) { +} + +std::string TMLTransaction::toString() const{ + std::ostringstream outp; + outp << _command->toString() << std::endl << "Transaction runnable:" << _runnableTime << " len:" << _length << " start:" << _startTime << " vLength:" << _virtualLength; + if (_channel!=0) outp << " Ch: " << _channel->toShortString(); + return outp.str(); +} + +std::string TMLTransaction::toShortString() const{ + std::ostringstream outp; + if (_command==0) + outp << "Sytem State ID: " << _virtualLength; + else{ + outp << _command->toShortString() << " t:" << _startTime << " l:" << _length << " (vl:"<< _virtualLength << ")"; + if (_channel!=0) outp << " Ch: " << _channel->toShortString(); + } + return outp.str(); +} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TMLTransaction.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TMLTransaction.h new file mode 100644 index 0000000000000000000000000000000000000000..d8613cc716f13a8b0275d0ecc93d246022ddcfce --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/TMLTransaction.h @@ -0,0 +1,257 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLTransactionH +#define TMLTransactionH + +#include <definitions.h> +#include <MemPoolNoDel.h> + +class TMLCommand; +class TMLChannel; + +class TMLTransaction{ +public: + ///Constructor + /** + \param iCommand Pointer to the command the transaction belongs to + \param iVirtualLength Virtual length of the transaction + \param iRunnableTime Time when the transaction became runnable + \param iChannel Channel on which data was conveyed + */ + TMLTransaction(TMLCommand* iCommand, TMLLength iVirtualLength, TMLTime iRunnableTime, TMLChannel* iChannel=0); + ///Constructor + TMLTransaction(); + ///Returns the time when the transaction became runnable + /** + \return Runnable time + */ + inline TMLTime getRunnableTime() const {return _runnableTime;} + ///Sets the time when the transaction became runnable + /** + \param iRunnableTime Runnable time + */ + inline void setRunnableTime(TMLTime iRunnableTime) {_runnableTime = max(_runnableTime,iRunnableTime);} + ///Returns the start time of the transaction + /** + \return Start time + */ + inline TMLTime getStartTime() const {return _startTime;} + ///Returns the start time of the operational part of the transaction + /** + \return Start time of the operational part + */ + inline TMLTime getStartTimeOperation() const { +#ifdef PENALTIES_ENABLED + return _startTime + _idlePenalty + _taskSwitchingPenalty; +#else + return _startTime; +#endif + } + ///Sets the start time of the transaction + /** + \param iStartTime Start time + */ + inline void setStartTime(TMLTime iStartTime) {_startTime=iStartTime;} + ///Returns the length of the operational part of the transaction + /** + \return Length of the operational part + */ + inline TMLTime getOperationLength() const {return _length;} + ///Returns the length of the operation and penalties + /** + \return Overall transaction length + */ + inline TMLTime getOverallLength() const{ +#ifdef PENALTIES_ENABLED + return _length + _idlePenalty + _taskSwitchingPenalty; +#else + return _length; +#endif + } + ///Sets the length of the transaction + /** + \param iLength Length of the transaction + */ + inline void setLength(TMLTime iLength) {_length=iLength;} + ///Returns the length of all penalties + /** + \return Length of penalties + */ + inline TMLTime getPenalties() const{ +#ifdef PENALTIES_ENABLED + return _idlePenalty + _taskSwitchingPenalty; +#else + return 0; +#endif + } + ///Returns the virtual length of the transaction (number of execution units already carried out by previous transactions) + /** + \return Virtual length + */ + inline TMLLength getVirtualLength() const {return _virtualLength;} + ///Sets the virtual length of the transaction (number of execution units already carried out by previous transactions) + /** + \param iLength Virtual length of the transaction + */ + inline void setVirtualLength(TMLLength iLength) {_virtualLength=iLength;} + ///Returns a pointer to the command the transaction belongs to + /** + \return Pointer to command + */ + inline TMLCommand* getCommand() const {return _command;} + ///Returns the end time of the transaction + /** + \return End time + */ + inline TMLTime getEndTime() const{ +#ifdef PENALTIES_ENABLED + return _startTime + _length + _idlePenalty + _taskSwitchingPenalty; +#else + return _startTime + _length; +#endif + } + ///Returns the idle panalty of the transaction + /** + \return Idle panalty + */ + inline TMLTime getIdlePenalty() const{ +#ifdef PENALTIES_ENABLED + return _idlePenalty; +#else + return 0; +#endif + } + ///Sets the idle panalty of the transaction + /** + \param iIdlePenalty Idle penalty + */ + inline void setIdlePenalty(TMLTime iIdlePenalty){ +#ifdef PENALTIES_ENABLED + _idlePenalty=iIdlePenalty; +#endif + } + ///Returns the task switching panalty of the transaction + /** + \return Task switching penalty + */ + inline TMLTime getTaskSwitchingPenalty() const{ +#ifdef PENALTIES_ENABLED + return _taskSwitchingPenalty; +#else + return 0; +#endif + } + ///Sets the task switching panalty of the transaction + /** + \param iTaskSwitchingPenalty Task switching penalty + */ + inline void setTaskSwitchingPenalty(TMLTime iTaskSwitchingPenalty){ +#ifdef PENALTIES_ENABLED + _taskSwitchingPenalty=iTaskSwitchingPenalty; +#endif + } + /////Returns the branching panalty of the transaction + ////** + //\return Branching penalty + //*/ + //TMLTime getBranchingPenalty() const; + ////Sets the branching panalty of the transaction + ////** + ////\param iBranchingPenalty Branching penalty + //*/ + //void setBranchingPenalty(TMLTime iBranchingPenalty); + ///Returns a string representation of the transaction + /** + \return Detailed string representation + */ + std::string toString() const; + ///Returns a short string representation of the transaction + /** + \return Short string representation + */ + std::string toShortString() const; + ///Set channel on which data was conveyed + /** + \param iChannel Pointer to a channel + */ + inline void setChannel(TMLChannel* iChannel) {_channel=iChannel;} + ///Get channel on which data was conveyed + /** + \return Pointer to channel + */ + inline TMLChannel* getChannel() const {return _channel;} + inline static void * operator new(size_t size) {return memPool.pmalloc(size);} + inline static void operator delete(void *p, size_t size) {memPool.pfree(p, size);} + inline static void reset() {memPool.reset();} + inline static void incID() {_ID++;} + inline static ID getID() {return _ID;} + inline static void resetID() {_ID=1;} + inline void setStateID(ID iID) {_stateID=iID;} + inline ID getStateID() {return _stateID;} +protected: + ///Time when the transaction became runnable + TMLTime _runnableTime; + ///Start time of the transaction + TMLTime _startTime; + ///Length of the transaction + TMLTime _length; + ///Virtual length of the transaction (number of execution units of the transaction) + TMLLength _virtualLength; + ///Pointer to the command the transaction belongs to + TMLCommand* _command; +#ifdef PENALTIES_ENABLED + ///Idle penalty + TMLTime _idlePenalty; + ///Task switching penalty + TMLTime _taskSwitchingPenalty; + /////Branching penalty + //TMLTime _branchingPenalty; +#endif + ///Channel on which data was conveyed + TMLChannel* _channel; + ID _stateID; + ///Memory pool for transactions + static MemPoolNoDel<TMLTransaction> memPool; + ///Current Transaction ID + static ID _ID; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/IndeterminismSource.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/IndeterminismSource.h new file mode 100644 index 0000000000000000000000000000000000000000..0c579c398e48e5008f22031c36f9b450dabd9084 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/IndeterminismSource.h @@ -0,0 +1,69 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef IndeterminismSourceH +#define IndeterminismSourceH +#include <definitions.h> + +///This interface characterizes a non-deterministic behavior of a TML command +class IndeterminismSource{ + public: + ///Constructor + IndeterminismSource(): _randomValue(-1) {} + ///Destructor + virtual ~IndeterminismSource(){} + ///Returns the range of the random variable + /** + \return Range of random variable + */ + virtual unsigned int getRandomRange()=0; + ///Sets the value of the random variable in exploration mode + /** + \param iValue Value of random variable + */ + virtual void setRandomValue(unsigned int iValue){ + _randomValue=iValue; + //std::cout << "Random value by sim" << _randomValue << "\n"; + } + protected: + ///Value of random variable + mutable unsigned int _randomValue; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/Parameter.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/Parameter.h new file mode 100644 index 0000000000000000000000000000000000000000..d6f99a625a74e3ec206dcc23699fb52118b2501c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/Parameter.h @@ -0,0 +1,211 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ParameterH +#define ParameterH + +#include <definitions.h> +#include <MemPool.h> +#include <HashAlgo.h> + +class Parameter { +public: + ///Constructor + virtual void print() const=0; + virtual std::ostream& writeObject(std::ostream& s) = 0; + virtual void streamStateXML(std::ostream& s) const = 0; + virtual void getP(void* op1 ...) const = 0; + virtual void getStateHash(HashAlgo* iHash) const = 0; + virtual void readFromStream(std::istream &is)=0; + + ///Stream operator >> + friend std::istream& operator >>(std::istream &is,Parameter* obj){ + obj->readFromStream(is); + //for (unsigned int i=0;i<obj.size;i++){ + // is >> obj._p[i]; + //} + return is; + } +}; + +template <typename T, int size> +class SizedParameter: public Parameter { +public: + SizedParameter(){ + } + + SizedParameter(const T& ip1 ...){ +//#if size>0 + if (size!=0){ + T arg=ip1; + va_list args; // argument list + va_start(args, ip1); // initialize args + for (unsigned int i=0;i<size;i++){ + _p[i]=arg; + arg=va_arg(args, T); + } + } +//#endif + } + + SizedParameter(std::istream& s){ +//#if size>0 + for (unsigned int i=0;i<size;i++){ + READ_STREAM(s, _p[i]); + } +#ifdef DEBUG_SERIALIZE + print(); +#endif +//#endif + } + + + virtual ~SizedParameter(){ + } + + ///Print function for testing purposes + void print() const{ + //std::cerr << "print " << size << " elements in mempool " << &memPool << " :\n"; +//#if size>0 + for (unsigned int i=0;i<size;i++){ + std::cout << " p[" << (i+1) << "]:" << _p[i]; + } +//#endif + //std::cerr << std::endl; + //std::cerr << "end print:\n"; + } + + std::ostream& writeObject(std::ostream& s){ +//#if size>0 + //std::cout << "writeObject:\n"; + for (unsigned int i=0;i<size;i++){ + WRITE_STREAM(s, _p[i]); + } +#ifdef DEBUG_SERIALIZE + print(); +#endif +//#endif + //std::cout << "end writeObject:\n"; + return s; + } + + ///Streams the parameter in XML format + /** + \param s Stream + */ + void streamStateXML(std::ostream& s) const{ + //std::cout << "streamStateXML:\n"; + s << TAG_PARAMo; +//#if size>0 + for (unsigned int i=0;i<size;i++){ + s << TAG_Pxo << i << ">" << _p[i] << TAG_Pxc << i << ">"; + } +//#endif + s << TAG_PARAMc; + //std::cout << "end streamStateXML:\n"; + } + + /* template <typename T, int size> void SizedParameter<T,size>::setP(T ip1 ...){ + T arg=ip1; + va_list args; // argument list + va_start(args, ip1); // initialize args + for (unsigned int i=0;i<size;i++){ + _p[i]=arg; + arg=va_arg(args, T); + } + }*/ + + void getP(void* op1 ...) const { + //std::cout << "getP:\n"; + if(size!=0){ +//#if size>0 + T* arg= (T*) op1; + va_list args; // argument list + va_start(args, op1); // initialize args + for (unsigned int i=0;i<size;i++){ + //std::cerr << "set Param " << i << "\n"; + *arg=_p[i]; + arg=va_arg(args, T*); + } + } +//#endif + //std::cout << "end getP:\n"; + } + + //inline T getPByIndex(unsigned int iIndex){ + // return _p[iIndex]; + //} + + void getStateHash(HashAlgo* iHash) const{ +//#if size>0 + //std::cout << "add param vals:\n"; + for (unsigned int i=0;i<size;i++){ + iHash->addValue((HashValueType)_p[i]); + //std::cout << _p[i] << ", "; + } + //std::cout << "\nend add param vals:\n"; +//#endif + } + + static void * operator new(size_t iSize){ + return memPool.pmalloc(iSize); + } + + static void operator delete(void *p, size_t iSize){ + memPool.pfree(p, iSize); + } + + void readFromStream(std::istream &is){ +//#if size>0 + for (unsigned int i=0;i<size;i++){ + is >> _p[i]; + } +//#endif + } + protected: + static MemPool<SizedParameter<T,size> > memPool; +//#if size>0 + T _p[(size==0)?1:size]; +//#endif + +}; + +template<class T,int size> MemPool<SizedParameter<T,size> > SizedParameter<T, size>::memPool(BLOCK_SIZE_PARAM); +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..803536a0cd171b30e1379c7f4e1ad99efff94f1b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.cpp @@ -0,0 +1,78 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLActionCommand.h> +#include <TMLTask.h> +#include <SimComponents.h> +//#include <CommandListener.h> + +TMLActionCommand::TMLActionCommand(ID iID, TMLTask* iTask, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint):TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_actionFunc(iActionFunc){ + _type=ACT; +} + +TMLCommand* TMLActionCommand::prepareNextTransaction(){ + if (_simComp->getStopFlag()){ + _simComp->setStoppedOnAction(); + //std::cout << "sim stopped in action command " << std::endl; + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + TMLCommand* aNextCommand=getNextCommand(); + //std::cout << "Action func CALLED length: " << *_pLength << " progress:" << _progress << std::endl; + (_task->*_actionFunc)(); + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif + _task->setCurrCommand(aNextCommand); + //FOR_EACH_CMDLISTENER (*i)->commandFinished(this); +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + if (aNextCommand!=0) return aNextCommand->prepare(false); + return 0; +} + +std::string TMLActionCommand::toString() const{ + std::ostringstream outp; + outp << "Action in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..e4c7c1a92c5ca2c1ee5b6f6e06dd60fa96bbf46a --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLActionCommand.h @@ -0,0 +1,72 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLActionCommandH +#define TMLActionCommandH + +#include <definitions.h> +#include <TMLCommand.h> + + +///This class executes a C++ statement (probably a variable assignment or modification) defined in the scope of a TML action state. +/**The command itself is located in the corresponding TMLTask::executeStatement() method as it may access local task variables.*/ +class TMLActionCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iActionFunc Member function pointer to the action function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLActionCommand(ID iID, TMLTask* iTask, ActionFuncPointer iActionFunc, const char* iLiveVarList, bool iCheckpoint); + inline void execute() {} + //TMLTask* getDependentTask() const; + std::string toString() const; + inline std::string toShortString() const {return "Action";} + inline std::string getCommandStr() const {return "act";} +protected: + ///Member function pointer to the action function + ActionFuncPointer _actionFunc; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChannel.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChannel.cpp new file mode 100755 index 0000000000000000000000000000000000000000..f4117d964180688ac9d8110a939e54b655394ba3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChannel.cpp @@ -0,0 +1,131 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLChannel.h> +#include <BusMaster.h> +#include <TMLCommand.h> +#include <TMLTransaction.h> + +TMLChannel::TMLChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, Priority iPriority): _ID(iID), _name(iName), _width(iWidth), _readTask(0), _writeTask(0), _writeTrans(0), _readTrans(0),_numberOfHops(iNumberOfHops), _masters(iMasters), _slaves(iSlaves), _writeTransCurrHop(0), _readTransCurrHop(iNumberOfHops-1), _priority(iPriority), _significance(0){ +} + +TMLChannel::~TMLChannel(){ + if (_masters!=0) delete[] _masters; + if (_slaves!=0) delete[] _slaves; +} + +BusMaster* TMLChannel::getNextMaster(TMLTransaction* iTrans){ + //if (iTrans->getCommand()->getTask()==_writeTask){ + if (iTrans==_writeTrans){ + _writeTransCurrHop++; + //if (_writeTransCurrHop>0 && _masters[_writeTransCurrHop]->getBus()==_masters[_writeTransCurrHop-1]->getBus()) return 0; + if (_writeTransCurrHop>0 && (_masters[_writeTransCurrHop]->getBus()==_masters[_writeTransCurrHop-1]->getBus() || _slaves[_writeTransCurrHop-1]==0)) return 0; //NEW!!! + return _masters[_writeTransCurrHop]; + }else{ + _readTransCurrHop--; + //if (_readTransCurrHop<_numberOfHops-1 && _masters[_readTransCurrHop]->getBus()==_masters[_readTransCurrHop+1]->getBus()) return 0; + if (_readTransCurrHop<_numberOfHops-1 && _masters[_readTransCurrHop]->getBus()==_masters[_readTransCurrHop+1]->getBus()) return 0; + return _masters[_readTransCurrHop]; + } +} + +BusMaster* TMLChannel::getFirstMaster(TMLTransaction* iTrans){ + //if (iTrans->getCommand()->getTask()==_writeTask){ + //std::cout << "fima 1\n"; + if (_masters==0 || _slaves==0 || _numberOfHops==0) return 0; + //std::cout << "fima 2\n"; + if (iTrans==_writeTrans){ + //if (iTrans->getCommand()->getTask()==_writeTask){ + //std::cout << "fima 3\n"; + _writeTransCurrHop=0; + return _masters[_writeTransCurrHop]; + }else{ + //std::cout << "fima 4\n"; + if (_slaves[(_numberOfHops/2)]==0) return 0; //NEW!!! + //std::cout << "fima 5\n"; + _readTransCurrHop=_numberOfHops-1; + return _masters[_readTransCurrHop]; + } +} + +Slave* TMLChannel::getNextSlave(TMLTransaction* iTrans) const{ + //if (iTrans->getCommand()->getTask()==_writeTask){ + if (iTrans==_writeTrans){ + return _slaves[_writeTransCurrHop]; + }else{ + return _slaves[_readTransCurrHop]; + } +} + +std::ostream& TMLChannel::writeObject(std::ostream& s){ + //WRITE_STREAM(s,_writeTransCurrHop); + //WRITE_STREAM(s,_readTransCurrHop); + //if (_ID==53 && _significance==0) std::cout << "failure before write\n"; + WRITE_STREAM(s, _significance); + return s; +} +std::istream& TMLChannel::readObject(std::istream& s){ + //READ_STREAM(s,_writeTransCurrHop); + //READ_STREAM(s,_readTransCurrHop); + READ_STREAM(s, _significance); + //if (_ID==53 && _significance==0) std::cout << "failure after read\n"; + //std::cout << "read\n"; + return s; +} + +void TMLChannel::reset(){ + //std::cout << "Channel reset" << std::endl; + _writeTrans=0; + _readTrans=0; + _writeTransCurrHop=0; + _readTransCurrHop=_numberOfHops-1; + _significance=0; + //std::cout << "reset\n"; + //std::cout << "Channel reset end" << std::endl; +} + +void TMLChannel::setSignificance(TMLTask* iTask, bool iSignificance){ + //unsigned int aInput = (iTask==_writeTask)?1:2; + unsigned char aInput = (iTask==_writeTask)?1:2; + if (iSignificance) + _significance |= aInput; + else + _significance &= (~aInput); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChannel.h new file mode 100755 index 0000000000000000000000000000000000000000..9546ce40d9d5c9b396c02f308aad05527641356c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChannel.h @@ -0,0 +1,230 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLChannelH +#define TMLChannelH + +#include <definitions.h> +#include <SchedulableCommDevice.h> +#include <Slave.h> +#include <Serializable.h> +#include <ListenerSubject.h> +//#include <ChannelListener.h> +#include <GeneralListener.h> +//#include <TransactionListener.h> + +class TMLTransaction; +class TMLCommand; +class TMLTask; +class BusMaster; +class HashAlgo; + +///This class defines the basic interfaces and functionalites of a TML channel. All specific channels are derived from this base class. A channel is able to convey data and events. +class TMLChannel: public Serializable, public ListenerSubject <GeneralListener>{ +//class TMLChannel: public Serializable, public ListenerSubject <ChannelListener>, public ListenerSubject <TransactionListener> { +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iPriority Priority of the channel + */ + TMLChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, Priority iPriority); + ///Destructor + virtual ~TMLChannel(); + ///Prepares a write operation + /** + \param iTrans Poiter to the write transaction + */ + virtual void testWrite(TMLTransaction* iTrans)=0; + ///Prepares a read operation + /** + \param iTrans Pointer to the read transaction + */ + virtual void testRead(TMLTransaction* iTrans)=0; + ///Performs the write operation + virtual void write()=0; + ///Performs the read operation + virtual bool read()=0; + ///Stores a pointer to the tasks which performs read operation on the channel + /** + \param iReadTask Pointer to the task + */ + inline void setBlockedReadTask(TMLTask* iReadTask) {_readTask=iReadTask;} + ///Returns a pointer to the tasks which performs read operation on the channel + /** + \return Pointer to the task + */ + virtual TMLTask* getBlockedReadTask() const=0; + ///Stores a pointer to the tasks which performs write operation on the channel + /** + \param iWriteTask Pointer to the task + */ + inline void setBlockedWriteTask(TMLTask* iWriteTask) {_writeTask=iWriteTask;} + ///Returns a pointer to the tasks which performs write operation on the channel + /** + \return Pointer to the task + */ + virtual TMLTask* getBlockedWriteTask()const=0; + ///Returns the next communication master on which the given transaction is conveyed + /** + \param iTrans Transaction + \return Pointer to the communication master + */ + BusMaster* getNextMaster(TMLTransaction* iTrans); + ///Returns the first communication master on which the given transaction is conveyed + /** + \param iTrans Transaction + \return Pointer to the communication master + */ + BusMaster* getFirstMaster(TMLTransaction* iTrans); + ///Returns the next slave component to which the given transaction is sent + /** + \param iTrans Transaction + \return Pointer to the slave + */ + Slave* getNextSlave(TMLTransaction* iTrans) const; + //Returns the number of buses on which the channel is mapped + //\return Number of buses + //unsigned int getNumberOfHops() const; + ///Returns a string representation of the channel + /** + \return Detailed string representation + */ + virtual std::string toString() const =0; + ///Returns a short string representation of the channel + /** + \return Short string representation + */ + inline std::string toShortString() const {return _name;} + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + ///Returns the unique ID of the device + /** + \return Unique ID + */ + inline ID getID() const {return _ID;} + ///Inserts samples into the channel + /** + \param iNbOfSamples Number of samples to insert + \param iParam Parameter to insert + \return Returns true if successful + */ + inline virtual TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam) {return iNbOfSamples;} + ///Writes XML information about the component to a stream + /** + \param s Reference to an output stream + */ + inline virtual void streamStateXML(std::ostream& s) const {} + ///Returns the number of samples stored in the channel + /** + \return Content of the channel + */ + inline virtual TMLLength getContent() const {return 0;} + ///Returns a flag indicating if a channel overflow has been encoutered + /** + \return Channel overflow flag + */ + inline virtual bool getOverflow() const {return false;} + ///Returns a flag indicating if a channel underflow has been encoutered + /** + \return Channel underflow flag + */ + inline virtual bool getUnderflow() const {return false;} + ///Returns the hash value for the current task state + /** + \param iHash Hash algorithm object + */ + virtual void getStateHash(HashAlgo* iHash) const =0; + ///Returns the priority of the channel + /** + \return Hash Value + */ + inline Priority getPriority() {return _priority;} + ///Returns the width of the channel + /** + \return Channel width + */ + inline unsigned int getWidth() {return _width;} + ///Returns the width of the channel + /** + \param iTask Reference to reading or writing task + \param iSignificance Flag indicating if operations performed by this task are still reachable + */ + void setSignificance(TMLTask* iTask, bool iSignificance); + inline bool getSignificance() {return (_significance != 0);} + inline bool mappedOnBus() {return _numberOfHops!=0;} +protected: + ///ID of channel + ID _ID; + ///Name of the channel + std::string _name; + ///Channel size + unsigned int _width; + ///Pointer to the tasks which performs read operation on the channel + TMLTask* _readTask; + ///Pointer to the tasks which performs write operation on the channel + TMLTask* _writeTask; + ///Pointer to the transaction which attempts to write in the channel + TMLTransaction* _writeTrans; + ///Pointer to the transaction which attempts to read the channel + TMLTransaction* _readTrans; + ///Number of Buses/Slave devices on which the channel is mapped + unsigned int _numberOfHops; + ///List of buses on which the channel is mapped + BusMaster** _masters; + ///List of slaves on which the channel is mapped + Slave** _slaves; + ///Keeps track of the current Hop of a write Transaction + unsigned int _writeTransCurrHop; + ///Keeps track of the current Hop of a read Transaction + unsigned int _readTransCurrHop; + ///channel priority + Priority _priority; + ///Flag indicating if read or write commands for that channel are still reachable + unsigned char _significance; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..3b48c725c892a57e898adde13277f344aceef698 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.cpp @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLChoiceCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <SimComponents.h> +//#include <CommandListener.h> + +TMLChoiceCommand::TMLChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint):TMLCommand(iID, iTask, 1, iNbOfBranches, iLiveVarList, iCheckpoint), _rangeFunc(iRangeFunc) { + _type=CHO; +} + +TMLCommand* TMLChoiceCommand::getNextCommand() const{ + ParamType aMin, aMax; + //return _nextCommand[(_task->*_rangeFunc)(aMin, aMax)]; + unsigned int aNextIndex = (_task->*_rangeFunc)(aMin, aMax); + _coveredBranchMap |= (1 << aNextIndex); + return _nextCommand[aNextIndex]; +} + +TMLCommand* TMLChoiceCommand::prepareNextTransaction(){ + if (_simComp->getStopFlag()){ + _simComp->setStoppedOnAction(); + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + if (aNextCommand!=0) return aNextCommand->prepare(false); + return 0; +} + +std::string TMLChoiceCommand::toString() const{ + std::ostringstream outp; + outp << "Choice in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..21c133ba80aec5c4613353610fed026ea660ddb2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLChoiceCommand.h @@ -0,0 +1,72 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLChoiceCommandH +#define TMLChoiceCommandH + +#include <definitions.h> +#include <TMLCommand.h> + + +///This class stands for a fork in the control flow of a TML task. +class TMLChoiceCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc function returning the rage of enabled branches + \param iNbOfBranches Number of branches of the choice + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint); + inline void execute() {} + std::string toString() const; + inline std::string toShortString() const {return "Choice";} + inline std::string getCommandStr() const {return "cho";} +protected: + ///Member function pointer to the condition function returning the index of the next command + RangeFuncPointer _rangeFunc; + virtual TMLCommand* getNextCommand() const; + virtual TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..305d6e3800f4d03a71deddb0de524a71622f6f7b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLCommand.cpp @@ -0,0 +1,305 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <CPU.h> +//#include <CommandListener.h> +#include <Parameter.h> +#include <TMLChoiceCommand.h> +#include <TMLRandomChoiceCommand.h> +#include <TMLActionCommand.h> +#include <TMLNotifiedCommand.h> +#include <TMLWaitCommand.h> +#include <SimComponents.h> +#include <TMLStopCommand.h> +#include <TMLRandomCommand.h> + +std::list<TMLCommand*> TMLCommand::_instanceList; +SimComponents* TMLCommand::_simComp=0; +unsigned int TMLCommand::_branchNo=0; + +TMLCommand::TMLCommand(ID iID, TMLTask* iTask, TMLLength iLength, unsigned int iNbOfNextCmds, const char* iLiveVarList, bool iCheckpoint): _ID(iID), _length(iLength), _type(NONE), _progress(0), _currTransaction(0), _task(iTask), _nextCommand(0), /*_paramFunc(iParamFunc),*/ _nbOfNextCmds(iNbOfNextCmds), _breakpoint(0), _justStarted(true), _commandStartTime(-1), _liveVarList(iLiveVarList), _checkpoint(iCheckpoint), _execTimes(0), _coveredBranchMap(0){ + if (dynamic_cast<TMLStopCommand*>(this)==0){ + _instanceList.push_back(this); + _task->addCommand(iID, this); + if (_nbOfNextCmds>1){ + //std::cout << "** " << this->toShortString() << " has " << _nbOfNextCmds << " branches.\n"; + _branchNo+=_nbOfNextCmds; + } + + } +} + +TMLCommand::~TMLCommand(){ + //if (_currTransaction!=0) delete _currTransaction; NEW + //if (_currTransaction!=0) std::cout << "transaction not yet deleted: " << getCommandStr() << std::endl; + if (_nextCommand!=0) delete[] _nextCommand; + _instanceList.remove(this); + removeBreakpoint(); +} + +TMLCommand* TMLCommand::prepare(bool iInit){ + //Do not set _currTransaction=0 as specialized commands access the variable in the scope of the execute method (set terminated flag) + //std::cout << "Prepare command ID: " << _ID << "\n"; + if(_length==_progress){ + TMLCommand* aNextCommand; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); + if(!_simComp->getOnKnownPath()){ + //_task->refreshStateHash(_liveVarList); + if(_checkpoint){ + ID aStateID=0; + aStateID = _simComp->checkForRecurringSystemState(); + if (_currTransaction!=0) _currTransaction->setStateID(aStateID); + } + } +#endif + //std::cout << "COMMAND FINISHED!!n"; +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(_currTransaction); + if (_justStarted) NOTIFY_CMD_STARTED(this); + //if (_justStarted) NOTIFY_CMD_STARTED(_currTransaction); +#endif + _progress=0; + _currTransaction=0; //NEW!!!!!!!!!!! + _commandStartTime=-1; //NEW + _execTimes++; + //std::cerr << "Prepare command, get next command 1" << std::endl; + aNextCommand=getNextCommand(); + //std::cerr << "Prepare command, get next command 2" << std::endl; + //std::cout << "Prepare command, to next command" << std::endl; + _task->setCurrCommand(aNextCommand); + if (aNextCommand==0){ + return 0; + }else{ + //std::cout << "Prepare command, prepare next command" << std::endl; + return aNextCommand->prepare(false); + } + }else{ + if (_commandStartTime==((TMLTime)-1)){ + _commandStartTime = SchedulableDevice::getSimulatedTime(); + } + //std::cout << "Prepare next transaction TMLCmd " << _listeners.size() << std::endl; + TMLCommand* result; + if (iInit){ + //if (_currTransaction!=0) delete _currTransaction; NEW!!!!!!!!!!!!!!!!!! + if (_currTransaction==0){ + //std::cout << "currTrans==0 " << std::endl; + result = prepareNextTransaction(); //NEW!!!!!!!!!!!!!!!!!!!!!!!! + //std::cout << "end prepare " << std::endl; + }else{ + //std::cout << "currTrans!=0 " << std::endl; + result = _currTransaction->getCommand(); + //std::cout << "end get cmd " << std::endl; + } + if (_progress==0) _justStarted=true; + //result=0; ///////////NEW + }else{ + if (_progress==0){ +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_ENTERED(this); +#else +#ifdef EXPLO_ENABLED + if (dynamic_cast<IndeterminismSource*>(this)!=0) NOTIFY_CMD_ENTERED(this); + //if (dynamic_cast<TMLRandomCommand*>(this)!=0) NOTIFY_CMD_ENTERED(this); +#endif +#endif + _justStarted=true; + }else{ +#ifdef LISTENERS_ENABLED + //NOTIFY_CMD_EXECUTED(this); + NOTIFY_CMD_EXECUTED(_currTransaction); +#endif + if (_justStarted){ +#ifdef LISTENERS_ENABLED + //NOTIFY_CMD_STARTED(_currTransaction); + NOTIFY_CMD_STARTED(this); +#endif + _justStarted=false; + } + } + //std::cout << "Prepare next transaction" << std::endl; + result = prepareNextTransaction(); //NEW!!!!!!!!!!!!!!!!!!!!!!!! + } + //TMLCommand* result = prepareNextTransaction(); NEW!!!!!!!!!!!!!!!!! +/*#ifdef REGISTER_TRANS_AT_CPU + if (_currTransaction!=0 && _currTransaction->getVirtualLength()!=0){ + _task->getCPU()->registerTransaction(_currTransaction,0); + } +#endif*/ + return result; + } + return 0; +} + +TMLCommand** TMLCommand::getNextCommands(unsigned int& oNbOfCmd) const{ + //returned number is not correct for composite choice/choice commands and composite action/choice commands !!!! + oNbOfCmd=_nbOfNextCmds; + return _nextCommand; +} + +std::string TMLCommand::toString() const{ + std::ostringstream outp; + outp << _task->toString() << " len:" << _length << " progress:" << _progress << " ID:" << _ID; + return outp.str(); +} + +void TMLCommand::setBreakpoint(GeneralListener* iBreakp){ + removeBreakpoint(); + _breakpoint=iBreakp; + registerListener(iBreakp); +} + +void TMLCommand::removeBreakpoint(){ + if (_breakpoint!=0){ + removeListener(_breakpoint); + delete _breakpoint; + _breakpoint=0; + } +} + +std::ostream& TMLCommand::writeObject(std::ostream& s){ + WRITE_STREAM(s,_progress); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLCommand " << _ID << " progress: " << _progress << std::endl; +#endif +/*#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(s, _execTimes); +#endif*/ + return s; +} + +std::istream& TMLCommand::readObject(std::istream& s){ + READ_STREAM(s,_progress); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLCommand " << _ID << " progress: " << _progress << std::endl; +#endif +/*#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(s, _execTimes); +#endif*/ +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif + //std::cout << "End Read Object TMLCommand " << _ID << std::endl; + return s; +} + +void TMLCommand::reset(){ + _progress=0; + //if (_currTransaction!=0) delete _currTransaction; NEW + _currTransaction=0; + _commandStartTime=-1; + //_execTimes=0; + //_stateHashes.clear(); +} + +void TMLCommand::registerGlobalListener(GeneralListener* iListener){ + std::cout << "Global cmd listener created \n"; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + (*i)->registerListener(iListener); + } +} + +template<typename T> +void TMLCommand::registerGlobalListenerForType(GeneralListener* iListener, TMLTask* aTask){ + //std::cout << "Global cmd listener created \n"; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + if (dynamic_cast<T*>(*i)!=0 && (aTask==0 || (*i)->getTask()==aTask)) (*i)->registerListener(iListener); + } +} + +void TMLCommand::removeGlobalListener(GeneralListener* iListener){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + (*i)->removeListener(iListener); + } +} + +void TMLCommand::streamStateXML(std::ostream& s){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + s << TAG_CMDo << " id=\"" << (*i)->_ID << "\">" << TAG_EXECTIMESo << (*i)->_execTimes << TAG_EXECTIMESc << TAG_CMDc << "\n"; + } +} + +TMLCommand* TMLCommand::getCommandByID(ID iID){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + if ((*i)->_ID == iID) return *i; + } + return 0; +} + +unsigned int TMLCommand::getCmdCoverage(){ + unsigned int aCoveredCmds=0; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + if ((*i)->_execTimes>0) aCoveredCmds++; //else std::cout << "Not covered: " << (*i)->toShortString() << "\n"; + } + //std::cout << "Total no of commands: " << _instanceList.size() << "\n"; + return aCoveredCmds * 100 / _instanceList.size(); +} + +unsigned int TMLCommand::getBranchCoverage(){ + unsigned int aCoveredBranchNo=0; + //std::cout << "Total branch no: " << _branchNo << "\n"; + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + //if ((*i)->_nbOfNextCmds>1) std::cout << "** " << (*i)->toShortString() << " ID " << (*i)->_ID << " has " << (*i)->_nbOfNextCmds << " branches, covered map : " << (*i)->_coveredBranchMap << "\n"; + long unsigned int aCoveredBranchMap = (*i)->_coveredBranchMap; + while (aCoveredBranchMap>0){ + aCoveredBranchNo++; + aCoveredBranchMap >>=1; + } + } + return (_branchNo==0)? 100: aCoveredBranchNo * 100 / _branchNo; +} + +void TMLCommand::clearCoverageVars(){ + for(std::list<TMLCommand*>::const_iterator i=_instanceList.begin(); i != _instanceList.end(); ++i){ + (*i)->_execTimes=0; + (*i)->_coveredBranchMap=0; + } +} + +template void TMLCommand::registerGlobalListenerForType<IndeterminismSource>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLChoiceCommand>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLActionCommand>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLNotifiedCommand>(GeneralListener* iListener, TMLTask* aTask); +template void TMLCommand::registerGlobalListenerForType<TMLWaitCommand>(GeneralListener* iListener, TMLTask* aTask); + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..e8d7b8eee90070bb3508aaf01523b935c5384e2c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLCommand.h @@ -0,0 +1,281 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLCommandH +#define TMLCommandH + +#include <definitions.h> +#include <Serializable.h> +#include <ListenerSubject.h> +#include <GeneralListener.h> +#include <TMLTransaction.h> + +class TMLTask; +class TMLChannel; +class Comment; +class SimComponents; +class HashAlgo; + +///This class defines the basic interfaces and functionalites of a TML command. All specific commands are derived from this base class. +class TMLCommand: public Serializable, public ListenerSubject <GeneralListener>{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLength Virtual length of the command + \param iNbOfNextCmds Number of next commands + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLCommand(ID iID, TMLTask* iTask, TMLLength iLength, unsigned int iNbOfNextCmds, const char* iLiveVarList, bool iCheckpoint); + ///Destructor + virtual ~TMLCommand(); + ///Initializes the command and passes the control flow to the prepare() method of the next command if necessary + /**This function calls prepareNextCommand() which is implemented by subclasses of TMLCommand + \return True if there was a transaction to prepare + \sa prepareNextTransaction() + */ + TMLCommand* prepare(bool iInit); + ///Updates the inner state of the command as well as the state of all dependent objects (channel, bus,...) + virtual void execute()=0; + ///Assigns a value to the pointer referencing the array of next commands + /** + \param iNextCommand Pointer to an array of pointers to the next commands + */ + inline void setNextCommand(TMLCommand** iNextCommand) {_nextCommand=iNextCommand;} + ///Returns a pointer to the task the command belongs to + /** + \return Pointer to the task + */ + inline TMLTask* getTask() const {return _task;} + ///Returns a pointer to the current transaction + /** + \return Pointer to the current transaction + */ + inline TMLTransaction* getCurrTransaction() const {return _currTransaction;} + ///Returns a pointer to the task which could be unblocked by the command + /** + \param iIndex Index of the task + \return Pointer to the dependent task + */ + inline virtual TMLTask* getDependentTask(unsigned int iIndex) const {return 0;} + ///Returns a pointer to the channel on which the command performs operations + /** + \param iIndex Index of the channel + \return Pointer to the channel + */ + inline virtual TMLChannel* getChannel(unsigned int iIndex) const {return 0;} + ///Returns the number of channels impacted by the command + /** + \return Number of channels + */ + inline virtual unsigned int getNbOfChannels() const {return 0;} + ///Initializes a parameter structure to the values specified by the command + /** + \param ioParam Parameter data structure + */ + inline virtual Parameter* setParams(Parameter* ioParam) {return 0;} + ///Returns a string representation of the command + /** + \return Detailed string representation + */ + virtual std::string toString() const; + ///Returns a short string representation of the command + /** + \return Short string representation + */ + virtual std::string toShortString() const =0; + ///Returns a short string representation of the command type + /** + \return Short string representation of command type + */ + virtual std::string getCommandStr() const=0; +#ifdef ADD_COMMENTS + ///Translates a comment into a readable string + /** + \param iCom Pointer to comment + \return Sring representation of the comment + */ + inline virtual std::string getCommentString(Comment* iCom) const {return "no comment available";} +#endif + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + void reset(); + ///Registers a listener at all TMLCommand instances + /** + \param iListener Pointer to the listener + */ + static void registerGlobalListener(GeneralListener* iListener); + ///Registers a listener at all TMLCommand instances of a specific type + /** + \param iListener Pointer to the listener + \param aTask Only commands of this task are taken into account, if set to 0 all tasks are considered + */ + template<typename T> static void registerGlobalListenerForType(GeneralListener* iListener, TMLTask* aTask); + ///Removes a listener at all TMLCommand instances + /** + \param iListener Pointer to the listener + */ + static void removeGlobalListener(GeneralListener* iListener); + ///Returns the unique ID of the command + /** + \return Unique ID + */ + inline ID getID() const {return _ID;} + ///Sets a new breakpoint + /** + \param iBreakp Pointer to breakpoint + */ + void setBreakpoint(GeneralListener* iBreakp); + ///Removes the breakpoint + void removeBreakpoint(); + ///Returns the progress of the command + /** + \return Progress of the command + */ + inline TMLLength getProgress() const {return _progress;} + ///Returns the progress of the command in percent + /** + \return Progress of the command in percent + */ + inline unsigned int getProgressInPercent() const {return (_length==0)? 0:_progress*100/_length;} + ///Sets the internal pointer to the simulation components + /** + \param iSimComp Pointer to simulation components + */ + inline static void setSimComponents(SimComponents* iSimComp) {_simComp=iSimComp;} + ///Returns a pointer to the next command array and the number of successors of this command + /** + \param oNbOfCmd Number of successors of this command + \return Pointer to next command array + */ + TMLCommand** getNextCommands(unsigned int& oNbOfCmd) const; + ///Returns the hash value for the current task state + /** + \return Hash Value + */ + inline unsigned long getStateHash() const {return _ID + _progress;} + ///Returns the simulation time when the command is prepared for its first transaction + /** + \return Command start time + */ + inline TMLTime getCommandStartTime() const {return (_commandStartTime==((TMLTime)-1))? 0: _commandStartTime;} + ///Returns the virtual length of the command + /** + \return Command length + */ + inline TMLLength getLength() const {return _length;} + ///Returns whether the command is considered as Checkpoint for system state comparisons + /** + \return true if command is a checkpoint + */ + bool isCheckpoint(); + static void streamStateXML(std::ostream& s); + static TMLCommand* getCommandByID(ID iID); + inline unsigned int getType() {return _type;} + ///Returns the code statement coverage of the whole model + /** + \return Statement coverage in percent + */ + static unsigned int getCmdCoverage(); + ///Returns the code branch coverage of the whole model + /** + \return Branch coverage in percent + */ + static unsigned int getBranchCoverage(); + ///Reset coverage related state variables + static void clearCoverageVars(); +protected: + ///ID of the command + ID _ID; + ///Length of the command + TMLLength _length; + ///Command type + CommandType _type; + ///Progress of the command (in execution units) + TMLLength _progress; + ///Pointer to the current transaction + TMLTransaction* _currTransaction; + ///Pointer to the task the command belongs to + TMLTask* _task; + ///Pointer to an array of pointers to the next commands + TMLCommand** _nextCommand; + ///Number of successors of this command + unsigned int _nbOfNextCmds; + ///Breakpoint + GeneralListener* _breakpoint; + ///Is true until the first transaction of a task is executed + bool _justStarted; + ///Determines the next command based on the _nextCommand array + /** + \return Pointer to the next command + */ + inline virtual TMLCommand* getNextCommand() const {return (_nextCommand==0)?0:_nextCommand[0];} + ///Special actions taken by subclasses of TMLCommand to prepare the next transaction + /** + \return True if there was a transaction to prepare + \sa prepare() + */ + virtual TMLCommand* prepareNextTransaction()=0; + ///List of pointers to all TMLCommand instances + static std::list<TMLCommand*> _instanceList; + ///Pointer to simulation components + static SimComponents* _simComp; + ///State Hash Map + //StateHashSet _stateHashes; + ///Command Start Time + TMLTime _commandStartTime; + ///Bitmap of live variables + const char* _liveVarList; + ///Checkpoint Flag + bool _checkpoint; + ///Number of executions of the command + unsigned int _execTimes; + ////Buffer for transaction to be proposed to kernel + //TMLTransaction transBuffer; + ///Number of branches in the whole DIPLODOCUS model + static unsigned int _branchNo; + ///Bitmap of covered branches of this specific command + mutable long unsigned int _coveredBranchMap; +}; + +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventBChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventBChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..b46befbdc629328a75e60746cb8db3935aef304c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventBChannel.h @@ -0,0 +1,273 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventBChannelH +#define TMLEventBChannelH + +#include <definitions.h> +#include <TMLEventSizedChannel.h> +#include <TMLCommand.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read non blocking write channel (infinite FIFO). +template <typename T, int paramNo> +class TMLEventBChannel : public TMLEventSizedChannel<T,paramNo>{ +public: + //typedef TMLEventSizedChannel<T,paramNo> SC; + + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iRequestChannel Flag indicating if channel is used by a request + \param iSourceIsFile Flag indicating if events are read from a file + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventBChannel(ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, bool iRequestChannel, bool iSourceIsFile, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventSizedChannel<T,paramNo>(iID, iName, iNumberOfHops, iMasters, iSlaves, iContent, iLossRate, iMaxNbOfLosses), _requestChannel(iRequestChannel), _sourceIsFile(iSourceIsFile),_eventFile(0) { + this->_overflow = false; + if (_sourceIsFile){ + std::cout << "try to open Event file " << this->_name.c_str() << std::endl; + //_name="./"+_name; + _eventFile = new std::ifstream(this->_name.c_str()); + readNextEvents(); + } + } + + ~TMLEventBChannel(){ + if (_eventFile!=0){ + if (_eventFile->is_open()) _eventFile->close(); + delete _eventFile; + } + } + + void testRead(TMLTransaction* iTrans){ + this->_readTrans=iTrans; + this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + this->_readTrans->setChannel(this); //NEW!!!! + this->_underflow = (this->_content==0); + } + + void write(TMLTransaction* iTrans){ +#ifdef LOSS_ENABLED + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + this->_nbOfLosses++; + }else{ +#endif + this->_content++; + if (paramNo!=0){ + //this->_paramQueue.push_back(_tmpParam); + //std::cerr << "write!\n"; + this->_tmpParam = iTrans->getCommand()->setParams(0); + this->_paramQueue.push_back(this->_tmpParam); +#ifdef STATE_HASH_ENABLED + this->_tmpParam->getStateHash(& this->_stateHash); //new in if +#endif + } + if (this->_readTrans!=0 && this->_readTrans->getVirtualLength()==0){ + this->_readTrans->setRunnableTime(iTrans->getEndTime()); + this->_readTrans->setChannel(this); + this->_readTrans->setVirtualLength(WAIT_SEND_VLEN); + } +#ifdef LOSS_ENABLED + } +#endif + #ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(iTrans); + #endif + this->_writeTrans=0; //TEST + } + + bool read(){ + if (this->_content<1){ + return false; + }else{ + this->_content--; + if (this->_content==0 && _sourceIsFile) readNextEvents(); + //std::cout << "read next" << std::endl; + //if (this->_readTrans->getCommand()->getParamFuncPointer()!=0) (this->_readTask->*(this->_readTrans->getCommand()->getParamFuncPointer()))(this->_paramQueue.front()); //NEW + if (paramNo!=0){ + //std::cout << "read! ..."; + //this->_paramQueue.front()->print(); + //std::cerr << "\n"; + this->_readTrans->getCommand()->setParams(this->_paramQueue.front()); + delete dynamic_cast<SizedParameter<T,paramNo>*>(this->_paramQueue.front()); + this->_paramQueue.pop_front(); //NEW + } + #ifdef STATE_HASH_ENABLED + //_stateHash-=this->_paramQueue.front().getStateHash(); + //this->_paramQueue.front().removeStateHash(&_stateHash); + this->_hashValid = false; + #endif + + #ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(this->_readTrans); + #endif + this->_readTrans=0; + return true; + } + } + + void cancelReadTransaction(){ + this->_readTrans=0; + } + + TMLTask* getBlockedReadTask() const{ + return this->_readTask; + } + + TMLTask* getBlockedWriteTask() const{ + return 0; + } + + std::string toString() const{ + std::ostringstream outp; + outp << this->_name << "(evtB) content:" << this->_content; + return outp.str(); + } + + bool getRequestChannel() const{ + return _requestChannel; + } + + std::ostream& writeObject(std::ostream& s){ + TMLEventSizedChannel<T,paramNo>::writeObject(s); + if (_eventFile!=0){ + //std::istream::streampos aPos=_eventFile->tellg(); + int aPos=_eventFile->tellg(); + WRITE_STREAM(s,aPos); + #ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLEventBChannel " << this->_name << " posInFile: " << _eventFile->tellg() << std::endl; + #endif + } + return s; + } + + std::istream& readObject(std::istream& s){ + //std::istream::streampos aPos; + int aPos; + TMLEventSizedChannel<T,paramNo>::readObject(s); + //std::cout << "Read Object TMLEventBChannel " << _name << std::endl; + if (_eventFile!=0){ + READ_STREAM(s,aPos); + _eventFile->seekg(aPos); + #ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLEventBChannel " << this->_name << " posInFile: " << aPos << std::endl; + #endif + + } + return s; + } + + void reset(){ + TMLEventSizedChannel<T,paramNo>::reset(); + if (_eventFile!=0){ + _eventFile->clear(); + _eventFile->seekg(0,std::ios::beg); + //std::cout << "EventB reset " << _eventFile->eof() << std::endl; + //*_eventFile >> param; + //param.print(); + readNextEvents(); + std::cout << "no of events: " << this->_content << std::endl; + } + } + + TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + this->_content=0; + this->_paramQueue.clear(); + aNbToInsert=0; + }else{ + aNbToInsert=iNbOfSamples; + this->_content+=iNbOfSamples; + for (TMLLength i=0; i<iNbOfSamples; i++) this->_paramQueue.push_back(iParam); + } + if (this->_readTrans!=0) this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + return aNbToInsert; + } + protected: + void readNextEvents(){ + //std::cout << "vv" << std::endl; + if (_eventFile->is_open()){ + unsigned int i=0; + //Parameter<ParamType> aNewParam; + Parameter* aNewParam; //NEW + while (++i<NO_EVENTS_TO_LOAD && !_eventFile->eof()){ + this->_content++; + aNewParam = new SizedParameter<T,paramNo>(); + (*_eventFile) >> aNewParam; //NEW + //aNewParam.readTxtStream(*_eventFile); + #ifdef STATE_HASH_ENABLED + //_stateHash+=aNewParam.getStateHash(); + //aNewParam.getStateHash(&_stateHash); + #endif + this->_paramQueue.push_back(aNewParam); + } + }else + std::cout << "Event file failure" << std::endl; + } + + void testWrite(TMLTransaction* iTrans){ + this->_writeTrans=iTrans; + //if (paramNo!=0){ + //_tmpParam = iTrans->getCommand()->setParams(0); + //this->_paramQueue.push_back(_tmpParam); //NEW + //#ifdef STATE_HASH_ENABLED + //_tmpParam->getStateHash(&_stateHash); + //#endif + //} + this->_writeTrans->setVirtualLength(WAIT_SEND_VLEN); + } + ///Flag indicating if channel is used by a request + bool _requestChannel; + ///Flag indicating if events are read from a file + bool _sourceIsFile; + ///File where events are stored + std::ifstream* _eventFile; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..4977e9b1515fbf512bc1442088b6c1d352eed2c6 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventChannel.h @@ -0,0 +1,85 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventChannelH +#define TMLEventChannelH + +#include <definitions.h> +#include <TMLStateChannel.h> +#include <Parameter.h> +#include <HashAlgo.h> + +class Bus; + +///This class represents the base class for all event channels. +class TMLEventChannel:public TMLStateChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Width of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves ,TMLLength iContent, unsigned int iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses): TMLStateChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iContent, iPriority, iLossRate, iMaxNbOfLosses){} + ///Cancels a pending read operation + virtual void cancelReadTransaction()=0; + ///Returns a flag indicating if the channel is used by a request + /** + \return True if channel is used by a request, false otherwise + */ + virtual void write(TMLTransaction* iTrans)=0; + void write(){ + write(this->_writeTrans); + _writeTrans=0; + } + virtual bool getRequestChannel() const {return false;} + virtual void print() const=0; + virtual Parameter* buildParameter()=0; + //virtual Parameter* buildParameter(Parameter* iCloneParam)=0; +protected: +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventFBChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventFBChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..4d08eb44643779c7162e46d297c8aee78d3bcac2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventFBChannel.h @@ -0,0 +1,183 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventFBChannelH +#define TMLEventFBChannelH + +#include <definitions.h> +#include <TMLEventSizedChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read blocking write channel (finite blocking FIFO). +template <typename T, int paramNo> +class TMLEventFBChannel:public TMLEventSizedChannel<T,paramNo>{ +public: + //typedef TMLEventSizedChannel<T,paramNo> SC; + + ///Constructor + /** + \param iID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iLength Length of the channel + \param iContent Initial content of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventFBChannel(ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength, TMLLength iContent, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventSizedChannel<T,paramNo>(iID, iName, iNumberOfHops, iMasters, iSlaves, iContent, iLossRate, iMaxNbOfLosses),_length(iLength){ + } + + void testWrite(TMLTransaction* iTrans){ + this->_writeTrans=iTrans; + //if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + this->_writeTrans->setVirtualLength((_length-this->_content>0)?WAIT_SEND_VLEN:0); + this->_overflow = (this->_content==_length); + } + + void testRead(TMLTransaction* iTrans){ + this->_readTrans=iTrans; + this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + this->_readTrans->setChannel(this); //NEW!!!! + this->_underflow = (this->_content==0); + } + + void write(TMLTransaction* iTrans){ +#ifdef LOSS_ENABLED + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + this->_nbOfLosses++; + }else{ +#endif + this->_content++; + if (paramNo!=0){ + this->_paramQueue.push_back(this->_tmpParam); //NEW +#ifdef STATE_HASH_ENABLED + this->_tmpParam->getStateHash(& this->_stateHash); //NEW in if +#endif + } + if (this->_readTrans!=0 && this->_readTrans->getVirtualLength()==0){ + //std::cout << "FB: Wake up trans in channel: " << this->_name << "\n"; + this->_readTrans->setRunnableTime(iTrans->getEndTime()); + this->_readTrans->setChannel(this); + this->_readTrans->setVirtualLength(WAIT_SEND_VLEN); + } +#ifdef LOSS_ENABLED + } +#endif + + #ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(iTrans); + #endif + this->_writeTrans=0; //TEST + } + + bool read(){ + if (this->_content<1){ + return false; + }else{ + this->_content--; + //if (this->_readTrans->getCommand()->getParamFuncPointer()!=0) (this->_readTask->*(this->_readTrans->getCommand()->getParamFuncPointer()))(this->_paramQueue.front()); //NEW + if (paramNo!=0){ + this->_readTrans->getCommand()->setParams(this->_paramQueue.front()); + delete dynamic_cast<SizedParameter<T,paramNo>*>(this->_paramQueue.front()); + this->_paramQueue.pop_front(); //NEW + } + #ifdef STATE_HASH_ENABLED + //_stateHash-=this->_paramQueue.front().getStateHash(); + //this->_paramQueue.front().removeStateHash(&_stateHash); + this->_hashValid = false; + #endif + + if (this->_writeTrans!=0 && this->_writeTrans->getVirtualLength()==0){ + this->_writeTrans->setRunnableTime(this->_readTrans->getEndTime()); + this->_writeTrans->setChannel(this); + this->_writeTrans->setVirtualLength(WAIT_SEND_VLEN); + } + #ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(this->_readTrans); + #endif + this->_readTrans=0; + return true; + } + } + + void cancelReadTransaction(){ + this->_readTrans=0; + } + + TMLTask* getBlockedReadTask() const{ + return this->_readTask; + } + + TMLTask* getBlockedWriteTask() const{ + return this->_writeTask; + } + + std::string toString() const{ + std::ostringstream outp; + outp << this->_name << "(evtFB) len:" << _length << " content:" << this->_content; + return outp.str(); + } + + TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + this->_content=0; + this->_paramQueue.clear(); + aNbToInsert=0; + }else{ + aNbToInsert=min(iNbOfSamples, _length-this->_content); + this->_content+=aNbToInsert; + for (TMLLength i=0; i<aNbToInsert; i++) this->_paramQueue.push_back(iParam); + } + if (this->_writeTrans!=0) this->_writeTrans->setVirtualLength((_length-this->_content>0)?WAIT_SEND_VLEN:0); + if (this->_readTrans!=0) this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + return aNbToInsert; + } +protected: + ///Length of the channel + TMLLength _length; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventFChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventFChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..4100f9215c653f19d1ce5efdb315b6ce6120f110 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventFChannel.h @@ -0,0 +1,176 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventFChannelH +#define TMLEventFChannelH + +#include <definitions.h> +#include <TMLEventSizedChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read non blocking write channel (finite FIFO, samples which do not fit in the channel are dropped). +template <typename T, int paramNo> +class TMLEventFChannel:public TMLEventSizedChannel<T,paramNo>{ +public: + //typedef TMLEventSizedChannel<T,paramNo> SC; + + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iLength Length of the channel + \param iContent Initial content of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventFChannel(ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength, TMLLength iContent, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventSizedChannel<T,paramNo>(iID, iName, iNumberOfHops, iMasters, iSlaves, iContent, iLossRate, iMaxNbOfLosses),_length(iLength){ + } + + void testWrite(TMLTransaction* iTrans){ + this->_writeTrans=iTrans; + //if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + if (paramNo!=0) this->_tmpParam = iTrans->getCommand()->setParams(0); //NEW in if + this->_writeTrans->setVirtualLength(WAIT_SEND_VLEN); + this->_overflow = (this->_content==_length); + } + + void testRead(TMLTransaction* iTrans){ + this->_readTrans=iTrans; + this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + this->_readTrans->setChannel(this); //NEW!!!! + this->_underflow = (this->_content==0); + } + + void write(TMLTransaction* iTrans){ + if (this->_content<_length){ +#ifdef LOSS_ENABLED + if (this->_maxNbOfLosses > this->_nbOfLosses && this->_lossRate!=0 && myrand(0,99) < this->_lossRate){ + this->_nbOfLosses++; + }else{ +#endif + this->_content++; + if (paramNo!=0){ + this->_paramQueue.push_back(this->_tmpParam); //NEW + #ifdef STATE_HASH_ENABLED + this->_tmpParam->getStateHash(& this->_stateHash); //new in if + #endif + } + if (this->_readTrans!=0 && this->_readTrans->getVirtualLength()==0){ + this->_readTrans->setRunnableTime(iTrans->getEndTime()); + this->_readTrans->setChannel(this); + this->_readTrans->setVirtualLength(WAIT_SEND_VLEN); + } +#ifdef LOSS_ENABLED + } +#endif + } + #ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(iTrans); + #endif + this->_writeTrans=0; //TEST + } + + bool read(){ + if (this->_content<1){ + return false; + }else{ + this->_content--; + //if (this->_readTrans->getCommand()->getParamFuncPointer()!=0) (this->_readTask->*(this->_readTrans->getCommand()->getParamFuncPointer()))(this->_paramQueue.front()); //NEW + if (paramNo!=0){ + this->_readTrans->getCommand()->setParams(this->_paramQueue.front()); + delete dynamic_cast<SizedParameter<T,paramNo>*>(this->_paramQueue.front()); + this->_paramQueue.pop_front(); //NEW + } + #ifdef STATE_HASH_ENABLED + //_stateHash-=this->_paramQueue.front().getStateHash(); + //this->_paramQueue.front().removeStateHash(&_stateHash); + this->_hashValid = false; + #endif + #ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(this->_readTrans); + #endif + this->_readTrans=0; + return true; + } + } + + void cancelReadTransaction(){ + this->_readTrans=0; + } + + TMLTask* getBlockedReadTask() const{ + return this->_readTask; + } + + TMLTask* getBlockedWriteTask() const{ + return 0; + } + + std::string toString() const{ + std::ostringstream outp; + outp << this->_name << "(evtF) len:" << _length << " content:" << this->_content; + return outp.str(); + } + + TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + this->_content=0; + this->_paramQueue.clear(); + aNbToInsert=0; + }else{ + aNbToInsert=min(iNbOfSamples, _length-this->_content); + this->_content+=aNbToInsert; + for (TMLLength i=0; i<aNbToInsert; i++) this->_paramQueue.push_back(iParam); + } + if (this->_readTrans!=0) this->_readTrans->setVirtualLength((this->_content>0)?WAIT_SEND_VLEN:0); + return aNbToInsert; + } +protected: + ///Length of the channel + TMLLength _length; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventSizedChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventSizedChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..cbaae60047ce77f58e5e6ef024ae6f0daa72cbff --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLEventSizedChannel.h @@ -0,0 +1,182 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLEventSizedChannelH +#define TMLEventSizedChannelH + +#include <definitions.h> +#include <TMLEventChannel.h> +#include <Parameter.h> +#include <HashAlgo.h> + +class Bus; + +///This class represents the base class for all event channels. +template <typename T, int paramNo> +class TMLEventSizedChannel: public TMLEventChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLEventSizedChannel (ID iID, std::string iName, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0): TMLEventChannel(iID, iName, 1, iNumberOfHops, iMasters, iSlaves, iContent, 0, iLossRate, iMaxNbOfLosses), _tmpParam(0), _stateHash((HashValueType)_ID, 30), _hashValid(true){ + } + + virtual ~TMLEventSizedChannel(){ + //for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i) + // delete *i; + } + + bool getRequestChannel() const{ + return false; + } + + virtual std::ostream& writeObject(std::ostream& s){ + //std::cout << "write size of channel " << _name << " :" << _content << std::endl; + TMLStateChannel::writeObject(s); +//#if paramNo>0 + + if (paramNo!=0){ + ParamQueue::iterator i; + for(i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->writeObject(s); + } + } +//#endif + //for_each( _paramQueue.begin(), _paramQueue.end(), std::bind2nd(std::bind1st(std::mem_fun(&(Parameter<ParamType>::writeObject)),s),(unsigned int)_writeTask)); + return s; + } + + virtual std::istream& readObject(std::istream& s){ + //Parameter<ParamType>* aNewParam; + TMLStateChannel::readObject(s); + //std::cout << "Read Object TMLEventChannel " << _name << std::endl; + //_paramQueue.clear(); +//#if paramNo>0 + TMLLength aParamNo; + if (paramNo!=0){ + ParamQueue::iterator i; + for(aParamNo=0; aParamNo < _content; aParamNo++){ + //aNewParam = new Parameter<ParamType>(s, (unsigned int) _writeTask); + //_paramQueue.push_back(Parameter<ParamType>(s)); + _paramQueue.push_back(new SizedParameter<T,paramNo>(s)); + } + } +//#endif + _hashValid = false; + return s; + } + + void print() const{ + for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->print(); + } + } + + virtual void reset(){ + //std::cout << "EventChannel reset" << std::endl; + ParamQueue::iterator i; + TMLStateChannel::reset(); + //#if paramNo>0 + if (paramNo!=0){ + for(i=_paramQueue.begin(); i != _paramQueue.end(); ++i) + delete dynamic_cast<SizedParameter<T,paramNo>*>(*i); + _paramQueue.clear(); + } + //#endif + _stateHash.init((HashValueType)_ID, 30); + _hashValid=true; + //std::cout << "EventChannel reset end" << std::endl; + } + + virtual void streamStateXML(std::ostream& s) const{ + s << TAG_CHANNELo << " name=\"" << _name << "\" id=\"" << _ID << "\">" << std::endl; + s << TAG_CONTENTo << _content << TAG_CONTENTc << TAG_TOWRITEo << _nbToWrite << TAG_TOWRITEc << TAG_TOREADo << _nbToRead << TAG_TOREADc << std::endl; + for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->streamStateXML(s); + s <<std::endl; + } + s << TAG_CHANNELc << std::endl; + } + + void getStateHash(HashAlgo* iHash) const{ + //TMLStateChannel::getStateHash(iHash); + //iHash->addValue(_stateHash.getHash()); + if (_significance!=0){ + //#if paramNo>0 + if (paramNo!=0){ + if (!_hashValid){ + _stateHash.init((HashValueType)_ID, 30); + for(ParamQueue::const_iterator i=_paramQueue.begin(); i != _paramQueue.end(); ++i){ + (*i)->getStateHash(&_stateHash); + } + _hashValid = true; + } + iHash->addValue(_stateHash.getHash()); + } + //#endif + iHash->addValue(_content); + } + } + + + Parameter* buildParameter(){ + return new SizedParameter<T, paramNo>(); + } + +protected: + ///Queue for parameters + ParamQueue _paramQueue; + ///Temporary buffer for the parameters of the registered write transaction + Parameter* _tmpParam; + ///Channel State Hash + mutable HashAlgo _stateHash; + ///Flag indicating whether the current hash is up to date + mutable bool _hashValid; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..b30c33159f53e92ec6918ca8f6e458c3ecc31ae2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.cpp @@ -0,0 +1,88 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLExeciCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> + + +TMLExeciCommand::TMLExeciCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, unsigned int iExecType, TMLLength iStatLength, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _lengthFunc(iLengthFunc), _execType(iExecType){ + _length=iStatLength; + _type=EXE; +} + +void TMLExeciCommand::execute(){ + //std::cout << "execi: " << _currTransaction->toShortString() << std::endl; + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); + //std::cout << "Execi execute prepare" << std::endl; + prepare(false); +} + +TMLCommand* TMLExeciCommand::prepareNextTransaction(){ + //std::cout << _ID << " prepare execi: " << _length << std::endl; + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)(); + if (_length==0){ + //std::cout << "ExeciCommand len==0 " << std::endl; + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //std::cout << "new fails? " << _currTransaction->toString() << std::endl; + return this; +} + +std::string TMLExeciCommand::toString() const{ + std::ostringstream outp; + outp << "Execi in " << TMLCommand::toString(); + return outp.str(); +} + +std::string TMLExeciCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Execi " << _length; + return outp.str(); +} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..0b748822e8035298b4fcb2036976f59acafd8258 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciCommand.h @@ -0,0 +1,75 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLExeciCommandH +#define TMLExeciCommandH + +#include <definitions.h> +#include <TMLCommand.h> + + +///This class models the computational complexity of an algorithm +class TMLExeciCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iType Exec Type (ExecI, ExecC,...) + \param iStatLength Static length of command if applicable + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLExeciCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, unsigned int iType, TMLLength iStatLength, const char* iLiveVarList, bool iCheckpoint); + void execute(); + //TMLTask* getDependentTask() const; + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "exe";} +protected: + TMLCommand* prepareNextTransaction(); + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Type of command: EXECI, EXECC + unsigned int _execType; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7f4137a5d19250debf20895de2d1b357b79f0b7a --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.cpp @@ -0,0 +1,100 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLExeciRangeCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> + + +TMLExeciRangeCommand::TMLExeciRangeCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iType, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _rangeFunc(iRangeFunc), _minRange(0), _type(iType){ + _type=EXE; +} + +void TMLExeciRangeCommand::execute(){ + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); + prepare(false); +} + +TMLCommand* TMLExeciRangeCommand::prepareNextTransaction(){ + //std::cout << "Prepare\n"; + if (_progress==0){ + ParamType aMax; + _length = (_task->*_rangeFunc)(_minRange, aMax); + //_length = myrand(aMin, aMax); + if (_length==0){ + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //std::cout << "new fails? " << _currTransaction->toString() << std::endl; + return this; +} + +std::string TMLExeciRangeCommand::toString() const{ + std::ostringstream outp; + outp << "Execi in " << TMLCommand::toString(); + return outp.str(); +} + +std::string TMLExeciRangeCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Execi " << _length; + return outp.str(); +} + +unsigned int TMLExeciRangeCommand::getRandomRange(){ + ParamType aMax, aMin; + (_task->*_rangeFunc)(aMin, aMax); + //std::cout << "Got amin: " << aMin << " got amax: " << aMax << "\n"; + return aMax-aMin+1; +} + +void TMLExeciRangeCommand::setRandomValue(unsigned int iValue){ + //std::cout << "Set random value\n"; + //ParamType aMax, aMin; + //(_task->*_rangeFunc)(aMin, aMax); + _length= _minRange + iValue; + //_currTransaction = :: new (&transBuffer) TMLTransaction(this, _length,_task->getEndLastTransaction()); + _currTransaction = new TMLTransaction(this, _length,_task->getEndLastTransaction()); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..732af06f65243a5436c0ef50d6ac3dfd742cb586 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLExeciRangeCommand.h @@ -0,0 +1,76 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLExeciRangeCommandH +#define TMLExeciRangeCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <IndeterminismSource.h> + +///This class models the computational complexity of an algorithm +class TMLExeciRangeCommand:public TMLCommand, public IndeterminismSource{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc Pointer to the function returning the length range of the command + \param iType Exec Type (ExecI, ExecC,...) + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLExeciRangeCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iType, const char* iLiveVarList, bool iCheckpoint); + void execute(); + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "exe";} + unsigned int getRandomRange(); + void setRandomValue(unsigned int iValue); +protected: + TMLCommand* prepareNextTransaction(); + ///Pointer to the function returning the length of the command + RangeFuncPointer _rangeFunc; + ParamType _minRange; + ///Type of command: EXECI, EXECC + unsigned int _type; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9e12f054188adc35a81c1a275ff0d858ef07f83a --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.cpp @@ -0,0 +1,88 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLNotifiedCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLNotifiedCommand::TMLNotifiedCommand(ID iID, TMLTask* iTask,TMLEventChannel* iChannel,ParamType* iResultVar, const std::string& iResultVarDescr, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint),_channel(iChannel),_resultVar(iResultVar),_resultVarDescr(iResultVarDescr){ + _type=NOTIF; +} + +void TMLNotifiedCommand::execute(){ + *_resultVar=_channel->getContent(); + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); +#ifdef ADD_COMMENTS + _task->addComment(new Comment(_task->getEndLastTransaction(), this, *_resultVar)); +#endif + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLNotifiedCommand::prepareNextTransaction(){ + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + return this; +} + +std::string TMLNotifiedCommand::toString() const{ + std::ostringstream outp; + outp << "Notified in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLNotifiedCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Notified " << _channel->toShortString(); + return outp.str(); +} + +#ifdef ADD_COMMENTS +std::string TMLNotifiedCommand::getCommentString(Comment* iCom) const{ + std::ostringstream comment; + comment << "Notified " << _resultVarDescr << "=" << iCom->_actionCode; + return comment.str(); +} +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..5a602861e7e8dbc0c00649c8aeaffbc3af0eaaea --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLNotifiedCommand.h @@ -0,0 +1,81 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLNotifiedCommandH +#define TMLNotifiedCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLEventChannel.h> + +///This class models a TML command which determines the number of events queued in a channel +class TMLNotifiedCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iResultVar Pointer to the variable which has to contain the result + \param iResultVarDescr String representation of the result variable + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLNotifiedCommand(ID iID, TMLTask* iTask,TMLEventChannel* iChannel,ParamType* iResultVar,const std::string& iResultVarDescr, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel() const {return dynamic_cast<TMLChannel*>(_channel);} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "notified";} +#ifdef ADD_COMMENTS + std::string getCommentString(Comment* iCom) const; +#endif +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Index of the statement to execute (this value is passed to TMLTask::executeStatement()) + ParamType* _resultVar; + ///String representation of the result variable + std::string _resultVarDescr; + TMLCommand* prepareNextTransaction(); +}; + +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fc7fe258efbc8fb9b5dacebb49d659a81772612f --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.cpp @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLRandomChoiceCommand.h> +#include <SimComponents.h> +//#include <CommandListener.h> +#include <TMLTask.h> + +TMLRandomChoiceCommand::TMLRandomChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint):TMLChoiceCommand(iID, iTask, iRangeFunc, iNbOfBranches, iLiveVarList, iCheckpoint), _dynamicRange(0){ + _type=CHO; +} + +TMLCommand* TMLRandomChoiceCommand::prepareNextTransaction(){ + ParamType aMin, aMax; + if (_randomValue==-1){ + _randomValue = (_task->*_rangeFunc)(aMin, aMax); + //if (_ID==234) std::cout << "Random value set randomly:" << _randomValue << "\n"; + if (aMin==-1) + _dynamicRange = aMax | INT_MSB; + else + _dynamicRange = aMax+1; + } + if (_simComp->getStopFlag()){ + _simComp->setStoppedOnAction(); + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + + TMLCommand* aNextCommand=getNextCommand(); + //std::cout << _ID << " set next:" << (_randomValue+1) << "\n"; + _task->setCurrCommand(aNextCommand); + _randomValue=-1; + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + //std::cout << "TMLRandomChoiceCommand prepare Next Cmd:\n"; + if (aNextCommand!=0) return aNextCommand->prepare(false); + //else + //std::cout << "no next\n"; + return 0; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..15ce8d4e952fc9ab970055da1940b4f8fb365023 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomChoiceCommand.h @@ -0,0 +1,68 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLRandomChoiceCommandH +#define TMLRandomChoiceCommandH + +#include <TMLChoiceCommand.h> +#include <IndeterminismSource.h> + +///This class models a random fork in control flow within a TML Task +class TMLRandomChoiceCommand: public TMLChoiceCommand, public IndeterminismSource{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc function returning the rage of enabled branches + \param iNbOfBranches Number of branches of the choice + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLRandomChoiceCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, unsigned int iNbOfBranches, const char* iLiveVarList, bool iCheckpoint); + TMLCommand* prepareNextTransaction(); + inline unsigned int getRandomRange() {return _dynamicRange;} +protected: + ///A bitmap of enabled branches + unsigned int _dynamicRange; + inline TMLCommand* getNextCommand() const {_coveredBranchMap |= (1 << _randomValue); return _nextCommand[_randomValue];} +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b38ee6eb3ba165fdcb7a20dedc06bcde13b10820 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.cpp @@ -0,0 +1,91 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <TMLRandomCommand.h> +#include <SimComponents.h> +//#include <CommandListener.h> +#include <TMLTask.h> + +TMLRandomCommand::TMLRandomCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, ParamType* iResultVar, const char* iLiveVarList, bool iCheckpoint): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _rangeFunc(iRangeFunc), _resultVar(iResultVar), _aMin(0){ + _type=RND; +} + +unsigned int TMLRandomCommand::getRandomRange(){ + ParamType aMax; + (_task->*_rangeFunc)(_aMin, aMax); + //std::cout << "Got amin: " << _aMin << " got amax: " << aMax << "\n"; + return aMax-_aMin+1; +} + +TMLCommand* TMLRandomCommand::prepareNextTransaction(){ + //std::cout << "In TMLChoice::prepare next transaction\n"; + if (_simComp->getStopFlag()){ + //std::cout << "aSimStopped=true " << std::endl; + _simComp->setStoppedOnAction(); + _task->setCurrCommand(this); + return this; //for command which generates transactions this is returned anyway by prepareTransaction + } + TMLCommand* aNextCommand=getNextCommand(); + if (_randomValue==(unsigned int)-1){ + ParamType aMin, aMax; + (_task->*_rangeFunc)(aMin, aMax); + *_resultVar = myrand(aMin, aMax); + }else{ + *_resultVar = _aMin + _randomValue; + _randomValue=(unsigned int)-1; + } + _task->setCurrCommand(aNextCommand); + _execTimes++; +#ifdef STATE_HASH_ENABLED + if (_liveVarList!=0) _task->refreshStateHash(_liveVarList); +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_CMD_FINISHED(this); + //NOTIFY_CMD_FINISHED(0); +#endif + //std::cout << "after notify listeners" << std::endl; + if (aNextCommand!=0) return aNextCommand->prepare(false); + return 0; +} + +std::string TMLRandomCommand::TMLRandomCommand::toString() const{ + std::ostringstream outp; + outp << "Random in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..0b7a22dacf12030c203718c14784b2f2342dbb8e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRandomCommand.h @@ -0,0 +1,75 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLRandomCommandH +#define TMLRandomCommandH + +#include <IndeterminismSource.h> +#include <TMLCommand.h> + +///Class modeling a random number generator within a TML Task +class TMLRandomCommand: public TMLCommand, public IndeterminismSource{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iRangeFunc function returning the rage of enabled branches + \param iResultVar Pointer to the variable that is assigned the random value + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLRandomCommand(ID iID, TMLTask* iTask, RangeFuncPointer iRangeFunc, ParamType* iResultVar, const char* iLiveVarList, bool iCheckpoint); + void execute() {} + unsigned int getRandomRange(); + TMLCommand* prepareNextTransaction(); + std::string toString() const; + inline std::string toShortString() const {return "Random";} + inline std::string getCommandStr() const {return "rnd";} +protected: + ///Function returning the rage of enabled branches + RangeFuncPointer _rangeFunc; + ///Pointer to the variable that is assigned the random value + ParamType* _resultVar; + ///Minimum value of the range of the random variable + ParamType _aMin; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..9611d47c3fae17baed5ec73366e67e722540a30c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.cpp @@ -0,0 +1,97 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLReadCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLReadCommand::TMLReadCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint),_lengthFunc(iLengthFunc), _channel(iChannel){ + _length = iStatLength * _channel->getWidth(); + _type=RD; +} + +void TMLReadCommand::execute(){ + _channel->read(); + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + //std::cout << "ReadCommand progress: " << _progress << std::endl; + _task->addTransaction(_currTransaction); + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLReadCommand::prepareNextTransaction(){ + //std::cout << "ReadCommand prepare" << std::endl; + //std::cout << "length of read: "<< *_pLength << std::endl; + //if (_progress==0) _length = (_task->*_lengthFunc)(); + + //new test code + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)() * _channel->getWidth(); + if (_length==0){ + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + //std::cout << "before test read" << std::endl; + //std::cout << "--begin-- TMLReadCommand::prepareNextTransaction\n"; + _channel->testRead(_currTransaction); + //std::cout << "--end-- TMLReadCommand::prepareNextTransaction\n"; + //std::cout << "ReadCommand end prepare: " << _currTransaction->toString() << std::endl; + return this; +} + +std::string TMLReadCommand::toString() const{ + std::ostringstream outp; + outp << "Read in " << TMLCommand::toString() << " " <<_channel->toString(); + return outp.str(); +} + +std::string TMLReadCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Read " << _length << "," << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..7efa052c27dd639c8a9ae6a91662294f207cce29 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLReadCommand.h @@ -0,0 +1,78 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLReadCommandH +#define TMLReadCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLChannel.h> + +///This class models read operations on TML channels. +class TMLReadCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iChannel Pointer to the channel which is read + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iStatLength Static length of command if applicable + */ + TMLReadCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength=1); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return _channel;} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedWriteTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "rd";} +protected: + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Channel which is read + TMLChannel* _channel; + TMLCommand* prepareNextTransaction(); +}; + +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..59b3826601673ec6bff875a94fb5df2eb3cbae54 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.cpp @@ -0,0 +1,81 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLRequestCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLRequestCommand::TMLRequestCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint/*, Parameter* iStatParam*/): TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint), _channel(iChannel), _paramFunc(iParamFunc)/*, _statParam(iStatParam) */{ + _type=REQ; +} + +void TMLRequestCommand::execute(){ + _channel->write(_currTransaction); + //std::cout << "Dependent Task: " << _channel->getBlockedReadTask()->toString() << std::endl; + _progress+=_currTransaction->getVirtualLength(); + //std::cout << "setEndLastTrans Virtual length " << std::endl; + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLRequestCommand::prepareNextTransaction(){ + //std::cout << "prepare bext transaction testWrite prg:" << _progress << " to execute:" << (*_pLength)-_progress << std::endl; + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction(),_channel); + _channel->testWrite(_currTransaction); + return this; +} + +std::string TMLRequestCommand::toString() const{ + std::ostringstream outp; + outp << "Request in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLRequestCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Request " << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..6613d86bf7ef39b66e598310574d54ce44b4991b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLRequestCommand.h @@ -0,0 +1,86 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLRequestCommandH +#define TMLRequestCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <Parameter.h> +#include <TMLEventChannel.h> + +///This class models a send request operation within a TML task. +class TMLRequestCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iParamFunc Pointer to a parameter function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLRequestCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return dynamic_cast<TMLChannel*>(_channel);} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "sendReq";} + ///Sets a parameter data structure according to the parameters of the command + /** + \param ioParam Parameter data structure + */ + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFunc)(ioParam);} +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Pointer to the parameter function of the command + ParamFuncPointer _paramFunc; + /////Static parameter if applicable + //Parameter* _statParam; + /////Bitmap of live variables + //const char* _liveVarList; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..33df78f3944c92904a3784c02798e2cb521b9548 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.cpp @@ -0,0 +1,156 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLSelectCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLSelectCommand::TMLSelectCommand(ID iID, TMLTask* iTask, TMLEventChannel** iChannel, unsigned int iNumbChannels, const char* iLiveVarList, bool iCheckpoint, ParamFuncPointer* iParamFuncs):TMLCommand(iID, iTask, WAIT_SEND_VLEN, iNumbChannels, iLiveVarList, iCheckpoint), _channel(iChannel), _paramFuncs(iParamFuncs), /*_numbChannels(iNumbChannels),*/ _indexNextCommand(0) { + _type=SEL; +} + +TMLSelectCommand::~TMLSelectCommand(){ + if (_channel!=0) delete[] _channel; + if (_paramFuncs!=0){ + delete [] _paramFuncs; + } +} + +/*void TMLSelectCommand::execute(){ + unsigned int aFinalIndex=0, aLoopLimit=(_maxChannelIndex==0)?_nbOfNextCmds:_maxChannelIndex; + //i + bool aReadDone=false; + //std::cout << "LoopLimit: " << aLoopLimit << std::endl; + //for (i=0;i<aLoopLimit;i++){ + for (_indexNextCommand=0;_indexNextCommand<aLoopLimit;_indexNextCommand++){ + if (aReadDone){ + //_channel[i]->cancelReadTransaction(); + _channel[_indexNextCommand]->cancelReadTransaction(); + //std::cout << "Channel " << _channel[i]->toString() << " cancelled read transaction.\n"; + }else{ + //if (_channel[i]->read()){ + if (_channel[_indexNextCommand]->read()){ + aReadDone=true; + aFinalIndex=_indexNextCommand; + //_indexNextCommand=i; + //std::cout << "Read executed in channel " << _channel[i]->toString() << "\n"; + }else{ + //_channel[i]->cancelReadTransaction(); + _channel[_indexNextCommand]->cancelReadTransaction(); + //std::cout << "Channel " << _channel[i]->toString() << " cancelled read transaction.\n"; + } + } + } + _indexNextCommand = aFinalIndex; + _currTransaction->setChannel(_channel[_indexNextCommand]); + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); +#ifdef ADD_COMMENTS + _task->addComment(new Comment(_task->getEndLastTransaction(), this, _indexNextCommand)); +#endif + _maxChannelIndex=0; + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +}*/ + +void TMLSelectCommand::execute(){ + unsigned int aFinalIndex=0, aLoopLimit=(_maxChannelIndex==0)?_nbOfNextCmds:_maxChannelIndex; + TMLChannel* aReadChannel=_currTransaction->getChannel(); + //std::cout << "Select is executing\n"; + //bool check=false; + for (_indexNextCommand=0;_indexNextCommand<aLoopLimit;_indexNextCommand++){ + if(_channel[_indexNextCommand]==aReadChannel){ + if (!_channel[_indexNextCommand]->read()) std::cout <<"Fatal error read!!!!\n" ; + aFinalIndex=_indexNextCommand; + //check=true; + }else{ + _channel[_indexNextCommand]->cancelReadTransaction(); + } + } + //if (!check ) std::cout << "Fehler no read at all!!!!!!!!!!!!\n"; + _indexNextCommand = aFinalIndex; + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); +#ifdef ADD_COMMENTS + _task->addComment(new Comment(_task->getEndLastTransaction(), this, _indexNextCommand)); +#endif + _maxChannelIndex=0; + prepare(false); +} + +TMLCommand* TMLSelectCommand::prepareNextTransaction(){ + unsigned int i; + //std::cout << "SC: New transaction."<< std::endl; + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + _currTransaction = new TMLTransaction(this, _length-_progress,_task->getEndLastTransaction()); + //std::cout << "SC: loop."<< std::endl; + for (i=0;i<_nbOfNextCmds && _maxChannelIndex==0;i++){ + //std::cout << "SC: inner."<< i<< std::endl; + _currTransaction->setVirtualLength(_length-_progress); + _channel[i]->testRead(_currTransaction); + if (_currTransaction->getVirtualLength()!=0) _maxChannelIndex=i+1; + } + //std::cout << "Max channel index:" << _maxChannelIndex << std::endl; + return this; +} + + +TMLChannel* TMLSelectCommand::getChannel(unsigned int iIndex) const{ + if (_currTransaction==0) + return _channel[_indexNextCommand]; + else + return _currTransaction->getChannel(); +} + +std::string TMLSelectCommand::toString() const{ + std::ostringstream outp; + outp << "SelectEvent in " << TMLCommand::toString() << " " << _channel[_indexNextCommand]->toString(); + return outp.str(); +} + +std::string TMLSelectCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": SelectEvent"; + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..ca2a9251f33c9d14ad0de0138dffbad8596a670e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSelectCommand.h @@ -0,0 +1,90 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLSelectCommandH +#define TMLSelectCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLEventChannel.h> + +///This class models the waiting operation for one amongst multiple events. +class TMLSelectCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to an array of pointers to channels conveying the desired signals + \param iNumbChannels Number of channels in the array + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iParamFunc Pointer to an array of parameter functions pointers + */ + TMLSelectCommand(ID iID, TMLTask* iTask,TMLEventChannel** iChannel, unsigned int iNumbChannels, const char* iLiveVarList, bool iCheckpoint, ParamFuncPointer* iParamFunc); + ///Destructor + ~TMLSelectCommand(); + void execute(); + TMLChannel* getChannel(unsigned int iIndex) const; + inline unsigned int getNbOfChannels() const {return _nbOfNextCmds;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel[iIndex]->getBlockedWriteTask();} + inline ParamFuncPointer getParamFuncPointer() const {return (_paramFuncs==0)?0:_paramFuncs[_indexNextCommand];} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "sel";} + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFuncs[_indexNextCommand])(ioParam);} +#ifdef ADD_COMMENTS + inline std::string getCommentString(Comment* iCom) const {return "SelectEvent result: " + _channel[iCom->_actionCode]->toShortString();} +#endif +protected: + TMLCommand* prepareNextTransaction(); + inline TMLCommand* getNextCommand() const {_coveredBranchMap |= (1 << _indexNextCommand); return _nextCommand[_indexNextCommand];} + ///Pointer to an array of pointers to channels conveying the desired signals + TMLEventChannel** _channel; + ///Pointer to an array of parameter function pointers + ParamFuncPointer* _paramFuncs; + ///Index of the next command within the _nextCommand array + unsigned int _indexNextCommand; + ///Highest index of the channels on which the TMLChannel::testRead() method has been performed. + unsigned int _maxChannelIndex; +}; + +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..00f263abb009cb98cfffaa8c34298d7010a2ebc3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.cpp @@ -0,0 +1,84 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLSendCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLSendCommand::TMLSendCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint/*, Parameter* iStatParam*/): TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint), _channel(iChannel), _paramFunc(iParamFunc)/*, _statParam(iStatParam)*/ { + _type=SND; +} + +void TMLSendCommand::execute(){ + //std::cout << "TMLSendCommand::execute()\n"; + _channel->write(); + //std::cout << "TMLSendCommand::execute() after write: " << _currTransaction << "\n"; + //std::cout << "Dependent Task: " << _channel->getBlockedReadTask()->toString() << std::endl; + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + //std::cout << "TMLSendCommand::execute() before add\n"; + _task->addTransaction(_currTransaction); + //std::cout << "TMLSendCommand::execute() after add\n"; + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLSendCommand::prepareNextTransaction(){ + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _channel->testWrite(_currTransaction); + return this; +} + +std::string TMLSendCommand::toString() const{ + std::ostringstream outp; + outp << "Send in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLSendCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Send " << _channel->toShortString(); + return outp.str(); +} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..8f3452c3a0647bd2145152eb950a130caa62c2f4 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLSendCommand.h @@ -0,0 +1,91 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLSendCommandH +#define TMLSendCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <Parameter.h> +#include <TMLEventChannel.h> + +///This class models a send event operation within a TML task. +class TMLSendCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iParamFunc Pointer to a parameter function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLSendCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return dynamic_cast<TMLChannel*>(_channel);} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "snd";} + /////Returns a pointer to the parameter data structure + ////** + //\return Pointer to parameter data structure + //*/ + //ParamFuncPointer getParamFuncPointer() const; + ///Sets a parameter data structure according to the parameters of the command + /** + \param ioParam Parameter data structure + */ + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFunc)(ioParam);} +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Pointer to the parameter function of the command + ParamFuncPointer _paramFunc; + /////Static parameter if applicable + //Parameter* _statParam; + ////Bitmap of live variables + //const char* _liveVarList; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b889185de86979f0ca403ead3446eff40f70d5dc --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.cpp @@ -0,0 +1,96 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLStateChannel.h> +#include <HashAlgo.h> + +TMLStateChannel::TMLStateChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, unsigned int iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses): TMLChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iPriority), _content(iContent), _nbToWrite(0), _nbToRead(0), _overflow(false), _underflow(false) +#ifdef LOSS_ENABLED +, _lossRate(iLossRate), _maxNbOfLosses(iMaxNbOfLosses*iWidth), _nbOfLosses(0), _lossRemainder(0) +#endif +{ +} + +TMLStateChannel::~TMLStateChannel(){} + +std::ostream& TMLStateChannel::writeObject(std::ostream& s){ + TMLChannel::writeObject(s); + WRITE_STREAM(s,_content); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLStateChannel " << _name << " content: " << _content << std::endl; +#endif + return s; +} + +std::istream& TMLStateChannel::readObject(std::istream& s){ + TMLChannel::readObject(s); + READ_STREAM(s,_content); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLStateChannel " << _name << " content: " << _content << std::endl; +#endif + return s; +} + +void TMLStateChannel::reset(){ + //std::cout << "StateChannel reset" << std::endl; + TMLChannel::reset(); + _content=0; + _nbToWrite=0; + _nbToRead=0; +#ifdef LOSS_ENABLED + _nbOfLosses = 0; + _lossRemainder = 0; +#endif + //std::cout << "StateChannel reset end" << std::endl; +} + +void TMLStateChannel::streamStateXML(std::ostream& s) const{ + s << TAG_CHANNELo << " name=\"" << _name << "\" id=\"" << _ID << "\">" << std::endl; + s << TAG_CONTENTo << _content << TAG_CONTENTc << TAG_TOWRITEo << _nbToWrite << TAG_TOWRITEc << TAG_TOREADo << _nbToRead << TAG_TOREADc; + s << TAG_CHANNELc << std::endl; +} + +void TMLStateChannel::getStateHash(HashAlgo* iHash) const{ + if (_significance!=0){ + //std::cout << "add channel content:\n"; + iHash->addValue(_content); + } +} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..7bf8276be84d30a903ffdcf8adc19fe48aad903d --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStateChannel.h @@ -0,0 +1,100 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLStateChannelH +#define TMLStateChannelH + +#include <definitions.h> +#include <TMLChannel.h> + +class HashAlgo; +class Bus; + +///This class defines the basic interfaces and functionalites of a TML stateful channel. +class TMLStateChannel:public TMLChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLStateChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves ,TMLLength iContent, unsigned int iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses); + ///Destructor + virtual ~TMLStateChannel(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + virtual void streamStateXML(std::ostream& s) const; + inline virtual TMLLength getContent() const {return _content;} + inline bool getOverflow() const {return _overflow;} + inline bool getUnderflow() const {return _underflow;} + virtual void getStateHash(HashAlgo* iHash) const; +protected: + ///Content of the channel + TMLLength _content; + ///Number of samples the write transaction attempts to write + TMLLength _nbToWrite; + ///Number of samples the read transaction attempts to read + TMLLength _nbToRead; + ///Buffer overflow flag + mutable bool _overflow; + ///Buffer underflow flag + mutable bool _underflow; +#ifdef LOSS_ENABLED + ///Loss rate of the channel + unsigned int _lossRate; + ///Maximum number of losses + TMLLength _maxNbOfLosses; + ///Current nb of losses + TMLLength _nbOfLosses; + ///Loss Reamainder + unsigned int _lossRemainder; +#endif +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0516f48d5488227d37c9cf3caf535958fd8044e7 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.cpp @@ -0,0 +1,51 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLStopCommand.h> + +TMLStopCommand::TMLStopCommand(ID iID, TMLTask* iTask): TMLCommand(iID, iTask, 1, 0, 0, false){ + _type=STP; +} + +std::string TMLStopCommand::toString() const{ + std::ostringstream outp; + outp << "Stop in " << TMLCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..4071676e265487359136c07df9fcd476e9039657 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLStopCommand.h @@ -0,0 +1,66 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLStopCommandH +#define TMLStopCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLTask.h> + + +///This class represents a TML Stop command (denotes the end of a task) +class TMLStopCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + */ + TMLStopCommand(ID iID, TMLTask* iTask); + inline void execute() {} + std::string toString() const; + inline std::string toShortString() const {return "stp";} + inline std::string getCommandStr() const {return "stp";} +protected: + inline TMLCommand* prepareNextTransaction() {_execTimes++; _task->finished(); return 0;} +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLTask.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLTask.cpp new file mode 100755 index 0000000000000000000000000000000000000000..da6340300d039c08a7ff908a22959ffb5346bbf9 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLTask.cpp @@ -0,0 +1,390 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLTask.h> +#include <TMLCommand.h> +#include <TMLStopCommand.h> +#include <CPU.h> + +//#define RESET_SCHEDULING {_isScheduled=false;if (_noOfCPUs>1) _currentCPU=0;} + +unsigned int TMLTask::_instanceCount=1; + +TMLTask::TMLTask(ID iID, Priority iPriority, std::string iName, CPU** iCPU, unsigned int iNoOfCPUs): WorkloadSource(iPriority), _ID(iID), _name(iName), _endLastTransaction(0), _currCommand(0), _firstCommand(0), _currentCPU(0), _cpus(iCPU), _noOfCPUs(iNoOfCPUs), _comment(0), _busyCycles(0), _CPUContentionDelay(0), _noCPUTransactions(0), _justStarted(true), _myInstance(_instanceCount), /*_isScheduled(false),*/ _stateHash(0, 30) , _liveVarList(0), _hashInvalidated(true){ + for (unsigned int i=0; i< _noOfCPUs; i++) + _cpus[i]->registerTask(this); +#ifdef ADD_COMMENTS + _commentList.reserve(BLOCK_SIZE_TRANS); +#endif + _transactList.reserve(BLOCK_SIZE_TRANS); + _instanceCount++; + if (_noOfCPUs==1) _currentCPU = _cpus[0]; +} + +TMLTask::~TMLTask(){ +#ifdef ADD_COMMENTS + for(CommentList::iterator i=_commentList.begin(); i != _commentList.end(); ++i){ + delete *i; + } +#endif + if (_comment!=0) delete [] _comment; +} + +std::string TMLTask::toShortString() const{ + std::ostringstream outp; + outp << "ta" << _ID; + return outp.str(); +} + +#ifdef ADD_COMMENTS +std::string TMLTask::getNextComment(bool iInit, Comment*& oComment){ + if (iInit) _posCommentList=_commentList.begin(); + if (_posCommentList == _commentList.end()){ + //std::cout << "ret0\n"; + oComment=0; + return std::string("no more comment"); + } + //std::cout << "NON0\n"; + oComment=*_posCommentList; + _posCommentList++; + return ((oComment->_command==0)?_comment[oComment->_actionCode]:oComment->_command->getCommentString(oComment)); +} +#endif + +void TMLTask::addTransaction(TMLTransaction* iTrans){ + _transactList.push_back(iTrans); + _endLastTransaction=iTrans->getEndTime(); + _busyCycles+=iTrans->getOperationLength(); + //RESET_SCHEDULING; +#ifdef LISTENERS_ENABLED + NOTIFY_TASK_TRANS_EXECUTED(iTrans); +#endif + if (_justStarted){ +#ifdef LISTENERS_ENABLED + NOTIFY_TASK_STARTED(iTrans); +#endif + _justStarted=false; + } + if(iTrans->getChannel()==0){ + _noCPUTransactions++; + _CPUContentionDelay+=iTrans->getStartTime()-iTrans->getRunnableTime(); + } +} + +void TMLTask::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ + //std::ostringstream outp; + if (iInit){ + _posTrasactListVCD=_transactList.begin(); + _previousTransEndTime=0; + _vcdOutputState=END_TRANS; + } + if (_posTrasactListVCD == _transactList.end()){ + if (iInit || dynamic_cast<TMLStopCommand*>(_currCommand)==0){ + //outp << VCD_PREFIX << vcdValConvert(SUSPENDED) << "ta" << _ID; + new (oSigData) SignalChangeData(SUSPENDED, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(TERMINATED) << "ta" << _ID; + new (oSigData) SignalChangeData(TERMINATED, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //oNoMoreTrans=true; + //return _previousTransEndTime; + }else{ + TMLTransaction* aCurrTrans=*_posTrasactListVCD; + //oNoMoreTrans=false; + switch (_vcdOutputState){ + case END_TRANS: + if (aCurrTrans->getRunnableTime()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(RUNNABLE) << "ta" << _ID; + _vcdOutputState=START_TRANS; + new (oSigData) SignalChangeData(RUNNABLE, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(SUSPENDED) << "ta" << _ID; + new (oSigData) SignalChangeData(SUSPENDED, _previousTransEndTime, this); + if (aCurrTrans->getRunnableTime()==aCurrTrans->getStartTimeOperation()){ + _vcdOutputState=START_TRANS; + + }else{ + _vcdOutputState=BETWEEN_TRANS; + } + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case BETWEEN_TRANS: + //outp << VCD_PREFIX << vcdValConvert(RUNNABLE) << "ta" << _ID; + //oSigChange=outp.str(); + _vcdOutputState=START_TRANS; + //return aCurrTrans->getRunnableTime(); + new (oSigData) SignalChangeData(RUNNABLE, aCurrTrans->getRunnableTime(), this); + break; + case START_TRANS: + //outp << VCD_PREFIX << vcdValConvert(RUNNING) << "ta" << _ID; + //oSigChange=outp.str(); + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime); + _vcdOutputState=END_TRANS; + //return aCurrTrans->getStartTimeOperation(); + new (oSigData) SignalChangeData(RUNNING, aCurrTrans->getStartTimeOperation(), this); + break; + } + } + //return 0; +} + +std::ostream& TMLTask::writeObject(std::ostream& s){ + ID aCurrCmd; + WRITE_STREAM(s,_endLastTransaction); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " endLastTransaction: " << _endLastTransaction << std::endl; +#endif + if (_currCommand==0){ + aCurrCmd=0; + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + }else{ + aCurrCmd=_currCommand->getID(); + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + _currCommand->writeObject(s); + } +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(s, _busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif + WRITE_STREAM(s, _CPUContentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " CPUContentionDelay: " << _CPUContentionDelay << std::endl; +#endif + WRITE_STREAM(s, _noCPUTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: TMLTask " << _name << " noCPUTransactions: " << _noCPUTransactions << std::endl; +#endif +#endif + return s; +} + +std::istream& TMLTask::readObject(std::istream& s){ + ID aCurrCmd; + //_previousTransEndTime=0; _busyCycles=0; _CPUContentionDelay=0; _noCPUTransactions=0; + READ_STREAM(s, _endLastTransaction); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " endLastTransaction: " << _endLastTransaction << std::endl; +#endif + READ_STREAM(s, aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + if (aCurrCmd==0){ + _currCommand=0; + }else{ + //std::cout << "cmd ID: " << aCurrCmd << std::endl; + _currCommand=getCommandByID(aCurrCmd); + //std::cout << "cmd adr: " << _currCommand << std::endl; + //std::cout << "before read cmd " << std::endl; + _currCommand->readObject(s); + //_currCommand->prepare(); + } + //std::cout << "End Read Object TMLTask " << _name << std::endl; +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(s, _busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif + READ_STREAM(s, _CPUContentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " CPUContentionDelay: " << _CPUContentionDelay << std::endl; +#endif + READ_STREAM(s, _noCPUTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: TMLTask " << _name << " noCPUTransactions: " << _noCPUTransactions << std::endl; +#endif +#endif + _justStarted=false; + return s; +} + +void TMLTask::streamBenchmarks(std::ostream& s) const{ + s << TAG_TASKo << " id=\"" << _ID << "\" name=\"" << _name << "\">" << std::endl; + s << TAG_EXTIMEo << _busyCycles << TAG_EXTIMEc; + if (_noCPUTransactions!=0) s << TAG_CONTDELo << ">" << (static_cast<float>(_CPUContentionDelay)/static_cast<float>(_noCPUTransactions)) << TAG_CONTDELc; + s << TAG_TSKSTATEo; + //unsigned int aState=getState(); + switch (getState()){ + case RUNNING: + s << "running"; + break; + case RUNNABLE: + s << "runnable"; + break; + case SUSPENDED: + s << "suspended"; + break; + case TERMINATED: + s << "terminated"; + break; + case UNKNOWN: + s << "unknown"; + } + s << TAG_TSKSTATEc << TAG_TASKc << std::endl; + //std::cout << "Stream benchmarks task finished\n"; +} + +void TMLTask::reset(){ + //std::cout << "task reset" << std::endl; + _endLastTransaction=0; + if (_currCommand!=0) _currCommand->reset(); + _currCommand=_firstCommand; + if (_currCommand!=0) _currCommand->reset(); +#ifdef ADD_COMMENTS + _commentList.clear(); +#endif + _transactList.clear(); + _busyCycles=0; + _CPUContentionDelay=0; + _noCPUTransactions=0; + _justStarted=true; + _hashInvalidated=true; + //RESET_SCHEDULING; +} + +ParamType* TMLTask::getVariableByName(const std::string& iVarName ,bool& oIsId){ + if (iVarName[0]>='0' && iVarName[0]<='9'){ + oIsId=true; + return getVariableByID(StringToNum<ID>(iVarName)); + } + oIsId=false; + return _varLookUpName[iVarName.c_str()]; +} + +void TMLTask::finished(){ + _justStarted=true; +#ifdef LISTENERS_ENABLED + if (!_transactList.empty()) NOTIFY_TASK_FINISHED(_transactList.front()); +#endif +} + +unsigned int TMLTask::getState() const{ + /*if (!_transactList.empty() && _transactList.back()->getEndTime()==SchedulableDevice::getSimulatedTime()){ + return RUNNING; + }else{ + if (_currCommand==0) return TERMINATED; + if (_currCommand->getCurrTransaction()==0){ + if (dynamic_cast<TMLStopCommand*>(_currCommand)==0) + return UNKNOWN; + else + return TERMINATED; + }else{ + if (_currCommand->getCurrTransaction()->getRunnableTime()>=SchedulableDevice::getSimulatedTime()) + return SUSPENDED; + else + return RUNNABLE; + + } + }*/ + if (_currCommand==0 || _currCommand->getCurrTransaction()==0 || dynamic_cast<TMLStopCommand*>(_currCommand)!=0){ + return TERMINATED; + } else if (_currCommand->getCurrTransaction()->getVirtualLength()==0){ + return SUSPENDED; + } else if (_currentCPU->SchedulableDevice::getNextTransaction()==_currCommand->getCurrTransaction()){ + return RUNNING; + }else{ + return RUNNABLE; + } + return UNKNOWN; +} + +TMLTransaction* TMLTask::getNextTransaction(TMLTime iEndSchedule) const{ + //std::cout << "Task::getNextTransaction\n"; + return (_currCommand==0)?0:_currCommand->getCurrTransaction(); + //return (_currCommand==0 || _isScheduled)?0:_currCommand->getCurrTransaction(); +} + +/*void TMLTask::transWasScheduled(SchedulableDevice* iCPU){ + _isScheduled=true; + if (_noOfCPUs>1) _currentCPU = dynamic_cast<CPU*>(iCPU); +} + +void TMLTask::resetScheduledFlag(){ + RESET_SCHEDULING; +} + +void TMLTask::setRescheduleFlagForCores(){ + RESET_SCHEDULING; + for (unsigned int i=0; i< _noOfCPUs; i++){ + //std::cout << "in Task " << _name << " next CPU\n"; + _cpus[i]->setRescheduleFlag(); + } +}*/ + +void TMLTask::schedule2TXT(std::ostream& myfile) const{ + myfile << "========= Scheduling for device: "<< _name << " =========\n" ; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + myfile << (*i)->toShortString() << std::endl; + } +} + +void TMLTask::refreshStateHash(const char* iLiveVarList){ + //if (iLiveVarList!=0){ + //_hashInvalidated = (_liveVarList!=iLiveVarList); + _hashInvalidated = true; + _liveVarList = iLiveVarList; + //} +} + +int TMLTask::hasRunnableTrans(CPU* iCPU){ + bool aIsMappedOnCPU=false; + for (unsigned int i=0; i< _noOfCPUs; i++){ + aIsMappedOnCPU |= (_cpus[i]==iCPU); + } + if (!aIsMappedOnCPU || _currCommand==0) return 0; + TMLTransaction* aCurrTrans = _currCommand->getCurrTransaction(); + if (aCurrTrans==0 || aCurrTrans->getVirtualLength()==0) return 0; + if (aCurrTrans->getChannel()!=0 && aCurrTrans->getChannel()->mappedOnBus()) return 2; + //std::cout << "There would be: " << _currCommand->getCurrTransaction()->toString() << "\n"; + return 1; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLTask.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLTask.h new file mode 100755 index 0000000000000000000000000000000000000000..dc5e34bad9772b243290a6e27507d404787fe108 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLTask.h @@ -0,0 +1,283 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLTaskH +#define TMLTaskH + +#include <definitions.h> +#include <TMLTransaction.h> +#include <TraceableDevice.h> +#include <Serializable.h> +#include <Comment.h> +#include <MemPool.h> +#include <ListenerSubject.h> +#include <GeneralListener.h> +#include <WorkloadSource.h> +#include <HashAlgo.h> + +class TMLCommand; +class CPU; +class Comment; + +enum vcdTaskVisState + { + END_TRANS, + BETWEEN_TRANS, + START_TRANS +}; + +class TMLTask: public TraceableDevice, public ListenerSubject <GeneralListener>, public WorkloadSource{ +public: + ///Constructor + /** + \param iID ID of the Task + \param iPriority Priority of the task + \param iName Name of the task + \param iCPU Pointer to the CPUs the task is mapped onto + \param iNoOfCPUs Number of CPUs + */ + TMLTask(ID iID, Priority iPriority, std::string iName, CPU** iCPU, unsigned int iNoOfCPUs); + ///Destructor + virtual ~TMLTask(); + ///Returns the priority of the task + /** + \return Priority + */ + inline Priority getPriority() const {return _priority;} + ///Returns the end of the last scheduled transaction of the task + /** + \return End of transaction + */ + inline TMLTime getEndLastTransaction() const {return _endLastTransaction;} + ///Returns a pointer to the current command of the task + /** + \return Pointer to the current command + */ + inline TMLCommand* getCurrCommand() const {return _currCommand;} + ///Sets the pointer to the current command of the task + /** + \param iCurrCommand Pointer to the current command + */ + inline void setCurrCommand(TMLCommand* iCurrCommand){_currCommand=iCurrCommand;} + ///Return a pointer to the CPU on which the task in running + /** + \return Pointer to the CPU + */ + inline CPU* getCPU() const {return _currentCPU;} + ///Returns a string representation of the task + /** + \return Detailed string representation + */ + virtual std::string toString() const {return _name;} + ///Returns a short string representation of the Task + /** + \return Short string representation + */ + std::string toShortString() const; + ///Returns the unique ID of the task + /** + \return Unique ID + */ + inline ID getID() const {return _ID;} +#ifdef ADD_COMMENTS + ///Adds a new execution comment to the internal list + /** + \param iComment Pointer to the comment + */ + inline void addComment(Comment* iComment) {_commentList.push_back(iComment);} + ///Returns the next execution comment (pointed to by _posCommentList) + /** + \param iInit Indicates if the list iterator has to be reset to the beginning of the list + \param oComment This pointer to the comment object is returned to the callee + \return String representation of the comment + */ + std::string getNextComment(bool iInit, Comment*& oComment); +#endif + void getNextSignalChange(bool iInit, SignalChangeData* oSigData); + ///Adds a given transaction to the internal transaction list + /** + \param iTrans Pointer to the transaction + */ + void addTransaction(TMLTransaction* iTrans); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void streamBenchmarks(std::ostream& s) const; + virtual void reset(); + ///Returns a pointer to the task variable specified by its name + /** + \param iVarName Name of the task variable + \param oIsId Is set to true if an ID was passed to this function + \return Pointer to the variable + */ + ParamType* getVariableByName(const std::string& iVarName ,bool& oIsId); + ///Searches for a Command based on its ID + /** + \param iID ID of the Command + \return Pointer to the Commmand + */ + inline TMLCommand* getCommandByID(ID iID) {return _commandHash[iID];} + ///Adds a new command to the internal list + /** + \param iID ID of the command + \param iCmd Pointer to the command + */ + inline void addCommand(ID iID, TMLCommand* iCmd) {_commandHash[iID]=iCmd;} + ///Returns a pointer to the task variable specified by its ID + /** + \param iVarID ID of the task variable + \return Pointer to the variable + */ + inline ParamType* getVariableByID(ID iVarID) {return _varLookUpID[iVarID];} + inline void streamStateXML(std::ostream& s) const {streamBenchmarks(s);} + ///Returns an iterator for the internal variable ID hash table + /** + \return Const iterator for variable table + */ + inline const VariableLookUpTableID& getVariableLookUpTableID() const{return _varLookUpID;} + ///Returns an iterator for the internal variable Name hash table + /** + \return Const iterator for variable table + */ + const VariableLookUpTableName& getVariableLookUpTableName() const{return _varLookUpName;} + ///Is called when a stop command is encountered + void finished(); + ///Returns the current task state + /** + \return Task state: UNKNOWN, SUSPENDED, READY, RUNNING, TERMINATED + */ + unsigned int getState() const; + TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const; + /////Returns the hash value for the current task state + ////** + //\param iLiveVarList Bitmap of live variables + //\param iHash Hash Algorithm Object + //*/ + //virtual void getStateHash(const char* iLiveVarList, HashAlgo* iHash) const =0; + ///Returns the instance number of this task + /** + \return Instance number + */ + inline unsigned int getInstanceNo() {return _myInstance;} + ////Notifies the Task of being scheduled by a CPU + ////** + //\param iCPU CPU that has scheduled the Task + //*/ + //void transWasScheduled(SchedulableDevice* iCPU); + ////Resets the flag indicating that the Task has been scheduled + //void resetScheduledFlag(); + ////Invalidates the schedule of all cores the task is mapped onto + //void setRescheduleFlagForCores(); + ///Returns the current state hash + /** + \return Current state hash + */ + virtual HashValueType getStateHash()=0; + /////Returns whether the current task state has been encountered before + ////** + //\return Common execution flag + //*/ + //bool getCommonExecution() const; + /////Sets the common execution flag + ////** + //\param iCommonExecution Common execution flag + //*/ + //void setCommonExecution(bool iCommonExecution); + void refreshStateHash(const char* iLiveVarList); + void schedule2TXT(std::ostream& myfile) const; + int hasRunnableTrans(CPU* iCPU); +protected: + ///ID of the task + ID _ID; + ///Name of the task + std::string _name; + ///End of the last scheduled transaction of the task + TMLTime _endLastTransaction; + ///Pointer to the current command of the task + TMLCommand* _currCommand; + ///Pointer to the first command of the task + TMLCommand* _firstCommand; + ///Pointer to the CPU which currently executes the task, can be zero in case the Task is mapped onto a multicore CPU + CPU* _currentCPU; + ///Array containing all the cores the task is mapped onto + CPU** _cpus; + ///Number of cores assigned to the task + unsigned int _noOfCPUs; +#ifdef ADD_COMMENTS + ///Comment list + CommentList _commentList; + ///Actual position within comment list (used for HTML output) + CommentList::iterator _posCommentList; +#endif + ///List of scheduled transactions + TransactionList _transactList; + ///State variable for the VCD output + vcdTaskVisState _vcdOutputState; + ///Array of static comments concerning the control flow of the task + std::string* _comment; + ///Busy cycles since simulation start + TMLTime _busyCycles; + ///Sum of contention delay of CPU transactions + unsigned long _CPUContentionDelay; + ///Number of transactions which have been executed on a CPU + unsigned long _noCPUTransactions; + ///Look up table for task variables (by name) + VariableLookUpTableName _varLookUpName; + ///Look up table for task variables (by ID) + VariableLookUpTableID _varLookUpID; + ///Hash table containing commands + CommandHashTab _commandHash; + ///Is true until the first transaction of a task is executed + bool _justStarted; + ///Instace counter + static unsigned int _instanceCount; + ///Consecutive number of this task instance + unsigned int _myInstance; + ///Indicates whether this task has already been scheduled + /*bool _isScheduled; + ///Last established state Hash + HashValueType _lastStateHash; + ///Flag indicating whether the task state has been encoutered before + bool _commonExecution;*/ + HashAlgo _stateHash; + const char* _liveVarList; + bool _hashInvalidated; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f09894e557fb1bc00dadaa48c6619bf4df9342bc --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.cpp @@ -0,0 +1,82 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLWaitCommand.h> +//#include <TMLEventChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLWaitCommand::TMLWaitCommand(ID iID, TMLTask* iTask, TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint/*, Parameter* iStatParam*/):TMLCommand(iID, iTask, WAIT_SEND_VLEN, 1, iLiveVarList, iCheckpoint),_channel(iChannel), _paramFunc(iParamFunc){ + _type = WAIT; +} + +void TMLWaitCommand::execute(){ + //std::cout << "execute wait " << std::endl; + _channel->read(); + //std::cout << "after ch->read " << std::endl; + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLWaitCommand::prepareNextTransaction(){ + //std::cout << "wait command length: " << _length << " progress: " << _progress << std::endl; + if (_progress==0 && _channel->getRequestChannel()) _task->finished(); + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _channel->testRead(_currTransaction); + return this; +} + +std::string TMLWaitCommand::toString() const{ + std::ostringstream outp; + outp << "Wait in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLWaitCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Wait " << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..4d42c69211f401bdb038c3e561f4a1c00d03a049 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWaitCommand.h @@ -0,0 +1,83 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLWaitCommandH +#define TMLWaitCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <Parameter.h> +#include <TMLEventChannel.h> + +///This class models the waiting for an event within a TML task. +class TMLWaitCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iChannel Pointer to the channel on which the event is conveyed + \param iParamFunc Pointer to a parameter function + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + */ + TMLWaitCommand(ID iID, TMLTask* iTask,TMLEventChannel* iChannel, ParamFuncPointer iParamFunc, const char* iLiveVarList, bool iCheckpoint); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return dynamic_cast<TMLChannel*>(_channel);} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedWriteTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {if (_channel->getRequestChannel()) return "waitReq"; else return "wait";} + ///Sets a parameter data structure according to the parameters of the command + /** + \param ioParam Parameter data structure + */ + inline Parameter* setParams(Parameter* ioParam) {return (_task->*_paramFunc)(ioParam);} +protected: + ///Channel on which the event is conveyed + TMLEventChannel* _channel; + ///Pointer to the parameter function of the command + ParamFuncPointer _paramFunc; + TMLCommand* prepareNextTransaction(); +}; + +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..9aca09f289653d665b276543337b1ed507d0c922 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.cpp @@ -0,0 +1,101 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLWriteCommand.h> +//#include <TMLChannel.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLWriteCommand::TMLWriteCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _lengthFunc(iLengthFunc), _channel(iChannel){ + _length = iStatLength * _channel->getWidth(); + _type = WR; +} + +void TMLWriteCommand::execute(){ + //std::cout << "in write " << _channel << "\n"; + _channel->write(); + //std::cout << "channel not zero\n"; + //std::cout << _currTransaction->getVirtualLength() << " samples written\n"; + _progress+=_currTransaction->getVirtualLength(); + //_task->setEndLastTransaction(_currTransaction->getEndTime()); + _task->addTransaction(_currTransaction); + //std::cout << "Trans written: " << _currTransaction->toString() << "\n"; + prepare(false); + //if (aNextCommand==0) _currTransaction->setTerminatedFlag(); + //if (_progress==0 && aNextCommand!=this) _currTransaction=0; +} + +TMLCommand* TMLWriteCommand::prepareNextTransaction(){ + //std::cout << "WriteCommand prepare" << std::endl; + //if (_progress==0) _length = (_task->*_lengthFunc)(); + + //new test code + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)() * _channel->getWidth(); + if (_length==0){ + //std::cout << "WriteCommand len==0 " << std::endl; + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + _currTransaction = new TMLTransaction(this, _length-_progress, _task->getEndLastTransaction(), _channel); + //std::cout << "before test write" << std::endl; + //std::cout << "--begin-- TMLWriteCommand::prepareNextTransaction\n"; + _channel->testWrite(_currTransaction); + //std::cout << "--end-- TMLWriteCommand::prepareNextTransaction\n"; + //std::cout << "WriteCommand end prepare" << std::endl; + return this; +} + +std::string TMLWriteCommand::toString() const{ + std::ostringstream outp; + outp << "Write in " << TMLCommand::toString() << " " << _channel->toString(); + return outp.str(); +} + +std::string TMLWriteCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": Write " << _length << "," << _channel->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..4de9c2bfda54e6c752928c4711d5234beed1a205 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteCommand.h @@ -0,0 +1,77 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLWriteCommandH +#define TMLWriteCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLChannel.h> + +///This class models write operations on TML channels. +class TMLWriteCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iChannel Pointer to the channel to which is written + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iStatLength Static length of command if applicable + */ + TMLWriteCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel* iChannel, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength=1); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return _channel;} + inline unsigned int getNbOfChannels() const {return 1;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channel->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "wr";} +protected: + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Channel to which is written + TMLChannel* _channel; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..144e3905f96ab49560fa980ff9bf81c811d0c1c4 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.cpp @@ -0,0 +1,98 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLWriteMultCommand.h> +#include <TMLTask.h> +#include <TMLTransaction.h> +#include <Bus.h> + +TMLWriteMultCommand::TMLWriteMultCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel** iChannels, unsigned int iNbOfChannels, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength): TMLCommand(iID, iTask, 1, 1, iLiveVarList, iCheckpoint), _lengthFunc(iLengthFunc), _channels(iChannels), _nbOfChannels(iNbOfChannels){ + _length=iStatLength * _channels[0]->getWidth(); + _type = WR; +} + +void TMLWriteMultCommand::execute(){ + //std::cout << "--begin-- TMLWriteMultCommand::execute\n"; + for (unsigned int i=0; i< _nbOfChannels; i++){ + _channels[i]->write(); + } + //std::cout << "--end-- TMLWriteMultCommand::execute\n"; + _progress+=_currTransaction->getVirtualLength(); + _task->addTransaction(_currTransaction); + prepare(false); +} + +TMLCommand* TMLWriteMultCommand::prepareNextTransaction(){ + if (_progress==0){ + if (_lengthFunc!=0) _length = (_task->*_lengthFunc)() * _channels[0]->getWidth(); + if (_length==0){ + TMLCommand* aNextCommand=getNextCommand(); + _task->setCurrCommand(aNextCommand); + if (aNextCommand!=0) return aNextCommand->prepare(false); + } + } + TMLLength unitsLeft =_length-_progress; + //TMLLength minLength; + //_currTransaction = ::new (&transBuffer) TMLTransaction(this, unitsLeft, _task->getEndLastTransaction(), _channels[0]); + _currTransaction = new TMLTransaction(this, unitsLeft, _task->getEndLastTransaction(), _channels[0]); + //_channels[0]->testWrite(_currTransaction); + //minLength=_currTransaction->getVirtualLength(); + //std::cout << "--begin-- TMLWriteMultCommand::prepareNextTransaction\n"; + for (unsigned int i=0; i< _nbOfChannels; i++){ + //_currTransaction->setVirtualLength(unitsLeft); + _channels[i]->testWrite(_currTransaction); + //minLength=min(minLength,_currTransaction->getVirtualLength()); + } + //std::cout << "--end-- TMLWriteMultCommand::prepareNextTransaction\n"; + //_currTransaction->setVirtualLength(minLength); + return this; +} + +std::string TMLWriteMultCommand::toString() const{ + std::ostringstream outp; + outp << "WriteMult in " << TMLCommand::toString() << " " << _channels[0]->toString(); + return outp.str(); +} + +std::string TMLWriteMultCommand::toShortString() const{ + std::ostringstream outp; + outp << _task->toString() << ": WriteMult" << _length << "," << _channels[0]->toShortString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..723faa9de6d3e0df23257c6a71b01f93475a6a18 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLWriteMultCommand.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLWriteMultCommandH +#define TMLWriteMultCommandH + +#include <definitions.h> +#include <TMLCommand.h> +#include <TMLChannel.h> + +///This class models write operations on several TML channels at a time. +class TMLWriteMultCommand:public TMLCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + \param iLengthFunc Pointer to the function returning the length of the command + \param iChannels Pointer to an array of pointers to channels which may be written + \param iNbOfChannels Number of channels + \param iLiveVarList Bitmap of live variables + \param iCheckpoint Checkpoint Flag + \param iStatLength Static length of command if applicable + */ + TMLWriteMultCommand(ID iID, TMLTask* iTask, LengthFuncPointer iLengthFunc, TMLChannel** iChannels, unsigned int iNbOfChannels, const char* iLiveVarList, bool iCheckpoint, TMLLength iStatLength=1); + void execute(); + inline TMLChannel* getChannel(unsigned int iIndex) const {return _channels[iIndex];} + inline unsigned int getNbOfChannels() const {return _nbOfChannels;} + inline TMLTask* getDependentTask(unsigned int iIndex)const {return _channels[iIndex]->getBlockedReadTask();} + std::string toString() const; + std::string toShortString() const; + inline std::string getCommandStr() const {return "wr";} +protected: + ///Pointer to the function returning the length of the command + LengthFuncPointer _lengthFunc; + ///Array of channels to which is written + TMLChannel** _channels; + ///Number of channels + unsigned int _nbOfChannels; + TMLCommand* prepareNextTransaction(); +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp new file mode 100755 index 0000000000000000000000000000000000000000..edccc4ad9674dd5dd7c0f66a310af3d92b6bc830 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.cpp @@ -0,0 +1,166 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLbrbwChannel.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> + +TMLbrbwChannel::TMLbrbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength,TMLLength iContent, Priority iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses):TMLStateChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iWidth*iContent, iPriority, iLossRate, iMaxNbOfLosses),_length(iLength){ +} + +void TMLbrbwChannel::testWrite(TMLTransaction* iTrans){ + _nbToWrite=iTrans->getVirtualLength(); + _writeTrans=iTrans; + //std::cout << "testWrite called by " << _writeTrans->getCommand()->toShortString() << std::endl; + setTransactionLength(); + //std::cout << "TestWrite " << iLength<< " writeTrans: " << _writeTrans<< " transLen: "<< _writeTrans->getVirtualLength()<< std::endl; +} + +void TMLbrbwChannel::testRead(TMLTransaction* iTrans){ + _nbToRead=iTrans->getVirtualLength(); + _readTrans=iTrans; + setTransactionLength(); + //std::cout << "TestRead " << iLength<< " readTrans: " << _readTrans << " transLen: "<< _readTrans->getVirtualLength()<< std::endl; +} + +void TMLbrbwChannel::write(){ +#ifdef LOSS_ENABLED + if (_maxNbOfLosses > _nbOfLosses){ + TMLLength aLostBytes = _writeTrans->getVirtualLength() * _lossRate + _lossRemainder; + //std::cout << "lost bytes: " << aLostBytes << "\n"; + _lossRemainder = aLostBytes % 100; + //aLostBytes /= 100; + aLostBytes = min(aLostBytes/100, _maxNbOfLosses - _nbOfLosses); + _content += _writeTrans->getVirtualLength() - aLostBytes; + std::cout << "Bytes to write: " << _writeTrans->getVirtualLength()-aLostBytes << "\n"; + std::cout << "Bytes lost: " << aLostBytes << "\n"; + _nbOfLosses += aLostBytes; + }else{ +#endif + //std::cout << "write all " << _writeTrans->getVirtualLength() << "\n"; + _content+=_writeTrans->getVirtualLength(); +#ifdef LOSS_ENABLED + } +#endif + if (_readTrans!=0 && _readTrans->getVirtualLength()==0) _readTrans->setRunnableTime(_writeTrans->getEndTime()); + _nbToWrite=0; + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_writeTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(_writeTrans); +#endif + _writeTrans=0; + setTransactionLength(); +} + +bool TMLbrbwChannel::read(){ + if (_content<_readTrans->getVirtualLength()){ + return false; + }else{ + _content-=_readTrans->getVirtualLength(); + _nbToRead=0; + if (_writeTrans!=0 && _writeTrans->getVirtualLength()==0) _writeTrans->setRunnableTime(_readTrans->getEndTime()); + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_readTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(_readTrans); +#endif + _readTrans=0; + setTransactionLength(); + return true; + } +} + +void TMLbrbwChannel::setTransactionLength() const{ + if (_writeTrans!=0){ + if (_nbToRead==0){ + _writeTrans->setVirtualLength(min(_length-_content,_nbToWrite)); + _underflow=false; + //std::cout << _name << ": set write trans len, no read trans, len = " << _writeTrans->getVirtualLength() << std::endl; + }else{ + if (_nbToRead<=_content){ + //read could be executed right away + _writeTrans->setVirtualLength(min(_length-_content,_nbToWrite)); + _underflow=false; + }else{ + //read could wake up because of write + _writeTrans->setVirtualLength(min(_length-_content,_nbToRead-_content,_nbToWrite)); + _underflow=true; + } + //std::cout << _name << ": set write trans len, with read trans, len = " << _writeTrans->getVirtualLength() << std::endl; + } + } + if (_readTrans!=0){ + if (_nbToWrite==0){ + _readTrans->setVirtualLength(min(_content,_nbToRead)); + _overflow=false; + //std::cout << _name << ": set read trans len, no write trans, len = " << _readTrans->getVirtualLength() << std::endl; + }else{ + if (_nbToWrite<=_length-_content){ + //write could be executed right away + _readTrans->setVirtualLength(min(_content,_nbToRead)); + _overflow=false; + }else{ + //write could wakeup because of read + _readTrans->setVirtualLength(min(_content,_nbToWrite-(_length-_content),_nbToRead)); + _overflow=true; + } + //std::cout << _name << ": set read trans len, with write trans, len = " << _readTrans->getVirtualLength() << std::endl; + + } + } +} + +std::string TMLbrbwChannel::toString() const{ + std::ostringstream outp; + outp << _name << "(brbw) len:" << _length << " content:" << _content << " nbToRead:" << _nbToRead << " nbToWrite:" << _nbToWrite; + return outp.str(); +} + +TMLLength TMLbrbwChannel::insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + _content=0; + aNbToInsert=0; + }else{ + aNbToInsert=min(iNbOfSamples, _length-_content); + iNbOfSamples+=aNbToInsert; + } + setTransactionLength(); + return aNbToInsert; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.h new file mode 100755 index 0000000000000000000000000000000000000000..65256532243ab9b995bb53ab875a76185772f0e2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrbwChannel.h @@ -0,0 +1,84 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLbrbwChannelH +#define TMLbrbwChannelH + +#include <definitions.h> +#include <TMLStateChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read blocking write channel (finite blocking FIFO). +class TMLbrbwChannel:public TMLStateChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iLength Length of the channel + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLbrbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iLength, + TMLLength iContent, Priority iPriority, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0); + void testWrite(TMLTransaction* iTrans); + void testRead(TMLTransaction* iTrans); + void write(); + bool read(); + inline TMLTask* getBlockedReadTask() const {return _readTask;} + inline TMLTask* getBlockedWriteTask() const {return _writeTask;} + std::string toString() const; + virtual TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam); +protected: + ///Determines the virtual length of read and write transactions based on the state of the channel + void setTransactionLength() const; + ///Length of the channel + TMLLength _length; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bb6c09afa83157cf985a3cb39817c0909c22ba0a --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.cpp @@ -0,0 +1,151 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLbrnbwChannel.h> +#include <TMLTransaction.h> + +TMLbrnbwChannel::TMLbrnbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, Priority iPriority, unsigned int iLossRate, unsigned int iMaxNbOfLosses): TMLStateChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iWidth*iContent, iPriority, iLossRate,iMaxNbOfLosses){ + _overflow=false; +} + +void TMLbrnbwChannel::testWrite(TMLTransaction* iTrans){ + _nbToWrite=iTrans->getVirtualLength(); + _writeTrans=iTrans; + setTransactionLength(); +} + +void TMLbrnbwChannel::testRead(TMLTransaction* iTrans){ + //std::cout << "brnbw test read."<< std::endl; + _nbToRead=iTrans->getVirtualLength(); + _readTrans=iTrans; + setTransactionLength(); +} + +void TMLbrnbwChannel::write(){ + std::cout << "Write in channel " << _writeTrans << "\n"; +#ifdef LOSS_ENABLED + if (_maxNbOfLosses > _nbOfLosses){ + //TMLLength aLostBytes = _writeTrans->getVirtualLength() * _lossRate + _lossRemainder; + TMLLength aLostBytes = _writeTrans->getVirtualLength() * _lossRate + _lossRemainder; + _lossRemainder = aLostBytes % 100; + //aLostBytes /= 100; + aLostBytes = min(aLostBytes/100, _maxNbOfLosses - _nbOfLosses); + _content += _writeTrans->getVirtualLength() - aLostBytes; + //std::cout << "Bytes to write: " << _writeTrans->getVirtualLength()-aLostBytes << "\n"; + //std::cout << "Bytes lost: " << aLostBytes << "\n"; + _nbOfLosses += aLostBytes; + }else{ +#endif + //std::cout << "write all " << _writeTrans->getVirtualLength() << "\n"; + _content+=_writeTrans->getVirtualLength(); +#ifdef LOSS_ENABLED + } +#endif + if (_readTrans!=0 && _readTrans->getVirtualLength()==0) _readTrans->setRunnableTime(_writeTrans->getEndTime()); + _nbToWrite=0; + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_writeTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(_writeTrans); +#endif + _writeTrans=0; + setTransactionLength(); +} + +bool TMLbrnbwChannel::read(){ + if (_content<_readTrans->getVirtualLength()){ + return false; + }else{ + _content-=_readTrans->getVirtualLength(); + _nbToRead=0; + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_readTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(_readTrans); +#endif + _readTrans=0; + setTransactionLength(); + return true; + } +} + +void TMLbrnbwChannel::setTransactionLength() const{ + if (_writeTrans!=0){ + if (_nbToRead==0){ + //_writeTrans->setVirtualLength(min(_nbToWrite,_burstSize)); + _writeTrans->setVirtualLength(_nbToWrite); + _underflow=false; + }else{ + if (_nbToRead<=_content){ + //read could be executed right away + //_writeTrans->setVirtualLength(min(_nbToWrite,_burstSize)); + _writeTrans->setVirtualLength(_nbToWrite); + _underflow=false; + }else{ + //read could wake up because of write + //_writeTrans->setVirtualLength(min(_nbToRead-_content,_nbToWrite,_burstSize)); + _writeTrans->setVirtualLength(min(_nbToRead-_content,_nbToWrite)); + _underflow=true; + } + } + } + if (_readTrans!=0){ + //_readTrans->setVirtualLength(min(_content,_nbToRead,_burstSize)); + _readTrans->setVirtualLength(min(_content,_nbToRead)); + } +} + +std::string TMLbrnbwChannel::toString() const{ + std::ostringstream outp; + outp << _name << "(brnbw) content:" << _content << " nbToRead:" << _nbToRead << " nbToWrite:" << _nbToWrite; + return outp.str(); +} + +TMLLength TMLbrnbwChannel::insertSamples(TMLLength iNbOfSamples, Parameter* iParam){ + TMLLength aNbToInsert; + if (iNbOfSamples==0){ + _content=0; + aNbToInsert=0; + }else{ + _content+=iNbOfSamples; + aNbToInsert=iNbOfSamples; + } + setTransactionLength(); + return aNbToInsert; +} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..e2cd76879ac6c697623c1382f0a48456079da248 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLbrnbwChannel.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLbrnbwChannelH +#define TMLbrnbwChannelH + +#include <definitions.h> +#include <TMLStateChannel.h> + +class TMLCommand; +class Bus; + +///This class models a blocking read non blocking write channel (infinite FIFO). +class TMLbrnbwChannel:public TMLStateChannel{ +public: + ///Constructor + /** + \param iID iID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iContent Initial content of the channel + \param iPriority Priority of the channel + \param iLossRate Loss rate of the channel + \param iMaxNbOfLosses Maximum number of losses + */ + TMLbrnbwChannel(ID iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, TMLLength iContent, Priority iPriority, unsigned int iLossRate=0, unsigned int iMaxNbOfLosses=0); + void testWrite(TMLTransaction* iTrans); + void testRead(TMLTransaction* iTrans); + void write(); + bool read(); + inline TMLTask* getBlockedReadTask() const {return _readTask;} + inline TMLTask* getBlockedWriteTask() const {return 0;} + std::string toString() const; + virtual TMLLength insertSamples(TMLLength iNbOfSamples, Parameter* iParam); +protected: + ///Determines the virtual length of read and write transactions based on the state of the channel + void setTransactionLength() const; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4b3c84202f94073af228f3dd6c99bf140b2aa6d4 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.cpp @@ -0,0 +1,89 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <TMLnbrnbwChannel.h> +#include <TMLTransaction.h> + +TMLnbrnbwChannel::TMLnbrnbwChannel(unsigned int iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, unsigned int iPriority): TMLChannel(iID, iName, iWidth, iNumberOfHops, iMasters, iSlaves, iPriority){ +} + +void TMLnbrnbwChannel::testWrite(TMLTransaction* iTrans){ + _writeTrans=iTrans; + iTrans->setVirtualLength(iTrans->getVirtualLength()); +} + +void TMLnbrnbwChannel::testRead(TMLTransaction* iTrans){ + _readTrans=iTrans; + iTrans->setVirtualLength(iTrans->getVirtualLength()); +} + +void TMLnbrnbwChannel::write(){ + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_writeTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_WRITE_TRANS_EXECUTED(_writeTrans); +#endif + _writeTrans=0; +} + +bool TMLnbrnbwChannel::read(){ + //FOR_EACH_TRANSLISTENER (*i)->transExecuted(_readTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_READ_TRANS_EXECUTED(_readTrans); +#endif + _readTrans=0; + return true; +} + +//TMLTask* TMLnbrnbwChannel::getBlockedReadTask() const{ +// return 0; +//} + +//TMLTask* TMLnbrnbwChannel::getBlockedWriteTask() const{ +// return 0; +//} + +std::string TMLnbrnbwChannel::toString() const{ + std::ostringstream outp; + outp << _name << "(nbrnbw)"; + return outp.str(); +} + +//void TMLnbrnbwChannel::getStateHash(HashAlgo* iHash) const{ +//} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.h new file mode 100644 index 0000000000000000000000000000000000000000..0461d3ebe90c4ba8ed2508cd80056a4b90ff154b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/app/TMLnbrnbwChannel.h @@ -0,0 +1,76 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TMLnbrnbwChannelH +#define TMLnbrnbwChannelH + +#include <definitions.h> +#include <TMLChannel.h> + +class TMLCommand; +class Bus; +class HashAlgo; + +///This class models a non blocking read non blocking write channel. +class TMLnbrnbwChannel:public TMLChannel{ +public: + ///Constructor + /** + \param iID ID of channel + \param iName Name of the channel + \param iWidth Channel width + \param iNumberOfHops Number of buses on which the channel is mapped + \param iMasters Pointers to the masters which the channel is connected to + \param iSlaves Pointers to the slaves on which the channel is mapped + \param iPriority Priority of the channel + */ + TMLnbrnbwChannel(unsigned int iID, std::string iName, unsigned int iWidth, unsigned int iNumberOfHops, BusMaster** iMasters, Slave** iSlaves, unsigned int iPriority); + void testWrite(TMLTransaction* iCommand); + void testRead(TMLTransaction* iCommand); + void write(); + bool read(); + inline TMLTask* getBlockedReadTask() const {return 0;} + inline TMLTask* getBlockedWriteTask() const {return 0;} + std::string toString() const; + inline void getStateHash(HashAlgo* iHash) const {} +protected: +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bridge.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bridge.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6f32276f8a7cdae9b49d916f8f8152b276cf5405 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bridge.cpp @@ -0,0 +1,67 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <Bridge.h> +#include <SchedulableCommDevice.h> +#include <TMLChannel.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> + +Bridge::Bridge(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iBufferSize): Slave(iID, iName), _timePerCycle(iTimePerCycle), _bufferSize(iBufferSize){ +} + +void Bridge::CalcTransactionLength(TMLTransaction* iTrans) const{ +} + +//Master* Bridge::getConnectedMaster(){ +// return dynamic_cast<Master*>(this); +//} + +Bridge::~Bridge(){ +} + +void Bridge::addBusMaster(BusMaster* iMaster){ +} + +//void Bridge::schedule2HTML(std::ofstream& myfile){ +//} + +//void Bridge::schedule2TXT(std::ofstream& myfile){ +//} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bridge.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bridge.h new file mode 100644 index 0000000000000000000000000000000000000000..a3463b0f31a79822e50661bd078cbb232e23d660 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bridge.h @@ -0,0 +1,87 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef BridgeH +#define BridgeH + +#include <Slave.h> +#include <SchedulableDevice.h> +#include <definitions.h> + +class TMLTransaction; + +///Bridge component +class Bridge: public Slave{ +public: + ///Constructor + /** + \param iID ID of the bridge + \param iName Name of the bridge + \param iTimePerCycle 1/Bridge frequency + \param iBufferSize Buffer size + */ + Bridge(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iBufferSize); + ///Accounts for the delay caused by the bridge + /** + \param iTrans Pointer to the transaction to be processed + */ + void CalcTransactionLength(TMLTransaction* iTrans) const; + /////Returns a pointer to the connected master device if any + ////** + //\return Pointer to the master device + //*/ + //Master* getConnectedMaster(); + //void schedule2HTML(std::ofstream& myfile); + //void schedule2TXT(std::ofstream& myfile); + ///Adds a new bus master to the internal list + /** + \param iMaster Pointer to bus master + */ + void addBusMaster(BusMaster* iMaster); + ///Destructor + ~Bridge(); +protected: + ///1/Bridge frequency + TMLTime _timePerCycle; + ///Buffer size + unsigned int _bufferSize; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bus.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bus.cpp new file mode 100644 index 0000000000000000000000000000000000000000..870998d3fb2b1668c846b44f610c595b8b3472b5 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bus.cpp @@ -0,0 +1,304 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <Bus.h> +#include <CPU.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> +#include <TMLChannel.h> +//#include <TransactionListener.h> +#include <WorkloadSource.h> + +Bus::Bus(ID iID, std::string iName, WorkloadSource* iScheduler, TMLLength iBurstSize, unsigned int ibusWidth, TMLTime iTimePerSample, bool iChannelBasedPrio): SchedulableCommDevice(iID, iName, iScheduler, iChannelBasedPrio), _burstSize(iBurstSize), _schedulingNeeded(true), _timePerSample(iTimePerSample), _busWidth(ibusWidth){} + +Bus::~Bus(){ + //delete _scheduler; + //std::cout << _transactList.size() << " elements in List of " << _name << ", busy cycles: " << _busyCycles << std::endl; + //for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + // std::cout << (*i)->toString() << "\n"; + //} +} + +//Determines the next bus transaction to be executed (_nextTransaction) and +//computes the start time and length +void Bus::schedule(){ + //Pointer to the next transaction to be executed + _nextTransaction=0; + //Get the end time of the last scheduled transaction. _scheduler is a member + //variable and schedule a member function of different classes that mask the + //type of scheduler + TMLTime aTimeSlice = _scheduler->schedule(_endSchedule); + + _nextTransaction=_scheduler->getNextTransaction(_endSchedule); + if (_nextTransaction!=0){ + //_scheduler->transWasScheduled(); + //Sets the virtual length of the transaction (number of execution units already carried out by previous transactions) + _nextTransaction->setVirtualLength(min(_nextTransaction->getVirtualLength(), _burstSize)); + calcStartTimeLength(aTimeSlice); + } + _schedulingNeeded=false; +#ifdef DEBUG_BUS + if (_nextTransaction==0) + std::cout << "Bus:schedule: decision of BUS " << _name << ": no transaction" << std::endl; + else + std::cout << "Bus:schedule: decision of BUS " << _name << ": " << _nextTransaction->toString() << std::endl; +#endif +} + +//void Bus::registerTransaction(){ +// _schedulingNeeded=true; +// _nextTransaction=0; +//} + + +//Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions +bool Bus::addTransaction(TMLTransaction* iTransToBeAdded){ + //std::cout << "Bus add trans " << _nextTransaction << "\n"; + _endSchedule = _nextTransaction->getEndTime(); + //std::cout << "set end time to " << _endSchedule << "\n"; + //_transactList.push_back(_nextTransaction); +#ifdef TRANSLIST_ENABLED + _transactList.push_back(iTransToBeAdded); //NEW!!!!! +#endif + _busyCycles += _nextTransaction->getOperationLength(); +#ifdef DEBUG_BUS + std::cout << "Bus::addTrans: add trans at bus " << _name << ": " << _nextTransaction->toString() << std::endl; +#endif +#ifdef LISTENERS_ENABLED + NOTIFY_TRANS_EXECUTED(_nextTransaction); +#endif + _nextTransaction = 0; + _schedulingNeeded=true; + //std::cout << "End Bus add trans\n"; + return true; +} + +//Calculates the start time and the length of the next transaction +void Bus::calcStartTimeLength(TMLTime iTimeSlice) const{ + _nextTransaction->setStartTime(max(static_cast<TMLTime>(_endSchedule)-static_cast<TMLTime>(_nextTransaction->getPenalties()),static_cast<TMLTime>(_nextTransaction->getStartTime()))); + + //if (_nextTransaction->getOperationLength()!=-1){ + if (iTimeSlice!=0){ + _nextTransaction->setVirtualLength(max(min(_nextTransaction->getVirtualLength(), iTimeSlice *_busWidth/_timePerSample),(TMLTime)1)); + } + TMLTime aLength = _nextTransaction->getVirtualLength(); + + aLength = (aLength%_busWidth == 0)? (aLength/_busWidth)*_timePerSample : (aLength/_busWidth + 1)*_timePerSample; + _nextTransaction->setLength(max(aLength, _nextTransaction->getOperationLength())); + //_nextTransaction->setLength(aLength); //TODO: this is not correct if speed of buses differ, max should be taken + + Slave* aSlave = _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + if (aSlave!=0) aSlave->CalcTransactionLength(_nextTransaction); +} + +std::string Bus::toShortString() const{ + std::ostringstream outp; + //outp << "bus" << _ID; + outp << "bus" << _name; + return outp.str(); +} + +//Writes a HTML representation of the schedule to an output file +void Bus::schedule2HTML(std::ofstream& myfile) const{ + TMLTime aCurrTime=0; + TMLTransaction* aCurrTrans; + unsigned int aBlanks,aLength,aColor; + if (_transactList.empty()) return; + myfile << "<h2><span>Scheduling for device: "<< _name <<"</span></h2>\n<table>\n<tr>"; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + aCurrTrans=*i; + //if (aCurrTrans->getVirtualLength()==0) continue; + aBlanks=aCurrTrans->getStartTimeOperation()-aCurrTime; + if (aBlanks>0){ + if (aBlanks==1) + myfile << "<td title=\"idle time\" class=\"not\"></td>\n"; + else + myfile << "<td colspan=\""<< aBlanks <<"\" title=\"idle time\" class=\"not\"></td>\n"; + } + aLength=aCurrTrans->getOperationLength(); + //aColor=(((unsigned int)(aCurrTrans->getCommand()->getTask())) & 15)+1; + aColor=aCurrTrans->getCommand()->getTask()->getInstanceNo() & 15; + if (aLength==1) + myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + else + myfile << "<td colspan=\"" << aLength << "\" title=\"" << aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + aCurrTime=aCurrTrans->getEndTime(); + } + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength++) myfile << "<th></th>"; + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength+=5) myfile << "<td colspan=\"5\" class=\"sc\">" << aLength << "</td>"; + myfile << "</tr>\n</table>\n"; +} + +//Writes a plain text representation of the schedule to an output file +void Bus::schedule2TXT(std::ofstream& myfile) const{ + myfile << "========= Scheduling for device: "<< _name << " =========\n" ; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + myfile << (*i)->toShortString() << std::endl; + } +} + +//Returns the next signal change (for vcd output) +void Bus::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ + //std::ostringstream outp; + //std::cout << _transactList.size() << " elements in List of " << _name << std::endl; + if (iInit){ + _posTrasactListVCD=_transactList.begin(); + _previousTransEndTime=0; + _vcdOutputState=INIT_BUS; + } + if (_posTrasactListVCD == _transactList.end()){ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + //oSigChange=outp.str(); + //oNoMoreTrans=true; + //return _previousTransEndTime; + new (oSigData) SignalChangeData(END_IDLE_BUS, _previousTransEndTime, this); + }else{ + TMLTransaction* aCurrTrans=*_posTrasactListVCD; + //oNoMoreTrans=false; + switch (_vcdOutputState){ + case END_READ_BUS: + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime && (*_posTrasactListVCD)->getCommand()->getTask()==(*_posTrasactListVCD)->getChannel()->getBlockedReadTask()); + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(END_WRITE_BUS) << "bus" << _ID; + _vcdOutputState=END_WRITE_BUS; + new (oSigData) SignalChangeData(END_WRITE_BUS, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + _vcdOutputState=END_IDLE_BUS; + //if (_posTrasactListVCD == _transactList.end()) oNoMoreTrans=true; + new (oSigData) SignalChangeData(END_IDLE_BUS, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case END_WRITE_BUS: + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime && (*_posTrasactListVCD)->getCommand()->getTask()==(*_posTrasactListVCD)->getChannel()->getBlockedWriteTask()); + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(END_READ_BUS) << "bus" << _ID; + _vcdOutputState=END_READ_BUS; + new (oSigData) SignalChangeData(END_READ_BUS, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + _vcdOutputState=END_IDLE_BUS; + //if (_posTrasactListVCD == _transactList.end()) oNoMoreTrans=true; + new (oSigData) SignalChangeData(END_IDLE_BUS, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case INIT_BUS: + if (aCurrTrans->getStartTimeOperation()!=0){ + _vcdOutputState=END_IDLE_BUS; + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_BUS) << "bus" << _ID; + //oSigChange=outp.str(); + new (oSigData) SignalChangeData(END_IDLE_BUS, 0, this); + //return 0; + return; + } + case END_IDLE_BUS: + if (aCurrTrans->getCommand()->getTask()==aCurrTrans->getChannel()->getBlockedReadTask()){ + _vcdOutputState=END_READ_BUS; + new (oSigData) SignalChangeData(END_READ_BUS, aCurrTrans->getStartTimeOperation(), this); + //outp << VCD_PREFIX << vcdValConvert(END_READ_BUS) << "bus" << _ID; + }else{ + _vcdOutputState=END_WRITE_BUS; + new (oSigData) SignalChangeData(END_WRITE_BUS, aCurrTrans->getStartTimeOperation(), this); + //outp << VCD_PREFIX << vcdValConvert(END_WRITE_BUS) << "bus" << _ID; + } + //oSigChange=outp.str(); + //return aCurrTrans->getStartTimeOperation(); + break; + } + } + //return 0; +} + +//Resets a simulation component to its initial state +void Bus::reset(){ + //std::cout << "Bus reset" << std::endl; + _scheduler->reset(); + SchedulableDevice::reset(); + _nextTransaction=0; + _schedulingNeeded=true; + _transactList.clear(); //List containing all already scheduled transactions + _busyCycles=0; +} + +//Writes benchmarking data to a given stream +void Bus::streamBenchmarks(std::ostream& s) const{ + s << TAG_BUSo << " id=\"" << _ID << "\" name=\"" << _name << "\">" << std::endl; + if (_simulatedTime!=0) s << TAG_UTILo << (static_cast<float>(_busyCycles)/static_cast<float>(_simulatedTime)) << TAG_UTILc; + s << TAG_BUSc; +} + +//Deserializes the object +std::istream& Bus::readObject(std::istream &is){ + SchedulableDevice::readObject(is); + _scheduler->readObject(is); +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(is,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: Bus " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif +#endif + return is; +} + +//Serializes the object +std::ostream& Bus::writeObject(std::ostream &os){ + SchedulableDevice::writeObject(os); + _scheduler->writeObject(os); +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(os,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: Bus " << _name << " busyCycles: " << _busyCycles << std::endl; +#endif +#endif + return os; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bus.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bus.h new file mode 100644 index 0000000000000000000000000000000000000000..8229488911b07c94e18a4ead03b54c6393010f06 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Bus.h @@ -0,0 +1,138 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef BusH +#define BusH + +#include <definitions.h> +#include <SchedulableCommDevice.h> +#include <TraceableDevice.h> + +class CPU; +class TMLTransaction; + +enum vcdBusVisState + { + END_IDLE_BUS, + END_READ_BUS, + END_WRITE_BUS, + INIT_BUS +}; + +///Simulates the bahavior of a bus shared by several master devices +class Bus: public SchedulableCommDevice, public TraceableDevice { +public: + ///Constructor + /** + \param iID ID of the bus + \param iName Name of the bus + \param iScheduler Pointer to the scheduler object + \param iBurstSize Size of an atomic bus transaction + \param ibusWidth Bus width + \param iTimePerSample Transfer time per sample + \param iChannelBasedPrio Flag indicating whether bus master based or channel based priorities are used to arbitrate the bus + */ + Bus(ID iID, std::string iName, WorkloadSource* iScheduler, TMLLength iBurstSize, unsigned int ibusWidth, TMLTime iTimePerSample, bool iChannelBasedPrio); + ///Destructor + virtual ~Bus(); + ///Add a transaction waiting for execution to the internal list + inline void registerTransaction() {_schedulingNeeded=true; _nextTransaction=0;} + ///Determines the next bus transaction to be executed + void schedule(); + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + bool addTransaction(TMLTransaction* iTransToBeAdded); + ///Returns a pointer to the transaction determined by the scheduling algorithm + /** + \return Pointer to transaction + */ + inline TMLTransaction* getNextTransaction() { + if (_schedulingNeeded) schedule(); + return _nextTransaction; + } + ///Returns the size of an atomic bus transaction + /** + \return Burst size + */ + inline TMLLength getBurstSize() const {return _burstSize;} + ///Returns a string representation of the Bus + /** + \return Detailed string representation + */ + inline std::string toString() const {return _name;} + ///Returns a short string representation of the bus + /** + \return Short string representation + */ + std::string toShortString() const; + ///Writes a HTML representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2HTML(std::ofstream& myfile) const; + ///Writes a plain text representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2TXT(std::ofstream& myfile) const; + void getNextSignalChange(bool iInit, SignalChangeData* oSigData); + virtual void streamBenchmarks(std::ostream& s) const; + virtual void reset(); + inline void streamStateXML(std::ostream& s) const {streamBenchmarks(s);} + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); +protected: + ///Calculates the start time and the length of the next transaction + /** + \param iTimeSlice Bus time slice granted by the scheduler + */ + void calcStartTimeLength(TMLTime iTimeSlice) const; + ///Size of an atomic bus transaction + TMLLength _burstSize; + ///Dirty flag of the current scheduling decision + bool _schedulingNeeded; + ///Inverse bus speed + TMLTime _timePerSample; + ///Bus width in bytes + unsigned int _busWidth; + ///State variable for the VCD output + vcdBusVisState _vcdOutputState; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/BusMaster.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/BusMaster.h new file mode 100644 index 0000000000000000000000000000000000000000..7515e32130bc89cd65ad4db5b699233ee2a141a3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/BusMaster.h @@ -0,0 +1,261 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef BusMasterH +#define BusMasterH + +#include <definitions.h> +#include <WorkloadSource.h> +#include <TMLTransaction.h> +#include <SchedulableDevice.h> +#include <TMLChannel.h> +class TMLTransaction; +class SchedulableCommDevice; + +///Class serving as interface between CPUs and buses (more precisely bus schedulers) +class BusMaster: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the bus master + \param iPriority Priority of the bus master + \param iNbOfBuses Number of buses(bus channels) the master is connected to + \param iBusArray Pointer to the buses(bus channels) the master is connected to + */ + BusMaster(const std::string& iName, Priority iPriority, unsigned int iNbOfBuses, SchedulableCommDevice** iBusArray): WorkloadSource(iPriority), _name(iName), _nbOfBuses(iNbOfBuses), _busArray(iBusArray), _busSortArray(0), _nextTransaction(0), _nextBus(iBusArray[0]), /*_lastSimTime(-1),*/ _contentionDelay(0), _noTransactions(0), _channelBasedPrioEnabled(false), _channelBasedPrio(0){ + _busSortArray=new SchedulableCommDevice*[_nbOfBuses]; + for (unsigned int i=0; i <_nbOfBuses; i++) _busSortArray[i]=_busArray[i]; + _channelBasedPrioEnabled = _busArray[0]->ChannelBasedPrio(); + } + + ///Destructor + ~BusMaster(){ + std::cout << _name << ": Bus Master deleted\n"; + delete[] _busArray; + delete[] _busSortArray; + } + + void reset(){ + _nextTransaction=0; + //_lastSimTime=-1; + _nextBus=_busArray[0]; + _contentionDelay=0; + _noTransactions=0; + } + + void registerTransaction(TMLTransaction* iTrans){ + if (iTrans!=_nextTransaction){ + //std::cout << _name << ": registerTransaction" << std::endl; + for (unsigned int i=0; i <_nbOfBuses; i++) _busArray[i]->registerTransaction(); + _nextTransaction=iTrans; + if (_channelBasedPrioEnabled && iTrans!=0){ + _channelBasedPrio=iTrans->getChannel()->getPriority(); + } + } + } + + TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const{ + if (_nextTransaction==0) return 0; + for (unsigned int i=0; i <_nbOfBuses; i++){ + //std::cout << "Raw version allowed\n"; + if ((*(_busArray[i])).SchedulableDevice::getNextTransaction()==_nextTransaction){ + //std::cout << _name << "trans already scheduled by: " << _busArray[i]->toString() << "\n"; + return 0; + } + } + return _nextTransaction; + } + + void addTransaction(TMLTransaction* iTransToBeAdded){ + //std::cout << _name << ": add Trans\n"; + //std::cout << _name << ": trans added on Bus: " << _nextBus->toString() << std::endl; + _nextBus->addTransaction(iTransToBeAdded); + _nextTransaction=0; + //std::cout << _name << ": end add" << std::endl; + } + + ///Indicates whether bus access has been granted + /** + \return Returns true if access has been granted + */ + bool accessGranted(){ + //std::cout << _name << ":access granted " << "\n"; + if (_nextTransaction==0){ + //std::cout << _name << ":branch no trans" << "\n"; + return false; + } + if (_nbOfBuses==1) { + //std::cout << _name << ": branch 1 bus\n"; + //bool test = _nextTransaction==_busArray[0]->getNextTransaction(); + return (_nextTransaction==_busArray[0]->getNextTransaction()); + //return test; + } + sortBusList(); + //_transWasScheduled=false; + //std::cout << "Bus scheduling initiated by: " << _name << "\n"; + for (unsigned int i=0; i <_nbOfBuses; i++){ + if (_busSortArray[i]->getNextTransaction()==_nextTransaction){ + _nextBus=_busSortArray[i]; + //std::cout << _name << ":access granted end true, bus: "<< _nextBus->toString() << "\n"; + return true; + } + } + //std::cout << _name << ":access granted end false" << "\n"; + return false; + } + + ///Returns the pointer to the bus the master is connected to + /** + \return Pointer to bus + */ + SchedulableCommDevice* getBus(){ + return _busArray[0]; + } + + /*void transWasScheduled(){ + _transWasScheduled=true; + _addTransCheck=_addTransFlag; + _lastSimTime = SchedulableDevice::getSimulatedTime(); + }*/ + + ///Updates the bus contention statistics whenever a new bus transaction is executed + /** + \param iContentionDelay Contention delay of the transaction + */ + void addBusContention(unsigned long iContentionDelay){ + _contentionDelay+=iContentionDelay; + _noTransactions++; + } + + ///Writes benchmarking data to a given stream + /** + \param s Reference to an output stream + */ + void streamBenchmarks(std::ostream& s) const{ + if (_noTransactions!=0) + s << TAG_CONTDELo << " busID=\"" << _busArray[0]->getID()<< "\" busName=\"" << _busArray[0]->toString() << "\">" << (static_cast<float>(_contentionDelay)/static_cast<float>(_noTransactions)) << TAG_CONTDELc << std::endl; + } + + std::string toString() const{ + return _name; + } + + Priority getPriority() const{ + return (_channelBasedPrioEnabled)?_channelBasedPrio: _priority; + } + + std::istream& readObject(std::istream &is){ + WorkloadSource::readObject(is); +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(is,_contentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: BusMaster " << _name << " contentionDelay: " << _contentionDelay << std::endl; +#endif + READ_STREAM(is,_noTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: BusMaster " << _name << " noTransactions: " << _noTransactions << std::endl; +#endif +#endif + return is; + } + std::ostream& writeObject(std::ostream &os){ + WorkloadSource::writeObject(os); +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(os,_contentionDelay); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: BusMaster " << _name << " contentionDelay: " << _contentionDelay << std::endl; +#endif + WRITE_STREAM(os,_noTransactions); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: BusMaster " << _name << " noTransactions: " << _noTransactions << std::endl; +#endif +#endif + return os; + } + +protected: + ///Sorts the bus list by ascending finish times of the last scheduled transaction + void sortBusList(){ + //std::cout << _name << ": sort result: "; + unsigned int aBound = _nbOfBuses; + bool aSwapped; + do{ + aSwapped=false; + aBound--; + for(unsigned int i=0; i<aBound; i++){ + if (_busSortArray[i]->getEndSchedule() > _busSortArray[i+1]->getEndSchedule()){ + SchedulableCommDevice* aTmp = _busSortArray[i]; + _busSortArray[i] = _busSortArray[i+1]; + _busSortArray[i+1] = aTmp; + aSwapped= true; + } + } + }while (aSwapped); + /*for(unsigned int i=0; i<_nbOfBuses; i++){ + std::cout << ", " << _busSortArray[i]->toString(); + } + std::cout << " " << _name << ": end sort" << std::endl;*/ + } + + ///Name + std::string _name; + ///Number of connected channels + unsigned int _nbOfBuses; + ///Pointer to the bus the master is connected to + SchedulableCommDevice** _busArray; + ///Array containing a sorted array of bus pointers (criterion: schedule end time) + SchedulableCommDevice** _busSortArray; + ///Transaction + TMLTransaction* _nextTransaction; + ///Next bus pointer + SchedulableCommDevice* _nextBus; + ////Flag indicating at what simulation time _nextTransaction was scheduled + //mutable TMLTime _lastSimTime; + ///Sum of the contention delay of all registered transactions + unsigned long _contentionDelay; + ///Number of registered transactions + unsigned long _noTransactions; + ///Flag indicating whether channel based priorities apply + bool _channelBasedPrioEnabled; + ///Channel based priority if applicable + Priority _channelBasedPrio; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/CPU.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/CPU.h new file mode 100755 index 0000000000000000000000000000000000000000..c0093c9964d0fb71a8ac8960c1602a19caf72e94 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/CPU.h @@ -0,0 +1,172 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef CPUH +#define CPUH + +#include <definitions.h> +#include <SchedulableDevice.h> +#include <SchedulableCommDevice.h> +#include <TraceableDevice.h> +#include <BusMaster.h> +#include <WorkloadSource.h> +#include <TMLTask.h> +#include <TMLCommand.h> + +class TMLTask; +class TMLTransaction; +class Bus; + +enum vcdCPUVisState + { + END_IDLE_CPU, + END_PENALTY_CPU, + END_TASK_CPU +}; + +///Represents the base class for CPUs +class CPU: public SchedulableDevice, public TraceableDevice{ +public: + ///Constructor + /** + \param iID ID of the device + \param iName Name of the device + \param iScheduler Pointer to the scheduler object + */ + CPU(ID iID, std::string iName, WorkloadSource* iScheduler): SchedulableDevice(iID, iName, iScheduler), _lastTransaction(0)/*,_schedulingNeeded(false)*/{ + } + ///Destructor + virtual ~CPU(){ + } + ///Stores a new task in the internal task list + /** + \param iTask Pointer to the task to add + */ + virtual void registerTask(TMLTask* iTask){ + _taskList.push_back(iTask); + if (_scheduler!=0) _scheduler->addWorkloadSource(iTask); + } + ///Truncates the next transaction at time iTime + /** + \param iTime Indicates at what time the transaction should be truncated + \return Returns true if scheduling of device has been performed + */ + virtual void truncateAndAddNextTransAt(TMLTime iTime)=0; + //virtual TMLTime truncateNextTransAt(TMLTime iTime)=0; + ///Adds a new bus master to the internal list + /** + \param iMaster Pointer to bus master + */ + virtual void addBusMaster(BusMaster* iMaster){ + _busMasterList.push_back(iMaster); + } + virtual void reset(){ + SchedulableDevice::reset(); + _lastTransaction=0; + //_schedulingNeeded=false; + } + virtual std::string toString() const =0; + virtual std::istream& readObject(std::istream &is){ + SchedulableDevice::readObject(is); + return is; + } + virtual std::ostream& writeObject(std::ostream &os){ + SchedulableDevice::writeObject(os); + return os; + } + ///Invalidate schedule of CPU + /*void setRescheduleFlag(){ + _schedulingNeeded=true; + //std::cout <<" CPU " << _name << " forwards to scheduler\n"; + _scheduler->resetScheduledFlag(); + }*/ + + ///Truncates current transaction if schedule is invalid + /** + \param iTime Truncation time + */ + /*void truncateIfNecessary(TMLTime iTime){ + if(_schedulingNeeded && getNextTransaction()!=0){ + //std::cout << "truncateIfNecessary for CPU " << _name << "\n"; + _schedulingNeeded=false; + truncateAndAddNextTransAt(iTime); + //std::cout << "truncateIfNecessary end\n"; + } + }*/ + + ///Reschedules CPU if schedule is invalid + /*void rescheduleIfNecessary(){ + if(_schedulingNeeded){ + //std::cout << "rescheduleIfNecessary for CPU " << _name << "\n"; + _schedulingNeeded=false; + schedule(); + //std::cout << "rescheduleIfNecessary end\n"; + } + }*/ + + /*void truncateAndRescheduleIfNecessary(TMLTime iTime){ commented out + std::cout << "truncateAndRescheduleIfNecessary for CPU " << _name << " started\n"; + if(_schedulingNeeded){ + _schedulingNeeded=false; + //if(_nextTransaction==0) + //std::cout << "shouldn't be raw >\n"; + if(getNextTransaction()==0){ + //std::cout << "shouldn't be raw <\n"; + schedule(); + }else + + std::cout << "truncateAndRescheduleIfNecessary " << _name << " scheduled\n"; + }else + std::cout << "truncateAndRescheduleIfNecessary " << _name << " no scheduling needed\n"; + std::cout << "Current Trans " << _name << ": "; + if (_nextTransaction==0) std::cout << "0\n"; else std::cout << _nextTransaction->toString() << "\n"; + }*/ +protected: + ///List of all tasks running on the CPU + TaskList _taskList; + ///Pointer to the last transaction which has been executed + TMLTransaction* _lastTransaction; + ///List of bus masters + BusMasterList _busMasterList; + ///Dirty flag of the current scheduling decision + //bool _schedulingNeeded; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Memory.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Memory.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e1de258548aa14987f54cc22643d255e36697078 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Memory.cpp @@ -0,0 +1,54 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <Memory.h> + +Memory::Memory(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iDataSize): Slave(iID, iName), _timePerCycle(iTimePerCycle), _dataSize(iDataSize){ +} + +void Memory::CalcTransactionLength(TMLTransaction* iTrans) const{ +} + +Master* Memory::getConnectedMaster(){ + return 0; +} + +Memory::~Memory(){ +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Memory.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Memory.h new file mode 100644 index 0000000000000000000000000000000000000000..1a0255706163ffcf0cae8bc1514fe7e549c871ba --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Memory.h @@ -0,0 +1,80 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MemoryH +#define MemoryH + +class TMLTransaction; + +#include <Slave.h> +#include <definitions.h> + +///Memory component +class Memory: public Slave{ +public: + ///Constructor + /** + \param iID ID of the Memory + \param iName Name of the Memory + \param iTimePerCycle 1/Memory frequency + \param iDataSize Width of a data word + */ + Memory(ID iID, std::string iName, TMLTime iTimePerCycle, unsigned int iDataSize); + ///Accounts for the delay caused by the memory + /** + \param iTrans Pointer to the transaction to be processed + */ + void CalcTransactionLength(TMLTransaction* iTrans) const; + ///Returns a pointer to the connected master device if any + /** + \return Pointer to the master device + */ + Master* getConnectedMaster(); + ///Destructor + ~Memory(); + +protected: + ///1/Memory frequency + TMLTime _timePerCycle; + ///Width of a data word + unsigned int _dataSize; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9a4afc33c350fadad1e47e9ab9073ad99a215662 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.cpp @@ -0,0 +1,116 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<PrioScheduler.h> +#include <TMLTransaction.h> + +PrioScheduler::PrioScheduler(const std::string& iName, Priority iPrio): WorkloadSource(iPrio), _name(iName), _nextTransaction(0) /*,_lastSourceIndex(0)*/{ +} + +PrioScheduler::PrioScheduler(const std::string& iName, Priority iPrio, WorkloadSource** aSourceArray, unsigned int iNbOfSources): WorkloadSource(iPrio, aSourceArray, iNbOfSources), _name(iName), _nextTransaction(0), _lastSource(0) { +} + +TMLTime PrioScheduler::schedule(TMLTime iEndSchedule){ + TaskList::iterator i; + TMLTransaction *aMarkerPast=0, *aMarkerFuture=0,*aTempTrans; + Priority aHighestPrioPast=-1; + TMLTime aTransTimeFuture=-1,aRunnableTime; + WorkloadSource *aSourcePast=0, *aSourceFuture=0; //NEW + //std::cout << "Prio Scheduler " << _name << ":\n"; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + (*i)->schedule(iEndSchedule); + //std::cout << _name << " schedules, before getCurrTransaction " << std::endl; + aTempTrans=(*i)->getNextTransaction(iEndSchedule); + //std::cout << "after getCurrTransaction " << std::endl; + if (aTempTrans!=0 && aTempTrans->getVirtualLength()!=0){ + //std::cout << "Found on " << (*i)->toString() << ": " << aTempTrans->toString() << "\n"; + aRunnableTime=aTempTrans->getRunnableTime(); + if (aRunnableTime<=iEndSchedule){ + //Past + if ((*i)->getPriority()<aHighestPrioPast){ + aHighestPrioPast=(*i)->getPriority(); + aMarkerPast=aTempTrans; + aSourcePast=*i; //NEW + } + }else{ + //Future + if(aRunnableTime<aTransTimeFuture){ + aTransTimeFuture=aRunnableTime; + aMarkerFuture=aTempTrans; + aSourceFuture=*i; //NEW + } + + } + } + //else std::cout << "Found on " << (*i)->toString() << " nothing\n"; + } + if (aMarkerPast==0){ + _nextTransaction=aMarkerFuture; + _lastSource=aSourceFuture; //NEW + }else{ + _nextTransaction=aMarkerPast; + _lastSource=aSourcePast; //NEW + } + /*if (_nextTransaction==0) + std::cout << "Scheduler " << _name << " hasn't found anything.\n"; + else + std::cout << "Scheduler " << _name << " schedules " << _nextTransaction->toString() << "\n";*/ + return 0; +} + +//TMLTransaction* PrioScheduler::getNextTransaction(TMLTime iEndSchedule) const{ +// return _nextTransaction; +//} + +//std::string PrioScheduler::toString() const{ +// return _name; +//} + +PrioScheduler::~PrioScheduler(){ + std::cout << _name << ": Scheduler deleted\n"; +} + +void PrioScheduler::reset(){ + WorkloadSource::reset(); + _nextTransaction=0; +} + +//void PrioScheduler::transWasScheduled(SchedulableDevice* iDevice){ +// if (_lastSource!=0) _lastSource->transWasScheduled(iDevice); +//} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.h new file mode 100644 index 0000000000000000000000000000000000000000..09225e69f4e5dbba2b5271531f8c4b86534d59ff --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/PrioScheduler.h @@ -0,0 +1,77 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef PrioSchedulerH +#define PrioSchedulerH +#include <WorkloadSource.h> + +class TMLTransaction; + +///Fixed priority based scheduler +class PrioScheduler: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + */ + PrioScheduler(const std::string& iName, Priority iPrio); + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + PrioScheduler(const std::string& iName, Priority iPrio, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + ~PrioScheduler(); + TMLTime schedule(TMLTime iEndSchedule); + inline TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const {return _nextTransaction;} + inline std::string toString() const {return _name;} + void reset(); + //void transWasScheduled(SchedulableDevice* iDevice); +protected: + ///Name of the scheduler + std::string _name; + ///Next transaction to be executed + TMLTransaction* _nextTransaction; + ///Last workload source to which ressource access was granted + WorkloadSource* _lastSource; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..97648940e57213aa7ce3dae7200b434b5dcba537 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.cpp @@ -0,0 +1,203 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <RRPrioScheduler.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> + +RRPrioScheduler::RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize): WorkloadSource(iPrio), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +RRPrioScheduler::RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources): WorkloadSource(iPrio, aSourceArray, iNbOfSources), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +TMLTime RRPrioScheduler::schedule(TMLTime iEndSchedule){ + TaskList::iterator i; + //std::cout << _name << ": Schedule called \n"; + TMLTransaction *anOldTransaction=_nextTransaction, *aTempTrans; + TMLTime aLowestRunnableTimeFuture=-1,aRunnableTime, aLowestRunnableTimePast=-1; + WorkloadSource *aSourcePast=0, *aSourceFuture=0; + //, *aScheduledSource=0; + bool aSameTaskFound=false; + if (_lastSource!=0){ + //aScheduledSource=_lastSource; + _lastSource->schedule(iEndSchedule); + if (_lastSource->getNextTransaction(iEndSchedule)!=0 && _lastSource->getNextTransaction(iEndSchedule)->getVirtualLength()!=0){ + //if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() + _minSliceSize){ + if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getOperationLength() + _minSliceSize){ + std::cout << "Select same task, remaining: " << _timeSlice - anOldTransaction->getOperationLength() << "\n"; + aSourcePast=_lastSource; + aSameTaskFound=true; + } + } + } + if (!aSameTaskFound){ + //std::cout << _name << ": Second if\n"; + Priority aHighestPrioPast=-1; + + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + //std::cout << "Loop\n"; + //if (*i!=aScheduledSource) + (*i)->schedule(iEndSchedule); + //std::cout << _name << " schedules, before getCurrTransaction " << std::endl; + aTempTrans=(*i)->getNextTransaction(iEndSchedule); + //std::cout << "after getCurrTransaction " << std::endl; + + //if ((*i)->getPriority()<aHighestPrioPast){ + + if (aTempTrans!=0 && aTempTrans->getVirtualLength()!=0){ + aRunnableTime=aTempTrans->getRunnableTime(); + if (aRunnableTime<=iEndSchedule){ + //Past + if ((*i)->getPriority()<aHighestPrioPast || ((*i)->getPriority()==aHighestPrioPast && aRunnableTime<aLowestRunnableTimePast)){ + aHighestPrioPast=(*i)->getPriority(); + aLowestRunnableTimePast=aRunnableTime; + aSourcePast=*i; + } + }else{ + //Future + if(aRunnableTime<aLowestRunnableTimeFuture){ + aLowestRunnableTimeFuture=aRunnableTime; + aSourceFuture=*i; + } + + } + } + } + } + if (aSourcePast==0){ + _nextTransaction=(aSourceFuture==0)? 0 : aSourceFuture->getNextTransaction(iEndSchedule); + _lastSource=aSourceFuture; + }else{ + _nextTransaction=aSourcePast->getNextTransaction(iEndSchedule); + _lastSource=aSourcePast; + } + if (aSameTaskFound){ + //std::cout << _name << ": Same source found " << _lastSource->toString() << "\n"; + //if (_nextTransaction!=anOldTransaction){ + if (_nextTransaction!=anOldTransaction && anOldTransaction!=0){ + //std::cout << _name << ": Elapsed time increased by " << anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() << "\n"; + //_elapsedTime += anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength(); + _elapsedTime += anOldTransaction->getOperationLength(); + } + //std::cout << "Not crashed\n" ; + }else{ + //if (_lastSource==0) + //std::cout << _name << ": No source found\n"; + //else + //std::cout << _name << ": New source found " << _lastSource->toString() << "\n"; + _elapsedTime=0; + } + //if (_nextTransaction!=0){ + // _nextTransaction->setLength(min(_nextTransaction->getOperationLength(), _timeSlice-_elapsedTime)); + //} + //std::cout << "End schedule\n" ; + return _timeSlice-_elapsedTime; +} + +//TMLTransaction* RRPrioScheduler::getNextTransaction(TMLTime iEndSchedule) const{ +// return _nextTransaction; +//} + +void RRPrioScheduler::reset(){ + WorkloadSource::reset(); + _nextTransaction=0; + _elapsedTime=0; + _lastSource=0; +} + +//std::string RRPrioScheduler::toString() const{ +// return _name; +//} + +RRPrioScheduler::~RRPrioScheduler(){ + std::cout << _name << ": Scheduler deleted\n"; +} + +std::istream& RRPrioScheduler::readObject(std::istream &is){ + WorkloadSource::readObject(is); + READ_STREAM(is,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + READ_STREAM(is, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + if (aLastSourceIndex==-1){ + _lastSource=0; + }else{ + WorkloadList::iterator i=_workloadList.begin(); + std::advance(i, aLastSourceIndex); + _lastSource=*i; + } + return is; +} + +std::ostream& RRPrioScheduler::writeObject(std::ostream &os){ + WorkloadSource::writeObject(os); + WRITE_STREAM(os,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + if (_lastSource==0){ + aLastSourceIndex=-1; + }else{ + aLastSourceIndex=0; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + if (*i==_lastSource) + break; + else + aLastSourceIndex++; + } + } + WRITE_STREAM(os, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + return os; +} + +//void RRScheduler::transWasScheduled(SchedulableDevice* iDevice){ +// if (_lastSource!=0) _lastSource->transWasScheduled(iDevice); +//} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.h new file mode 100644 index 0000000000000000000000000000000000000000..5df23c3f6ae34d9c9d553c85326e8fb364122a2c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRPrioScheduler.h @@ -0,0 +1,92 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef RRPrioSchedulerH +#define RRPrioSchedulerH +#include <WorkloadSource.h> + +class TMLTransaction; + +///Round Robin Priotity based scheduler +class RRPrioScheduler: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + */ + RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice); + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + RRPrioScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + ///Destructor + ~RRPrioScheduler(); + TMLTime schedule(TMLTime iEndSchedule); + inline TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const {return _nextTransaction;} + void reset(); + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); + inline std::string toString() const {return _name;} + //void transWasScheduled(SchedulableDevice* iDevice); +protected: + ///Name of the scheduler + std::string _name; + ///Next transaction to be executed + TMLTransaction* _nextTransaction; + ///Time slice which is granted to ressources + TMLTime _timeSlice; + ///Minimum size of a time slice + TMLTime _minSliceSize; + ///Consumed portion of a time slice + TMLTime _elapsedTime; + ///Last workload source to which ressource access was granted + WorkloadSource* _lastSource; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRScheduler.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRScheduler.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e6a025c019ec2fd523aba1dbc3a071189ef46bd4 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRScheduler.cpp @@ -0,0 +1,197 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<RRScheduler.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> + +RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize): WorkloadSource(iPrio), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +RRScheduler::RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice ,TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources): WorkloadSource(iPrio, aSourceArray, iNbOfSources), _name(iName), _nextTransaction(0), _timeSlice(iTimeSlice), _minSliceSize(iMinSliceSize), _elapsedTime(0), _lastSource(0){ +} + +TMLTime RRScheduler::schedule(TMLTime iEndSchedule){ + TaskList::iterator i; + //std::cout << _name << ": Schedule called \n"; + TMLTransaction *anOldTransaction=_nextTransaction, *aTempTrans; + TMLTime aLowestRunnableTimeFuture=-1,aRunnableTime, aLowestRunnableTimePast=-1; + WorkloadSource *aSourcePast=0, *aSourceFuture=0; + //, *aScheduledSource=0; + bool aSameTaskFound=false; + if (_lastSource!=0){ + //aScheduledSource=_lastSource; + _lastSource->schedule(iEndSchedule); + if (_lastSource->getNextTransaction(iEndSchedule)!=0 && _lastSource->getNextTransaction(iEndSchedule)->getVirtualLength()!=0){ + //if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() + _minSliceSize){ + if (anOldTransaction==0 || _lastSource->getNextTransaction(iEndSchedule)==anOldTransaction || _timeSlice >=_elapsedTime + anOldTransaction->getOperationLength() + _minSliceSize){ + //std::cout << "Select same task, remaining: " << _timeSlice - anOldTransaction->getOperationLength() << "\n"; + aSourcePast=_lastSource; + aSameTaskFound=true; + } + } + } + if (!aSameTaskFound){ + //std::cout << _name << ": Second if\n"; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + //std::cout << "Loop\n"; + //if (*i!=aScheduledSource) + (*i)->schedule(iEndSchedule); + //std::cout << _name << " schedules, before getCurrTransaction " << std::endl; + aTempTrans=(*i)->getNextTransaction(iEndSchedule); + //std::cout << "after getCurrTransaction " << std::endl; + if (aTempTrans!=0 && aTempTrans->getVirtualLength()!=0){ + aRunnableTime=aTempTrans->getRunnableTime(); + if (aRunnableTime<=iEndSchedule){ + //Past + if (aRunnableTime<aLowestRunnableTimePast){ + aLowestRunnableTimePast=aRunnableTime; + aSourcePast=*i; + } + }else{ + //Future + if(aRunnableTime<aLowestRunnableTimeFuture){ + aLowestRunnableTimeFuture=aRunnableTime; + aSourceFuture=*i; + } + + } + } + } + } + if (aSourcePast==0){ + _nextTransaction=(aSourceFuture==0)? 0 : aSourceFuture->getNextTransaction(iEndSchedule); + _lastSource=aSourceFuture; + }else{ + _nextTransaction=aSourcePast->getNextTransaction(iEndSchedule); + _lastSource=aSourcePast; + } + if (aSameTaskFound){ + //std::cout << _name << ": Same source found " << _lastSource->toString() << "\n"; + //if (_nextTransaction!=anOldTransaction){ + if (_nextTransaction!=anOldTransaction && anOldTransaction!=0){ + //std::cout << _name << ": Elapsed time increased by " << anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength() << "\n"; + //_elapsedTime += anOldTransaction->getBranchingPenalty() + anOldTransaction->getOperationLength(); + _elapsedTime += anOldTransaction->getOperationLength(); + } + //std::cout << "Not crashed\n" ; + }else{ + //if (_lastSource==0) + //std::cout << _name << ": No source found\n"; + //else + //std::cout << _name << ": New source found " << _lastSource->toString() << "\n"; + _elapsedTime=0; + } + //if (_nextTransaction!=0){ + // _nextTransaction->setLength(min(_nextTransaction->getOperationLength(), _timeSlice-_elapsedTime)); + //} + //std::cout << "End schedule\n" ; + return _timeSlice-_elapsedTime; +} + +//TMLTransaction* RRScheduler::getNextTransaction(TMLTime iEndSchedule) const{ +// return _nextTransaction; +//} + +void RRScheduler::reset(){ + WorkloadSource::reset(); + _nextTransaction=0; + _elapsedTime=0; + _lastSource=0; +} + +//std::string RRScheduler::toString() const{ +// return _name; +//} + +RRScheduler::~RRScheduler(){ + std::cout << _name << ": Scheduler deleted\n"; +} + +std::istream& RRScheduler::readObject(std::istream &is){ + WorkloadSource::readObject(is); + READ_STREAM(is,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + READ_STREAM(is, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + if (aLastSourceIndex==-1){ + _lastSource=0; + }else{ + WorkloadList::iterator i=_workloadList.begin(); + std::advance(i, aLastSourceIndex); + _lastSource=*i; + } + return is; +} + +std::ostream& RRScheduler::writeObject(std::ostream &os){ + WorkloadSource::writeObject(os); + WRITE_STREAM(os,_elapsedTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " elapsedTime: " << _elapsedTime << std::endl; +#endif + int aLastSourceIndex; + if (_lastSource==0){ + aLastSourceIndex=-1; + }else{ + aLastSourceIndex=0; + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i){ + if (*i==_lastSource) + break; + else + aLastSourceIndex++; + } + } + WRITE_STREAM(os, aLastSourceIndex); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: RRScheduler " << _name << " lastSourceIndex: " << aLastSourceIndex << std::endl; +#endif + return os; +} + +//void RRScheduler::transWasScheduled(SchedulableDevice* iDevice){ +// if (_lastSource!=0) _lastSource->transWasScheduled(iDevice); +//} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRScheduler.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRScheduler.h new file mode 100644 index 0000000000000000000000000000000000000000..1291fd2d42f2260ed81f7d998b36c576f3c2a17b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/RRScheduler.h @@ -0,0 +1,92 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef RRSchedulerH +#define RRSchedulerH +#include <WorkloadSource.h> + +class TMLTransaction; + +///Round Robin scheduler +class RRScheduler: public WorkloadSource{ +public: + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + */ + RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice); + ///Constructor + /** + \param iName Name of the scheduler + \param iPrio Priority of the scheduler + \param iTimeSlice Time slice which is granted to clients + \param iMinSliceSize Minimum size of a time slice + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, TMLTime iMinSliceSize, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + //RRScheduler(const std::string& iName, Priority iPrio, TMLTime iTimeSlice, WorkloadSource** aSourceArray, unsigned int iNbOfSources); + ///Destructor + ~RRScheduler(); + TMLTime schedule(TMLTime iEndSchedule); + inline TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const {return _nextTransaction;} + void reset(); + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); + inline std::string toString() const {return _name;} + //void transWasScheduled(SchedulableDevice* iDevice); +protected: + ///Name of the scheduler + std::string _name; + ///Next transaction to be executed + TMLTransaction* _nextTransaction; + ///Time slice which is granted to ressources + TMLTime _timeSlice; + ///Minimum size of a time slice + TMLTime _minSliceSize; + ///Consumed portion of a time slice + TMLTime _elapsedTime; + ///Last workload source to which ressource access was granted + WorkloadSource* _lastSource; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SchedulableCommDevice.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SchedulableCommDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..79ef73a9c7a6b67e13fde6ab4d758f61982f8a65 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SchedulableCommDevice.h @@ -0,0 +1,76 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SchedulableCommDeviceH +#define SchedulableCommDeviceH + +#include <SchedulableDevice.h> + +class TMLTransaction; + +///Base class for communication devices which perform a scheduling +class SchedulableCommDevice: public SchedulableDevice{ +public: + ///Constructor + /** + \param iID ID of the device + \param iName Name of the device + \param iScheduler Pointer to the scheduler object + \param iChannelBasedPrio Flag indicating whether bus master based or channel based priorities are used to arbitrate the bus + */ + SchedulableCommDevice(ID iID, std::string iName, WorkloadSource* iScheduler,bool iChannelBasedPrio): SchedulableDevice(iID, iName, iScheduler), _channelBasedPrio(iChannelBasedPrio){} + ///Returns the size of an atomic bus transaction + /** + \return Size of an atomic bus transaction + */ + virtual TMLLength getBurstSize() const=0; + /////Truncates a transaction so that it does not exceed the burst size of the communication device + //virtual void truncateToBurst(TMLTransaction* iTrans) const=0; + ///Signals the component that a new transaction has become available and thus rescheduling is needed + virtual void registerTransaction()=0; + bool ChannelBasedPrio(){return _channelBasedPrio;} + ///Destructor + virtual ~SchedulableCommDevice(){} +protected: + ///Flag indicating whether bus master based or channel based priorities are used to arbitrate the bus + bool _channelBasedPrio; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SchedulableDevice.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SchedulableDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..aa633e26d4583a9799c2d0ad82c9377738b6e198 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SchedulableDevice.h @@ -0,0 +1,204 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SchedulableDeviceH +#define SchedulableDeviceH + +#include <definitions.h> +#include <Serializable.h> +#include <ListenerSubject.h> +#include <WorkloadSource.h> + +class Master; +class TMLTransaction; +//class TransactionListener; +class GeneralListener; + +///Base class for devices which perform a scheduling +//class SchedulableDevice: public Serializable, public ListenerSubject <TransactionListener> { +class SchedulableDevice: public Serializable, public ListenerSubject <GeneralListener> { +public: + ///Constructor + /** + \param iID ID of the device + \param iName Name of the device + \param iScheduler Pointer to the scheduler object + */ + SchedulableDevice(ID iID, std::string iName, WorkloadSource* iScheduler):_ID(iID), _name(iName), _endSchedule(0), _scheduler(iScheduler), _nextTransaction(0), _deleteScheduler(true), _busyCycles(0), _static_consumPerCycle (15), _dynamic_consumPerCycle (35) { + _transactList.reserve(BLOCK_SIZE_TRANS); + } + ///Determines the next transaction to be executed + virtual void schedule()=0; + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + virtual bool addTransaction(TMLTransaction* iTransToBeAdded)=0; + ///Returns a pointer to the transaction determined by the scheduling algorithm + /** + \return Pointer to transaction + */ + //virtual TMLTransaction* getNextTransaction()=0; + virtual TMLTransaction* getNextTransaction(){ + //std::cout << "Raw version of getNextTransaction " << _nextTransaction << "\n"; + return _nextTransaction; + } + ///Writes a HTML representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + virtual void schedule2HTML(std::ofstream& myfile) const =0; + ///Writes a plain text representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + virtual void schedule2TXT(std::ofstream& myfile) const =0; + virtual std::string toString() const =0; + virtual std::istream& readObject(std::istream &is){ + READ_STREAM(is,_endSchedule); + //_simulatedTime=max(_simulatedTime,_endSchedule); ???????????? +#ifdef DEBUG_SERIALIZE + std::cout << "Read: Schedulable Device " << _name << ": " << _endSchedule << std::endl; +#endif + return is; + } + virtual std::ostream& writeObject(std::ostream &os){ + WRITE_STREAM(os,_endSchedule); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: Schedulable Device " << _name << ": " << _endSchedule << std::endl; +#endif + return os; + } + virtual void reset(){ + _endSchedule=0; + _simulatedTime=0; + } + ///Returns the number of simulated clock cycles + /** + \return Number of simulated clock cycles + */ + static TMLTime getSimulatedTime() {return _simulatedTime;} + ///Sets the number of simulated clock cycles + /** + \param iSimulatedTime Number of simulated clock cycles + */ + static void setSimulatedTime(TMLTime iSimulatedTime) { + //if (iSimulatedTime<_simulatedTime) std::cout << "FAILURE SIMULATION TIME!!!!!!!!!!\n"; + _simulatedTime=iSimulatedTime; + } + ///Returns the unique ID of the device + /** + \return Unique ID + */ + ID getID() const {return _ID;} + ///Destructor + virtual ~SchedulableDevice(){ + if (_scheduler!=0 && _deleteScheduler) delete _scheduler; + } + ///Returns the end time of the last scheduled transaction of the device + /** + \return End time of the last scheduled transaction + */ + TMLTime getEndSchedule(){return _endSchedule;} + ///Sets the scheduler object + /** + \param iScheduler Pointer to the scheduler object + \param iDelScheduler Determines whether the scheduler is destroyed upon destruction of the device + */ + void setScheduler(WorkloadSource* iScheduler, bool iDelScheduler=true){ _scheduler=iScheduler; _deleteScheduler=iDelScheduler;} + ///Returns a pointer to the scheduler object + /** + \return Pointer to the scheduler object + */ + WorkloadSource* getScheduler(){ return _scheduler;} + ///Returns the scheduled transaction one after another + /** + \param iInit If init is true, the methods starts from the first transaction + \return Pointer to the next transaction + */ + TMLTransaction* getTransactions1By1(bool iInit){ + if (iInit) _posTrasactListGraph=_transactList.begin(); + if (_posTrasactListGraph == _transactList.end()) return 0; + TMLTransaction* aTrans = *_posTrasactListGraph; + _posTrasactListGraph++; + return aTrans; + } + + void addRawTransaction(TMLTransaction* iTrans){ + _transactList.push_back(iTrans); + } + + TMLTime getBusyCycles(){ + return _busyCycles; + } + + static TMLTime getOverallTransNo(){ + return _overallTransNo; + } + + static TMLTime getOverallTransSize(){ + return _overallTransSize; + } + +protected: + ///Unique ID of the device + ID _ID; + ///Name of the device + std::string _name; + ///Class variable holding the simulation time + static TMLTime _simulatedTime; + ///End time of the last scheduled transaction + TMLTime _endSchedule; + ///Scheduler + WorkloadSource* _scheduler; + ///List containing all already scheduled transactions + TransactionList _transactList; + ///Pointer to the next transaction to be executed + TMLTransaction* _nextTransaction; + ///State variable for consecutive Transaction output + TransactionList::iterator _posTrasactListGraph; + ///Flag indicating whether the scheduler has to be deleted when the device is deleted + bool _deleteScheduler; + ///Busy cycles since simulation start + TMLTime _busyCycles; + unsigned int _static_consumPerCycle; + unsigned int _dynamic_consumPerCycle; + static TMLTime _overallTransNo; + static TMLTime _overallTransSize; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9274461cd843c187718a17b4ce87d8a6e84a8cf8 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.cpp @@ -0,0 +1,521 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <SingleCoreCPU.h> +#include <TMLTask.h> +#include <TMLCommand.h> +#include <TMLTransaction.h> +#include <Bus.h> +#include <Slave.h> +#include <TMLChannel.h> +//#include <TransactionListener.h> + +SingleCoreCPU::SingleCoreCPU(ID iID, std::string iName, WorkloadSource* iScheduler, TMLTime iTimePerCycle, unsigned int iCyclesPerExeci, unsigned int iCyclesPerExecc, unsigned int iPipelineSize, unsigned int iTaskSwitchingCycles, unsigned int iBranchingMissrate, unsigned int iChangeIdleModeCycles, unsigned int iCyclesBeforeIdle, unsigned int ibyteDataSize): CPU(iID, iName, iScheduler), /*_lastTransaction(0),*/ _masterNextTransaction(0), _timePerCycle(iTimePerCycle) +#ifdef PENALTIES_ENABLED +, _pipelineSize(iPipelineSize), _taskSwitchingCycles(iTaskSwitchingCycles),_brachingMissrate(iBranchingMissrate) +, _changeIdleModeCycles(iChangeIdleModeCycles), _cyclesBeforeIdle(iCyclesBeforeIdle) +#endif +, _cyclesPerExeci(iCyclesPerExeci) /*, _busyCycles(0)*/ +#ifdef PENALTIES_ENABLED +, _timePerExeci(_cyclesPerExeci * _timePerCycle * (_pipelineSize * _brachingMissrate + 100 - _brachingMissrate) /100.0) +,_taskSwitchingTime(_taskSwitchingCycles*_timePerCycle) +, _timeBeforeIdle(_cyclesBeforeIdle*_timePerCycle) +, _changeIdleModeTime(_changeIdleModeCycles*_timePerCycle) +#else +, _timePerExeci(_cyclesPerExeci*_timePerCycle) +#endif +//, _pipelineSizeTimesExeci(_pipelineSize * _timePerExeci) +//,_missrateTimesPipelinesize(_brachingMissrate*_pipelineSize) +{ + //std::cout << "Time per EXECIiiiiiiiiiiiiiiiiiiiiii: " << _timePerExeci << "\n"; + //_transactList.reserve(BLOCK_SIZE); +} + +SingleCoreCPU::~SingleCoreCPU(){ + std::cout << _transactList.size() << " elements in List of " << _name << ", busy cycles: " << _busyCycles << std::endl; + std::cout << " consumption value " << ((_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle)<< std::endl; + + //delete _scheduler; +} + +TMLTransaction* SingleCoreCPU::getNextTransaction(){ +#ifdef BUS_ENABLED + if (_masterNextTransaction==0 || _nextTransaction==0){ + return _nextTransaction; + }else{ +#ifdef DEBUG_CPU + std::cout << "CPU:getNT: " << _name << " has bus transaction on master " << _masterNextTransaction->toString() << std::endl; +#endif + //std::cout << "CRASH Trans:" << _nextTransaction->toString() << std::endl << "Channel: " << _nextTransaction->getChannel() << "\n"; + BusMaster* aTempMaster = getMasterForBus(_nextTransaction->getChannel()->getFirstMaster(_nextTransaction)); + //std::cout << "1 aTempMaster: " << aTempMaster << std::endl; + bool aResult = aTempMaster->accessGranted(); + //std::cout << "2" << std::endl; + while (aResult && aTempMaster!=_masterNextTransaction){ + //std::cout << "3" << std::endl; + aTempMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + //std::cout << "4" << std::endl; + aResult = aTempMaster->accessGranted(); + //std::cout << "5" << std::endl; + } + return (aResult)?_nextTransaction:0; + } +#else + return _nextTransaction; +#endif +} + +void SingleCoreCPU::calcStartTimeLength(TMLTime iTimeSlice){ +#ifdef DEBUG_CPU + std::cout << "CPU:calcSTL: scheduling decision of CPU " << _name << ": " << _nextTransaction->toString() << std::endl; +#endif +#ifdef BUS_ENABLED + //std::cout << "get channel " << std::endl; + TMLChannel* aChannel=_nextTransaction->getCommand()->getChannel(0); + //std::cout << "after get channel " << std::endl; + if(aChannel==0){ + //std::cout << "no channel " << std::endl; + _masterNextTransaction=0; + }else{ + //std::cout << "get bus " << std::endl; + _masterNextTransaction= getMasterForBus(aChannel->getFirstMaster(_nextTransaction)); + //std::cout << "after get first bus " << std::endl; + if (_masterNextTransaction!=0){ + //std::cout << "before register transaction at bus " << std::endl; + _masterNextTransaction->registerTransaction(_nextTransaction); + //std::cout << "Transaction registered at bus " << std::endl; + } + } +#endif + //round to full cycles!!! + TMLTime aStartTime = max(_endSchedule,_nextTransaction->getRunnableTime()); + TMLTime aReminder = aStartTime % _timePerCycle; + if (aReminder!=0) aStartTime+=_timePerCycle - aReminder; + _nextTransaction->setStartTime(aStartTime); + +#ifdef BUS_ENABLED + if (_masterNextTransaction==0){ +#endif + //calculate length of transaction + //if (_nextTransaction->getOperationLength()!=-1){ + if (iTimeSlice!=0){ + _nextTransaction->setVirtualLength(max(min(_nextTransaction->getVirtualLength(), (TMLLength)(iTimeSlice /_timePerExeci)), (TMLTime)1)); + } + _nextTransaction->setLength(_nextTransaction->getVirtualLength()*_timePerExeci); + +#ifdef BUS_ENABLED + } +#endif +#ifdef PENALTIES_ENABLED + if (_lastTransaction==0 || _lastTransaction->getCommand()->getTask()!=_nextTransaction->getCommand()->getTask()){ + _nextTransaction->setTaskSwitchingPenalty(_taskSwitchingTime); + } + + if ((_nextTransaction->getStartTime()-_endSchedule) >=_timeBeforeIdle){ + _nextTransaction->setIdlePenalty(_changeIdleModeTime); + } +#endif +} + +void SingleCoreCPU::truncateAndAddNextTransAt(TMLTime iTime){ + //std::cout << "CPU:schedule BEGIN " << _name << "+++++++++++++++++++++++++++++++++\n"; + //return truncateNextTransAt(iTime); + //not a problem if scheduling does not take place at time when transaction is actually truncated, tested + //std::cout << "CPU:truncateAndAddNextTransAt " << _name << "time: +++++++++++++++++++++" << iTime << "\n"; + TMLTime aTimeSlice = _scheduler->schedule(iTime); + //_schedulingNeeded=false; 05/05/11 + TMLTransaction* aNewTransaction =_scheduler->getNextTransaction(iTime); + //std::cout << "before if\n"; + + //_scheduler->transWasScheduled(this); //NEW was in if before 05/05/11 + + if (aNewTransaction!=_nextTransaction){ + //std::cout << "in if\n"; + if (truncateNextTransAt(iTime)!=0) addTransaction(0); + //if (_nextTransaction!=0 && truncateNextTransAt(iTime)!=0) addTransaction(); //NEW!!!! + if (_nextTransaction!=0 && _masterNextTransaction!=0) _masterNextTransaction->registerTransaction(0); + _nextTransaction = aNewTransaction; + if (_nextTransaction!=0) calcStartTimeLength(aTimeSlice); + } + //std::cout << "CPU:schedule END " << _name << "+++++++++++++++++++++++++++++++++\n"; +} + +TMLTime SingleCoreCPU::truncateNextTransAt(TMLTime iTime){ + if (_masterNextTransaction==0){ +#ifdef PENALTIES_ENABLED + if (iTime < _nextTransaction->getStartTime()) return 0; + TMLTime aNewDuration = iTime - _nextTransaction->getStartTime(); + TMLTime aStaticPenalty = _nextTransaction->getIdlePenalty() + _nextTransaction->getTaskSwitchingPenalty(); + if (aNewDuration<=aStaticPenalty){ + _nextTransaction->setLength(_timePerExeci); + _nextTransaction->setVirtualLength(1); +#ifdef DEBUG_CPU + std::cout << "CPU:truncateNTA: transaction truncated\n"; +#endif + }else{ + aNewDuration-=aStaticPenalty; + _nextTransaction->setVirtualLength(max((TMLTime)(aNewDuration /_timePerExeci),(TMLTime)1)); + _nextTransaction->setLength(_nextTransaction->getVirtualLength() *_timePerExeci); + } +#else + if (iTime <= _nextTransaction->getStartTime()) return 0; //before: <= + TMLTime aNewDuration = iTime - _nextTransaction->getStartTime(); + _nextTransaction->setVirtualLength(max((TMLTime)(aNewDuration /_timePerExeci), (TMLTime)1)); + _nextTransaction->setLength(_nextTransaction->getVirtualLength() *_timePerExeci); +#endif +#ifdef DEBUG_CPU + std::cout << "aNewDuration: " << aNewDuration << std::endl; + std::cout << "CPU:truncateNTA: ### cut transaction at " << _nextTransaction->getVirtualLength() << std::endl; +#endif + } + return _nextTransaction->getOverallLength(); +} + +bool SingleCoreCPU::addTransaction(TMLTransaction* iTransToBeAdded){ + bool aFinish; + //TMLTransaction* aTransCopy=0; + if (_masterNextTransaction==0){ + aFinish=true; +#ifdef DEBUG_CPU + std::cout << _name << "CPU:addT: non bus transaction added" << std::endl; +#endif + }else{ +#ifdef DEBUG_CPU + std::cout << _name << "CPU:addT: handling bus transaction" << std::endl; +#endif + //Slave* aLastSlave=_nextTransaction->getChannel()->getNextSlave(_nextTransaction); + BusMaster* aFollowingMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + if (aFollowingMaster==0){ + //std::cout << "1\n"; + aFinish=true; + //aTransCopy = new TMLTransaction(*_nextTransaction); + //_nextTransaction = aTransCopy; + BusMaster* aTempMaster = getMasterForBus(_nextTransaction->getChannel()->getFirstMaster(_nextTransaction)); + //std::cout << "2\n"; + Slave* aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + //std::cout << "3\n"; + aTempMaster->addBusContention(_nextTransaction->getStartTime()-max(_endSchedule,_nextTransaction->getRunnableTime())); + while (aTempMaster!=0){ + //std::cout << "3a\n"; + aTempMaster->addTransaction(_nextTransaction); + //std::cout << "3b\n"; + //if (aTempSlave!=0) aTempSlave->addTransaction(_nextTransaction); + if (aTempSlave!=0) aTempSlave->addTransaction(_nextTransaction); //NEW + //std::cout << "4\n"; + aTempMaster =_nextTransaction->getChannel()->getNextMaster(_nextTransaction); + //std::cout << "5\n"; + aTempSlave= _nextTransaction->getChannel()->getNextSlave(_nextTransaction); + } + //std::cout << "6\n"; + }else{ + //std::cout << _name << " bus transaction next round" << std::endl; + _masterNextTransaction=aFollowingMaster; + //std::cout << "7\n"; + _masterNextTransaction->registerTransaction(_nextTransaction); + aFinish=false; + } + //std::cout << "8\n"; + } + if (aFinish){ +#ifdef DEBUG_CPU + std::cout << "CPU:addt: " << _name << " finalizing transaction " << _nextTransaction->toString() << std::endl; +#endif + //_nextTransaction->getCommand()->execute(); //NEW!!!! + _endSchedule=_nextTransaction->getEndTime(); + //std::cout << "set end schedule CPU: " << _endSchedule << "\n"; + _simulatedTime=max(_simulatedTime,_endSchedule); + _overallTransNo++; //NEW!!!!!!!! + _overallTransSize+=_nextTransaction->getOperationLength(); //NEW!!!!!!!! + //std::cout << "lets crash execute\n"; + _nextTransaction->getCommand()->execute(); //NEW!!!! + //std::cout << "not crashed\n"; +#ifdef TRANSLIST_ENABLED + _transactList.push_back(_nextTransaction); +#endif + _lastTransaction=_nextTransaction; + _busyCycles+=_nextTransaction->getOverallLength(); +#ifdef LISTENERS_ENABLED + NOTIFY_TRANS_EXECUTED(_nextTransaction); +#endif + _nextTransaction=0; + //std::cout << "this is not the reason\n"; + return true; + }else return false; +} + +void SingleCoreCPU::schedule(){ + //std::cout <<"Hello\n"; + //std::cout << "CPU:schedule BEGIN " << _name << "+++++++++++++++++++++++++++++++++\n"; + TMLTime aTimeSlice = _scheduler->schedule(_endSchedule); + //_schedulingNeeded=false; 05/05/11 + //std::cout << "1\n"; + TMLTransaction* aOldTransaction = _nextTransaction; + _nextTransaction=_scheduler->getNextTransaction(_endSchedule); + //std::cout << "2\n"; + + //_scheduler->transWasScheduled(this); //NEW 05/05/11 + + //if (aOldTransaction!=0){ + if (aOldTransaction!=0 && aOldTransaction!=_nextTransaction){ //NEW + //std::cout << "3\n"; + //aOldTransaction->getCommand()->getTask()->resetScheduledFlag(); TO BE OMITTED???????????????????????????????? + //std::cout << "4\n"; + //if (aOldTransaction!=_nextTransaction && _masterNextTransaction!=0) _masterNextTransaction->registerTransaction(0); + if (_masterNextTransaction!=0) _masterNextTransaction->registerTransaction(0); + } + //std::cout << "5\n"; + if (_nextTransaction!=0 && aOldTransaction != _nextTransaction) calcStartTimeLength(aTimeSlice); + //std::cout << "CPU:schedule END " << _name << "+++++++++++++++++++++++++++++++++\n"; +} + +//std::string SingleCoreCPU::toString() const{ +// return _name; +//} + +std::string SingleCoreCPU::toShortString() const{ + std::ostringstream outp; + outp << "cpu" << _ID; + return outp.str(); +} + +void SingleCoreCPU::schedule2HTML(std::ofstream& myfile) const{ + TMLTime aCurrTime=0; + TMLTransaction* aCurrTrans; + unsigned int aBlanks,aLength,aColor; + std::string aCommentString; + //if (_transactList.empty()) return; + myfile << "<h2><span>Scheduling for device: "<< _name <<"</span></h2>\n<table>\n<tr>"; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + aCurrTrans=*i; + //if (aCurrTrans->getVirtualLength()==0) continue; + aBlanks=aCurrTrans->getStartTime()-aCurrTime; + if (aBlanks>0){ + if (aBlanks==1) + myfile << "<td title=\"idle time\" class=\"not\"></td>\n"; + else + myfile << "<td colspan=\""<< aBlanks <<"\" title=\"idle time\" class=\"not\"></td>\n"; + } + aLength=aCurrTrans->getPenalties(); + if (aLength!=0){ + if (aLength==1){ + //myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t15\"></td>\n"; + //myfile << "<td title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n"; + myfile << "<td title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << "\" class=\"t15\"></td>\n"; + }else{ + //myfile << "<td colspan=\"" << aLength << "\" title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << " bran:" << aCurrTrans->getBranchingPenalty() << "\" class=\"t15\"></td>\n"; + myfile << "<td colspan=\"" << aLength << "\" title=\" idle:" << aCurrTrans->getIdlePenalty() << " switch:" << aCurrTrans->getTaskSwitchingPenalty() << "\" class=\"t15\"></td>\n"; + } + } + aLength=aCurrTrans->getOperationLength(); + aColor=aCurrTrans->getCommand()->getTask()->getInstanceNo() & 15; + if (aLength==1) + myfile << "<td title=\""<< aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + else + myfile << "<td colspan=\"" << aLength << "\" title=\"" << aCurrTrans->toShortString() << "\" class=\"t"<< aColor <<"\"></td>\n"; + + + aCurrTime=aCurrTrans->getEndTime(); + //std::cout << "end time: " << aCurrTrans->getEndTime() << std::endl; + } + //std::cout << "acurrTime: " << aCurrTime << std::endl; + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength++) myfile << "<th></th>"; + myfile << "</tr>\n<tr>"; + for(aLength=0;aLength<aCurrTime;aLength+=5) myfile << "<td colspan=\"5\" class=\"sc\">" << aLength << "</td>"; + myfile << "</tr>\n</table>\n<table>\n<tr>"; + for(TaskList::const_iterator j=_taskList.begin(); j != _taskList.end(); ++j){ + aColor=(*j)->getInstanceNo() & 15; + myfile << "<td class=\"t"<< aColor <<"\"></td><td>"<< (*j)->toString() << "</td><td class=\"space\"></td>\n"; + } + myfile << "</tr>"; +#ifdef ADD_COMMENTS + bool aMoreComments=true, aInit=true; + Comment* aComment; + while(aMoreComments){ + aMoreComments=false; + myfile << "<tr>"; + for(TaskList::const_iterator j=_taskList.begin(); j != _taskList.end(); ++j){ + aCommentString = (*j)->getNextComment(aInit, aComment); + if (aComment==0){ + myfile << "<td></td><td></td><td class=\"space\"></td>"; + }else{ + replaceAll(aCommentString,"<","<"); + replaceAll(aCommentString,">",">"); + aMoreComments=true; + myfile << "<td>" << aComment->_time << "</td><td><pre>" << aCommentString << "</pre></td><td class=\"space\"></td>"; + } + } + aInit=false; + myfile << "</tr>\n"; + } +#endif + myfile << "</table>\n"; +} + +void SingleCoreCPU::schedule2TXT(std::ofstream& myfile) const{ + myfile << "========= Scheduling for device: "<< _name << " =========\n" ; + for(TransactionList::const_iterator i=_transactList.begin(); i != _transactList.end(); ++i){ + myfile << (*i)->toShortString() << std::endl; + } +} + +//TMLTime SingleCoreCPU::getNextSignalChange(bool iInit, std::string& oSigChange, bool& oNoMoreTrans){ +void SingleCoreCPU::getNextSignalChange(bool iInit, SignalChangeData* oSigData){ + //new (oSigData) SignalChangeData(RUNNING, aCurrTrans->getStartTimeOperation(), this); + //std::ostringstream outp; + //oNoMoreTrans=false; + if (iInit){ + _posTrasactListVCD=_transactList.begin(); + _previousTransEndTime=0; + _vcdOutputState=END_IDLE_CPU; + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTime()!=0){ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_CPU) << "cpu" << _ID; + //oSigChange=outp.str(); + new (oSigData) SignalChangeData(END_IDLE_CPU, 0, this); + //return 0 + return; + } + } + if (_posTrasactListVCD == _transactList.end()){ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_CPU) << "cpu" << _ID; + //oSigChange=outp.str(); + //oNoMoreTrans=true; + //return _previousTransEndTime; + new (oSigData) SignalChangeData(END_IDLE_CPU, _previousTransEndTime, this); + }else{ + TMLTransaction* aCurrTrans=*_posTrasactListVCD; + switch (_vcdOutputState){ + case END_TASK_CPU: + do{ + _previousTransEndTime=(*_posTrasactListVCD)->getEndTime(); + _posTrasactListVCD++; + }while (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTimeOperation()==_previousTransEndTime); + if (_posTrasactListVCD != _transactList.end() && (*_posTrasactListVCD)->getStartTime()==_previousTransEndTime){ + //outp << VCD_PREFIX << vcdValConvert(END_PENALTY_CPU) << "cpu" << _ID; + _vcdOutputState=END_PENALTY_CPU; + new (oSigData) SignalChangeData(END_PENALTY_CPU, _previousTransEndTime, this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_IDLE_CPU) << "cpu" << _ID; + _vcdOutputState=END_IDLE_CPU; + //if (_posTrasactListVCD == _transactList.end()) oNoMoreTrans=true; + new (oSigData) SignalChangeData(END_IDLE_CPU, _previousTransEndTime, this); + } + //oSigChange=outp.str(); + //return _previousTransEndTime; + break; + case END_PENALTY_CPU: + //outp << VCD_PREFIX << vcdValConvert(END_TASK_CPU) << "cpu" << _ID; + //oSigChange=outp.str(); + _vcdOutputState=END_TASK_CPU; + //return aCurrTrans->getStartTimeOperation(); + new (oSigData) SignalChangeData(END_TASK_CPU, aCurrTrans->getStartTimeOperation(), this); + break; + case END_IDLE_CPU: + if (aCurrTrans->getPenalties()==0){ + //outp << VCD_PREFIX << vcdValConvert(END_TASK_CPU) << "cpu" << _ID; + _vcdOutputState=END_TASK_CPU; + new (oSigData) SignalChangeData(END_TASK_CPU, aCurrTrans->getStartTime(), this); + }else{ + //outp << VCD_PREFIX << vcdValConvert(END_PENALTY_CPU) << "cpu" << _ID; + _vcdOutputState=END_PENALTY_CPU; + new (oSigData) SignalChangeData(END_PENALTY_CPU, aCurrTrans->getStartTime(), this); + } + //oSigChange=outp.str(); + //return aCurrTrans->getStartTime(); + break; + } + } + //return 0; +} + +void SingleCoreCPU::reset(){ + CPU::reset(); + _scheduler->reset(); + _transactList.clear(); + _nextTransaction=0; + _lastTransaction=0; + _masterNextTransaction=0; + _busyCycles=0; +} + +void SingleCoreCPU::streamBenchmarks(std::ostream& s) const{ + s << TAG_CPUo << " id=\"" << _ID << "\" name=\"" << _name << "\">" << std::endl; + if (_simulatedTime!=0) s << TAG_UTILo << (static_cast<float>(_busyCycles)/static_cast<float>(_simulatedTime)) << TAG_UTILc; + s << TAG_ENERGYo << ( (_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle) << TAG_ENERGYc; + std::cout<< "power consumption "<< ((_simulatedTime/_timePerCycle)*_static_consumPerCycle) + ((_busyCycles/_timePerCycle)*_dynamic_consumPerCycle)<< std::endl; + for(BusMasterList::const_iterator i=_busMasterList.begin(); i != _busMasterList.end(); ++i) (*i)->streamBenchmarks(s); + + s << TAG_CPUc; +} + +BusMaster* SingleCoreCPU::getMasterForBus(BusMaster* iDummy){ + if (iDummy!=0){ + SchedulableCommDevice* aBus = iDummy->getBus(); + for(BusMasterList::iterator i=_busMasterList.begin(); i != _busMasterList.end(); ++i){ + if ((*i)->getBus()==aBus) return *i; + } + std::cout << "cry!!!!!!!!!!!!! no bus master found\n"; + exit(1); + } + return 0; +} + +std::istream& SingleCoreCPU::readObject(std::istream &is){ + CPU::readObject(is); + _scheduler->readObject(is); +#ifdef SAVE_BENCHMARK_VARS + READ_STREAM(is,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: CPU " << _name << " busy cycles: " << _busyCycles << std::endl; +#endif +#endif + return is; +} +std::ostream& SingleCoreCPU::writeObject(std::ostream &os){ + CPU::writeObject(os); + _scheduler->writeObject(os); +#ifdef SAVE_BENCHMARK_VARS + WRITE_STREAM(os,_busyCycles); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: CPU " << _name << " busy cycles: " << _busyCycles << std::endl; +#endif +#endif + return os; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.h new file mode 100644 index 0000000000000000000000000000000000000000..ee6c40f3039d861919d4970231e6280515565903 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/SingleCoreCPU.h @@ -0,0 +1,167 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SingleCoreCPUH +#define SingleCoreCPUH + +#include <definitions.h> +#include <SchedulableDevice.h> +#include <SchedulableCommDevice.h> +#include <TraceableDevice.h> +#include <BusMaster.h> +#include <CPU.h> + +class TMLTask; +class TMLTransaction; +class Bus; + +/*enum vcdCPUVisState + { + END_IDLE_CPU, + END_PENALTY_CPU, + END_TASK_CPU +};*/ + +///Simulates the bahavior of a CPU and an operating system +class SingleCoreCPU: public CPU{ +public: + ///Constructor + /** + \param iID ID of the CPU + \param iName Name of the CPU + \param iScheduler Pointer to the scheduler object + \param iTimePerCycle 1/Processor frequency + \param iCyclesPerExeci Cycles needed to execute one EXECI unit + \param iCyclesPerExecc Cycles needed to execute one EXECC unit + \param iPipelineSize Pipeline size + \param iTaskSwitchingCycles Task switching penalty in cycles + \param iBranchingMissrate Branching prediction miss rate in % + \param iChangeIdleModeCycles Cycles needed to switch into indle mode + \param iCyclesBeforeIdle Idle cycles which elapse before entering idle mode + \param ibyteDataSize Machine word length + */ + SingleCoreCPU(ID iID, std::string iName, WorkloadSource* iScheduler, TMLTime iTimePerCycle, unsigned int iCyclesPerExeci, unsigned int iCyclesPerExecc, unsigned int iPipelineSize, unsigned int iTaskSwitchingCycles, unsigned int iBranchingMissrate, unsigned int iChangeIdleModeCycles, unsigned int iCyclesBeforeIdle, unsigned int ibyteDataSize); + ///Destructor + virtual ~SingleCoreCPU(); + ///Determines the next CPU transaction to be executed + virtual void schedule(); + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + virtual bool addTransaction(TMLTransaction* iTransToBeAdded); + ///Returns a pointer to the transaction determined by the scheduling algorithm + /** + \return Pointer to transaction + */ + TMLTransaction* getNextTransaction(); + void truncateAndAddNextTransAt(TMLTime iTime); + ///Returns a string representation of the CPU + /** + \return Detailed string representation + */ + inline std::string toString() const {return _name;} + ///Returns a short string representation of the transaction + /** + \return Short string representation + */ + std::string toShortString() const; + ///Writes a HTML representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2HTML(std::ofstream& myfile) const; + void getNextSignalChange(bool iInit, SignalChangeData* oSigData); + ///Writes a plain text representation of the schedule to an output file + /** + \param myfile Reference to the ofstream object representing the output file + */ + void schedule2TXT(std::ofstream& myfile) const; + virtual void streamBenchmarks(std::ostream& s) const; + virtual void reset(); + inline void streamStateXML(std::ostream& s) const {streamBenchmarks(s);} + std::istream& readObject(std::istream &is); + std::ostream& writeObject(std::ostream &os); +protected: + ///Truncates the next transaction at time iTime + /** + \param iTime Indicates at what time the transaction should be truncated + */ + TMLTime truncateNextTransAt(TMLTime iTime); + ///Calculates the start time and the length of the next transaction + /** + \param iTimeSlice CPU Time slice granted by the scheduler + */ + void calcStartTimeLength(TMLTime iTimeSlice); + ///Determines the correct bus master of this CPU connected to the same bus as bus master iDummy + /** + \param iDummy Dummy Bus Master + */ + BusMaster* getMasterForBus(BusMaster* iDummy); + ///Pointer to the bus which will be accessed by the next transaction + BusMaster* _masterNextTransaction; + ///1/Processor frequency + TMLTime _timePerCycle; +#ifdef PENALTIES_ENABLED + ///Pipeline size + unsigned int _pipelineSize; + ///Task switching penalty in cycles + unsigned int _taskSwitchingCycles; + ///Branching prediction miss rate + unsigned int _brachingMissrate; + ///Cycles needed to switch to idle mode + unsigned int _changeIdleModeCycles; + ///Idle cycles which elapse before entering idle mode + unsigned int _cyclesBeforeIdle; +#endif + ///Cycles needed to execute one execi unit + unsigned int _cyclesPerExeci; + ///Time needed to execute one execi unit + float _timePerExeci; +#ifdef PENALTIES_ENABLED + ///Task switching penalty in time units + TMLTime _taskSwitchingTime; + ///Idle time which elapses before entering idle mode + TMLTime _timeBeforeIdle; + ///Time needed to switch into idle mode + TMLTime _changeIdleModeTime; +#endif + ///State variable for the VCD output + vcdCPUVisState _vcdOutputState; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Slave.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Slave.h new file mode 100644 index 0000000000000000000000000000000000000000..46d08bacaa904e070653997ce7ba70a65bdf41f8 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/Slave.h @@ -0,0 +1,102 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SlaveH +#define SlaveH + +#include <definitions.h> +#include <ListenerSubject.h> +//#include <TransactionListener.h> +#include <GeneralListener.h> + +class Master; +class TMLTransaction; + +///Base class for Bus slaves +class Slave: public ListenerSubject <GeneralListener> { +//class Slave: public ListenerSubject <TransactionListener> { +public: + ///Constructor + Slave(ID iID, std::string iName):_name(iName), _ID(iID) {} + ///Destructor + virtual ~Slave(){} + ///Calculates the time it takes to process the transaction within the slave node + /** + \param iTrans Pointer to the transaction to process + */ + virtual void CalcTransactionLength(TMLTransaction* iTrans) const =0; + /////Returns a pointer to the connected master device if any + ////** + //\return Pointer to the master device + ////*/ + //virtual Master* getConnectedMaster()=0; + std::string toString() {return _name;} + ///Adds the transaction determined by the scheduling algorithm to the internal list of scheduled transactions + virtual void addTransaction(TMLTransaction* iTrans){ +/* virtual void addTransaction(TMLTransaction* iTrans) + { + if (dynamic_cast <TLMWriteCommand*> (iTrans->getCommand())==0) + _nWrite++; + else + _nRead++; + } + */ + //FOR_EACH_TRANSLISTENER (static_cast<TransactionListener*>(*i))->transExecuted(iTrans); +#ifdef LISTENERS_ENABLED + NOTIFY_TRANS_EXECUTED(iTrans); +#endif + + + //std::cout << "******************Priiiiiiiiiiiiiint\n"; + } + + + ///Returns the unique ID of the Slave + /** + \return Unique ID + */ + ID getID() const {return _ID;} +protected: + ///Name of the slave + std::string _name; + ID _ID; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/TraceableDevice.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/TraceableDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..d43f039597562f003654f7bcd7daf16199e83a67 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/TraceableDevice.h @@ -0,0 +1,86 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef TraceableDeviceH +#define TraceableDeviceH + +class TMLTransaction; + +///Base class for devices which perform a scheduling +class TraceableDevice{ +public: + TraceableDevice(): _previousTransEndTime(0) {} + ///Returns a string representation of the task + /** + \return Detailed string representation + */ + virtual std::string toString() const =0; + ///Returns a short string representation of the device + /** + \return Short string representation + */ + virtual std::string toShortString() const =0; + ///Returns the next signal change (for vcd output) + /** + \param iInit Indicates if the list iterator has to be reset to the beginning of the list + \param oSigData Pointer to a SignalChangeData object characterizing the nature of the signal change + \return Point in time when the signal changes + */ + virtual void getNextSignalChange(bool iInit, SignalChangeData* oSigData)=0; + ///Writes benchmarking data to a given stream + /** + \param s Reference to an output stream + */ + virtual void streamBenchmarks(std::ostream& s) const =0; + ///Writes XML information about the component to a stream + /** + \param s Reference to an output stream + */ + virtual void streamStateXML(std::ostream& s) const=0; + ///Destructor + virtual ~TraceableDevice(){} +protected: + ///Actual position within transaction list (used for vcd output) + TransactionList::iterator _posTrasactListVCD; + ///EndTime of the transaction before _posTransactList (used for vcd output) + TMLTime _previousTransEndTime; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f52d76e65b8633caa974a7e4b3c48db65eac2c58 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.cpp @@ -0,0 +1,49 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <WorkloadSource.h> +#include <TMLTask.h> + +WorkloadSource::~WorkloadSource(){ + if (_srcArraySpecified){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) + if (dynamic_cast<TMLTask*>(*i)==0) delete (*i); + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.h new file mode 100644 index 0000000000000000000000000000000000000000..9857e43c85851472f3c40a0184648a0251b73d31 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/arch/WorkloadSource.h @@ -0,0 +1,125 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef WorkloadSourceH +#define WorkloadSourceH +#include <definitions.h> +#include <Serializable.h> + +class TMLTransaction; +class Master; +class TMLTask; +class SchedulableDevice; + +///Base class for components providing workload like tasks and schedulers +class WorkloadSource: public Serializable{ +public: + ///Constructor + /** + \param iPriority Priority of the workload source + */ + WorkloadSource(Priority iPriority): _priority(iPriority), _srcArraySpecified(false) {} + ///Constructor + /** + \param iPriority Priority of the scheduler + \param aSourceArray Array of pointers to workload ressources from which transactions may be received + \param iNbOfSources Length of the array + */ + WorkloadSource(Priority iPriority, WorkloadSource** aSourceArray, unsigned int iNbOfSources): _priority(iPriority), _srcArraySpecified(true){ + for (unsigned int i=0;i<iNbOfSources;i++){ + addWorkloadSource(aSourceArray[i]); + std::cout << "Workload source added " << aSourceArray[i]->toString() << "\n"; + } + delete[] aSourceArray; + } + ///Destruktor + virtual ~WorkloadSource(); + ///Returns the next transaction to be executed by the ressource + /** + \return Pointer to the transaction to be executed + */ + virtual TMLTransaction* getNextTransaction(TMLTime iEndSchedule) const=0; + ///Returns the priority of the workload source + /** + \return Priority of the workload source + */ + virtual inline Priority getPriority() const{return _priority;} + ///Add a source which provides transactions to the scheduler + /** + \param iSource Pointer to workload source + */ + inline void addWorkloadSource(WorkloadSource* iSource){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) + if (*i==iSource) return; + _workloadList.push_back(iSource); + } + ///Perform scheduling + /** + \param iEndSchedule Current time of the ressource + \return Time slice granted by the scheduler + */ + virtual TMLTime schedule(TMLTime iEndSchedule){return 0;} + virtual void reset(){for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->reset();} + virtual std::istream& readObject(std::istream &is){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->readObject(is); + return is; + } + virtual std::ostream& writeObject(std::ostream &os){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->writeObject(os); + return os; + } + virtual std::string toString() const =0; + ///Signals that the last scheduled transaction has been selected by the given device + /** + \param iDevice Pointer to the device + */ + /*virtual void transWasScheduled(SchedulableDevice* iDevice) {} + ///Signals that the last scheduled transaction is not selected by the device any more + virtual void resetScheduledFlag(){ + for(WorkloadList::iterator i=_workloadList.begin(); i != _workloadList.end(); ++i) (*i)->resetScheduledFlag(); + }*/ +protected: + ///List of sources which provide transactions to the scheduler + WorkloadList _workloadList; + ///Priority of the workload source + Priority _priority; + ///Indicates whether sources contained in workload list have to be deleted + bool _srcArraySpecified; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/definitions.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/definitions.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fe149d1f1c6a2d711dac57646b6265e40bb22978 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/definitions.cpp @@ -0,0 +1,136 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <definitions.h> +#include <TMLTransaction.h> +#include <TMLCommand.h> +#include <TMLTask.h> +#include <Bus.h> +#include <CPU.h> +#include <SchedulableDevice.h> +#include <ListenersSimCmd.h> +#include <BusMaster.h> +#include <SeqConstraint.h> +#include <LogConstraint.h> +#include <sys/types.h> +#include <unistd.h> +//#include <MemPool.h> +//#include <Parameter.h> + +TMLTime SchedulableDevice::_simulatedTime=0; +TMLTime SchedulableDevice::_overallTransNo=0; +TMLTime SchedulableDevice::_overallTransSize=0; +ID TMLTransaction::_ID=1; + +const unsigned int SeqConstraint::_transTableSeq[12]={0,20,0,0,16,16,10,32,32,32,11,32}; +const unsigned int LogConstraint::_transTableLog[20]={0, 20, 52, 0, 16, 16, 10, 32, 32, 32, 11, 32, 48, 10, 48, 64, 64, 11, 64, 64}; +//template<class T,int size> MemPool<SizedParameter<T,size> > SizedParameter<T, size>::memPool(BLOCK_SIZE_PARAM); + +int myrand(int n1, int n2){ + static bool firstTime = true; + if(firstTime){ + srand(time(NULL)); + firstTime = false; + } + n2++; + int r = (n1 + (int)(((float)(n2 - n1))*rand()/(RAND_MAX + 1.0))); + //std::cout << "random number: " << r << std::endl; + //return (n1 + (int)(((float)(n2 - n1))*rand()/(RAND_MAX + 1.0))); + return r; + //return n1 + rand()/(RAND_MAX/(n2-n1+1)); +} + +long getTimeDiff(struct timeval& begin, struct timeval& end){ + return end.tv_usec-begin.tv_usec+(end.tv_sec-begin.tv_sec)*1000000; +} + + +/*bool greaterRunnableTime::operator()(TMLTransaction const* p1, TMLTransaction const* p2){ + return p1->getRunnableTime() > p2->getRunnableTime(); +} + +bool greaterPrio::operator()(TMLTransaction const* p1, TMLTransaction const* p2){ + return p1->getCommand()->getTask()->getPriority() > p2->getCommand()->getTask()->getPriority(); +}*/ + +bool greaterStartTime::operator()(TMLTransaction const* p1, TMLTransaction const* p2){ + return p1->getStartTime() > p2->getStartTime(); +} + +void replaceAll(std::string& ioHTML, std::string iSearch, std::string iReplace){ + unsigned int aPos=0; + while (aPos< ioHTML.length() && (aPos= ioHTML.find(iSearch,aPos))!=std::string::npos){ + ioHTML.replace(aPos++,iSearch.length(),iReplace); + } +} + +//std::string vcdValConvert(unsigned int iVal){ +// if(iVal==1 || iVal==2) return "1"; else return "0"; +//} + +std::string vcdTimeConvert(TMLTime iVal){ + std::string iResult; + do{ + if (iVal & 1) iResult="1" + iResult; else iResult="0" + iResult; + iVal >>= 1; + }while(iVal); + return iResult; +} + +int getexename(char* buf, size_t size){ + char linkname[64]; /* /proc/<pid>/exe */ + pid_t pid; + int ret; + pid = getpid(); + if (snprintf(linkname, sizeof(linkname), "/proc/%i/exe", pid) < 0) return -1; + ret = readlink(linkname, buf, size); + if (ret == -1 || ret>=size) return -1; + buf[ret] = 0; + return ret; +} + +unsigned int getEnabledBranchNo(int iNo, int iMask){ + unsigned int retIndex=0; + while (iMask!=0 && iNo!=0){ + if ((iMask & 1)!=0) iNo--; + iMask >>= 1; retIndex++; + } + return retIndex-1; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/definitions.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/definitions.h new file mode 100644 index 0000000000000000000000000000000000000000..173608a1fc2b18aca1d55b5430eae1f50a9b255e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/definitions.h @@ -0,0 +1,484 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef definitionsH +#define definitionsH + + +#include <list> +#include <vector> +#include <string> +#include <string.h> +#include <iostream> +#include <sstream> +#include <fstream> +#include <map> +#include <set> +#include <deque> +#include <algorithm> +#include <stdarg.h> +#include <functional> +#include <queue> +#include <vector> +#include <sys/time.h> +#include <netdb.h> +#include <arpa/inet.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <netinet/in.h> +#include <pthread.h> +#include <dlfcn.h> +#include <stdlib.h> +#include <sys/times.h> +#include <sys/time.h> +#include <sys/resource.h> +#include <unistd.h> + +#define WRITE_STREAM(s,v) s.write((char*) &v,sizeof(v)); +//std::cout << sizeof(v) << " bytes written" << std::endl; +#define READ_STREAM(s,v) s.read((char*) &v,sizeof(v)); +//std::cout << sizeof(v) << " bytes read" << std::endl; + +using std::min; +using std::max; + +#undef DEBUG_KERNEL +#undef DEBUG_CPU +#undef DEBUG_BUS +#undef DEBUG_SERIALIZE + +//enables mapping of DIPLODOCUS channels onto buses +#define BUS_ENABLED +//cost of a send/wait command +#define WAIT_SEND_VLEN 1 +//activate tis flag to take penalties (energy mode, branch prediction, context switch) into account +#undef PENALTIES_ENABLED +//enables the state hash feature +#undef STATE_HASH_ENABLED +//enables listerns for interactive simulation, switch off for fast simulation in command line mode +#define LISTENERS_ENABLED +//enables listeners needed for coverage enhanced simulation +#define EXPLO_ENABLED +//ebrdds are not supported any more +#undef EBRDD_ENABLED +//enables the output of a reachability graph for coverage enhanced simulation +#define EXPLOGRAPH_ENABLED +//enable recording of transactions +#define TRANSLIST_ENABLED +//enable lossy channels +#define LOSS_ENABLED +//enables comments on actions/choices in HTML output +#undef ADD_COMMENTS +//enable this flag to restore benchmark variables correctly in coverage enhanced simulation +#define SAVE_BENCHMARK_VARS + +//Clock scale for VCD output +#define CLOCK_INC 20 +//size of memory chunk for transaction allocation +#define BLOCK_SIZE_TRANS 8000000 +//size of memory chunk for parameter allocation +#define BLOCK_SIZE_PARAM 5000 +//size of memory chunk for comment allocation +#define BLOCK_SIZE_COMMENT 100 +//size of memory chunks for parameter allocation +#define PARAMETER_BLOCK_SIZE 1000 +//Number of events to be loaded at once from a file if content of event channel is associated to a file +#define NO_EVENTS_TO_LOAD 10 + + +//port on which the server +#define PORT "3490" +#define BACKLOG 10 + +//Task VCD output +#define UNKNOWN 4 +#define TERMINATED 3 +#define RUNNING 2 +#define RUNNABLE 1 +#define SUSPENDED 0 + +#define INT_MSB (1 << (sizeof(unsigned int)*8-1)) + +//XML Tags +#define TAG_HEADER "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>" +#define TAG_STARTo "<siminfo>" +#define TAG_STARTc "</siminfo>" +#define TAG_ERRNOo "<error>" +#define TAG_ERRNOc "</error>" +#define TAG_MSGo "<msg>" +#define TAG_MSGc "</msg>" +#define TAG_TIMEo "<simtime>" +#define TAG_TIMEc "</simtime>" +#define TAG_SIMDURo "<simdur>" +#define TAG_SIMDURc "</simdur>" +#define TAG_CYCLESo "<simcycles>" +#define TAG_CYCLESc "</simcycles>" +#define TAG_TASKo "<task" +#define TAG_TASKc "</task>" +#define TAG_TSKSTATEo "<tskstate>" +#define TAG_TSKSTATEc "</tskstate>" +#define TAG_VARo "<var" +#define TAG_VARc "</var>" +#define TAG_STATUSo "<status>" +#define TAG_STATUSc "</status>" +#define TAG_REASONo "<brkreason>" +#define TAG_REASONc "</brkreason>" +#define TAG_GLOBALo "<global>" +#define TAG_GLOBALc "</global>" +#define TAG_CURRCMDo "<currcmd" +#define TAG_CURRCMDc "</currcmd>" +#define TAG_CMDo "<cmd" +#define TAG_CMDc "</cmd>" +#define TAG_EXECTIMESo "<exectimes>" +#define TAG_EXECTIMESc "</exectimes>" +#define TAG_STARTTIMEo "<starttime>" +#define TAG_STARTTIMEc "</starttime>" +#define TAG_FINISHTIMEo "<finishtime>" +#define TAG_FINISHTIMEc "</finishtime>" +#define TAG_STARTTIMETRANSo "<transstarttime>" +#define TAG_STARTTIMETRANSc "</transstarttime>" +#define TAG_FINISHTIMETRANSo "<transfinishtime>" +#define TAG_FINISHTIMETRANSc "</transfinishtime>" +#define TAG_BREAKCMDo "<breakcmd" +#define TAG_BREAKCMDc "</breakcmd>" +#define TAG_NEXTCMDo "<nextcmd>" +#define TAG_NEXTCMDc "</nextcmd>" +#define TAG_HASHo "<hashval>" +#define TAG_HASHc "</hashval>" +#define TAG_BRANCHo "<branch>" +#define TAG_BRANCHc "</branch>" +#define TAG_REPLYo "<replyto>" +#define TAG_REPLYc "</replyto>" +#define TAG_EXTIMEo "<extime>" +#define TAG_EXTIMEc "</extime>" +#define TAG_CONTDELo "<contdel" +#define TAG_CONTDELc "</contdel>" + +#define TAG_BUSo "<bus" +#define TAG_BUSc "</bus>" +#define TAG_CHANNELo "<channel" +#define TAG_CHANNELc "</channel>" +#define TAG_TOWRITEo "<towrite>" +#define TAG_TOWRITEc "</towrite>" +#define TAG_TOREADo "<toread>" +#define TAG_TOREADc "</toread>" +#define TAG_CONTENTo "<content>" +#define TAG_CONTENTc "</content>" +#define TAG_PARAMo "<param>" +#define TAG_PARAMc "</param>" +#define TAG_Pxo "<e" +#define TAG_Pxc "</e" + +#define TAG_UTILo "<util>" +#define TAG_UTILc "</util>" +#define TAG_CPUo "<cpu" +#define TAG_CPUc "</cpu>" +#define TAG_PROGRESSo "<progr>" +#define TAG_PROGRESSc "</progr>" +#define TAG_CURRTASKo "<currtask>" +#define TAG_CURRTASKc "</currtask>" +#define TAG_ENERGYo "<energy>" +#define TAG_ENERGYc "</energy>" + + +class TMLTask; +class TMLTransaction; +class TMLCommand; +class CPU; +class SchedulableCommDevice; +class SchedulableDevice; +class Parameter; +class TraceableDevice; +class Master; +class Serializable; +class TMLChannel; +class Slave; +class Comment; +class WorkloadSource; +class BusMaster; +class GeneralListener; +class EBRDD; +class EBRDDCommand; +class SignalConstraint; + +///Datatype used for time measurements +typedef unsigned long long TMLTime; +///Datatype used to indicate the virtual length of commands (execution units, data units) +typedef unsigned long long TMLLength; +///Priorities +typedef unsigned int Priority; +///IDs +typedef unsigned int ID; +///Datatype used by the CPU to store pointers to associated tasks +typedef std::list<TMLTask*> TaskList; +///Datatype used by CPU and bus to store already scheduled transactions +typedef std::vector<TMLTransaction*> TransactionList; +///Datatype holding pointer to CPUs, used by SimComponents and simulation kernel +typedef std::list<CPU*> CPUList; +///Datatype holding pointer to CPUs and Bridges, used by simulation kernel for scheduling +typedef std::list<SchedulableDevice*> SchedulingList; +///Datatype holding references to buses, used by SimComponents and simulation kernel +typedef std::list<SchedulableCommDevice*> BusList; +///Datatype holding references to CPUs, buses, Tasks and channels, used by serialization functions +typedef std::list<Serializable*> SerializableList; +///Datatype used in SimComponents to store slave objects +typedef std::list<Slave*> SlaveList; +///Datatype used in SimComponents to store channel objects +typedef std::list<TMLChannel*> ChannelList; +///Datatype used in SimComponents to store TEPE listeners +typedef std::list<GeneralListener*> TEPEListenerList; +///Datatype used in TEPEs to Point to a function to be notified upon a signal occurrence +typedef void (SignalConstraint::*NtfSigFuncPointer) (bool iSigState); +///Datatype used in TEPE SignalConstraints to store a list of right constraints to be notified upon a signal occurrence +typedef std::list<std::pair<SignalConstraint*, NtfSigFuncPointer> > SignalNotificationList; + +///Type of a TMLCommand +typedef enum {NONE=(1), EXE=(1<<1), RD=(1<<2), WR=(1<<3), SEL=(1<<4), SND=(1<<5), REQ=(1<<6), WAIT=(1<<7), NOTIF=(1<<8), ACT=(1<<9), CHO=(1<<10), RND=(1<<11), STP=(1<<12)} CommandType; +///TEPE Tristate Signal Type +typedef enum {UNDEF, FALSE, TRUE} Tristate; +///DIPLODOCUS event type +typedef enum {SIM_START=(1), SIM_END=(1<<1), TIME_ADV=(1<<2), TASK_START=(1<<3), TASK_END=(1<<4), CMD_RUNNABLE=(1<<5), CMD_START=(1<<6), CMD_END=(1<<7), TRANS_EXEC=(1<<8)} EventType; + +///Datatype used in Tasks to store comments concerning the task execution +typedef std::vector<Comment*> CommentList; +///Datatype used in Tasks in order to associate a command with an ID +typedef std::map<ID, TMLCommand*> CommandHashTab; + +///Datatype for event parameters +typedef int ParamType; +///Datatype used in EventChannels to store parameters of events +typedef std::deque<Parameter* > ParamQueue; +///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) +typedef unsigned int (TMLTask::*CondFuncPointer) (); +///Type of member function pointer used to indicate a function encapsulating an action (for TMLActionCommand) +typedef void (TMLTask::*ActionFuncPointer) (); +///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) +typedef TMLTime (TMLTask::*LengthFuncPointer) (); +///Type of pointer to indicate a function encapsulating a TEPE condition +typedef bool (*EqFuncPointer)(ParamType**); +///Type of pointer to indicate a function encapsulating a TEPE setting +typedef ParamType (*SettingFuncPointer)(ParamType**); +///Type of pointer to indicate a function returning the random rage of a command +typedef unsigned int (TMLTask::*RangeFuncPointer) (ParamType& oMin, ParamType& oMax); +///Type of member function pointer used to indicate a function encapsulating parameter manipulation (for TMLWaitCommand, TMLSendCommand) +typedef Parameter* (TMLTask::*ParamFuncPointer) (Parameter* ioParam); +///Breakpoint condition function pointer (points to condition function in shared library) +typedef bool (*BreakCondFunc)(TMLTask*); +///Datatype holding references to TraceableDevices (for VCD output) +typedef std::list<TraceableDevice*> TraceableDeviceList; +///Datatype used by the Simulator to keep track of all breakpoints +typedef std::set<TMLCommand*> BreakpointSet; +///Command queue used by server +typedef std::deque<std::string*> CommandQueue; +///Workload list used by Workload sources +typedef std::list<WorkloadSource*> WorkloadList; +///List of bus masters used by CPUs +typedef std::list<BusMaster*> BusMasterList; +///Type used for hash values of system states +typedef uint32_t HashValueType; +///Set used by Commands to store encountered state hash values +typedef std::map<HashValueType,ID> StateHashSet; + +#ifdef EBRDD_ENABLED +///Datatype used in SimComponents to store EBRDD objects +typedef std::list<EBRDD*> EBRDDList; +///Type of member function pointer used to indicate a function encapsulating a condition (for TMLChoiceCommand) +typedef int (EBRDD::*EBRDDFuncPointer) (); +///Datatype used in EBRDD Tasks in order to associate a command with an ID +typedef std::map<ID, EBRDDCommand*> CommandHashTabEBRDD; +#endif + +struct ltstr{ + bool operator()(const char* s1, const char* s2) const{ + return strcmp(s1, s2) < 0; + } +}; +///Datatype which associates a variable name with the coresponding pointer to that variable, used for look-up table of tasks +typedef std::map<const char*, ParamType*, ltstr> VariableLookUpTableName; +///Datatype which associates a variable ID with the coresponding pointer to that variable, used for look-up table of tasks +typedef std::map<ID, ParamType*> VariableLookUpTableID; + + +///Minimum of three values +/** +\param a Value 1 +\param b Value 2 +\param c Value 3 +\return Minimum +*/ +template<typename T> +inline const T& min(const T& a, const T& b, const T& c){ + const T& tmin=min(a,b); + return (tmin<c)?tmin:c; +} + +///Minimum of four values +/** +\param a Value 1 +\param b Value 2 +\param c Value 3 +\param d Value 4 +\return Minimum +*/ +template<typename T> +inline const T& min(const T& a, const T& b, const T& c, const T& d){ + const T& tmin=min(a,b,c); + return (tmin<d)?tmin:d; +} + +template<typename T> +inline T StringToNum(const std::string& iStr){ + T aResult(0); + std::istringstream myStream(iStr); + myStream>>aResult; + return aResult; +} + +///The function writes its arguments to an array which has been allocated dynamically. +/** +\param noArgs Number of arguments +\param arg1 An arbitrary number of arguments can follow here +\return Pointer to the array +*/ +template<typename T> +T* array(unsigned int noArgs, T arg1 ...){ + T arg=arg1; + T* newArray; + unsigned int i; + va_list args; // argument list + va_start(args, arg1); // initialize args + newArray=new T[noArgs]; + for (i=0;i<noArgs;i++){ + newArray[i]=arg; + arg=va_arg(args, T); + } + va_end(args); // clean up args + return newArray; +} + +//template<class T> Pool<Parameter<T> > Parameter<T>::memPool; + +///Datatype which encapsulates singnal changes, used for VCD output +class SignalChangeData{ +public: + ///Constructor + /** + \param iSigChange String representation of the signal change in VCD format + \param iTime Time when the change occurred + \param iDevice Pointer to the device the signal belongs to + */ + //SignalChangeData( std::string& iSigChange, TMLTime iTime, TraceableDevice* iDevice):_sigChange(iSigChange),_time(iTime),_device(iDevice){ + //} + SignalChangeData(unsigned int iSigChange, TMLTime iTime, TraceableDevice* iDevice):_sigChange(iSigChange),_time(iTime),_device(iDevice){ + //std::cout << _sigChange << " " << _time << " " << _device << " " << " constructor***\n"; + } + SignalChangeData():_sigChange(0),_time(0),_device(0){ + } + ///String representation of the signal change in VCD format + //std::string _sigChange; + unsigned int _sigChange; + ///Time when the change occurred + TMLTime _time; + ///Pointer to the device the signal belongs to + TraceableDevice* _device; +}; + +///Function object for the comparison of the runnable time of two transaction +/*struct greaterRunnableTime{ + bool operator()(TMLTransaction const* p1, TMLTransaction const* p2); +}; + +///Function object for the comparison of the priority of two transaction +struct greaterPrio{ + bool operator()(TMLTransaction const* p1, TMLTransaction const* p2); +};*/ + +///Function object for the comparison of the start time of two transaction +struct greaterStartTime{ + bool operator()(TMLTransaction const* p1, TMLTransaction const* p2); +}; + +namespace std{ + ///Specialization of std::greater for SignalChangeData pointers + template<> struct greater<SignalChangeData*>{ + inline bool operator()(SignalChangeData const* p1, SignalChangeData const* p2){ + return p1->_time > p2->_time; + } + }; +}; + +///Priority queue for SignalChangeData objects, keeps track of the temporal ordering of signal changes (for VCD output) +typedef std::priority_queue<SignalChangeData*, std::vector<SignalChangeData*>, std::greater<SignalChangeData*> > SignalChangeQueue; +////Priority queue for not yet processed transactions, runnableTime being less than the end of the last scheduled transaction of the device +//typedef std::priority_queue<TMLTransaction*, std::vector<TMLTransaction*>, greaterPrio > PastTransactionQueue; +////Priority queue for not yet processed transactions, runnableTime being greater than the end of the last scheduled transaction of the device +//typedef std::priority_queue<TMLTransaction*, std::vector<TMLTransaction*>, greaterRunnableTime > FutureTransactionQueue; +///Priority queue holding Transactions for the graph output +typedef std::priority_queue<TMLTransaction*, std::vector<TMLTransaction*>, greaterStartTime > GraphTransactionQueue; +//typedef std::map<SchedulableCommDevice*, FutureTransactionQueue*> BridgeTransactionListHash; + +///Calculates random numbers between n1 and n2 (both inclusive) +/** + \param n1 Lower bound + \param n2 Upper bound + \return Random number +*/ +int myrand(int n1, int n2); + +///Calculates the difference between to timeval structures +/** + \param begin Time 1 + \param end Time 2 + \return Time difference in usec (Time2 - Time1) +*/ +long getTimeDiff(struct timeval& begin, struct timeval& end); + +///Replaces all occurrences of iSearch in ioHTML by iReplace +/** + \param ioHTML String in which the replacements shall be made + \param iSearch String to search for + \param iReplace String which is filled in +*/ +void replaceAll(std::string& ioHTML, std::string iSearch, std::string iReplace); +inline std::string vcdValConvert(unsigned int iVal) {if(iVal==1 || iVal==2) return "1"; else return "0";} +std::string vcdTimeConvert(TMLTime iVal); +int getexename(char* buf, size_t size); +unsigned int getEnabledBranchNo(int iNo, int iMask); +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.cpp new file mode 100755 index 0000000000000000000000000000000000000000..6edc1f869629ae993e127dc096e017d4db6e83fe --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.cpp @@ -0,0 +1,146 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDD.h> +#include <EBRDDCommand.h> +#include <EBRDDStopCommand.h> + +EBRDD::EBRDD(unsigned int iID, std::string iName): _ID(iID), _name(iName), _currCommand(0), _firstCommand(0){ +} + +EBRDD::~EBRDD(){ +} + +EBRDDCommand* EBRDD::getCurrCommand() const{ + return _currCommand; +} + +void EBRDD::setCurrCommand(EBRDDCommand* iCurrCommand){ + //std::cout << _name << "currentcommand: " << iCurrCommand->toString() << std::endl; + _currCommand=iCurrCommand; +} + + +std::string EBRDD::toString() const{ + return _name; +} + +std::string EBRDD::toShortString() const{ + std::ostringstream outp; + outp << "ta" << _ID; + return outp.str(); +} + +unsigned int EBRDD::getID() const{ + return _ID; +} + +std::ostream& EBRDD::writeObject(std::ostream& s){ + unsigned int aCurrCmd; + if (_currCommand==0){ + aCurrCmd=0; + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EBRDD " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + }else{ + aCurrCmd=_currCommand->getID(); + WRITE_STREAM(s,aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EBRDD " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + _currCommand->writeObject(s); + } + return s; +} + +std::istream& EBRDD::readObject(std::istream& s){ + unsigned int aCurrCmd; + READ_STREAM(s, aCurrCmd); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EBRDD " << _name << " aCurrCmd: " << aCurrCmd << std::endl; +#endif + if (aCurrCmd==0){ + _currCommand=0; + }else{ + _currCommand=getCommandByID(aCurrCmd); + _currCommand->readObject(s); + } + return s; +} + +void EBRDD::reset(){ + //std::cout << "task reset" << std::endl; + if (_currCommand!=0) _currCommand->reset(); + _currCommand=_firstCommand; + //if (_currCommand!=0) _currCommand->reset(); +} + +/*ParamType* EBRDD::getVariableByName(std::string& iVarName ,bool& oIsId){ + if (iVarName[0]>='0' && iVarName[0]<='9'){ + oIsId=true; + return getVariableByID(StringToNum<unsigned int>(iVarName)); + } + oIsId=false; + return _varLookUpName[iVarName.c_str()]; +}*/ + +//ParamType* EBRDD::getVariableByID(unsigned int iVarID){ +// return _varLookUpID[iVarID]; +//} + +void EBRDD::addCommand(unsigned int iID, EBRDDCommand* iCmd){ + _commandHash[iID]=iCmd; +} + +EBRDDCommand* EBRDD::getCommandByID(unsigned int iID){ + return _commandHash[iID]; +} + +//VariableLookUpTableID::const_iterator EBRDD::getVariableIteratorID(bool iEnd) const{ +// return (iEnd)?_varLookUpID.end():_varLookUpID.begin(); +//} + +//VariableLookUpTableName::const_iterator EBRDD::getVariableIteratorName(bool iEnd) const{ +// return (iEnd)?_varLookUpName.end():_varLookUpName.begin(); +//} + +void EBRDD::finished(){ +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.h new file mode 100755 index 0000000000000000000000000000000000000000..d45434cddfedd92b1a8949790a29660d8566371c --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDD.h @@ -0,0 +1,145 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDH +#define EBRDDH + +#include <definitions.h> +#include <Serializable.h> + +class EBRDDCommand; + +///Base class for Event Based Requirement Description Diagrams +class EBRDD: public Serializable{ +public: + ///Constructor + /** + \param iID ID of the EBRDD + \param iName Name of the EBRDD + */ + EBRDD(unsigned int iID, std::string iName); + ///Destructor + virtual ~EBRDD(); + ///Returns a pointer to the current command of the EBRDD + /** + \return Pointer to the current command + */ + EBRDDCommand* getCurrCommand() const; + ///Sets the pointer to the current command of the EBRDD + /** + \param iCurrCommand Pointer to the current command + */ + void setCurrCommand(EBRDDCommand* iCurrCommand); + ///Returns a string representation of the EBRDD + /** + \return Detailed string representation + */ + virtual std::string toString() const; + ///Returns a short string representation of the EBRDD + /** + \return Short string representation + */ + std::string toShortString() const; + ///Returns the unique ID of the EBRDD + /** + \return Unique ID + */ + unsigned int getID() const; + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + /////Returns a pointer to the EBRDD variable specified by its name + ////** + //\param iVarName Name of the EBRDD variable + //\param oIsId Is set to true if an ID was passed to this function + //\return Pointer to the variable + //*/ + //ParamType* getVariableByName(std::string& iVarName ,bool& oIsId); + ///Searches for a Command based on its ID + /** + \param iID ID of the Command + \return Pointer to the Commmand + */ + EBRDDCommand* getCommandByID(unsigned int iID); + ///Adds a new command to the internal list + /** + \param iID ID of the command + \param iCmd Pointer to the command + */ + void addCommand(unsigned int iID, EBRDDCommand* iCmd); + /////Returns a pointer to the EBRDD variable specified by its ID + ////** + //\param iVarID ID of the EBRDD variable + //\return Pointer to the variable + //*/ + //ParamType* getVariableByID(unsigned int iVarID); + /////Returns an iterator for the internal variable ID hash table + ////** + //\param iEnd true for iterator pointing to the end of the table, false for iterator pointing to the first element + //\return Const iterator for variable table + //*/ + //VariableLookUpTableID::const_iterator getVariableIteratorID(bool iEnd) const; + /////Returns an iterator for the internal variable Name hash table + ////** + //\param iEnd true for iterator pointing to the end of the table, false for iterator pointing to the first element + //\return Const iterator for variable table + //*/ + //VariableLookUpTableName::const_iterator getVariableIteratorName(bool iEnd) const; + ///Is called when a stop command is encountered + void finished(); + //TMLTransaction* getNextTransaction() const; +protected: + ///ID of the EBRDD + unsigned int _ID; + ///Name of the EBRDD + std::string _name; + ///Pointer to the current command of the EBRDD + EBRDDCommand* _currCommand; + ///Pointer to the first command of the EBRDD + EBRDDCommand* _firstCommand; + ///Look up table for EBRDD variables (by name) + VariableLookUpTableName _varLookUpName; + /////Look up table for EBRDD variables (by ID) + //VariableLookUpTableID _varLookUpID; + ///Hash table containing commands + CommandHashTabEBRDD _commandHash; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..9c4163aaac3069e77ca6841c4075828ddd8b51de --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.cpp @@ -0,0 +1,60 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDActionCommand.h> +#include <EBRDD.h> + +EBRDDActionCommand::EBRDDActionCommand(ID iID, EBRDD* iEBRDD, EBRDDFuncPointer iEBRDDFunc): EBRDDCommand(iID, iEBRDD),_ebrddFunc(iEBRDDFunc){ +} + +EBRDDCommand* EBRDDActionCommand::prepare(){ + //std::cout << "action prepare begin\n"; + (_ebrdd->*_ebrddFunc)(); + if (_nextCommand[0]!=0) return _nextCommand[0]->prepare(); + //std::cout << "action prepare end\n"; + return 0; +} + + +std::string EBRDDActionCommand::toString() const{ + std::ostringstream outp; + outp << "EBRDDAction in " << EBRDDCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..d4d649e90cbea331efffa1f880e0aef0dc38c8cc --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDActionCommand.h @@ -0,0 +1,65 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDActionCommandH +#define EBRDDActionCommandH + +#include <definitions.h> +#include <EBRDDCommand.h> + + +///This class executes a C++ statement (probably a variable assignment or modification) defined in the scope of a EBRDD action state. +class EBRDDActionCommand: public EBRDDCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iEBRDD Pointer to the EBRDD the command belongs to + \param iEBRDDFunc Member function pointer to the action function + */ + EBRDDActionCommand(ID iID, EBRDD* iEBRDD, EBRDDFuncPointer iEBRDDFunc); + EBRDDCommand* prepare(); + std::string toString() const; +protected: + ///Member function pointer to the action function + EBRDDFuncPointer _ebrddFunc; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..3fbe3d79198525afb7ceb411fe6a7040019b8188 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.cpp @@ -0,0 +1,65 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDChoiceCommand.h> +#include <EBRDD.h> + +EBRDDChoiceCommand::EBRDDChoiceCommand(unsigned int iID, EBRDD* iEBRDD, EBRDDFuncPointer iCondFunc):EBRDDCommand(iID, iEBRDD), _condFunc(iCondFunc){ +} + +EBRDDCommand* EBRDDChoiceCommand::prepare(){ + unsigned int aNextCmd; + //std::cout << "choice prepare begin\n"; + aNextCmd=(_ebrdd->*_condFunc)(); + //std::cout << "Next CmdIndex: " << aNextCmd << std::endl; + if (_nextCommand[aNextCmd]!=0){ + EBRDDCommand* xx = _nextCommand[aNextCmd]->prepare(); + //std::cout << "choice prepare end\n"; + return xx; + } + //std::cout << "ERROR!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; + return 0; +} + +std::string EBRDDChoiceCommand::toString() const{ + std::ostringstream outp; + outp << "Choice in " << EBRDDCommand::toString(); + return outp.str(); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..ea4d6dcac832f4decf1e14940e3dc3ba6975a9af --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDChoiceCommand.h @@ -0,0 +1,65 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDChoiceCommandH +#define EBRDDChoiceCommandH + +#include <definitions.h> +#include <EBRDDCommand.h> + + +///This class stands for a fork in the control flow of a EBRDD task. +class EBRDDChoiceCommand:public EBRDDCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iEBRDD Pointer to the EBRDD the command belongs to + \param iCondFunc Member function pointer to the condition function returning the index of the next command + */ + EBRDDChoiceCommand(unsigned int iID, EBRDD* iEBRDD, EBRDDFuncPointer iCondFunc); + EBRDDCommand* prepare(); + std::string toString() const; +protected: + ///Member function pointer to the condition function returning the index of the next command + EBRDDFuncPointer _condFunc; +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.cpp new file mode 100755 index 0000000000000000000000000000000000000000..091a0d3c13479c4257267c29b02df4062489f381 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.cpp @@ -0,0 +1,96 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDCommand.h> +#include <EBRDD.h> +//#include <SimComponents.h> + +//SimComponents* TMLCommand::_simComp=0; + +EBRDDCommand::EBRDDCommand(ID iID, EBRDD* iEBRDD): _ID(iID), _ebrdd(iEBRDD), _nextCommand(0){ + _ebrdd->addCommand(iID, this); +} + +EBRDDCommand::~EBRDDCommand(){ + if (_nextCommand!=0) delete[] _nextCommand; +} + +EBRDD* EBRDDCommand::getEBRDD() const{ + return _ebrdd; +} + +void EBRDDCommand::setNextCommand(EBRDDCommand** iNextCommand){ + _nextCommand=iNextCommand; +} + +//EBRDDCommand* EBRDDCommand::getNextCommand() const{ +// return (_nextCommand==0)?0:_nextCommand[0]; +//} + +//EBRDDCommand** EBRDDCommand::getNextCommands(unsigned int& oNbOfCmd) const{ + //returned number is not correct for composite choice/choice commands and composite action/choice commands !!!! +// oNbOfCmd=_nbOfNextCmds; +// return _nextCommand; +//} + +std::string EBRDDCommand::toString() const{ + std::ostringstream outp; + outp << _ebrdd->toString(); + return outp.str(); +} + +std::ostream& EBRDDCommand::writeObject(std::ostream& s){ + return s; +} + +std::istream& EBRDDCommand::readObject(std::istream& s){ + return s; +} + +void EBRDDCommand::reset(){ +} + +ID EBRDDCommand::getID() const{ + return _ID; +} + +//void TMLCommand::setSimComponents(SimComponents* iSimComp){ +// _simComp=iSimComp; +//} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.h new file mode 100755 index 0000000000000000000000000000000000000000..f831ba559b33d46a147904db2ee2de11a392132b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDCommand.h @@ -0,0 +1,111 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDCommandH +#define EBRDDCommandH + +#include <definitions.h> +#include <Serializable.h> + +class EBRDD; + +///This class defines the basic interfaces and functionalites of a EBRDD command. All specific EBRDD commands are derived from this base class. +class EBRDDCommand: public Serializable { +public: + ///Constructor + /** + \param iID ID of the command + \param iEBRDD Pointer to the EBRDD the command belongs to + */ + EBRDDCommand(ID iID, EBRDD* iEBRDD); + ///Destructor + virtual ~EBRDDCommand(); + ///Initializes the command and passes the control flow to the prepare() method of the next command if necessary + /** + \return The EBRDD command which is currently active + */ + virtual EBRDDCommand* prepare()=0; + ///Assigns a value to the pointer referencing the array of next commands + /** + \param iNextCommand Pointer to an array of pointers to the next commands + */ + void setNextCommand(EBRDDCommand** iNextCommand); + ///Returns a pointer to the EBRDD the command belongs to + /** + \return Pointer to the EBRDD + */ + EBRDD* getEBRDD() const; + ///Returns a string representation of the command + /** + \return Detailed string representation + */ + virtual std::string toString() const; + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); + ///Returns the unique ID of the command + /** + \return Unique ID + */ + ID getID() const; + ////Sets the internal pointer to the simulation components + ////** + //\param iSimComp Pointer to simulation components + //*/ + //static void setSimComponents(SimComponents* iSimComp); + /////Returns a pointer to the next command array and the number of successors of this command + ////** + //\param oNbOfCmd Number of successors of this command + //\return Pointer to next command array + //*/ + //EBRDDCommand** getNextCommands(unsigned int& oNbOfCmd) const; +protected: + ///ID of the command + ID _ID; + ///Pointer to the EBRDD the command belongs to + EBRDD* _ebrdd; + ///Pointer to an array of pointers to the next commands + EBRDDCommand** _nextCommand; + /////Number of successors of this command + //unsigned int _nbOfNextCmds; +}; + +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eb697db0c6be3f18c2e080b4e6dcc23a08b85c03 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.cpp @@ -0,0 +1,58 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EBRDDStopCommand.h> +#include <EBRDD.h> + +EBRDDStopCommand::EBRDDStopCommand(ID iID, EBRDD* iEBRDD): EBRDDCommand(iID, iEBRDD){ +} + +EBRDDCommand* EBRDDStopCommand::prepare(){ + _ebrdd->finished(); + return 0; +} + +std::string EBRDDStopCommand::toString() const{ + std::ostringstream outp; + outp << "Stop in " << EBRDDCommand::toString(); + return outp.str(); +} + + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.h new file mode 100644 index 0000000000000000000000000000000000000000..e7d34d09f42c2d7680739385896e2c8fa9fa246f --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EBRDDStopCommand.h @@ -0,0 +1,62 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EBRDDStopCommandH +#define EBRDDStopCommandH + +#include <definitions.h> +#include <EBRDDCommand.h> + + +///This command denotes the end of an EBRDD +class EBRDDStopCommand:public EBRDDCommand{ +public: + ///Constructor + /** + \param iID ID of the command + \param iTask Pointer to the task the command belongs to + */ + EBRDDStopCommand(ID iID, EBRDD* iTask); + EBRDDCommand* prepare(); + std::string toString() const; +protected: +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERB.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERB.cpp new file mode 100644 index 0000000000000000000000000000000000000000..67a59aff5690fd9afa7b9d06ee56aade221504bc --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERB.cpp @@ -0,0 +1,286 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ERB.h> +#include <SimComponents.h> +#include <SchedulableDevice.h> +#include <SchedulableCommDevice.h> +#include <Slave.h> +#include <TMLTask.h> +#include <NotifyIF.h> +#include <TMLChannel.h> +#include <ERC.h> +#include <Simulator.h> +#include <EBRDD.h> + +//#define NOTIFY_ANCESTOR {_nbOfNotific++; _ancestorNode->notifyEvent(_ID);} + +SimComponents* ERB::_simComp=0; +char* ERB::_evtString[] ={ + "transExecuted", "commandEntered", + "commandStarted", "commandExecuted", + "commandFinished", "taskStarted", + "taskFinished", "readTrans", + "writeTrans", "simulationStarted", + "simulationStopped" +}; + +ERB::ERB(ERC* iContainer, NotifyIF* iAncestorNode, bool iNegated, const std::string& iName, ID iEvtID, unsigned int iSourceClass, unsigned int* iArrayOfSources, unsigned int iNbOfSources, EBRDDFuncPointer iEbrddFunc, const std::string& iCondString): EventIF(iAncestorNode, iNegated), _container(iContainer), _name(iName), _evtID(iEvtID), _sourceClass(iSourceClass), _arrayOfSources(iArrayOfSources), _nbOfSources(iNbOfSources), _ebrddFunc(iEbrddFunc), _condString(iCondString){ +} + +ERB::~ERB(){ + if (_arrayOfSources!=0) delete[] _arrayOfSources; +} + +void ERB::timeTick(TMLTime iNewTime){ + //std::cout << "TimeTick ERB: " << iNewTime << std::endl; +} + +void ERB::notifyAncestor(ID iEvtSourceID){ + //std::cout << "* evt in " << _name << " t:" << SchedulableDevice::getSimulatedTime() << " n:" << _evtString[_evtID] << " src: " << _simComp->getCmpNameByID(iEvtSourceID) << "\n"; + _nbOfNotific++; + if (_ebrddFunc!=0 && !(_container->getEBRDD()->*_ebrddFunc)()){ + //Alert!!! + std::cout << "ALERT!\n"; + std::ostringstream aOut; + aOut << MSG_EBRDDCONVIOLATED << ": " << _condString << " in " << _container->getEBRDD()->toString(); + _simComp->setStopFlag(true, aOut.str()); + } + _ancestorNode->notifyEvent(_ID); + //std::cout << "end ERB event notified: " << _name << "\n"; +} + +void ERB::activate(){ + //std::cout << "activate event: " << _name << "\n"; + _active=true; +} + +void ERB::prepare(){ + switch (_sourceClass){ + //CPU + case 0:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableDevice* aCPU = _simComp->getCPUByID(_arrayOfSources[i]); + if (aCPU!=0) aCPU->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Bus + case 1:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableCommDevice* aBus = _simComp->getBusByID(_arrayOfSources[i]); + if (aBus!=0) aBus->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Mem: + case 2: + //Bridge + case 3:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + Slave* aSlave = _simComp->getSlaveByID(_arrayOfSources[i]); + if (aSlave!=0) aSlave->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Channel + case 4:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLChannel* aChannel = _simComp->getChannelByID(_arrayOfSources[i]); + if (aChannel!=0) aChannel->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //Task + case 5:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLTask* aTask = _simComp->getTaskByID(_arrayOfSources[i]); + if (aTask!=0) aTask->registerListener(this); + else std::cout << "register listener FAILED!!!!: " << _name << "\n"; + } + break; + } + //HWA + case 6: + break; + //kernel + case 7: + _simComp->getSimulator()->registerListener(this); + break; + } + //std::cout << "end activate event: " << _name << "\n"; +} + +void ERB::deactivate(){ + //std::cout << "deactivate event: " << _name << "\n"; + _active=false; +} + +/*void ERB::reset(){ + EventIF::reset(); + switch (_sourceClass){ + //CPU + case 0:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableDevice* aCPU = _simComp->getCPUByID(_arrayOfSources[i]); + if (aCPU!=0) aCPU->removeListener(this); + } + break; + } + //Bus + case 1:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + SchedulableCommDevice* aBus = _simComp->getBusByID(_arrayOfSources[i]); + if (aBus!=0) aBus->removeListener(this); + } + break; + } + //Mem: + case 2: + //Bridge + case 3:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + Slave* aSlave = _simComp->getSlaveByID(_arrayOfSources[i]); + if (aSlave!=0) aSlave->removeListener(this); + } + break; + } + //Channel + case 4:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLChannel* aChannel = _simComp->getChannelByID(_arrayOfSources[i]); + if (aChannel!=0) aChannel->removeListener(this); + } + break; + } + //Task + case 5:{ + for (unsigned int i=0; i< _nbOfSources; i++){ + TMLTask* aTask = _simComp->getTaskByID(_arrayOfSources[i]); + if (aTask!=0) aTask->removeListener(this); + } + break; + } + //HWA + case 6: + break; + //kernel + case 7: + _simComp->getSimulator()->removeListener(this); + break; + //std::cout << "end deactivate event: " << _name << "\n"; + } +}*/ + +//void ERB::transExecuted(TMLTransaction* iTrans){ +void ERB::transExecuted(TMLTransaction* iTrans, ID iID){ + //std::cout << "transExecuted notified: " << _name << "\n"; + if (_evtID==0 && _active) notifyAncestor(iID); +} + +void ERB::commandEntered(TMLCommand* iComm, ID iID){ + //std::cout << "commandEntered notified: " << _name << "\n"; + if (_evtID==1 && _active) notifyAncestor(iID); +} + +void ERB::commandStarted(TMLCommand* iComm, ID iID){ + //std::cout << "commandStarted notified: " << _name << "\n"; + if (_evtID==2 && _active) notifyAncestor(iID); +} + +void ERB::commandExecuted(TMLCommand* iComm,ID iID){ + //std::cout << "commandExecuted: " << _name << "\n"; + if (_evtID==3 && _active) notifyAncestor(iID); +} + +void ERB::commandFinished(TMLCommand* iComm, ID iID){ + //std::cout << "commandFinished notified: " << _name << "\n"; + if (_evtID==4 && _active) notifyAncestor(iID); +} + +void ERB::taskStarted(TMLTransaction* iTrans,ID iID){ + //std::cout << "taskStarted notified: " << _name << "\n"; + if (_evtID==5 && _active) notifyAncestor(iID); +} + +void ERB::taskFinished(TMLTransaction* iTrans, ID iID){ + //std::cout << "taskFinished notified: " << _name << "\n"; + if (_evtID==6 && _active) notifyAncestor(iID); +} + +void ERB::readTrans(TMLTransaction* iTrans, ID iID){ + //std::cout << "readTrans notified: " << _name << "\n"; + if (_evtID==7 && _active) notifyAncestor(iID); +} + +void ERB::writeTrans(TMLTransaction* iTrans, ID iID){ + //std::cout << "writeTrans notified: " << _name << "\n"; + if (_evtID==8 && _active) notifyAncestor(iID); +} + +void ERB::simulationStarted(){ + //std::cout << "simStarted notified: " << _name << "\n"; + if (_evtID==9 && _active) notifyAncestor(-1); +} + +void ERB::simulationStopped(){ + //std::cout << "simStopped notified: " << _name << "\n"; + if (_evtID==10 && _active) notifyAncestor(-1); +} + +void ERB::setSimComponents(SimComponents* iSimComp){ + _simComp=iSimComp; +} + +std::ostream& ERB::writeObject(std::ostream& s){ + EventIF::writeObject(s); + return s; +} + +std::istream& ERB::readObject(std::istream& s){ + EventIF::readObject(s); + std::cout << "readObject " << _name << ": " << _active << "\n"; + if (_active) activate(); + return s; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERB.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERB.h new file mode 100644 index 0000000000000000000000000000000000000000..e728f9617227a7870abe1bdf498333f76f2b639a --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERB.h @@ -0,0 +1,125 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ERBH +#define ERBH + +#include <EventIF.h> +#include <ChannelListener.h> +#include <CommandListener.h> +#include <KernelListener.h> +#include <TaskListener.h> +#include <TransactionListener.h> + +#define MSG_EBRDDCONVIOLATED "EBRDD condition has been violated" + +class SimComponents; +class ERC; + +///Event Reaction Blocks are leaf nodes of an Event Tree within an ERC +class ERB: public EventIF, public ChannelListener, public CommandListener, public KernelListener, public TaskListener, public TransactionListener{ +public: + ///Constructor + /** + \param iContainer Pointer to subordinate ERC + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iName Name of the ERB + \param iEvtID ID of event to be received + \param iSourceClass Category of then event source (CPU, Bus, Slave, ...) + \param iArrayOfSources Array of event sources + \param iNbOfSources Number of event sources + \param iEbrddFunc Member function pointer to EBRDD function + \param iCondString ERB Condition in string format + */ + ERB(ERC* iContainer, NotifyIF* iAncestorNode, bool iNegated, const std::string& iName, ID iEvtID, unsigned int iSourceClass, unsigned int* iArrayOfSources, unsigned int iNbOfSources, EBRDDFuncPointer iEbrddFunc, const std::string& iCondString); + ///Destructor + virtual ~ERB(); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); + void prepare(); + //void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + void transExecuted(TMLTransaction* iTrans, ID iID); + void commandEntered(TMLCommand* iComm, ID iID); + void commandStarted(TMLCommand* iComm, ID iID); + void commandExecuted(TMLCommand* iComm, ID iID); + void commandFinished(TMLCommand* iComm, ID iID); + void taskStarted(TMLTransaction* iTrans, ID iID); + void taskFinished(TMLTransaction* iTrans, ID iID); + void readTrans(TMLTransaction* iTrans, ID iID); + void writeTrans(TMLTransaction* iTrans, ID iID); + void simulationStarted(); + void simulationStopped(); + ///Sets the class variable pointing to the simulation objects + /** + \param iSimComp Pointer to the simulation components + */ + static void setSimComponents(SimComponents* iSimComp); +protected: + ///Pointer to subordinate ERC + ERC* _container; + ///Name of ERB + std::string _name; + ///ID of event to be received + ID _evtID; + ///Category of then event source (CPU, Bus, Slave, ...) + unsigned int _sourceClass; + ///Array of event sources + unsigned int* _arrayOfSources; + ///Number of event sources + unsigned int _nbOfSources; + ///Pointer to simulation components + static SimComponents* _simComp; + ///Class variable holding strinf representations of events + static char* _evtString[]; + ///Member function pointer to EBRDD function + EBRDDFuncPointer _ebrddFunc; + ///ERB Condition in string format + std::string _condString; + ///Signals event to ancestor node + /** + \param iEvtSourceID ID of event source + */ + void notifyAncestor(ID iEvtSourceID); +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERC.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERC.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ed6ebbb16d7d86f6fbbd71512a4989e91db16de8 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERC.cpp @@ -0,0 +1,124 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ERC.h> +#include <EventIF.h> +#include <EBRDD.h> +#include <Simulator.h> +#include <SimComponents.h> + +SimComponents* ERC::_simComp=0; + +ERC::ERC(ID iID, EBRDD* iEBRDD): NotifyIF(1), EBRDDCommand(iID, iEBRDD), _ebrdd(iEBRDD), _wasPrepared(false), _once(true) { +} + +void ERC::notifyEvent(ID iID){ + //std::cout << "***** Container " << _ID << " notified *****\n"; + _wasPrepared=false; + //_simComp->getSimulator()->removeListener(this); ///////////////////NEW!!!!!!!!!!!! + //_eventArray[0]->deactivate(); + NotifyIF::reset(); + if (_nextCommand[0]!=0) _nextCommand[0]->prepare(); + //std::cout << "end notify event\n"; +} +void ERC::notifyAbort(ID iID){ + _wasPrepared=false; + _simComp->getSimulator()->removeListener(this); + std::cout << "***** Container aborted " << _ID << " *****\n"; + //if (!_simComp->getStopFlag()){ + std::ostringstream aOut; + aOut << MSG_EBRDDSEQVIOLATED << ": " << _ebrdd->toString(); + _simComp->setStopFlag(true, aOut.str()); + //} +} + +void ERC::reset(){ + //std::cout << "***** ERC reset " << _ID << " *****\n"; + _wasPrepared=false; + _eventArray[0]->deactivate(); + NotifyIF::reset(); +} + +EBRDD* ERC::getEBRDD(){ + return _ebrdd; +} + +void ERC::timeAdvances(TMLTime iCurrTime){ + //std::cout << "Time anvances ERC: " << iCurrTime << std::endl; + _eventArray[0]->timeTick(iCurrTime); +} + +EBRDDCommand* ERC::prepare(){ + if (!_wasPrepared){ + _wasPrepared=true; + //std::cout << "***** Container " << _ID << " prepared *****\n"; + //_simComp->getSimulator()->registerListener(this); ///////////////////NEW!!!!!!!!!!!! + _ebrdd->setCurrCommand(this); + //std::cout << "In prepare ERC\n"; + if (_once){ + _eventArray[0]->prepare(); //NEW!!!!!!!!!!!!!!!!!!!!!!! + _once=false; + } + _eventArray[0]->activate(); + //std::cout << "end prepare ERC\n"; + } + return this; +} + +std::string ERC::toString() const{ + std::ostringstream outp; + outp << "ERC in " << EBRDDCommand::toString(); + return outp.str(); +} + +void ERC::setSimComponents(SimComponents* iSimComp){ + _simComp=iSimComp; +} + +std::ostream& ERC::writeObject(std::ostream& s){ + _eventArray[0]->writeObject(s); + return s; +} + +std::istream& ERC::readObject(std::istream& s){ + _wasPrepared=true; + _eventArray[0]->readObject(s); + return s; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERC.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERC.h new file mode 100644 index 0000000000000000000000000000000000000000..88313950e797359af0fb1abb7f5a77f53c92144a --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ERC.h @@ -0,0 +1,88 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ERCH +#define ERCH + +#include <NotifyIF.h> +#include <EBRDDCommand.h> +#include <KernelListener.h> + +#define MSG_EBRDDSEQVIOLATED "EBRDD sequence has been violated" + +class SimComponents; + +///EBRDD Command Event Reception Container +class ERC: public NotifyIF, public EBRDDCommand, public KernelListener{ +public: + ///Constructor + /** + \param iID ID of the ERC + \param iEBRDD Pointer to the subordinate EBRDD + */ + ERC(ID iID, EBRDD* iEBRDD); + void notifyEvent(ID iID); + void notifyAbort(ID iID); + ///Returns a pointer to the subordinate EBRDD + /** + \return Pointer to EBRDD + */ + EBRDD* getEBRDD(); + void timeAdvances(TMLTime iCurrTime); + EBRDDCommand* prepare(); + std::string toString() const; + ///Sets the class variable pointing to the simulation objects + /** + \param iSimComp Pointer to the simulation components + */ + static void setSimComponents(SimComponents* iSimComp); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + virtual void reset(); +protected: + ///Pointer to subordiate EBRDD + EBRDD* _ebrdd; + ///Pointer to simulation components + static SimComponents* _simComp; + ///Indicates whether the ERC has already been prepared + bool _wasPrepared; + bool _once; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ESO.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ESO.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c33894ecf0b841c4c533c34d1a29902287a4b478 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ESO.cpp @@ -0,0 +1,509 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ESO.h> +#include <SchedulableDevice.h> + +//std::cout << "Abort: " << _ID << "\n"; +#define NOTIFY_ABORT {_aborted=true; _ancestorNode->notifyAbort(_ID);} +//std::cout << "Notify: " << _ID << "\n"; +#define NOTIFY_EVENT {_nbOfNotific++; _ancestorNode->notifyEvent(_ID);} +//omit _nbOfNotific>0 +#define RETURN_IF_TERMINATED if (_nbOfNotific>0 || _aborted ) return; +#define RETURN_IF_NO_TIMEOUT if (_timeOut==0 || !_active) return; +#define RETURN_IF_ACTIVE if (_active) return; + +//************************************************************************ +ESOConjunction::ESOConjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _oncePerEvent(iOncePerEvent){ +} + +void ESOConjunction::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated() || (_oncePerEvent && _eventArray[iID]->getNbOfNotific()>1)){ + NOTIFY_ABORT; + //std::cout << "Abort Conjuction (negated or too much): " << _ID << "\n"; + }else{ + //all non negated events received? + for (unsigned int i=0; i<_nbOfEvents; i++){ + //std::cout << i << "\n"; + if (!_eventArray[i]->notified() && !_eventArray[i]->getNegated()) return; + } + NOTIFY_EVENT; + //std::cout << "Notify Conjuction: " << _ID << "\n"; + } +} + +void ESOConjunction::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated()){ + //all events negated and aborted? + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_eventArray[i]->getNegated() || !_eventArray[i]->getAborted()) return; + } + NOTIFY_EVENT; + //std::cout << "Notify Conjuction: " << _ID << "\n"; + }else{ + NOTIFY_ABORT; + //std::cout << "Abort Conjuction (abort received): " << _ID << "\n"; + } +} + +void ESOConjunction::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + //all events negated? + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_eventArray[i]->getNegated()){ + NOTIFY_ABORT; + return; + } + } + //if all events are negated + NOTIFY_EVENT; + } +} + +void ESOConjunction::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESOConjunction::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + + +//************************************************************************ +ESODisjunction::ESODisjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut){ +} + +void ESODisjunction::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated()){ + //test if all norm events are aborted, all neg events notified + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((!_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()) || (_eventArray[i]->getNegated() && !_eventArray[i]->notified())) return; + } + NOTIFY_ABORT; + }else{ + NOTIFY_EVENT; + } +} + +void ESODisjunction::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_eventArray[iID]->getNegated()){ + NOTIFY_EVENT; + }else{ + //test if all norm events are aborted, all neg events notified + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((!_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()) || (_eventArray[i]->getNegated() && !_eventArray[i]->notified())) return; + } + NOTIFY_ABORT; + } +} + +void ESODisjunction::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + for (unsigned int i=0; i<_nbOfEvents; i++){ + //was negated event not received? + if (_eventArray[i]->getNegated() && !_eventArray[i]->notified()){ + NOTIFY_EVENT; + return; + } + } + NOTIFY_ABORT; + } +} + +void ESODisjunction::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESODisjunction::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + + +//************************************************************************ +ESOSequence::ESOSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _nextEvtToWaitFor(-1), _lastEvtToWaitFor(0){ +} + +void ESOSequence::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (iID==_nextEvtToWaitFor){ + if (searchForNextEvt()==-1) NOTIFY_EVENT; + }else{ + NOTIFY_ABORT; + } + +} + +void ESOSequence::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + if (iID==_nextEvtToWaitFor){ + NOTIFY_ABORT; + }else{ + if(_nextEvtToWaitFor==_nbOfEvents){ + //Only negated and aborted events at the end of the list? + for(unsigned int i=_nextEvtToWaitFor-1; i>=0 && _eventArray[i]->getNegated(); i--){ + if (!_eventArray[i]->getAborted()) return; + } + NOTIFY_EVENT; + } + } +} + +void ESOSequence::timeTick(TMLTime iNewTime){ + //std::cout << "check time tick0\n"; + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + //if (_active) + // std::cout << "check time tick1 true" << "\n"; + //else + // std::cout << "check time tick1 false" << "\n"; + RETURN_IF_NO_TIMEOUT; + //std::cout << "check time tick2\n"; + if (iNewTime>=_timeOut + _startTime){ + if(_nextEvtToWaitFor==_nbOfEvents){ + NOTIFY_EVENT; + }else{ + NOTIFY_ABORT; + } + } +} + +void ESOSequence::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + searchForNextEvt(); +} + +void ESOSequence::reset(){ + //std::cout << "Sequence reset\n"; + ESOIF::reset(); + _nextEvtToWaitFor=-1; + _lastEvtToWaitFor=0; +} + +std::ostream& ESOSequence::writeObject(std::ostream& s){ + ESOIF::writeObject(s); + WRITE_STREAM(s, _nextEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOSequence nextEvtToWaitFor: " << _nextEvtToWaitFor << std::endl; +#endif + WRITE_STREAM(s, _lastEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOSequence lastEvtToWaitFor: " << _lastEvtToWaitFor << std::endl; +#endif + return s; +} + +std::istream& ESOSequence::readObject(std::istream& s){ + ESOIF::readObject(s); + READ_STREAM(s, _nextEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOSequence nextEvtToWaitFor: " << _nextEvtToWaitFor << std::endl; +#endif + READ_STREAM(s, _lastEvtToWaitFor); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOSequence lastEvtToWaitFor: " << _lastEvtToWaitFor << std::endl; +#endif + return s; +} + +void ESOSequence::deactivate(){ + _active=false; + //reset(); + if (_nextEvtToWaitFor!=-1){ + for (unsigned int i=_lastEvtToWaitFor; i< std::min(_nextEvtToWaitFor+1, _nbOfEvents); i++){ + _eventArray[i]->deactivate(); + //std::cout << "[end] deactivate event: " << i << "\n"; + } + } +} + +int ESOSequence::searchForNextEvt(){ + deactivate(); + _nextEvtToWaitFor++; + if (_nextEvtToWaitFor>=_nbOfEvents) return -1; + unsigned int aNextPos; + for (aNextPos=_nextEvtToWaitFor; aNextPos<_nbOfEvents; aNextPos++){ + _eventArray[aNextPos]->activate(); + //std::cout << "activate event: " << aNextPos << "\n"; + if (!_eventArray[aNextPos]->getNegated()) break; + } + _lastEvtToWaitFor=_nextEvtToWaitFor; + _nextEvtToWaitFor=aNextPos; + //std::cout << "next event to wait for: " << _nextEvtToWaitFor << "\n"; + return 0; +} + + +//************************************************************************ +ESOSSequence::ESOSSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): ESOSequence(iAncestorNode, iNegated, iNbOfEvents, iTimeOut){ +} + +void ESOSSequence::activate(){ + //std::cout << "activate SSeq1\n"; + RETURN_IF_ACTIVE; + //std::cout << "activate SSeq2\n"; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } + searchForNextEvt(); +} + +void ESOSSequence::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + +int ESOSSequence::searchForNextEvt(){ + _nextEvtToWaitFor++; + if (_nextEvtToWaitFor>=_nbOfEvents) return -1; + unsigned int aNextPos; + for (aNextPos=_nextEvtToWaitFor; aNextPos<_nbOfEvents; aNextPos++){ + if (!_eventArray[aNextPos]->getNegated()) break; + } + _lastEvtToWaitFor=_nextEvtToWaitFor; + _nextEvtToWaitFor=aNextPos; + //std::cout << "next event to wait for: " << _nextEvtToWaitFor << "\n"; + return 0; +} + + +//************************************************************************ +ESOAtMost::ESOAtMost(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _oncePerEvent(iOncePerEvent), _n(iN){} + +void ESOAtMost::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_oncePerEvent && _eventArray[iID]->getNbOfNotific()>1){ + NOTIFY_ABORT; + return; + } + checkEvents(); +} + +void ESOAtMost::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + //std::cout << "At most received abort " << _ID << "\n"; + checkEvents(); +} + +void ESOAtMost::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && !_eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())) aReceivedEvents++; + if (aReceivedEvents>_n){ + NOTIFY_ABORT; + return; + } + + } + NOTIFY_EVENT; + } +} + +void ESOAtMost::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESOAtMost::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + +void ESOAtMost::checkEvents(){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && _eventArray[i]->getAborted()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())){ + if (_oncePerEvent || _eventArray[i]->getNegated()) + aReceivedEvents++; + else + aReceivedEvents+=_eventArray[i]->getNbOfNotific(); + } + // aReceivedEvents++; + if (aReceivedEvents>_n){ + NOTIFY_ABORT; + //std::cout << "Abort at most " << _ID << "\n"; + return; + } + } + unsigned int aPossibleEvents=_nbOfEvents; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_oncePerEvent && !_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()){ + //std::cout << "Return from notify at most " << _ID << "\n"; + return; //NEW + } + if ((_eventArray[i]->getNegated() && _eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->getAborted())) aPossibleEvents--; + if (aPossibleEvents <=_n){ + //std::cout << "Notify at most " << _ID << "\n"; + NOTIFY_EVENT; + return; + } + } +} + + +//************************************************************************ +ESOAtLeast::ESOAtLeast(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN): ESOIF(iAncestorNode, iNegated, iNbOfEvents, iTimeOut), _oncePerEvent(iOncePerEvent), _n(iN){} + +void ESOAtLeast::notifyEvent(unsigned int iID){ + RETURN_IF_TERMINATED; + if (_oncePerEvent && _eventArray[iID]->getNbOfNotific()>1){ + NOTIFY_ABORT; + return; + } + checkEvents(); +} + +void ESOAtLeast::notifyAbort(unsigned int iID){ + RETURN_IF_TERMINATED; + checkEvents(); +} + +void ESOAtLeast::timeTick(TMLTime iNewTime){ + RETURN_IF_TERMINATED; + ESOIF::timeTick(iNewTime); + RETURN_IF_NO_TIMEOUT; + if (iNewTime>=_timeOut + _startTime){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && !_eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())) aReceivedEvents++; + if (aReceivedEvents==_n){ + NOTIFY_EVENT; + return; + } + + } + NOTIFY_ABORT; + } +} + +void ESOAtLeast::activate(){ + RETURN_IF_ACTIVE; + _active=true; + _startTime = SchedulableDevice::getSimulatedTime(); + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->activate(); + } +} + +void ESOAtLeast::deactivate(){ + _active=false; + //reset(); + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->deactivate(); + } +} + + +void ESOAtLeast::checkEvents(){ + unsigned int aReceivedEvents=0; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if ((_eventArray[i]->getNegated() && _eventArray[i]->getAborted()) || (!_eventArray[i]->getNegated() && _eventArray[i]->notified())){ + if (_oncePerEvent || _eventArray[i]->getNegated()) + aReceivedEvents++; + else + aReceivedEvents+=_eventArray[i]->getNbOfNotific(); + } + if (aReceivedEvents==_n){ + NOTIFY_EVENT; + return; + } + } + unsigned int aPossibleEvents=_nbOfEvents; + for (unsigned int i=0; i<_nbOfEvents; i++){ + if (!_oncePerEvent && !_eventArray[i]->getNegated() && !_eventArray[i]->getAborted()) return; + if ((_eventArray[i]->getNegated() && _eventArray[i]->notified()) || (!_eventArray[i]->getNegated() && _eventArray[i]->getAborted())) aPossibleEvents--; + if (aPossibleEvents <_n){ + NOTIFY_ABORT; + //std::cout << "Abort at least " << _ID << "\n"; + return; + } + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ESO.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ESO.h new file mode 100644 index 0000000000000000000000000000000000000000..fa59e8d3610bd2f0555ce39d297748126f2fbe48 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/ESO.h @@ -0,0 +1,259 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ESOH +#define ESOH + +#include <NotifyIF.h> +#include <EventIF.h> + + +//************************************************************************ +///Base class for Event Sequencing operators +class ESOIF: public EventIF, public NotifyIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESOIF(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut): EventIF(iAncestorNode, iNegated), NotifyIF(iNbOfEvents), _timeOut(iTimeOut), _startTime(0){} + virtual void reset(){ + EventIF::reset(); + NotifyIF::reset(); + } + virtual std::ostream& writeObject(std::ostream& s){ + EventIF::writeObject(s); + WRITE_STREAM(s, _timeOut); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOIF timeOut: " << _timeOut << std::endl; +#endif + WRITE_STREAM(s, _startTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: ESOIF startTime: " << _startTime << std::endl; +#endif + NotifyIF::writeObject(s); + return s; + } + virtual std::istream& readObject(std::istream& s){ + EventIF::readObject(s); + READ_STREAM(s, _timeOut); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOIF timeOut: " << _timeOut << std::endl; +#endif + READ_STREAM(s, _startTime); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: ESOIF startTime: " << _startTime << std::endl; +#endif + NotifyIF::readObject(s); + return s; + } + virtual void timeTick(TMLTime iNewTime){ + //std::cout << "TimeTick ESO: " << iNewTime << std::endl; + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->timeTick(iNewTime); + } + } + void prepare(){ + for (unsigned int i=0; i<_nbOfEvents; i++){ + _eventArray[i]->prepare(); + } + } +protected: + ///Time out value + TMLTime _timeOut; + ///Time of operator activation + TMLTime _startTime; +}; + + +//************************************************************************ +///Conjunction ESO +class ESOConjunction: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + \param iOncePerEvent Indicates whether each event should only be received once + */ + ESOConjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +protected: + ///Indicates whether each event should only be received once + bool _oncePerEvent; +}; + + +//************************************************************************ +///Disjunction ESO +class ESODisjunction: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESODisjunction(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +}; + + +//************************************************************************ +///Sequence ESO +class ESOSequence: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESOSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + virtual void activate(); + virtual void deactivate(); + void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); +protected: + ///Next event in sequence to be received + unsigned int _nextEvtToWaitFor; + ///Last event in sequence which was received + unsigned int _lastEvtToWaitFor; + ///Determine next event to be received + virtual int searchForNextEvt(); +}; + + +//************************************************************************ +///Strict sequence ESO +class ESOSSequence: public ESOSequence{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + */ + ESOSSequence(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut); + void activate(); + void deactivate(); +protected: + int searchForNextEvt(); +}; + + +//************************************************************************ +///At most ESO +class ESOAtMost: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + \param iOncePerEvent Indicates whether each event should only be received once + \param iN At most iN events should be received + */ + ESOAtMost(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +protected: + ///Indicates whether each event should only be received once + bool _oncePerEvent; + ///At most n events should be received + unsigned int _n; + ///Checks if operator is completed or if it should be aborted + void checkEvents(); +}; + + +//************************************************************************ +///At least ESO +class ESOAtLeast: public ESOIF{ +public: + ///Constructor + /** + \param iAncestorNode Pointer to ancestor node within the event tree + \param iNegated Event negated flag + \param iNbOfEvents Number of descendant nodes within the event tree + \param iTimeOut ESO time out value + \param iOncePerEvent Indicates whether each event should only be received once + \param iN At least iN events should be received + */ + ESOAtLeast(NotifyIF* iAncestorNode, bool iNegated, unsigned int iNbOfEvents, TMLTime iTimeOut, bool iOncePerEvent, unsigned int iN); + void notifyEvent(unsigned int iID); + void notifyAbort(unsigned int iID); + void timeTick(TMLTime iNewTime); + void activate(); + void deactivate(); +protected: + ///Indicates whether each event should only be received once + bool _oncePerEvent; + ///At least n events should be received + unsigned int _n; + ///Checks if operator is completed or if it should be aborted + void checkEvents(); +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.cpp new file mode 100644 index 0000000000000000000000000000000000000000..790bde777029a477f3a785bb7c34bf663457b473 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.cpp @@ -0,0 +1,113 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <EventIF.h> +#include <NotifyIF.h> +#include <ERB.h> + +EventIF::EventIF(NotifyIF* iAncestorNode, bool iNegated):_ancestorNode(iAncestorNode), _negated(iNegated), _nbOfNotific(0), _aborted(false), _active(false){ + iAncestorNode->registerEvent(this); +} + +void EventIF::setEventID(ID iID){ + _ID=iID; + //std::cout << "setEventID: " << _ID << "\n"; +} + +bool EventIF::notified(){ + //std::cout << _ID << " notified?: " << (_nbOfNotific!=0) << "\n"; + return _nbOfNotific!=0; +} + +unsigned int EventIF::getNbOfNotific(){ + //std::cout << "Number of notifications: " << _nbOfNotific << "\n"; + return _nbOfNotific; +} + +bool EventIF::getNegated(){ + return _negated; +} + +void EventIF::reset(){ + //std::cout << "Reset leaf\n"; + _nbOfNotific=0; + _aborted=false; + _active=false; + //std::cout << "End Reset leaf\n"; +} + +std::ostream& EventIF::writeObject(std::ostream& s){ + WRITE_STREAM(s, _nbOfNotific); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EventIF nbOfNotific: " << _nbOfNotific << std::endl; +#endif + WRITE_STREAM(s, _aborted); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EventIF aborted: " << _aborted << std::endl; +#endif + WRITE_STREAM(s, _active); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: EventIF active: " << _active << std::endl; +#endif + return s; +} + +std::istream& EventIF::readObject(std::istream& s){ + READ_STREAM(s, _nbOfNotific); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EventIF nbOfNotific: " << _nbOfNotific << std::endl; +#endif + READ_STREAM(s, _aborted); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EventIF aborted: " << _aborted << std::endl; +#endif + READ_STREAM(s, _active); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: EventIF active: " << _active << std::endl; +#endif + return s; +} + +bool EventIF::getAborted(){ + return _aborted; +} + +EventIF::~EventIF(){ +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.h new file mode 100644 index 0000000000000000000000000000000000000000..edbd76d280bf1ad24381a811c2f92ad7982775bd --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/EventIF.h @@ -0,0 +1,113 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef EventIFH +#define EventIFH + +#include <definitions.h> +#include <Serializable.h> + +class NotifyIF; + +///Interface class for top down node configuration within event trees of ERCs +class EventIF: public Serializable{ +public: + ///Constructor + /** + \param iAncestorNode + \param iNegated + */ + EventIF(NotifyIF* iAncestorNode, bool iNegated); + ///Set event ID of this event source + /** + \param iID ID of the node + */ + void setEventID(ID iID); + ///Returns whether the event source has already generated an event + /** + \return Returns true if event has already been notified + */ + bool notified(); + ///Returns the number of notifications of this event source + /** + \return Number of notifications + */ + unsigned int getNbOfNotific(); + ///Returns whether this event source is negated + /** + \return Returns true if this source is negated + */ + bool getNegated(); + virtual void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + ///Called to notify an advancement of simulation time + /** + \param iNewTime New simulation time + */ + virtual void timeTick(TMLTime iNewTime)=0; + ///Activates the node + virtual void activate()=0; + ///Deactivates the node + virtual void deactivate()=0; + ///Prepares the node + virtual void prepare()=0; + ///Returns whether this event cannot be raised any more + /** + \return true if even was aborted + */ + bool getAborted(); + ///Destructor + virtual ~EventIF(); +protected: + ///Ancestor node to notify upon event reception + NotifyIF* _ancestorNode; + ///Negated flag + bool _negated; + ///ID of the node + ID _ID; + ///Number of event notifications + unsigned int _nbOfNotific; + ///Aborted flag + bool _aborted; + ///Active flag + bool _active; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b44a9832395dee6aaff58843024a81b2b770cc97 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.cpp @@ -0,0 +1,78 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<NotifyIF.h> +#include<EventIF.h> +#include<iostream> + +NotifyIF::NotifyIF(unsigned int iNbOfEvents):_nextID(0), _nbOfEvents(iNbOfEvents){ + _eventArray = new EventIF*[iNbOfEvents]; + for (unsigned int i=0; i<_nbOfEvents; i++) + _eventArray[i]=0; +} + +void NotifyIF::reset(){ + //if (_nextID!= _nbOfEvents) std::cout << "******** Somethings strange\n"; + for (unsigned int i=0; i<_nbOfEvents; i++){ + //std::cout << "reset " << i << " "<< _eventArray[i] << std::endl; + _eventArray[i]->reset(); + //std::cout << "after " << std::endl; + } +} + +std::ostream& NotifyIF::writeObject(std::ostream& s){ + for (unsigned int i=0; i<_nbOfEvents; i++) _eventArray[i]->writeObject(s); + return s; +} + +std::istream& NotifyIF::readObject(std::istream& s){ + for (unsigned int i=0; i<_nbOfEvents; i++) _eventArray[i]->readObject(s); + return s; +} + +void NotifyIF::registerEvent(EventIF* iEvent){ + _eventArray[_nextID]=iEvent; + iEvent->setEventID(_nextID); + ++_nextID; +} + +NotifyIF::~NotifyIF(){ + delete[] _eventArray; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.h new file mode 100644 index 0000000000000000000000000000000000000000..6cb8b737c15ee418a291031d97c716c17f2ff0fb --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/ebrdd/NotifyIF.h @@ -0,0 +1,85 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef NotifyIFH +#define NotifyIFH + +#include<definitions.h> +#include<Serializable.h> + +class EventIF; + +///Interface class for bottom up event notification within event trees of ERCs +class NotifyIF: public Serializable{ +public: + ///Constructor + /** + \param iNbOfEvents Number of descendants in the event tree + */ + NotifyIF(unsigned int iNbOfEvents); + ///Called by event source to signal an event + /** + \param iID ID of the event + */ + virtual void notifyEvent(ID iID)=0; + ///Called by event source to signal that an event cannot be received any more + /** + \param iID ID of the event + */ + virtual void notifyAbort(ID iID)=0; + virtual void reset(); + virtual std::ostream& writeObject(std::ostream& s); + virtual std::istream& readObject(std::istream& s); + ///Registers a new event source (descendant in the event tree) + /** + \param iEvent Pointer to the event source + */ + void registerEvent(EventIF* iEvent); + ///Destructor + virtual ~NotifyIF(); +protected: + ///ID of the node + ID _nextID; + ///Number of descendants within the event tree + unsigned int _nbOfEvents; + ///Array of descendants within the event tree + EventIF** _eventArray; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/GeneralListener.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/GeneralListener.h new file mode 100644 index 0000000000000000000000000000000000000000..9f07cde6ca4bc306d5a78164839829d16d261540 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/GeneralListener.h @@ -0,0 +1,142 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef GeneralListenerH +#define GeneralListenerH + +#define NOTIFY_SIM_STARTED() {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->simulationStarted(); this->listenersUnLock();}} +#define NOTIFY_SIM_STOPPED() {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->simulationStopped(); this->listenersUnLock();}} +#define NOTIFY_TIME_ADVANCES(iTime) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->timeAdvances(iTime); this->listenersUnLock();}} +#define NOTIFY_TASK_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->transExecuted(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_TASK_FINISHED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->taskFinished(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_TASK_STARTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->taskStarted(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->transExecuted(iTrans,this->_ID); this->listenersUnLock();}} +#define NOTIFY_CMD_ENTERED(iComm) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->commandEntered(iComm,this->_ID); this->listenersUnLock();}} + + +#define NOTIFY_CMD_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock();for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->transExecuted(iTrans,this->_ID); this->listenersUnLock();}} + +#define NOTIFY_CMD_FINISHED(iComm) {if (!this->_listeners.empty()){this->listenersLock();for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->commandFinished(iComm,this->_ID); this->listenersUnLock();}} + +#define NOTIFY_CMD_STARTED(iComm) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) (*i)->commandStarted(iComm,this->_ID); this->listenersUnLock();}} + +#define NOTIFY_WRITE_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) {(*i)->transExecuted(iTrans,this->_ID);} this->listenersUnLock();}} +#define NOTIFY_READ_TRANS_EXECUTED(iTrans) {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) {(*i)->transExecuted(iTrans,this->_ID);} this->listenersUnLock();}} +#define NOTIFY_EVALUATE() {if (!this->_listeners.empty()){this->listenersLock(); for(std::list<GeneralListener*>::const_iterator i=this->_listeners.begin(); i != this->_listeners.end(); ++i) {(*i)->evaluate();} this->listenersUnLock();}} + +///Encapsulates events associated with transactions +class GeneralListener{ +public: + ///Gets called when a the simulation is started + virtual void simulationStarted(){} + ///Gets called when a the simulation is stopped + virtual void simulationStopped(){} + ///Gets called when simulation time advances + /** + \param iCurrTime Current simulation time + */ + virtual void timeAdvances(TMLTime iCurrTime){} + + ///Gets called when a task executes its first transaction + /** + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + virtual void taskStarted(TMLTransaction* iTrans, ID iID){} + ///Gets called when a task executes its last transaction + /** + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + virtual void taskFinished(TMLTransaction* iTrans, ID iID){} + ///Destructor + ///Gets called when a transaction is executed + /** + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + virtual void transExecuted(TMLTransaction* iTrans, ID iID){} + + + ///Gets called when a command is entered the first time + /** + \param iComm Pointer to the command + \param iID ID of the event source + */ + virtual void commandEntered(TMLCommand* iComm, ID iID){} + //Gets called when a transaction of the command is executed + /* + \param iComm Pointer to the command + \param iID ID of the event source + */ + //virtual void commandExecuted(TMLCommand* iComm, ID iID){} + ///Gets called when a the last transaction of the command is executed + /** + \param iComm Pointer to the command + \param iID ID of the event source + */ + virtual void commandFinished(TMLCommand* iComm, ID iID){} + ///Gets called when a the first transaction of the command is executed + /** + \param iComm Pointer to the command + \param iID ID of the event source + */ + virtual void commandStarted(TMLCommand* iComm, ID iID){} + + + //Gets called when a read transaction is executed + /* + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + //virtual void readTrans(TMLTransaction* iTrans, ID iID){} + //Gets called when a write transaction is executed + /* + \param iTrans Pointer to the transaction + \param iID ID of the event source + */ + //virtual void writeTrans(TMLTransaction* iTrans, ID iID){} + ///Event triggering the evaluation of TEPE constraints + virtual void evaluate(){} + ///Destructor + virtual ~GeneralListener(){} +protected: +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenerSubject.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenerSubject.h new file mode 100644 index 0000000000000000000000000000000000000000..a13f02fef93a1070afcb785d3b0fbb1adee976eb --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenerSubject.h @@ -0,0 +1,107 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ListenerSubjectH +#define ListenerSubjectH + +///Base class for listener subjects +template <typename T> +class ListenerSubject{ +public: + ///Constructor + ListenerSubject():_locked(false){} + ///Registers a new listener + /** + \param iListener Pointer to the listener + */ + void registerListener(T* iListener){ + if (_locked) + _adding.push_back(iListener); + else + _listeners.push_back(iListener); + } + ///Removes a listener from the internal list + /** + \param iListener Pointer to the listener + */ + void removeListener(T* iListener){ + if (_locked) + _deletion.push_back(iListener); + else + _listeners.remove(iListener); + } + + ///Lock list of listeners + void listenersLock(){ + _locked=true; + } + + ///Unlock and update list of listeners + void listenersUnLock(){ + _locked=false; + for(typename std::list<T*>::iterator i=_deletion.begin(); i != _deletion.end(); ++i){ + _listeners.remove(*i); + } + for(typename std::list<T*>::iterator i=_adding.begin(); i != _adding.end(); ++i) { + _listeners.push_back(*i); + } + _deletion.clear(); + _adding.clear(); + } + + ///Destructor + virtual ~ListenerSubject(){ + //listenersUnLock(); + //for(typename std::list<T*>::iterator i=_listeners.begin(); i != _listeners.end(); ++i) { + // delete (*i); + //} + } +protected: + ///List of listeners + std::list<T*> _listeners; +private: + ///Listeners locked flag + bool _locked; + ///List of listeners scheduled for deletion + std::list<T*> _deletion; + ///List of listeners scheduled for adding + std::list<T*> _adding; +}; +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9688c52f0757d3f61f259fbc98a3a0c156f70e54 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.cpp @@ -0,0 +1,606 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <ListenersSimCmd.h> +#include <SimComponents.h> +#include <SchedulableDevice.h> +#include <TMLCommand.h> +#include <TMLRandomChoiceCommand.h> +#include <TMLActionCommand.h> +#include <TMLNotifiedCommand.h> +#include <TMLWaitCommand.h> +#include <TMLTask.h> +#include <CPU.h> +#define COND_SOURCE_FILE_NAME "newlib.c" +#define COND_OBJ_FILE_NAME "newlib.o" + +ID CondBreakpoint::_freeID=0; +bool Breakpoint::_enabled=true; +bool CondBreakpoint::_enabled=true; + + +//************************************************************************ +RunXTransactions::RunXTransactions(SimComponents* iSimComp, unsigned int iTransToExecute):_simComp(iSimComp), _count(0), _transToExecute(iTransToExecute){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->registerListener(this); +} + +RunXTransactions::~RunXTransactions(){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->removeListener(this); +} + +void RunXTransactions::transExecuted(TMLTransaction* iTrans, ID iID){ + _count++; + if (_count>=_transToExecute){ + std::ostringstream aOut; + aOut << MSG_RUNXTRANSACTIONS << ": " << _transToExecute; + _simComp->setStopFlag(true, aOut.str()); + //return true; + } + //return false; +} +void RunXTransactions::setTransToExecute(unsigned int iTransToExecute){ + _transToExecute=iTransToExecute; +} + + +//************************************************************************ +Breakpoint::Breakpoint(SimComponents* iSimComp):_simComp(iSimComp){ +} + +void Breakpoint::commandEntered(TMLCommand* iComm, ID iID){ + if (_enabled){ + _simComp->setStopFlag(true, MSG_BREAKPOINT); + //return true; + } + //return false; +} + +void Breakpoint::setEnabled(bool iEnabled){ + _enabled=iEnabled; +} + + +//************************************************************************ +CondBreakpoint::CondBreakpoint(SimComponents* iSimComp, std::string iCond, TMLTask* iTask):_simComp(iSimComp), _condText(iCond), _condFunc(0), _dlHandle(0), _task(iTask), _cSourceFileCreated(false), _objectFileCreated(false), _libFileCreated(false){ + _ID=_freeID++; + FILE* in; + std::ofstream myfile (COND_SOURCE_FILE_NAME); + char aExeName[256]; + int len = getexename(aExeName, sizeof(aExeName)); + if (len==-1) return; + aExeName[len-6]=0; + //strcat(aExeName, "/src_simulator"); + std::cout << "ExeName: " << aExeName << std::endl; + if (myfile.is_open()){ + _cSourceFileCreated=true; + std::ostringstream aCmd; + myfile << "#include <" << iTask->toString() << ".h>\n"; + //for(VariableLookUpTableName::const_iterator i=iTask->getVariableIteratorName(false); i !=iTask->getVariableIteratorName(true); ++i){ + for(VariableLookUpTableName::const_iterator i=iTask->getVariableLookUpTableName().begin(); i !=iTask->getVariableLookUpTableName().end(); ++i){ + myfile << "#define " << *(i->first) << " _castTask_->" << *(i->first) << "\n"; + } + myfile << "class TMLTask;\n\n"; + myfile << "extern \"C\" bool condFunc(TMLTask* _ioTask_){\n"; + myfile << " " << iTask->toString() << "* _castTask_ = dynamic_cast<" << iTask->toString() << "*>(" << "_ioTask_" << ");\n"; + myfile << " return (" << iCond << ");\n"; + myfile << "}\n"; + myfile.close(); + aCmd << "g++ -c -fPIC -Wall " << COND_SOURCE_FILE_NAME << " -I" << aExeName << " -I" << aExeName << "/src_simulator"; + //in = popen("g++ -c -fPIC -Wall newlib.c -I. -I./src_simulator", "r"); + in = popen(aCmd.str().c_str(), "r"); + if (pclose(in)!=0){ + std::cout << "Compiler error!\n"; + return; + } + _objectFileCreated=true; + aCmd.str(""); + aCmd << "g++ -shared -Wl,-soname," << "lib" << _ID << ".so.1" << " -o " << "lib" << _ID << ".so.1.0.1 " << COND_OBJ_FILE_NAME; + //in = popen("g++ -shared -Wl,-soname,l.so.1 -o l.so.1.0.1 newlib.o", "r"); + in = popen(aCmd.str().c_str(), "r"); + if (pclose(in)!=0){ + std::cout << "Compiler error!\n"; + return; + } + _libFileCreated=true; + }else{ + std::cout << "Error when creating C condition source file.\n"; + return; + } + std::ostringstream aCmd; + aCmd << "lib" << _ID << ".so.1.0.1"; + _dlHandle = dlopen(aCmd.str().c_str(), RTLD_LAZY); + if (!_dlHandle){ + std::cout << "Error " << dlerror() << " occurred when opening shared library.\n"; + return; + } + _condFunc = (BreakCondFunc) dlsym( _dlHandle, "condFunc"); + if (dlerror() != NULL) { + std::cout << "Error when getting function handle\n"; + return; + } + //Take task into account, to register at every command + TMLCommand::registerGlobalListenerForType<TMLChoiceCommand>(this, iTask); + TMLCommand::registerGlobalListenerForType<TMLActionCommand>(this, iTask); + TMLCommand::registerGlobalListenerForType<TMLNotifiedCommand>(this, iTask); + TMLCommand::registerGlobalListenerForType<TMLWaitCommand>(this, iTask); +} + +void CondBreakpoint::commandFinished(TMLCommand* iComm, ID iID){ + if (_enabled && _condFunc!=0){ + if ((*_condFunc)(_task)){ + std::ostringstream aOut; + aOut << MSG_CONDBREAKPOINT << ": " << _condText; + _simComp->setStopFlag(true, aOut.str()); + std::cout << "Stop simulation due to condition\n"; + //return true; + } + } + //return false; +} + +void CondBreakpoint::setEnabled(bool iEnabled){ + _enabled=iEnabled; +} + +bool CondBreakpoint::conditionValid() const{ + return (_condFunc!=0); +} + +CondBreakpoint::~CondBreakpoint(){ + TMLCommand::removeGlobalListener(this); + if (_dlHandle!=0) dlclose(_dlHandle); + if (_cSourceFileCreated) remove(COND_SOURCE_FILE_NAME); + if (_objectFileCreated) remove(COND_OBJ_FILE_NAME); + if (_libFileCreated){ + std::ostringstream aFileName; + aFileName << "lib" << _ID << ".so.1.0.1"; + remove(aFileName.str().c_str()); + } +} + + +//************************************************************************ +RunTillNextRandomChoice::RunTillNextRandomChoice(SimComponents* iSimComp):_simComp(iSimComp), _enabled(false){ + TMLCommand::registerGlobalListenerForType<IndeterminismSource>(this,0); +} + +void RunTillNextRandomChoice::commandEntered(TMLCommand* iComm, ID iID){ + IndeterminismSource* aChoice=dynamic_cast<IndeterminismSource*>(iComm); + if (_enabled && aChoice!=0 ){ + _simComp->setStopFlag(true, MSG_RANDOMCHOICE); + //return true; + } + //return false; +} + +void RunTillNextRandomChoice::setEnabled(bool iEnabled){ + _enabled=iEnabled; +} + + +//************************************************************************ +RunXCommands::RunXCommands(SimComponents* iSimComp, unsigned int iCommandsToExecute):_simComp(iSimComp), _count(0), _commandsToExecute(iCommandsToExecute){ + TMLCommand::registerGlobalListener(this); +} + +RunXCommands::~RunXCommands(){ + TMLCommand::removeGlobalListener(this); +} + +void RunXCommands::commandFinished(TMLCommand* iComm, ID iID){ + _count++; + if (_count>=_commandsToExecute){ + std::ostringstream aOut; + aOut << MSG_RUNXCOMMANDS << ": " << _commandsToExecute; + _simComp->setStopFlag(true, aOut.str()); + std::cout << "x commands stopped sim\n"; + //return true; + } + //return false; +} + +void RunXCommands::setCmdsToExecute(unsigned int iCommandsToExecute){ + _commandsToExecute=iCommandsToExecute; +} + + +//************************************************************************ +RunXTimeUnits::RunXTimeUnits(SimComponents* iSimComp, TMLTime iEndTime):_simComp(iSimComp), _endTime(iEndTime){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->registerListener(this); +} + +RunXTimeUnits::~RunXTimeUnits(){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i) + (*i)->removeListener(this); +} + +void RunXTimeUnits::transExecuted(TMLTransaction* iTrans, ID iID){ + if (SchedulableDevice::getSimulatedTime()>=_endTime){ + _simComp->setStopFlag(true, MSG_RUNXTIMEUNITS); + //return true; + } + //return false; +} + +void RunXTimeUnits::setEndTime(TMLTime iEndTime){ + _endTime=iEndTime; +} + + +//************************************************************************ +RunTillTransOnDevice::RunTillTransOnDevice(SimComponents* iSimComp, ListenerSubject <GeneralListener> * iSubject):_simComp(iSimComp), _subject(iSubject) { + _subject->registerListener(this); +} +RunTillTransOnDevice::~RunTillTransOnDevice(){ + _subject->removeListener(this); +} + +void RunTillTransOnDevice::transExecuted(TMLTransaction* iTrans, ID iID){ + _simComp->setStopFlag(true, MSG_TRANSONDEVICE); + //return true; +} + + +//************************************************************************ +RunTillTransOnTask::RunTillTransOnTask(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject):_simComp(iSimComp), _subject(iSubject) { + _subject->registerListener(this); +} + +RunTillTransOnTask::~RunTillTransOnTask(){ + _subject->removeListener(this); +} + +void RunTillTransOnTask::transExecuted(TMLTransaction* iTrans, ID iID){ + _simComp->setStopFlag(true, MSG_TRANSONTASK); + //return true; +} + + +//************************************************************************ +RunTillTransOnChannel::RunTillTransOnChannel(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject):_simComp(iSimComp), _subject(iSubject) { + _subject->registerListener(this); +} + +RunTillTransOnChannel::~RunTillTransOnChannel(){ + _subject->removeListener(this); +} + +void RunTillTransOnChannel::transExecuted(TMLTransaction* iTrans, ID iID){ + _simComp->setStopFlag(true, MSG_TRANSONCHANNEL); + //return true; +} + +//************************************************************************ +//{SIM_START, SIM_END, TIME_ADV, TASK_START, TASK_END, CMD_RUNNABLE, CMD_START, CMD_END, TRANS_EXEC} EventType; +TEPESigListener::TEPESigListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, unsigned int iEvtBitmap, unsigned int iTransTypeBitmap, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator): _subjectIDs(iSubjectIDs), _nbOfSubjectIDs(iNbOfSubjectIDs), _evtBitmap(iEvtBitmap), _transTypeBitmap(iTransTypeBitmap), _nbOfSignals(inbOfSignals), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _sigNotified(false), _simComp(iSimComp), _simulator(iSimulator){ + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->registerListener(this); + } + _simulator->registerListener(this); +} + +TEPESigListener::~TEPESigListener(){ + std::cerr << "Delete Sig\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->removeListener(this); + } + /*for (unsigned int i=0; i<_nbOfSignals; i++){ + std::cout << "loop\n"; + if (dynamic_cast<PropertyConstraint*>(_notifConstr[i])==0){ + delete _notifConstr[i]; + std::cout << "Delete done II\n"; + } + }*/ + _simulator->removeListener(this); + delete [] _subjectIDs; + delete [] _notifConstr; + delete [] _notifFunc; + std::cerr << "End Delete Sig\n"; +} + +void TEPESigListener::simulationStarted(){ + //(_notifConstr->*_notifFunc)((_evtBitmap & SIM_START)!=0); + bool aNotified = (_evtBitmap & SIM_START)!=0; + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(aNotified); +} + +void TEPESigListener::simulationStopped(){ + //(_notifConstr->*_notifFunc)((_evtBitmap & SIM_END)!=0); + bool aNotified = (_evtBitmap & SIM_END)!=0; + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(aNotified); +} + +void TEPESigListener::timeAdvances(TMLTime iCurrTime){ + /*if(_sigNotified){ + (_notifConstr->*_notifFunc)(true); + _sigNotified=false; + }else{ + (_notifConstr->*_notifFunc)(false); + }*/ + //if (_sigNotified) std::cout << "Signal notified!!!\n"; + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(_sigNotified); + _sigNotified=false; +} + +void TEPESigListener::taskStarted(TMLTransaction* iTrans, ID iID){ + if ((_evtBitmap & TASK_START)!=0 && (iTrans->getCommand()->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::taskFinished(TMLTransaction* iTrans, ID iID){ + if ((_evtBitmap & TASK_END)!=0 && (iTrans->getCommand()->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::transExecuted(TMLTransaction* iTrans, ID iID){ + if ((_evtBitmap & TRANS_EXEC)!=0 && (iTrans->getCommand()->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::commandEntered(TMLCommand* iComm, ID iID){ + if ((_evtBitmap & CMD_RUNNABLE)!=0 && (iComm->getType()& _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + +void TEPESigListener::commandFinished(TMLCommand* iComm, ID iID){ +//void TEPESigListener::commandFinished(TMLTransaction* iTrans, ID iID){ + //std::cout << "cmd finished!!!\n"; + //std::cout << "cmd_end: " << (1<<CMD_END) << "\n"; + //std::cout << "_evtBitmap: " << _evtBitmap << "\n"; + std::cout << "command finished...\n"; + if ((_evtBitmap & CMD_END)!=0 && ( iComm->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + }else + std::cout << "but not taken into account\n"; +} + +void TEPESigListener::commandStarted(TMLCommand* iComm, ID iID){ + if ((_evtBitmap & CMD_START)!=0 && (iComm->getType() & _transTypeBitmap)!=0){ + //(_notifConstr->*_notifFunc)(true); + _sigNotified=true; + } +} + + +//*********************************************************************** +TEPEFloatingSigListener::TEPEFloatingSigListener(ListenerSubject<GeneralListener>* iSimulator, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, unsigned int iNbOfStartNodes, PropertyConstraint** iStartNodes): _simulator(iSimulator), _nbOfSignals(inbOfSignals), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _nbOfStartNodes(iNbOfStartNodes), _startNodes(iStartNodes){ + _simulator->registerListener(this); +} + +TEPEFloatingSigListener::~TEPEFloatingSigListener(){ + std::cerr << "Delete Floating\n"; + _simulator->removeListener(this); + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + delete _startNodes[i]; + } + delete [] _notifConstr; + delete [] _notifFunc; + delete [] _startNodes; + std::cerr << "End Delete Floating\n"; +} +void TEPEFloatingSigListener::timeAdvances(TMLTime iCurrTime){ + std::cout << "New simulation time: " << iCurrTime << "\n"; + for (unsigned int i=0; i<_nbOfSignals; i++){ + (_notifConstr[i]->*_notifFunc[i])(false); + } + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->notifyEnable(0); + } +} + +void TEPEFloatingSigListener::simulationStarted(){ + for (unsigned int i=0; i<_nbOfSignals; i++){ + (_notifConstr[i]->*_notifFunc[i])(false); + } + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->notifyEnable(2); + } +} + +void TEPEFloatingSigListener::simulationStopped(){ + for (unsigned int i=0; i<_nbOfSignals; i++){ + (_notifConstr[i]->*_notifFunc[i])(false); + } + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->notifyEnable(1); + } + //for (unsigned int i=0; i<_nbOfStartNodes; i++) + // std::cout << "Eval Prop " << i << ": " << _startNodes[i]->evalProp() << "\n"; +} + +void TEPEFloatingSigListener::evaluate(){ + for (unsigned int i=0; i<_nbOfStartNodes; i++) + std::cout << "Eval Prop " << i << ": " << _startNodes[i]->evalProp() << "\n"; +} + +std::ostream& TEPEFloatingSigListener::writeObject(std::ostream& s){ + std::cout << "TEPEFloatingSigListener::writeObject\n"; + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->writeObject(s); + } + return s; +} + +std::istream& TEPEFloatingSigListener::readObject(std::istream& s){ + std::cout << "TEPEFloatingSigListener::readObject\n"; + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->readObject(s); + } + return s; +} + +void TEPEFloatingSigListener::reset(){ + for (unsigned int i=0; i<_nbOfStartNodes; i++){ + _startNodes[i]->reset(); + } +} + + +//*********************************************************************** +TEPEEquationListener::TEPEEquationListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, EqFuncPointer iEqFunc, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator) + : _subjectIDs(iSubjectIDs), _nbOfSubjectIDs(iNbOfSubjectIDs), _var(iVar), _eqFunc(iEqFunc), _eqResult(true), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _sigNotified(false), _simComp(iSimComp), _simulator(iSimulator){ + //std::cerr << "before func\n"; + //std::cerr << "before loop\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + //std::cerr << "next id: " << _subjectIDs[i] << "\n"; + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->registerListener(this); + } + _simulator->registerListener(this); +} + +TEPEEquationListener::~TEPEEquationListener(){ + std::cerr << "Delete Eq\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->removeListener(this); + } + _simulator->removeListener(this); + delete [] _subjectIDs; + delete [] _var; + std::cerr << "End Delete Eq\n"; +} + +void TEPEEquationListener::commandFinished(TMLCommand* iComm, ID iID){ + //if several alternations of variables arise at the same time only last value is taken into account + //_sigNotified = (_eqResult != _eqFunc(_var)); + _sigNotified = true; + std::cout << "Check equation result: " << _sigNotified << "\n"; +} + +void TEPEEquationListener::timeAdvances(TMLTime iCurrTime){ + if(_sigNotified){ + _sigNotified=false; + bool aNewEqResult = _eqFunc(_var); + (_notifConstr->*_notifFunc)(_eqResult != aNewEqResult); + _eqResult = aNewEqResult; + }else{ + (_notifConstr->*_notifFunc)(false); + } +} + +void TEPEEquationListener::simulationStarted(){ + //(_notifConstr->*_notifFunc)(false); + bool aNewEqResult = _eqFunc(_var); + (_notifConstr->*_notifFunc)(_eqResult !=aNewEqResult); + _eqResult = aNewEqResult; +} + +void TEPEEquationListener::simulationStopped(){ + (_notifConstr->*_notifFunc)(false); +} + + +//*********************************************************************** +TEPESettingListener::TEPESettingListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, SettingFuncPointer iSetFunc, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator): _subjectIDs(iSubjectIDs), _nbOfSubjectIDs(iNbOfSubjectIDs), _var(iVar), _setFunc(iSetFunc), _nbOfSignals(inbOfSignals), _setResult( _setFunc(_var)), _notifConstr(iNotifConstr), _notifFunc(iNotifFunc), _sigNotified(false), _simComp(iSimComp), _simulator(iSimulator){ + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + //std::cerr << "next id: " << _subjectIDs[i] << "\n"; + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->registerListener(this); + } + _simulator->registerListener(this); +} + +TEPESettingListener::~TEPESettingListener(){ + std::cerr << "Delete Setting\n"; + for (unsigned int i=0; i< _nbOfSubjectIDs; i++){ + ListenerSubject <GeneralListener>* aSubject = _simComp->getListenerByID(_subjectIDs[i]); + if (aSubject!=0) aSubject->removeListener(this); + } + _simulator->removeListener(this); + delete [] _subjectIDs; + delete [] _var; + delete [] _notifConstr; + delete [] _notifFunc; + std::cerr << "End Delete Setting\n"; +} + +void TEPESettingListener::commandFinished(TMLCommand* iComm, ID iID){ + /*if (_eqResult != _eqFunc(_var)){ + _eqResult = !_eqResult; + (_notifConstr->*_notifFunc)(true); + _sigNotified=true; + }*/ + //if several alternations of variables at the same time only last one is taken into account + _sigNotified=true; + //std::cout << "Check setting result: " << _setNewResult << "\n"; +} + +void TEPESettingListener::timeAdvances(TMLTime iCurrTime){ + bool aSigNotification; + if (_sigNotified){ + ParamType aNewSetResult = _setFunc(_var); + _sigNotified=false; + aSigNotification = (_setResult != aNewSetResult); + _setResult = aNewSetResult; + }else{ + aSigNotification=false; + } + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(aSigNotification); +} + +void TEPESettingListener::simulationStarted(){ + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(false); +} + +void TEPESettingListener::simulationStopped(){ + for (unsigned int i=0; i<_nbOfSignals; i++) + (_notifConstr[i]->*_notifFunc[i])(false); +} + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.h new file mode 100644 index 0000000000000000000000000000000000000000..07ba5f3c8f5de270b5a542ccd4b619d3b38afeb5 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/evt/ListenersSimCmd.h @@ -0,0 +1,491 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ListenersSimCmdH +#define ListenersSimCmdH + +#include <definitions.h> +//#include <TransactionListener.h> +//#include <CommandListener.h> +#include <GeneralListener.h> +#include <ListenerSubject.h> +//#include <TransactionAbstr.h> +//#include <CommandAbstr.h> +//#include <TaskAbstr.h> +//#include <CPUAbstr.h> +//#include <ChannelAbstr.h> +#include <SignalConstraint.h> +#include <PropertyConstraint.h> + +#define MSG_RUNXTRANSACTIONS "Transactions executed" +#define MSG_BREAKPOINT "Breakpoint reached" +#define MSG_CONDBREAKPOINT "Conditional breakpoint reached" +#define MSG_RANDOMCHOICE "Random choice operator reached" +#define MSG_RUNXCOMMANDS "Commands executed" +#define MSG_RUNXTIMEUNITS "Time units elapsed" +#define MSG_TRANSONDEVICE "Transaction on device encountered" +#define MSG_TRANSONTASK "Transaction of task encountered" +#define MSG_TRANSONCHANNEL "Transaction on channel encountered" +#define MSG_CONSTRAINTBLOCK "Constraint not fulfilled" + + +class SimComponents; + +//************************************************************************ +///Listener which stops the simulation after a given number of transactions +class RunXTransactions: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iTransToExecute Number of transactions to execute + */ + RunXTransactions(SimComponents* iSimComp, unsigned int iTransToExecute); + ///Destructor + virtual ~RunXTransactions(); + void transExecuted(TMLTransaction* iTrans, ID iID); + ///Sets the number of transactions to execute + /** + \param iTransToExecute Number of transactions to execute + */ + void setTransToExecute(unsigned int iTransToExecute); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Number of transactions to execute + unsigned int _count, _transToExecute; + +}; + + +//************************************************************************ +///Listener establishing a breakpoint +class Breakpoint: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + */ + Breakpoint(SimComponents* iSimComp); + void commandEntered(TMLCommand* iComm, ID iID); + ///Enable/disable all breakpoints + /** + \param iEnabled true=enable, false=disable + */ + static void setEnabled(bool iEnabled); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Breakpoints enabled flag + static bool _enabled; +}; + + +//************************************************************************ +///Breakpoint based on a condition +class CondBreakpoint: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iCond String containing the condition + \param iTask Task for which the condition is evaluated + */ + CondBreakpoint(SimComponents* iSimComp, std::string iCond, TMLTask* iTask); + ///Destructor + ~CondBreakpoint(); + void commandFinished(TMLCommand* iComm, ID iID); + ///Enable/disable all conditional breakpoints + /** + \param iEnabled true=enable, false=disable + */ + static void setEnabled(bool iEnabled); + ///Checks whether the condition could be compiled + /** + \return True if compilation was successful + */ + bool conditionValid() const; +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Breakpoints enabled flag + static bool _enabled; + ///Condition string + std::string _condText; + ///Pointer to funtion in shared library which contains the breakpoint condition + BreakCondFunc _condFunc; + ///Handle of shared library + void * _dlHandle; + ///ID of the breakpoint + ID _ID; + ///Task for which the condition is evaluated + TMLTask* _task; + ///Keeps track of the IDs already in use + static ID _freeID; + ///Flag indicating that the C source file has been created + bool _cSourceFileCreated; + ///Flag indicating that the object file has been created + bool _objectFileCreated; + ///Flag indicating that the library file has been created + bool _libFileCreated; +}; + + +//************************************************************************ +///Listener which stops the simulation as soon as a random choice command is encountered +class RunTillNextRandomChoice: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + */ + RunTillNextRandomChoice(SimComponents* iSimComp); + void commandEntered(TMLCommand* iComm, ID iID); + ///Enable/disable the Listener + /** + \param iEnabled true=enable, false=disable + */ + void setEnabled(bool iEnabled); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Listener enabled flag + bool _enabled; +}; + + +//************************************************************************ +///Listener which stops the simulation after a given number of commands +class RunXCommands: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iCommandsToExecute Number of commands to execute + */ + RunXCommands(SimComponents* iSimComp, unsigned int iCommandsToExecute); + ///Destructor + virtual ~RunXCommands(); + void commandFinished(TMLCommand* iComm, ID iID); + ///Sets the number of commands to execute + /** + \param iCommandsToExecute Number of commands to execute + */ + void setCmdsToExecute(unsigned int iCommandsToExecute); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Command counter + unsigned int _count; + ///Number of commands to execute + unsigned int _commandsToExecute; + +}; + + +//************************************************************************ +///Listener which stops the simulation at a given time +class RunXTimeUnits: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iEndTime End time + */ + RunXTimeUnits(SimComponents* iSimComp, TMLTime iEndTime); + ///Destructor + virtual ~RunXTimeUnits(); + void transExecuted(TMLTransaction* iTrans, ID iID); + ///Sets the end time of the simulation + /** + \param iEndTime End time of the simulation + */ + void setEndTime(TMLTime iEndTime); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///End time of the simulation + TMLTime _endTime; + +}; + + +//************************************************************************ +///Listener which stops the simulation as soon as a transaction is executed on a given device +class RunTillTransOnDevice: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iSubject Device to listen on + */ + RunTillTransOnDevice(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject); + ///Destructor + virtual ~RunTillTransOnDevice(); + void transExecuted(TMLTransaction* iTrans, ID iID); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Device to listen on + ListenerSubject <GeneralListener> * _subject; +}; + + +//************************************************************************ +///Listener which stops the simulation as soon as a given task executes a transaction +class RunTillTransOnTask: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iSubject Task to listen on + */ + RunTillTransOnTask(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject); + ///Destructor + virtual ~RunTillTransOnTask(); + void transExecuted(TMLTransaction* iTrans, ID iID); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Task to listen on + ListenerSubject <GeneralListener> * _subject; +}; + + +//************************************************************************ +///Listener which stops the simulation as soon data is conveyed on a given channel +class RunTillTransOnChannel: public GeneralListener{ +public: + ///Constructor + /** + \param iSimComp Pointer to a SimComponents object + \param iSubject Channel to listen on + */ + RunTillTransOnChannel(SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSubject); + ///Destructor + virtual ~RunTillTransOnChannel(); + void transExecuted(TMLTransaction* iTrans, ID iID); +protected: + ///Pointer to a SimComponents object + SimComponents* _simComp; + ///Channel to listen on + ListenerSubject <GeneralListener> * _subject; +}; + +//************************************************************************ +///Listener for generating signals to be evaluated by TEPE constraints +class TEPESigListener: public GeneralListener{ +public: + ///Constructor + /** + \param iSubjectIDs IDs of event sources to be taken into account + \param iNbOfSubjectIDs Number of event sources + \param iEvtBitmap Bitmap of event types to be taken into account + \param iTransTypeBitmap Bitmap of tranaction types to be taken into account + \param inbOfSignals Number of signals to be driven + \param iNotifConstr Pointer to constraints the signals belong to + \param iNotifFunc Notification function of constraints + \param iSimComp Pointer to SimComponents object + \param iSimulator Pointer to simulator as event source + */ + TEPESigListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, unsigned int iEvtBitmap, unsigned int iTransTypeBitmap, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator); + ~TEPESigListener(); + void simulationStarted(); + void simulationStopped(); + void timeAdvances(TMLTime iCurrTime); + void taskStarted(TMLTransaction* iTrans, ID iID); + void taskFinished(TMLTransaction* iTrans, ID iID); + void transExecuted(TMLTransaction* iTrans, ID iID); + void commandEntered(TMLCommand* iComm, ID iID); + void commandFinished(TMLCommand* iComm, ID iID); + void commandStarted(TMLCommand* iComm, ID iID); + void readTrans(TMLTransaction* iTrans, ID iID); + void writeTrans(TMLTransaction* iTrans, ID iID); +protected: + ///IDs of event sources to be taken into account + ID* _subjectIDs; + ///Number of event sources + unsigned int _nbOfSubjectIDs; + ///Bitmap of event types to be taken into account + unsigned int _evtBitmap; + ///Bitmap of tranaction types to be taken into account + unsigned int _transTypeBitmap; + ///Number of signals to be driven + unsigned int _nbOfSignals; + ///Pointer to constraints the signals belong to + SignalConstraint** _notifConstr; + ///Dedicated notification function of constraints + NtfSigFuncPointer* _notifFunc; + ///Flag indicating whether the signal was notified + bool _sigNotified; + ///Pointer to SimComponents object + SimComponents* _simComp; + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; + +}; + +//************************************************************************ +///Listener for generating signals for floating inputs of TEPE constraints +class TEPEFloatingSigListener: public GeneralListener, public Serializable{ +public: + ///Constructor + /** + \param iSimulator Pointer to simulator as event source + \param inbOfSignals Number of signals to be driven + \param iNotifConstr Pointer to constraints the signals belong to + \param iNotifFunc Notification function of constraints + \param iNbOfStartNodes Number of TEPE constraints whose property output is not connected to any other constraint + \param iStartNodes TEPE constraints whose property output is not connected to any other constraint + */ + TEPEFloatingSigListener(ListenerSubject<GeneralListener>* iSimulator, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, unsigned int iNbOfStartNodes, PropertyConstraint** iStartNodes); + ~TEPEFloatingSigListener(); + void timeAdvances(TMLTime iCurrTime); + void simulationStarted(); + void simulationStopped(); + void evaluate(); + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); + void reset(); +protected: + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; + ///Number of signals to be driven + unsigned int _nbOfSignals; + ///Pointer to constraints the signals belong to + SignalConstraint** _notifConstr; + ///Notification function of constraints + NtfSigFuncPointer* _notifFunc; + ///Number of TEPE constraints whose property output is not connected to any other constraint + unsigned int _nbOfStartNodes; + ///TEPE constraints whose property output is not connected to any other constraint + PropertyConstraint** _startNodes; +}; + +//************************************************************************ +///Listener for generating signals indicating the a TEPE equation has to be reevaluated +class TEPEEquationListener: public GeneralListener{ +public: + ///Constructor + /** + \param iSubjectIDs IDs of event sources to be taken into account (TML commands that modify significant variables) + \param iNbOfSubjectIDs Number of event sources + \param iVar Task Variables referred to in the equation + \param iEqFunc Evaluation function for the equation + \param iNotifConstr Pointer to the equation constraint + \param iNotifFunc Notification function of the equation constraint + \param iSimComp Pointer to SimComponents object + \param iSimulator Pointer to simulator as event source + */ + TEPEEquationListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, EqFuncPointer iEqFunc, SignalConstraint* iNotifConstr, NtfSigFuncPointer iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator); + ~TEPEEquationListener(); + void commandFinished(TMLCommand* iComm, ID iID); + void timeAdvances(TMLTime iCurrTime); + void simulationStarted(); + void simulationStopped(); +protected: + ///IDs of event sources to be taken into account (TML commands that modify significant variables) + ID* _subjectIDs; + ///Number of event sources + unsigned int _nbOfSubjectIDs; + ///Task Variables referred to in the equation + ParamType** _var; + ///Evaluation function for the equation + EqFuncPointer _eqFunc; + ///Result of the equation + bool _eqResult; + ///Pointer to the equation constraint + SignalConstraint* _notifConstr; + ///Notification function of the equation constraint + NtfSigFuncPointer _notifFunc; + ///Flag indicating whether the signal was notified + bool _sigNotified; + ///Pointer to SimComponents object + SimComponents* _simComp; + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; +}; + +//************************************************************************ +///Listener for generating signals indicating the a TEPE equation has to be reevaluated +class TEPESettingListener: public GeneralListener{ +public: + ///Constructor + /** + \param iSubjectIDs IDs of event sources to be taken into account (TML commands that modify significant variables) + \param iNbOfSubjectIDs Number of event sources + \param iVar Task Variables referred to in the setting + \param iSetFunc Evaluation function for the setting + \param inbOfSignals Number of signals to be driven + \param iNotifConstr Pointer to the setting constraints + \param iNotifFunc Notification function of setting constraint + \param iSimComp Pointer to SimComponents object + \param iSimulator Pointer to simulator as event source + */ + TEPESettingListener(ID* iSubjectIDs, unsigned int iNbOfSubjectIDs, ParamType** iVar, SettingFuncPointer iSetFunc, unsigned int inbOfSignals, SignalConstraint** iNotifConstr, NtfSigFuncPointer* iNotifFunc, SimComponents* iSimComp, ListenerSubject<GeneralListener>* iSimulator); + ~TEPESettingListener(); + void commandFinished(TMLCommand* iComm, ID iID); + void timeAdvances(TMLTime iCurrTime); + void simulationStarted(); + void simulationStopped(); +protected: + ///IDs of event sources to be taken into account (TML commands that modify significant variables) + ID* _subjectIDs; + ///Number of event sources + unsigned int _nbOfSubjectIDs; + ///Task Variables referred to in the setting + ParamType** _var; + ///Evaluation function for the setting + SettingFuncPointer _setFunc; + ///Number of signals to be driven + unsigned int _nbOfSignals; + ///Result of the setting + ParamType _setResult; + ///Pointer to the setting constraints + SignalConstraint** _notifConstr; + ///Notification function of setting constraint + NtfSigFuncPointer* _notifFunc; + ///Flag indicating whether the signal was notified + bool _sigNotified; + ///Pointer to SimComponents object + SimComponents* _simComp; + ///Pointer to simulator as event source + ListenerSubject<GeneralListener>* _simulator; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/main.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/main.h new file mode 100644 index 0000000000000000000000000000000000000000..821abb1443b83ce887bee6f03f7a965b6ca7ac3e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/main.h @@ -0,0 +1,95 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef MainH +#define MainH + +void *SimThreadFunc( void *ptr ){ + Simulator* mySim = static_cast<Simulator*>(ptr); + mySim->run(); + pthread_exit(NULL); +} + +void *ServThreadFunc( void *ptr ){ + ServerIF* myServer = static_cast<ServerIF*>(ptr); + myServer->run(); + pthread_exit(NULL); +} + +//********** MAIN NEW SIMULATOR ********** + +int main(int len, char ** args) { + struct timeval begin, end; + SimServSyncInfo mySync; + gettimeofday(&begin,NULL); + mySync._simComponents = new CurrentComponents(); + Simulator mySim(&mySync); + //mySync._simComponents = new CurrentComponents(&mySim); + mySync._simComponents->setSimulator(&mySim); + //mySim.init(); + mySync._simComponents->generateTEPEs(); + TMLCommand::setSimComponents(mySync._simComponents); +#ifdef EBRDD_ENABLED + ERB::setSimComponents(mySync._simComponents); + ERC::setSimComponents(mySync._simComponents); +#endif + //ESO::setSimComponents(mySync._simComponents); + gettimeofday(&end,NULL); + std::cout << "The preparation took " << getTimeDiff(begin,end) << "usec.\n"; + ServerIF* myServer = mySim.run(len, args); + if (myServer!=0){ + //Server myServer(&mySync); + myServer->setSimSyncInfo(&mySync); + mySync._simulator=&mySim; + mySync._server=myServer; + pthread_t aThreadSim, aThreadServ; + int aRetVal; + aRetVal = pthread_create(&aThreadSim, NULL, SimThreadFunc, static_cast<void*>(&mySim)); + aRetVal = pthread_create(&aThreadServ, NULL, ServThreadFunc, static_cast<void*>(myServer)); + pthread_join(aThreadSim, NULL); + pthread_join(aThreadServ, NULL); + pthread_exit(NULL); + delete myServer; + } + delete mySync._simComponents; + std::cout << "Terminate\n"; + return 0; +} +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Server.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Server.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d21a10fb4e172ebecbbf72ea0d73610b4eafe0b2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Server.cpp @@ -0,0 +1,222 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<Server.h> +#include<Simulator.h> +#include<SimServSyncInfo.h> +#include<unistd.h> + +Server::Server():_socketClient(-1){ + pthread_mutex_init(&_replyMutex, NULL); +} + +int Server::run(){ + int aSocketServer=0; // listen on aSocketServer, client connection on _socketClient + struct addrinfo aHints; //aHints for getaddrinfo + struct addrinfo *aServerInfo; //information about the server, created by getaddrinfo + struct sockaddr_storage aClientAddrInfo;// connector's address information + int aRetVal; //return value for getaddrinfo + + memset(&aHints, 0, sizeof aHints); + aHints.ai_family = AF_UNSPEC; + aHints.ai_socktype = SOCK_STREAM; + aHints.ai_flags = AI_PASSIVE; // use my IP + + //get address information about server: getaddrinfo(hostname, port, hints, result) + if ((aRetVal = getaddrinfo(NULL, PORT, &aHints, &aServerInfo)) != 0) { + std::cerr << "getaddrinfo: " << gai_strerror(aRetVal) << std::endl; + return 1; + } + + // loop through all the results and bind to the first we can + bool bound=false; + struct addrinfo *p; + for(p = aServerInfo; p != NULL && !bound; p = p->ai_next) { + //get the file descriptor: socket(IPdomain, typeOfConnection, protocol) + if ((aSocketServer = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { + perror("server: socket"); + }else{ + //set socket options: setsockopt(socket, level, optname, optval, optlen) + int yes=1; + if (setsockopt(aSocketServer, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) == -1) { + perror("setsockopt"); + return 1; + } + //bind socket to a specific port of the server: bind(filedescriptor, address data structure, addresslen) + if (bind(aSocketServer, p->ai_addr, p->ai_addrlen) == -1) { + close(aSocketServer); + perror("server: bind"); + }else + bound=true; + } + } + + if (p == NULL){ + std::cerr << "server: failed to bind\n"; + return 1; + } + + freeaddrinfo(aServerInfo); + + do{ + //causes the socket to listen to incoming connections: listen(filedescriptor, number of connections) + if (listen(aSocketServer, BACKLOG) == -1) { + perror("listen"); + return 1; + } + + std::cout << "server: waiting for connections...\n"; + socklen_t aAddrInfoSize= sizeof(struct sockaddr_storage); + while((_socketClient = accept(aSocketServer, (struct sockaddr *)&aClientAddrInfo, &aAddrInfoSize))==-1) { // main accept loop + //accept a connection: accept(filedescriptor, pointer to address information of caller, size of address information) + perror("accept"); + } + char* aMsg="You are connected to the simulation server. Please enter a command:\0"; + if (send(_socketClient, aMsg, strlen(aMsg), 0) == -1) perror("send"); + int aNumberOfBytes=0, aStringPos=0, aReturnPos; + char s[INET6_ADDRSTRLEN]; + inet_ntop(aClientAddrInfo.ss_family, get_in_addr((struct sockaddr *)&aClientAddrInfo), s, sizeof s); + std::cout << "server: got connection from " << s << std::endl; + char aTmpBuffer[BUFFER_SIZE]; + //aTmpBuffer[0]='\0'; + while(!_syncInfo->_terminate){ + //std::cout << "server critical I" << std::endl; + aReturnPos=getPositionOf(aTmpBuffer, '\n', aStringPos, aNumberOfBytes); + //std::cout << "server critical II" << std::endl; + if (aReturnPos==-1){ + int unreadBytes=aNumberOfBytes-aStringPos; + if (unreadBytes>0){ + //std::cout << "server critical IIIa" << std::endl; + memmove(aTmpBuffer, &aTmpBuffer[aStringPos], unreadBytes); + }else{ + //std::cout << "server critical IIIb" << std::endl; + aStringPos=aNumberOfBytes; + } + //std::cout << "server critical IV aNumberOfBytes:" << aNumberOfBytes << " aStringPos" << aStringPos << std::endl; + //char testBuffer[BUFFER_SIZE]; + aNumberOfBytes=recv(_socketClient, &aTmpBuffer[aNumberOfBytes-aStringPos], static_cast<size_t>(BUFFER_SIZE-1-(aNumberOfBytes-aStringPos)), 0); + //int startPos=aNumberOfBytes-aStringPos; + //size_t size= static_cast<size_t>(BUFFER_SIZE-1-startPos); + //aNumberOfBytes=recv(_socketClient, testBuffer, size, 0); + //std::cout << "VInter" << std::endl; + //memcpy(&aTmpBuffer[startPos], testBuffer, aNumberOfBytes); + //std::cout << "Va" << std::endl; + if (aNumberOfBytes<1){ + std::cout << "Broken connection detected, error code: " << aNumberOfBytes << std::endl; + _socketClient=-1; + break; + } + //std::cout << "Vb" << std::endl; + if (unreadBytes>0) aNumberOfBytes+=unreadBytes; + //aNumberOfBytes++; + aStringPos=0; + aReturnPos=getPositionOf(aTmpBuffer, '\n', aStringPos, aNumberOfBytes); + //std::cout << "server critical VI" << std::endl; + if (aReturnPos==-1){ + aReturnPos=aNumberOfBytes-1; + aTmpBuffer[aNumberOfBytes]='\0'; + } + } + //std::cout << "server critical VII" << std::endl; + //if (aNumberOfBytes < 1){ + + //perror("receive"); + //}else{ + if (strlen(&aTmpBuffer[aStringPos])>0){ + std::cout << "Command received: " << &aTmpBuffer[aStringPos] << std::endl; + std::string* aCmdString = new std::string(&aTmpBuffer[aStringPos]); + //std::cout << "Cmd as string: " << *aCmdString << std::endl; + //if (!_syncInfo->_simulator->execAsyncCmd(&aTmpBuffer[aStringPos])){ + if (_syncInfo->_simulator->execAsyncCmd(*aCmdString)){ + delete aCmdString; + }else{ + //std::cout << "Before push:"; + //std::cout << *aCmdString << std::endl; + //_syncInfo->pushCommand(new std::string(&aTmpBuffer[aStringPos])); + _syncInfo->pushCommand(aCmdString); + //std::cout << "After push" << std::endl; + //if (pthread_mutex_trylock(&_syncInfo->_mutexProduce)==0){ + // memmove(_syncInfo->_command,&aTmpBuffer[aStringPos], aReturnPos-aStringPos+1); + // pthread_mutex_unlock(&_syncInfo->_mutexConsume); + //}else{ + if (_syncInfo->_simulator->isBusy()) _syncInfo->_simulator->sendStatus(); + //} + } + } + //} + aStringPos=aReturnPos+1; + } + }while (!_syncInfo->_terminate); + std::cout << "Server loop terminated" << std::endl; + //sendReply("Terminate simulator\n"); + int aSocketClient=_socketClient; + pthread_mutex_lock(&_replyMutex); + _socketClient=-1; + pthread_mutex_unlock(&_replyMutex); + close(aSocketClient); + std::cout << "Socket client closed" << std::endl; + close(aSocketServer); + std::cout << "Socket server closed" << std::endl; + return 0; +} + +int Server::getPositionOf(char* iBuffer, char searchCh, int iStart, int iLength){ + for (int i=iStart;i<iLength;i++){ + if (iBuffer[i]==searchCh){ + iBuffer[i]='\0'; + return i; + } + } + return -1; +} + +void* Server::get_in_addr(struct sockaddr *sa) const{ + if (sa->sa_family == AF_INET) { + return &(reinterpret_cast<struct sockaddr_in*>(sa)->sin_addr); + } + return &(reinterpret_cast<struct sockaddr_in6*>(sa)->sin6_addr); +} + +void Server::sendReply(std::string iReplyStr){ + pthread_mutex_lock(&_replyMutex); + if (_socketClient!=-1){ + if (send(_socketClient, iReplyStr.c_str(), iReplyStr.length(), 0) == -1) perror("send"); + } + pthread_mutex_unlock(&_replyMutex); +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Server.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Server.h new file mode 100644 index 0000000000000000000000000000000000000000..f8927916043597b56fc7376ee61e86e0ecb927a0 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Server.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ServerH +#define ServerH + +#include <definitions.h> +#include <ServerIF.h> + +class Simulator; +class SimServSyncInfo; + +///Class encapsulating TCP server capabilities +class Server: public ServerIF{ +public: + ///Constructor + Server(); + ///Run the server + int run(); + void sendReply(std::string iReplyStr); +protected: + ///Returns position of character in string and and replaces it with 0 + /** + \param iBuffer Pointer to buffer + \param searchCh Character to search for + \param iStart Start Index + \param iLength String length + \return Index of character + */ + int getPositionOf(char* iBuffer, char searchCh, int iStart, int iLength); + ///Determines the IP adress of the client + void* get_in_addr(struct sockaddr *sa) const; + ///pointer to synchronization structure + int _socketClient; + ///Mutex protecting the reply function of the Server + pthread_mutex_t _replyMutex; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerExplore.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerExplore.cpp new file mode 100644 index 0000000000000000000000000000000000000000..664f6d2668a0fd223ea90f2e6800e13f2b46bf23 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerExplore.cpp @@ -0,0 +1,87 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<ServerExplore.h> +#include<SimServSyncInfo.h> +#include<Simulator.h> +#include<SimComponents.h> +#include<TMLChoiceCommand.h> + +ServerExplore::ServerExplore(){ + for (int i=0; i<RECUR_DEPTH; i++) leafsForLevel[i]=0; +} + +int ServerExplore::run(){ + _syncInfo->_simComponents->setBreakpointOnChoiceCmds(); + exploreTree(0); +} + +void ServerExplore::exploreTree(unsigned int iDepth){ + bool aSimTerminated=false; + TMLChoiceCommand* aChoiceCmd; + std::stringstream aBuffer; + if (iDepth==RECUR_DEPTH){ + std::ostringstream aFileName; + aFileName << "canc" << iDepth << "." << leafsForLevel[iDepth]++; + std::string aFileStr(aFileName.str()); + _syncInfo->_simulator->schedule2TXT(aFileStr); + }else{ + do{ + aSimTerminated=_syncInfo->_simulator->runToNextBreakpoint(); + aChoiceCmd=_syncInfo->_simComponents->getCurrentChoiceCmd(); + }while (!aSimTerminated && aChoiceCmd==0); + if (aSimTerminated){ + std::ostringstream aFileName; + aFileName << "term" << iDepth << "." << leafsForLevel[iDepth]++; + std::string aFileStr(aFileName.str()); + _syncInfo->_simulator->schedule2TXT(aFileStr); + }else{ + _syncInfo->_simComponents->writeObject(aBuffer); + for (unsigned int aBranch=0;aBranch<aChoiceCmd->getNumberOfBranches();aBranch++){ + aChoiceCmd->setPreferredBranch(aBranch); + exploreTree(iDepth+1); + _syncInfo->_simComponents->readObject(aBuffer); + } + } + } +} + +void ServerExplore::sendReply(std::string iReplyStr){ + //std::cout << iReplyStr; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerExplore.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerExplore.h new file mode 100644 index 0000000000000000000000000000000000000000..f0fafbff564d153ab8de4921b2bdbc6cc35789b0 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerExplore.h @@ -0,0 +1,61 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ServerExploreH +#define ServerExploreH + +#include <definitions.h> +#include <ServerIF.h> +#define RECUR_DEPTH 20 + +class Simulator; +class SimServSyncInfo; + +///Server which allows for exploring several branches of control flow +class ServerExplore: public ServerIF{ +public: + ///Constructor + ServerExplore(); + int run(); + void sendReply(std::string iReplyStr); +protected: + void exploreTree(unsigned int iDepth); + unsigned int leafsForLevel[RECUR_DEPTH]; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerIF.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerIF.cpp new file mode 100644 index 0000000000000000000000000000000000000000..25d082880cb9d3872012d9eb6564692b1ca98396 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerIF.cpp @@ -0,0 +1,56 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include<ServerIF.h> +#include<definitions.h> +#include<Simulator.h> +#include<SimServSyncInfo.h> + +void ServerIF::setSimSyncInfo(SimServSyncInfo* iSyncInfo){ + _syncInfo=iSyncInfo; +} + +void ServerIF::executeCmd(char* iCmd){ + std::string aCmdString(iCmd); + std::cout << "Command received: " << iCmd << std::endl; + if (!_syncInfo->_simulator->execAsyncCmd(aCmdString)){ + _syncInfo->pushCommand(new std::string(iCmd)); + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerIF.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerIF.h new file mode 100644 index 0000000000000000000000000000000000000000..40f086db6ee5ebaf8da03b9da6e510695869d997 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerIF.h @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef ServerIFH +#define ServerIFH + +#include <definitions.h> + +class SimServSyncInfo; + +///This class represents the basic Interface for Server subclasses +class ServerIF{ +public: + ///Destructor + virtual ~ServerIF(){} + ///Run the server + virtual int run()=0; + ///Send a reply to the client + /** + \param iReplyStr String to send + */ + virtual void sendReply(std::string iReplyStr)=0; + ///Set pointer to synchronization information structure + /** + \param iSyncInfo Pointer to synchronization information structure + */ + void setSimSyncInfo(SimServSyncInfo* iSyncInfo); +protected: + ///pointer to synchronization structure + SimServSyncInfo* _syncInfo; + ///Invokes the simulator to execute a command, method is blocking + /** + \param iCmd Pointer to a string containing a command + */ + void executeCmd(char* iCmd); +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerLocal.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerLocal.cpp new file mode 100644 index 0000000000000000000000000000000000000000..b1bf9a6de0f30a9f971a3c0024a33897da6263b2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerLocal.cpp @@ -0,0 +1,74 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include<ServerLocal.h> +#include<SimServSyncInfo.h> + +ServerLocal::ServerLocal(std::string& iCmdFile):_cmdFile(iCmdFile){ + //pthread_mutex_init(&_replyMutex, NULL); +} + +int ServerLocal::run(){ + std::ifstream aCmdFileH(_cmdFile.c_str()); + char aCmd[BUFFER_SIZE]; + int aNumberOfBytes; + if (aCmdFileH.is_open()){ + std::cout << "Reading command file " << aCmdFileH << std::endl; + while(!(_syncInfo->_terminate || aCmdFileH.eof())) { + aCmdFileH.getline(aCmd,BUFFER_SIZE-1); + aNumberOfBytes=strlen(aCmd); + if (aNumberOfBytes>0){ + aCmd[aNumberOfBytes]='\0'; + executeCmd(aCmd); + } + } + std::cout << "Server loop terminated" << std::endl; + aCmdFileH.close(); + std::cout << "Command file closed" << std::endl; + }else{ + char aEnd[]="0\0"; + std::cout << "Command file could not be opened" << std::endl; + executeCmd(aEnd); + } + return 0; +} + +void ServerLocal::sendReply(std::string iReplyStr){ + //std::cout << iReplyStr; +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerLocal.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerLocal.h new file mode 100644 index 0000000000000000000000000000000000000000..af7f3c7df83b97fce4820230ac9694c56053f69d --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/ServerLocal.h @@ -0,0 +1,62 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef ServerLocalH +#define ServerLocalH + +#include <definitions.h> +#include <ServerIF.h> + +class Simulator; +class SimServSyncInfo; + +///Server which reads in a command file and executes all contained commands +class ServerLocal: public ServerIF{ +public: + ///Constructor + /** + \param iCmdFile Reference to the file containing the simulation commands + */ + ServerLocal(std::string& iCmdFile); + int run(); + void sendReply(std::string iReplyStr); +protected: + std::string _cmdFile; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimComponents.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimComponents.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bffbb98df377a3e7badd54147aa20195796dd36e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimComponents.cpp @@ -0,0 +1,472 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#include <SimComponents.h> +#include <TraceableDevice.h> +#include <TMLTransaction.h> +#include <TMLTask.h> +#include <CPU.h> +#include <TMLChannel.h> +#include <TMLEventChannel.h> +//#include <TMLEventBChannel.h> +#include <Slave.h> +#include <Memory.h> +#include <Bridge.h> +#include <IndeterminismSource.h> +#include <ListenersSimCmd.h> +#include <Simulator.h> +#ifdef EBRDD_ENABLED +#include <EBRDD.h> +#endif + +SimComponents::SimComponents(int iHashValue /*, Simulator* iSimulator*/): _simulator(0), _stopFlag(false), _hashValue(iHashValue), _stoppedOnAction(false), _systemHash(), _knownStateReached(0), _onKnownPath(false) { +} + +SimComponents::~SimComponents(){ + //std::cerr << "b1\n"; + for(TEPEListenerList::iterator i=_tepeListenerList.begin(); i != _tepeListenerList.end(); ++i){ + //std::cerr << "b...\n"; + delete (*i); + //std::cerr << "after b...\n"; + } + //std::cerr << "b2\n"; + for(SerializableList::iterator i=_serList.begin(); i != _serList.end(); ++i){ + delete (*i); + } + for(SlaveList::iterator i=_slList.begin(); i != _slList.end(); ++i){ + delete (*i); + } +#ifdef EBRDD_ENABLED + for(EBRDDList::iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + delete (*i); + } +#endif + //_myfile.close(); +} + +void SimComponents::addTask(TMLTask* iTask){ + _vcdList.push_back(dynamic_cast<TraceableDevice*>(iTask)); + //_serList.push_back(dynamic_cast<Serializable*>(iTask)); + _taskList.push_back(iTask); + //std::cout << iTask->toString() << std::endl; +} + +void SimComponents::addChannel(TMLChannel* iChan){ + _serList.push_back(dynamic_cast<Serializable*>(iChan)); + _channelList.push_back(iChan); +} + +void SimComponents::addEvent(TMLEventChannel* iEvt){ + _serList.push_back(dynamic_cast<Serializable*>(iEvt)); + _channelList.push_back(iEvt); +} + +void SimComponents::addRequest(TMLEventChannel* iReq){ + _serList.push_back(dynamic_cast<Serializable*>(iReq)); + _channelList.push_back(iReq); +} + +void SimComponents::addCPU(CPU* iCPU){ + //TraceableDevice* a = dynamic_cast<TraceableDevice*> (iCPU); + //std::cout << "CPU added: " << iCPU << " " << iCPU->toString() << " " << iCPU->toShortString() << std::endl; + //std::cout << "TraceableDevice added: " << a << " " << a->toString() << " " << a->toShortString() << std::endl; + //_cpuList.push_back(dynamic_cast<SchedulableDevice*>(iCPU)); + _cpuList.push_back(iCPU); + _vcdList.push_back(dynamic_cast<TraceableDevice*>(iCPU)); + _serList.push_back(dynamic_cast<Serializable*>(iCPU)); +} + +void SimComponents::addBus(SchedulableCommDevice* iBus){ + _busList.push_back(iBus); + _vcdList.push_back(dynamic_cast<TraceableDevice*>(iBus)); + _serList.push_back(dynamic_cast<Serializable*>(iBus)); +} + +void SimComponents::addBridge(Bridge* iBridge){ + _slList.push_back(dynamic_cast<Slave*>(iBridge)); +} + +void SimComponents::addMem(Memory* iMem){ + _slList.push_back(dynamic_cast<Slave*>(iMem)); +} + +#ifdef EBRDD_ENABLED +void SimComponents::addEBRDD(EBRDD* iEBRDD){ + _ebrddList.push_back(iEBRDD); +} +#endif + +void SimComponents::addTEPEListener(GeneralListener* iTEPEListener){ + //std::cout << "before add\n"; + _tepeListenerList.push_back(iTEPEListener); + //std::cout << "after add\n"; +} + +void SimComponents::setTEPEEntryPoint(TEPEFloatingSigListener* iTEPEEntryPoint){ + _serList.push_back(dynamic_cast<Serializable*>(iTEPEEntryPoint)); +} + +void SimComponents::streamBenchmarks(std::ostream& s) const{ + s << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl; + for (TraceableDeviceList::const_iterator i=_vcdList.begin(); i!= _vcdList.end(); ++i){ + (*i)->streamBenchmarks(s); + s << std::endl; + } + s << TAG_SIMDURo << _simulator->getSimDuration() << TAG_SIMDURc << TAG_GLOBALc << TAG_STARTc << std::endl; +} + +std::ostream& SimComponents::writeObject(std::ostream& s){ +#ifdef DEBUG_SERIALIZE + std::cout << "WRITE ----------------------------------------------------\n"; +#endif + for(SerializableList::const_iterator i=_serList.begin(); i != _serList.end(); ++i){ + (*i)->writeObject(s); + } +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + (*i)->writeObject(s); + } +#endif + TMLTime aSimulatedTime = SchedulableDevice::getSimulatedTime(); + WRITE_STREAM(s, aSimulatedTime); + WRITE_STREAM(s, _onKnownPath); +#ifdef DEBUG_SERIALIZE + std::cout << "Write: SimComponents simulatedTime: " << aSimulatedTime << std::endl; + std::cout << "----------------------------------------------------\n"; +#endif + return s; +} + +std::istream& SimComponents::readObject(std::istream& s){ +#ifdef DEBUG_SERIALIZE + std::cout << "READ ----------------------------------------------------\n"; +#endif + for(SerializableList::const_iterator i=_serList.begin(); i != _serList.end(); ++i){ + //std::cout << "SimComponents --> next Device" << std::endl; + (*i)->readObject(s); + } +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + (*i)->readObject(s); + } +#endif + TMLTime aSimulatedTime; + READ_STREAM(s, aSimulatedTime); + SchedulableDevice::setSimulatedTime(aSimulatedTime); + READ_STREAM(s, _onKnownPath); +#ifdef DEBUG_SERIALIZE + std::cout << "Read: SimComponents simulatedTime: " << aSimulatedTime << std::endl; + std::cout << "----------------------------------------------------\n"; +#endif + return s; +} + +void SimComponents::reset(){ + //std::cout << "SimComponents:reset" << std::endl; + for(SerializableList::const_iterator i=_serList.begin(); i != _serList.end(); ++i){ + //std::cout << "loop reset before" << std::endl; + (*i)->reset(); + //std::cout << "loop reset after" << std::endl; + } + TMLTransaction::reset(); +#ifdef ADD_COMMENTS + Comment::reset(); +#endif +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_ebrddList.begin(); i != _ebrddList.end(); ++i){ + (*i)->reset(); + } +#endif + //std::cout << "----------------------------------------------- RESET\n"; + _knownStateReached = false; +} + +void SimComponents::resetStateHash(){ + _systemHashTable.clear(); + TMLTransaction::resetID(); + _onKnownPath=false; + TMLCommand::clearCoverageVars(); +} + +SchedulableDevice* SimComponents::getCPUByName(const std::string& iCPU) const{ + if (iCPU[0]>='0' && iCPU[0]<='9') return getCPUByID(StringToNum<ID>(iCPU)); + for(CPUList::const_iterator i=_cpuList.begin(); i != _cpuList.end(); ++i){ + if ((*i)->toString()==iCPU) return (*i); + } + return NULL; +} + +TMLTask* SimComponents::getTaskByName(const std::string& iTask) const{ + if (iTask[0]>='0' && iTask[0]<='9') return getTaskByID(StringToNum<ID>(iTask)); + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + if ((*i)->toString()==iTask) return (*i); + } + std::cerr << "aborting, task " << iTask << " does not exist\n"; + return NULL; +} + +SchedulableCommDevice* SimComponents::getBusByName(const std::string& iBus) const{ + if (iBus[0]>='0' && iBus[0]<='9') return getBusByID(StringToNum<ID>(iBus)); + for(BusList::const_iterator i=_busList.begin(); i != _busList.end(); ++i){ + if ((*i)->toString()==iBus) return (*i); + } + return NULL; +} + +Slave* SimComponents::getSlaveByName(const std::string& iSlave) const{ + if (iSlave[0]>='0' && iSlave[0]<='9') return getSlaveByID(StringToNum<ID>(iSlave)); + for(SlaveList::const_iterator i=_slList.begin(); i != _slList.end(); ++i){ + if ((*i)->toString()==iSlave) return (*i); + } + return NULL; +} + +TMLChannel* SimComponents::getChannelByName(const std::string& iChannel) const{ + if (iChannel[0]>='0' && iChannel[0]<='9') return getChannelByID(StringToNum<ID>(iChannel)); + for(ChannelList::const_iterator i=_channelList.begin(); i != _channelList.end(); ++i){ + if ((*i)->toShortString()==iChannel) return (*i); + } + return NULL; +} + +SchedulableDevice* SimComponents::getCPUByID(ID iID) const{ + //std::cerr << "getCPUByID " << iID << "\n"; + //CPUList::const_iterator i=_cpuList.begin(); + //std::cerr << "getCPUByID after i=_cpuList.begin()" << iID << "\n"; + for(CPUList::const_iterator i=_cpuList.begin(); i != _cpuList.end(); ++i){ + //std::cout << "CPU x\n"; + if ((*i)->getID()==iID) return (*i); + } + //std::cout << "End CPU\n"; + return NULL; +} + +TMLTask* SimComponents::getTaskByID(ID iID) const{ + std::cout << "Task " << iID << "\n"; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +SchedulableCommDevice* SimComponents::getBusByID(ID iID) const{ + for(BusList::const_iterator i=_busList.begin(); i != _busList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +Slave* SimComponents::getSlaveByID(ID iID) const{ + for(SlaveList::const_iterator i=_slList.begin(); i != _slList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +TMLChannel* SimComponents::getChannelByID(ID iID) const{ + for(ChannelList::const_iterator i=_channelList.begin(); i != _channelList.end(); ++i){ + if ((*i)->getID()==iID) return (*i); + } + return NULL; +} + +/*TMLChoiceCommand* SimComponents::getCurrentChoiceCmd(){ + TMLChoiceCommand* aResult; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aResult = dynamic_cast<TMLChoiceCommand*>((*i)->getCurrCommand()); + if (aResult!=0) return aResult; + } + return 0; +}*/ + +IndeterminismSource* SimComponents::getCurrentRandomCmd(){ + IndeterminismSource* aResult; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aResult = dynamic_cast<IndeterminismSource*>((*i)->getCurrCommand()); + if (aResult!=0) return aResult; + } + return 0; +} + + +std::string SimComponents::getCmpNameByID(ID iID){ + SchedulableDevice* aSched = getCPUByID(iID); + if (aSched!=0) return aSched->toString(); + TMLTask* aTask = getTaskByID(iID); + if (aTask!=0) return aTask->toString(); + SchedulableCommDevice* aBus = getBusByID(iID); + if (aBus!=0) return aBus->toString(); + Slave* aSlave = getSlaveByID(iID); + if (aSlave!=0) return aSlave->toString(); + TMLChannel* aChan = getChannelByID(iID); + if (aChan!=0) return aChan->toShortString(); + return std::string("unknown"); +} + +//ListenerSubject <TransactionListener>* SimComponents::getListenerByID(ID iID){ +ListenerSubject <GeneralListener>* SimComponents::getListenerByID(ID iID){ + //std::cerr << "Hello 1\n"; + ListenerSubject <GeneralListener>* aListener = getCPUByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 2\n"; + aListener = TMLCommand::getCommandByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 3\n"; + aListener = getTaskByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 4\n"; + aListener = getBusByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 5\n"; + aListener = getSlaveByID(iID); + if (aListener!=0) return aListener; + //std::cerr << "Hello 6\n"; + return getChannelByID(iID); +} + +/*void SimComponents::setBreakpointOnChoiceCmds(){ + TMLChoiceCommand* aResult; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aResult = dynamic_cast<TMLChoiceCommand*>((*i)->getCurrCommand()); + if (aResult!=0) aResult->setBreakpoint(new Breakpoint(this)); + } +}*/ + +void SimComponents::setStopFlag(bool iStopFlag, const std::string& iStopReason){ + _stopFlag=iStopFlag; + if (iStopFlag){ + _stopReason+= " " + iStopReason; + }else{ + _stopReason=""; + _stoppedOnAction=false; + //std::cout << "_stoppedOnAction=false\n"; + } +} + +ID SimComponents::checkForRecurringSystemState(){ + //std::cout << "Recurring Sys State\n"; + _systemHash.init((HashValueType)0xabcd, _taskList.size()); + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + //std::cout << "add Task Hash " << (*i)->toString() << "\n"; + _systemHash.addValue((*i)->getStateHash()); + TMLCommand* aCurrCmd = (*i)->getCurrCommand(); + if (aCurrCmd!=0){ + //std::cout << "add curr cmd and progress Task " << (*i)->toString() << "\n"; + //_systemHash.addValue((HashValueType)aCurrCmd); + _systemHash.addValue((HashValueType)aCurrCmd->getID()); + //std::cout << "cmd ID: " << aCurrCmd->getID() << "\n"; + //_systemHash.addValue((HashValueType)(aCurrCmd->getLength()-aCurrCmd->getProgress())); + _systemHash.addValue((HashValueType)(aCurrCmd->getProgress())); + } + } + //std::cout << " *** New channel list: ***\n"; + for(ChannelList::const_iterator i=_channelList.begin(); i != _channelList.end(); ++i){ + //std::cout << "add channel " << (*i)->toString() << "\n"; + (*i)->getStateHash(&_systemHash); + /*if ((*i)->getSignificance()) std::cout << (*i)->toShortString() << " has sig. content: " << (*i)->getContent() << "\n"; + else + std::cout << (*i)->toShortString() << " is not significant in 2nd step!!!!!!!!!!!!!!\n";*/ + } + //std::cout << "-> Hash Value: " << _systemHash.getHash() << "\n"; + ID aRetVal; + std::pair<StateHashSet::const_iterator,bool> aRes = _systemHashTable.insert(std::pair<HashValueType,ID>(_systemHash.getHash(),TMLTransaction::getID())); + if (aRes.second){ + aRetVal=TMLTransaction::getID(); + TMLTransaction::incID(); + //std::cout << "*** Added as " << aRetVal << "***\n"; + //std::cout << "STATE CREATED "<< TMLTransaction::getID() << " +++++++++++++++++++++++++++++\n"; + _knownStateReached = 0; + if (_onKnownPath) std::cout << "YOU SHOULD NOT SEE THIS\n"; + }else{ + _onKnownPath=true; + setStopFlag(true, "Recurring system state"); //to be restablished!!!!!!!!!!!! + //std::cout << "KNOWN STATE REACHED "<< aRes.first->second << " ***************************\n"; + _knownStateReached= aRes.first->second; + aRetVal = aRes.first->second; + //std::cout << "*** Merged with " << aRetVal << "***\n"; + } + //return _knownStateReached; + return aRetVal; +} + +void SimComponents::showTaskStates(){ + static int iCount=0; + static ParamType *aDatalen, *aStandard; + static SchedulableDevice *aFEP, *aDeint, *aChDec; + if (iCount==0){ + bool oIsID; + aDatalen = getTaskByName("PacketManagerDesign__PacketGenerator")->getVariableByName("datalen", oIsID); + aStandard = getTaskByName("PacketManagerDesign__PacketGenerator")->getVariableByName("standard", oIsID); + aFEP = getCPUByName("FEP_0"); + aDeint = getCPUByName("Deinterleaver_0"); + aChDec = getCPUByName("ChannelDecoder_0"); + } + + /*std::cout<< "***** NEW entry " << iCount++ << " Sim Time " << SchedulableDevice::getSimulatedTime() << " *****\n"; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + std::cout << "State of " << (*i)->toString() << ": " ; + if ((*i)->getCurrCommand()==0 || (*i)->getCurrCommand()->getCurrTransaction()==0){ + std::cout << "has no transaction\n"; + }else{ + if ((*i)->getCurrCommand()->getCurrTransaction()->getVirtualLength()==0) + std::cout << "has NOT runnable transaction\n"; + else + std::cout << "has runnable transaction: " << (*i)->getCurrCommand()->getCurrTransaction()->toString() << "\n"; + } + } + for(BusList::const_iterator i=_busList.begin(); i != _busList.end(); ++i){ + TMLTransaction* nextBusTrans = dynamic_cast<SchedulableDevice*>(*i)->getNextTransaction(); + if (nextBusTrans!=0){ + std::cout << "Bus " << (*i)->toString() << " has next trans: " << nextBusTrans->toString() << "\n"; + } + }*/ + std::cout << *aDatalen << "," << *aStandard << "," << SchedulableDevice::getSimulatedTime() << "," << + aFEP->getBusyCycles() << "," << aDeint->getBusyCycles() << "," << aChDec->getBusyCycles() << "\n"; + +} + +bool SimComponents::couldCPUBeIdle(CPU* iCPU){ + int aRunFlag =0; + for(TaskList::const_iterator i=_taskList.begin(); i != _taskList.end(); ++i){ + aRunFlag |= (*i)->hasRunnableTrans(iCPU); + if ((aRunFlag & 2)!=0) return true; + } + return ((aRunFlag & 1)==0); +} \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimComponents.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimComponents.h new file mode 100644 index 0000000000000000000000000000000000000000..47c969b7e2e91b325c5c527973a9114450c62248 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimComponents.h @@ -0,0 +1,331 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SimComponentsH +#define SimComponentsH + +#include <definitions.h> +#include <Serializable.h> +#include <HashAlgo.h> +#include <ListenerSubject.h> + +class TMLEventChannel; +class TMLEventChannel; +class Bridge; +class Memory; +class Simulator; +class IndeterminismSource; +class GeneralListener; +class PropertyConstraint; +class TEPEFloatingSigListener; +#ifdef EBRDD_ENABLED +class EBRDD; +#endif + +///Class encapsulating architecture and application objects +class SimComponents: public Serializable{ +public: + ///Constructor + /** + \param iHashValue Hash Value for application and architecture + */ + SimComponents(int iHashValue); + ///Destructor + virtual ~SimComponents(); + ///Add a task + /** + \param iTask Pointer to task + */ + void addTask(TMLTask* iTask); + ///Add a channel + /** + \param iChan Pointer to channel + */ + void addChannel(TMLChannel* iChan); + ///Add an event + /** + \param iEvt Pointer to event + */ + void addEvent(TMLEventChannel* iEvt); + ///Add a request + /** + \param iReq Pointer to request + */ + void addRequest(TMLEventChannel* iReq); + ///Add a CPU + /** + \param iCPU Pointer to CPU + */ + void addCPU(CPU* iCPU); + ///Add a bus + /** + \param iBus Pointer to bus + */ + void addBus(SchedulableCommDevice* iBus); + ///Add a bridge + /** + \param iBridge Pointer to bridge + */ + void addBridge(Bridge* iBridge); + ///Add a memory + /** + \param iMem Pointer to memory + */ + void addMem(Memory* iMem); +#ifdef EBRDD_ENABLED + ///Add an EBRDD + /** + \param iEBRDD Pointer to EBRDD + */ + void addEBRDD(EBRDD* iEBRDD); +#endif + ///Add a TEPE event listener + /** + \param iTEPEListener Pointer to TEPEListener + */ + void addTEPEListener(GeneralListener* iTEPEListener); + ///Sets the TEPE root constraint + /** + \param iTEPEEntryPoint Pointer to TEPEFloatingSigListener + */ + void setTEPEEntryPoint(TEPEFloatingSigListener* iTEPEEntryPoint); + ///Calls streamBenchmarks of all traceable devices contained in vcdList + /** + param s Reference to output stream object + */ + void streamBenchmarks(std::ostream& s) const; + std::ostream& writeObject(std::ostream& s); + std::istream& readObject(std::istream& s); + ///Resets all serializable entities to their initial state + void reset(); + ///Searches for a CPU based on its name + /** + \param iCPU Name of the CPU + \return Pointer to that CPU + */ + SchedulableDevice* getCPUByName(const std::string& iCPU) const; + ///Searches for a Task based on its name + /** + \param iTask Name of the Task + \return Pointer to that Task + */ + TMLTask* getTaskByName(const std::string& iTask) const; + ///Searches for a Bus based on its name + /** + \param iBus Name of the Bus + \return Pointer to that Bus + */ + SchedulableCommDevice* getBusByName(const std::string& iBus) const; + ///Searches for a Slave based on its name + /** + \param iSlave Name of the Slave + \return Pointer to that Slave + */ + Slave* getSlaveByName(const std::string& iSlave) const; + ///Searches for a Channel based on its name + /** + \param iChannel Name of the Channel + \return Pointer to that Channel + */ + TMLChannel* getChannelByName(const std::string& iChannel) const; + ///Searches for a CPU based on its name + /** + \param iID ID of the CPU + \return Pointer to that CPU + */ + SchedulableDevice* getCPUByID(ID iID) const; + ///Searches for a Task based on its name + /** + \param iID ID of the Task + \return Pointer to that Task + */ + TMLTask* getTaskByID(ID iID) const; + ///Searches for a Bus based on its name + /** + \param iID ID of the Bus + \return Pointer to that Bus + */ + SchedulableCommDevice* getBusByID(ID iID) const; + ///Searches for a Slave based on its name + /** + \param iID ID of the Slave + \return Pointer to that Slave + */ + Slave* getSlaveByID(ID iID) const; + ///Searches for a Channel based on its name + /** + \param iID ID of the Channel + \return Pointer to that Channel + */ + TMLChannel* getChannelByID(ID iID) const; + ///Returns an iterator for the internal CPU list + /** + \return Const iterator for CPU list + */ + inline const CPUList& getCPUList() const{return _cpuList;} + ///Returns an iterator for the internal bus list + /** + \return Const iterator for bus list + */ + inline const BusList& getBusList() const{return _busList;} + ///Returns an iterator for the internal VCD list + /** + \return Const iterator for VCD list + */ + inline const TraceableDeviceList& getVCDList() const{return _vcdList;} + ///Returns the state of the stop flag + /** + \return Stop flag + */ + inline bool getStopFlag() const {return _stopFlag;} + ///Sets the value of the stop flag + /** + \param iStopFlag Stop flag + \param iStopReason Reason why the simulation stopped + */ + void setStopFlag(bool iStopFlag, const std::string& iStopReason); + ///Returns whether the simulation stopped on an Action command + /** + \return Flag indicating if the simulation stopped on an Action command + */ + inline bool getStoppedOnAction(){return _stoppedOnAction;} + ///Sets the flag indicating that the simulation stopped on an Action command + inline void setStoppedOnAction(){_stoppedOnAction=true; /*std::cout << "_stoppedOnAction=true\n";*/} + ///If a task has a choice command as current command, a pointer to it is returned + /** + \return Pointer if choice command was found, null otherwise + */ + IndeterminismSource* getCurrentRandomCmd(); + ///Returns a hash value for the current application and architecture + /** + \return Hash value + */ + inline int getHashValue() {return _hashValue;} + ///Returns an iterator for the internal task list + /** + \return Const iterator for task list + */ + inline const TaskList& getTaskList() const{return _taskList;} +#ifdef EBRDD_ENABLED + ///Returns an iterator for the internal EBRDD list + /** + \return Const iterator for EBRDD list + */ + inline const EBRDDList& getEBRDDList() const{return _ebrddList;} +#endif + ///Returns the reason why the simulation stopped + /** + \return Reason why the simulation stopped + */ + inline std::string getStopReason(){return _stopReason;} + ///Returns a pointer to the simulator + /** + \return Pointer to simulator + */ + inline Simulator* getSimulator(){return _simulator;} + ///Sets a reference to the simulator + /** + \param iSim Pointer to simulator + */ + inline void setSimulator(Simulator* iSim){_simulator=iSim;} + ///Returns the name of the component with the indicated ID + /** + \param iID Component ID + */ + std::string getCmpNameByID(ID iID); + ///Halts the simulation if the current system state has been encountered before + ID checkForRecurringSystemState(); + ///Checks if a known system state was reached + /** + \return Flag indicating whether a known state has been encountered + */ + inline ID wasKnownStateReached() const {return _knownStateReached;} + //inline ID wasKnownStateReached() const {return 0;} + ///Resets the global system hash + void resetStateHash(); + inline bool getOnKnownPath(){ + _knownStateReached=0; + return _onKnownPath; + } + ListenerSubject<GeneralListener>* getListenerByID(ID iID); + virtual void generateTEPEs()=0; + void showTaskStates(); + bool couldCPUBeIdle(CPU* iCPU); +protected: + ///Pointer to simulator + Simulator* _simulator; + ///List holding CPUs + CPUList _cpuList; + ///List holding schedulable communication devices + BusList _busList; + ///List holding traceable devices + TraceableDeviceList _vcdList; + ///List holding serializable devices + SerializableList _serList; + ///List holding bridges and memories + SlaveList _slList; + ///List holding tasks + TaskList _taskList; + ///List holding channels + ChannelList _channelList; + ///TEPE listener listener + TEPEListenerList _tepeListenerList; +#ifdef EBRDD_ENABLED + ///List holding EBRDDs + EBRDDList _ebrddList; +#endif + ///Flag indicating whether the simulation must be stopped + bool _stopFlag; + ///Hash Value for application and architecture + int _hashValue; + ///Reason why the simulation stopped + std::string _stopReason; + ///Flag indicating whether a task has an action command pending + bool _stoppedOnAction; + ///System wide state hash + StateHashSet _systemHashTable; + ///System Hash + HashAlgo _systemHash; + ///Flag indicating whether a known state has been encountered + ID _knownStateReached; + bool _onKnownPath; +}; +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimServSyncInfo.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimServSyncInfo.h new file mode 100644 index 0000000000000000000000000000000000000000..987bdc394d090275fe7ad3d1c169727756b97586 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/SimServSyncInfo.h @@ -0,0 +1,126 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ + +#ifndef SimServSyncInfoH +#define SimServSyncInfoH + +#include <definitions.h> + +#define BUFFER_SIZE 1000 +class CurrentComponents; +class Simulator; +class ServerIF; +class SimComponents; + +///Synchronizes server and simulator +class SimServSyncInfo{ +public: + ///Pointer to simulator + Simulator* _simulator; + ///Pointer to server + ServerIF* _server; + ///Pointe simulation components + SimComponents* _simComponents; + ///Simulation terminate flag + bool _terminate; + + ///Constructor + SimServSyncInfo():_simulator(0), _server(0), _simComponents(0), _terminate(false), _popGotStuck(false){ + pthread_mutex_init(&_mutexCmdAvailable, NULL); + pthread_mutex_init(&_mutexListProtect, NULL); + pthread_mutex_lock(&_mutexCmdAvailable); + } + + ///Destructor + ~SimServSyncInfo(){ + for(CommandQueue::iterator i=_cmdQueue.begin(); i != _cmdQueue.end(); ++i){ + delete (*i); + } + } + + ///Push command on command queue + /** + \param iCmd Command + */ + void pushCommand(std::string* iCmd){ + //std::cout << "Value to write: " << *iCmd << std::endl; + pthread_mutex_lock(&_mutexListProtect); + //std::cout << "Before push_back" << *iCmd << std::endl; + _cmdQueue.push_back(iCmd); + if (_popGotStuck){ + _popGotStuck=false; + pthread_mutex_unlock(&_mutexCmdAvailable); + } + pthread_mutex_unlock(&_mutexListProtect); + //std::cout << "End write" << std::endl; + } + + ///Pop command from command queue + /** + \return Command + */ + std::string* popCommand(){ + pthread_mutex_lock(&_mutexListProtect); + if (_cmdQueue.empty()){ + _popGotStuck=true; + pthread_mutex_unlock(&_mutexListProtect); + pthread_mutex_lock(&_mutexCmdAvailable); + pthread_mutex_lock(&_mutexListProtect); + } + std::string* aCmdTmp=_cmdQueue.front(); + //std::cout << "Read value: " << *aCmdTmp << std::endl; + _cmdQueue.pop_front(); + //std::cout << "After pop" << std::endl; + pthread_mutex_unlock(&_mutexListProtect); + //std::cout << "End read" << std::endl; + return aCmdTmp; + } + +protected: + ///Mutex for mutual exclusion of list access + pthread_mutex_t _mutexListProtect; + ///Mutex preventing read access to empty command queue + pthread_mutex_t _mutexCmdAvailable; + ///Command queue + CommandQueue _cmdQueue; + ///Flag indicating that the server is waiting for new commands + bool _popGotStuck; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Simulator.cpp b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Simulator.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f833796e547e49ef719d0df31c2752924496bb51 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Simulator.cpp @@ -0,0 +1,1527 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#include <Simulator.h> +//#include <Server.h> +//#include <ServerLocal.h> +#include <SimServSyncInfo.h> +#include <TMLCommand.h> +#include <TMLTransaction.h> +#include <SimComponents.h> +#include <IndeterminismSource.h> +#include <CPU.h> +#include <TMLTask.h> +#include <TMLChannel.h> +#include <ServerIF.h> +#include <Server.h> +#include <ServerLocal.h> +#include <TMLEventChannel.h> +#ifdef EBRDD_ENABLED +#include <EBRDD.h> +#include <EBRDDCommand.h> +#include <ERC.h> +#endif + + +Simulator::Simulator(SimServSyncInfo* iSyncInfo):_syncInfo(iSyncInfo), _simComp(_syncInfo->_simComponents), _busy(false), _simTerm(false), _randChoiceBreak(_syncInfo->_simComponents), _wasReset(true), _longRunTime(0), _shortRunTime(-1), _replyToServer(true), _branchCoverage(60), _commandCoverage(100), _terminateExplore(false), _simDuration(0){ +} + +Simulator::~Simulator(){ + //if (_currCmdListener!=0) delete _currCmdListener; + //if (_randChoiceBreak!=0) delete _randChoiceBreak; +} + +TMLTransaction* Simulator::getTransLowestEndTime(SchedulableDevice*& oResultDevice) const{ + //int tmp=0; + TMLTransaction *aMarker=0, *aTempTrans; + TMLTime aLowestTime=-1; + SchedulableDevice* aTempDevice; + //static unsigned int aTransitionNo=0; +#ifdef DEBUG_KERNEL + std::cout << "kernel:getTLET: before loop" << std::endl; +#endif + //for(SchedulingList::const_iterator i=_simComp->_cpuList.begin(); i != _simComp->_cpuList.end(); ++i){ + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + aTempDevice=*i; + aTempTrans=aTempDevice->getNextTransaction(); + if (aTempTrans!=0 && aTempTrans->getVirtualLength()>0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:getTLET: transaction found on " << aTempDevice->toString() << ": " << aTempTrans->toString() << std::endl; +#endif + //tmp++; + if (aTempTrans->getEndTime() < aLowestTime){ + aMarker=aTempTrans; + aLowestTime=aTempTrans->getEndTime(); + oResultDevice=aTempDevice; + } + } +//#ifdef DEBUG_KERNEL + else { + /*if (!_simComp->couldCPUBeIdle(*i)){ + std::cout << "kernel:getTLET: no transaction found on " << aTempDevice->toString() << std::endl; + std::cout << "Cry !!!!!!!!"; + //exit(1); + }*/ + } +//#endif + } + //if (tmp==1) std::cout << "trans only on one CPU " << oResultDevice->toString() << "\n"; + return aMarker; +} + +ID Simulator::schedule2GraphDOT(std::ostream& iDOTFile, std::ostream& iAUTFile, ID iStartState, unsigned int& oTransCounter) const{ + CPUList::iterator i; + //std::cout << "entry graph output\n"; + GraphTransactionQueue aQueue; + TMLTransaction* aTrans, *aTopElement; + ID aStartState=iStartState, aEndState=0; + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + aTrans = (*i)->getTransactions1By1(true); + if (aTrans!=0) aQueue.push(aTrans); + } + //std::ostringstream aOutp; + while (!aQueue.empty()){ + CPU* aCPU; + aTopElement = aQueue.top(); + aCPU = aTopElement->getCommand()->getTask()->getCPU(); + aEndState = aTopElement->getStateID(); + if (aEndState==0){ + aEndState=TMLTransaction::getID(); + TMLTransaction::incID(); + } + //13 -> 17 [label = "i(CPU0__test1__TMLTask_1__wro__test1__ch<4 ,4>)"]; + oTransCounter++; + iDOTFile << aStartState << " -> " << aEndState << " [label = \"i(" << aCPU->toString() << "__" << aTopElement->getCommand()->getTask()->toString() << "__" << aTopElement->getCommand()->getCommandStr(); + if (aTopElement->getChannel()!=0){ + iDOTFile << "__" << aTopElement->getChannel()->toShortString(); + } + iDOTFile << "<" << aTopElement->getVirtualLength() << ">)\"]\n"; + //(20,"i(CPU0__test1__TMLTask_1__wr__test1__ch<4 ,4>)", 24) + iAUTFile << "(" << aStartState << "," << "\"i(" << aCPU->toString() << "__" << aTopElement->getCommand()->getTask()->toString() << "__" << aTopElement->getCommand()->getCommandStr(); + if (aTopElement->getChannel()!=0){ + iAUTFile << "__" << aTopElement->getChannel()->toShortString(); + } + iAUTFile << "<" << aTopElement->getVirtualLength() << ">)\"," << aEndState <<")\n"; + aStartState = aEndState; + aQueue.pop(); + aTrans = aCPU->getTransactions1By1(false); + if (aTrans!=0) aQueue.push(aTrans); + } + //std::cout << "exit graph output\n"; + return aStartState; +} + + +void Simulator::schedule2Graph(std::string& iTraceFileName) const{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + CPUList::iterator i; + GraphTransactionQueue aQueue; + TMLTransaction* aTrans, *aTopElement; + unsigned int aTransitionNo=0; + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + aTrans = (*i)->getTransactions1By1(true); + if (aTrans!=0) aQueue.push(aTrans); + } + std::ostringstream aOutp; + while (!aQueue.empty()){ + //std::ostringstream aTempStr; + CPU* aCPU; + aTopElement = aQueue.top(); + aCPU = aTopElement->getCommand()->getTask()->getCPU(); + for (TMLLength a=0; a < aTopElement->getVirtualLength(); a++){ + aOutp << "(" << aTransitionNo << ",\"i(" << aCPU->toString() << "__" << aTopElement->getCommand()->getTask()->toString() << "__" << aTopElement->getCommand()->getCommandStr(); + if (aTopElement->getChannel()!=0){ + aOutp << "__" << aTopElement->getChannel()->toShortString(); + //if (dynamic_cast<TMLEventChannel*>(aTopElement->getChannel())==0) aOutp << "<" << aTopElement->getVirtualLength() << ", " << ">"; + } + aOutp << ")\"," << ++aTransitionNo << ")\n"; + + //aOutp << aTempStr.str() << ++aTransitionNo << ")\n"; + } + //myfile << aTempStr.str(); + aQueue.pop(); + aTrans = aCPU->getTransactions1By1(false); + if (aTrans!=0) aQueue.push(aTrans); + } + myfile << "des (0, " << aTransitionNo+1 << ", " << aTransitionNo+2 << ")\n"; + myfile << aOutp.str() << "(" << aTransitionNo << ",\"i(exit)\", " << aTransitionNo+1 << ")\n"; + myfile.close(); + } + else + std::cout << "Unable to open Graph output file" << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The Graph output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; +} + +void Simulator::schedule2TXT(std::string& iTraceFileName) const{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + (*i)->schedule2TXT(myfile); + } + //for(BusList::const_iterator j=_simComp->getBusIterator(false); j != _simComp->getBusIterator(true); ++j){ + for(BusList::const_iterator j=_simComp->getBusList().begin(); j != _simComp->getBusList().end(); ++j){ + (*j)->schedule2TXT(myfile); + } + myfile.close(); + } + else + std::cout << "Unable to open text output file." << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The text output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; +} + +void Simulator::schedule2HTML(std::string& iTraceFileName) const{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + myfile << "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n"; + myfile << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"schedstyle.css\" />\n<meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\" />\n<title>Scheduling</title>\n</head>\n<body>\n"; + //for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + for(CPUList::const_iterator i=_simComp->getCPUList().begin(); i != _simComp->getCPUList().end(); ++i){ + (*i)->schedule2HTML(myfile); + } + //for(BusList::const_iterator j=_simComp->getBusIterator(false); j != _simComp->getBusIterator(true); ++j){ + for(BusList::const_iterator j=_simComp->getBusList().begin(); j != _simComp->getBusList().end(); ++j){ + (*j)->schedule2HTML(myfile); + } + //for_each(iCPUlist.begin(), iCPUlist.end(),std::bind2nd(std::mem_fun(&CPU::schedule2HTML),myfile)); + myfile << "</body>\n</html>\n"; + myfile.close(); + } + else + std::cout << "Unable to open HTML output file." << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The HTML output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; +} + +void Simulator::schedule2VCD(std::string& iTraceFileName) const{ + time_t aRawtime; + struct tm * aTimeinfo; + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + time(&aRawtime); + aTimeinfo=localtime(&aRawtime); + std::ofstream myfile (iTraceFileName.c_str()); + if (myfile.is_open()){ + //std::cout << "File is open" << std::endl; + SignalChangeQueue aQueue; + std::string aSigString; + //bool aNoMoreTrans; + //TraceableDevice* actDevice; + TMLTime aCurrTime=-1; + SignalChangeData* aTopElement; + TMLTime aNextClockEvent=0; + myfile << "$date\n" << asctime(aTimeinfo) << "$end\n\n$version\nDaniel's TML simulator\n$end\n\n"; + myfile << "$timescale\n1 ns\n$end\n\n$scope module Simulation $end\n"; + //std::cout << "Before 1st loop" << std::endl; + //for (TraceableDeviceList::const_iterator i=_simComp->getVCDIterator(false); i!= _simComp->getVCDIterator(true); ++i){ + for (TraceableDeviceList::const_iterator i=_simComp->getVCDList().begin(); i!= _simComp->getVCDList().end(); ++i){ + //TraceableDevice* a=*i; +// a->streamBenchmarks(std::cout); +// a->toString(); + //std::cout << "in 1st loop " << a << std::endl; + //std::cout << "device: " << (*i)->toString() << std::endl; + //myfile << "$var integer 3 " << (*i)->toShortString() << " " << (*i)->toString() << " $end\n"; + myfile << "$var wire 1 " << (*i)->toShortString() << " " << (*i)->toString() << " $end\n"; + //std::cout << "get next signal change" << std::endl; + //aTime = (*i)->getNextSignalChange(true, aSigString, aNoMoreTrans); + aTopElement = new SignalChangeData(); + (*i)->getNextSignalChange(true, aTopElement); + aQueue.push(aTopElement); + //std::cout << "push" << std::endl; + //aQueue.push(new SignalChangeData(aSigString, aTime, (aNoMoreTrans)?0:(*i))); + } + myfile << "$var integer 32 clk Clock $end\n"; + myfile << "$upscope $end\n$enddefinitions $end\n\n"; + //std::cout << "Before 2nd loop" << std::endl; + while (!aQueue.empty()){ + aTopElement=aQueue.top(); + while (aNextClockEvent < aTopElement->_time){ + myfile << "#" << aNextClockEvent << "\nr" << aNextClockEvent << " clk\n"; + aNextClockEvent+=CLOCK_INC; + } + if (aCurrTime!=aTopElement->_time){ + aCurrTime=aTopElement->_time; + myfile << "#" << aCurrTime << "\n"; + } + if (aNextClockEvent == aTopElement->_time){ + myfile << "b" << vcdTimeConvert(aNextClockEvent) << " clk\n"; + aNextClockEvent+=CLOCK_INC; + } + //myfile << aTopElement->_sigChange << "\n"; + myfile << vcdValConvert(aTopElement->_sigChange) << aTopElement->_device->toShortString() << "\n"; + aQueue.pop(); + TMLTime aTime = aTopElement->_time; + aTopElement->_device->getNextSignalChange(false, aTopElement); + if (aTopElement->_time == aTime) + delete aTopElement; + else + aQueue.push(aTopElement); + //actDevice=aTopElement->_device; + //if (actDevice!=0) aTime = actDevice->getNextSignalChange(false, aSigString, aNoMoreTrans); + //delete aTopElement; + //aQueue.pop(); + //if (actDevice!=0) aQueue.push(new SignalChangeData(aSigString, aTime, (aNoMoreTrans)?0:actDevice)); + } + myfile << "#" << aCurrTime+1 << "\n"; + std::cout << "Simulated cycles: " << aCurrTime << std::endl; + //for (TraceableDeviceList::const_iterator i=_simComp->getVCDIterator(false); i!= _simComp->getVCDIterator(true); ++i){ + for (TraceableDeviceList::const_iterator i=_simComp->getVCDList().begin(); i!= _simComp->getVCDList().end(); ++i){ + //myfile << VCD_PREFIX << "100 " << (*i)->toShortString() << "\n"; + myfile << "0" << (*i)->toShortString() << "\n"; + //std::cout << "Utilization of component " << (*i)->toString() << ": " << ((float)(*i)->getBusyCycles()) / ((float)aCurrTime) << std::endl; + } + + myfile.close(); + } + else + std::cout << "Unable to open VCD output file." << std::endl; + gettimeofday(&aEnd,NULL); + std::cout << "The VCD output took " << getTimeDiff(aBegin,aEnd) << "usec. File: " << iTraceFileName << std::endl; + +} + +bool Simulator::channelImpactsCommand(TMLChannel* iCh, TMLCommand* iCmd){ + unsigned int nbOfChannels = iCmd->getNbOfChannels(); + for (unsigned int i=0; i<nbOfChannels; i++) + if (iCh==iCmd->getChannel(i)) return true; + return false; +} + +bool Simulator::simulate(TMLTransaction*& oLastTrans){ + TMLTransaction* depTransaction,*depCPUnextTrans,*transLET; + TMLCommand* commandLET,*depCommand,*depCPUnextCommand; + TMLTask* depTask; + SchedulableDevice* cpuLET; + CPU* depCPU; +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: first schedule" << std::endl; +#endif + _simComp->setStopFlag(false,""); + //std::cout << "before loop " << std::endl; + //for(TaskList::const_iterator i=_simComp->getTaskIterator(false); i!=_simComp->getTaskIterator(true);i++){ + for(TaskList::const_iterator i=_simComp->getTaskList().begin(); i!=_simComp->getTaskList().end();i++){ + //std::cout << "loop it " << (*i)->toString() << std::endl; + if ((*i)->getCurrCommand()!=0) (*i)->getCurrCommand()->prepare(true); + //std::cout << "loop it end" << (*i)->toString() << std::endl; + } + //std::cout << "after loop1" << std::endl; +#ifdef EBRDD_ENABLED + for(EBRDDList::const_iterator i=_simComp->getEBRDDIterator(false); i!=_simComp->getEBRDDIterator(true);i++){ + if ((*i)->getCurrCommand()!=0) (*i)->getCurrCommand()->prepare(); + } +#endif + //std::cout << "after loop2" << std::endl; + //for_each(_simComp->getCPUIterator(false), _simComp->getCPUIterator(true),std::mem_fun(&CPU::setRescheduleFlag)); + //for_each(_simComp->getCPUIterator(false), _simComp->getCPUIterator(true),std::mem_fun(&CPU::schedule)); + for_each(_simComp->getCPUList().begin(), _simComp->getCPUList().end(),std::mem_fun(&CPU::schedule)); + //std::cout << "after schedule" << std::endl; + transLET=getTransLowestEndTime(cpuLET); + //std::cout << "after getTLET" << std::endl; +#ifdef LISTENERS_ENABLED + if (_wasReset) NOTIFY_SIM_STARTED(); + _wasReset=false; +#endif + while (transLET!=0 && !_simComp->getStopFlag()){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: scheduling decision: " << transLET->toString() << std::endl; +#endif + commandLET=transLET->getCommand(); +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: add trans " << commandLET->toString() << std::endl; +#endif + if (cpuLET->addTransaction(0)){ + unsigned int nbOfChannels = commandLET->getNbOfChannels(); + //bool aRescheduleCoresFlag=false; + for (unsigned int i=0;i<nbOfChannels; i++){ + if ((depTask=commandLET->getDependentTask(i))==0) continue; + //if (depTask!=0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent Task found" << std::endl; +#endif + depCPU=depTask->getCPU(); + //std::cout << "CPU this task : " << cpuLET->toString(); + //if (depCPU==0) std::cout << " CPU dep task " << depTask->toString() << ": 0\n"; else std::cout << " CPU dep task: "<< depTask->toString() << " " << depCPU->toString() << std::endl; + if (depCPU!=cpuLET){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: Tasks running on different CPUs" << std::endl; +#endif + depCommand=depTask->getCurrCommand(); + //if (depCommand!=0 && (dynamic_cast<TMLSelectCommand*>(depCommand)!=0 || channelImpactsCommand(commandLET->getChannel(i), depCommand))){ + if (depCommand!=0 && channelImpactsCommand(commandLET->getChannel(i), depCommand)) { //RIGHT one + +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: commands are accessing the same channel" << std::endl; +#endif + depTransaction=depCommand->getCurrTransaction(); + if (depTransaction!=0 && depTransaction->getVirtualLength()!=0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent task has a current transaction and is not blocked any more" << std::endl; +#endif + /* if (depCPU==0){ + aRescheduleCoresFlag=true; +//#ifdef DEBUG_KERNEL + std::cout << "Multi Core scheduling procedure\n"; +//#endif + depTask->setRescheduleFlagForCores(); + continue; + }*/ + //std::cout << "Let's crash!!!!!!!!\n"; + depCPUnextTrans=depCPU->getNextTransaction(); + //std::cout << "Not crahed!!!!!!!!\n"; + if (depCPUnextTrans!=0){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: transaction scheduled on dependent CPU" << std::endl; +#endif + depCPUnextCommand=depCPUnextTrans->getCommand(); + if (depCPUnextCommand->getTask()!=depTask){ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent task not yet scheduled on dependent CPU" << std::endl; +#endif + + depCPU->truncateAndAddNextTransAt(transLET->getEndTime()); +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: dependent transaction truncated" << std::endl; +#endif + } + }else{ +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: schedule dependent CPU " << depCPU->toString() << std::endl; +#endif + depCPU->schedule(); + } + } + } + } + } +#ifdef DEBUG_KERNEL + std::cout << "kernel:simulate: invoke schedule on executing CPU" << std::endl; +#endif + /*if (aRescheduleCoresFlag){ + for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + if (*i!=cpuLET) (*i)->truncateIfNecessary(transLET->getEndTime()); + } + for(CPUList::const_iterator i=_simComp->getCPUIterator(false); i != _simComp->getCPUIterator(true); ++i){ + if (*i!=cpuLET) (*i)->rescheduleIfNecessary(); + } + }*/ + cpuLET->schedule(); +#ifdef LISTENERS_ENABLED + NOTIFY_TIME_ADVANCES(transLET->getEndTime()); +#endif + } + oLastTrans=transLET; + //std::cout << "kernel:simulate: getTransLowestEndTime" << std::endl; + transLET=getTransLowestEndTime(cpuLET); + //_syncInfo->_server->sendReply("Sleep once again\n"); + //sleep(1); + } + + bool aSimCompleted = (transLET==0 && !_simComp->getStoppedOnAction()); + + if (aSimCompleted){ +#ifdef LISTENERS_ENABLED + NOTIFY_SIM_STOPPED(); + NOTIFY_EVALUATE(); +#endif + _longRunTime = max(_longRunTime, SchedulableDevice::getSimulatedTime()); + _shortRunTime = min(_shortRunTime, SchedulableDevice::getSimulatedTime()); + //_simComp->showTaskStates(); + } + return (aSimCompleted); +} + +const std::string Simulator::getArgs(const std::string& iComp, const std::string& iDefault, int iLen, char** iArgs){ + int aPosition=0; + while (aPosition < iLen){ + if (iComp.compare(iArgs[aPosition])==0){ + if (aPosition+1 < iLen && iArgs[aPosition+1][0]!='-'){ + return std::string(iArgs[aPosition+1]); + }else + return iDefault; + } + aPosition++; + } + return std::string(""); +} + +void Simulator::printHelp(){ + std::cout << "\n************************** Command line arguments *************************\n" + "-gpath specify path for graph output\n" + "-server launch simulator in server mode\n" + "-file read simulation commands from file\n" + "-help display this help text\n" + "-ohtml ofile simulate and write traces to ofile in html format\n" + "-otxt ofile simulate and write traces to ofile in text format\n" + "-ovcd ofile simulate and write traces to ofile in vcd format\n" + "-ograph ofile simulate and write traces to ofile in aut format\n" + "-explo generate the reachability graph \n" + "-cmd \'c1 p1 p2;c2\' execute commands c1 with parameters p1 and p2 and c2\n" + "-oxml ofile xml reply is written to ofile, in case the -cmd option is used\n" + "***************************************************************************\n\n"; +} + +void Simulator::run(){ + std::string* aNewCmd; + std::cout << "Running in server mode.\n"; + while (!_syncInfo->_terminate){ + //pthread_mutex_lock (&_syncInfo->_mutexConsume); + //std::cout << "Simulator Waiting for cmd\n"; + aNewCmd=_syncInfo->popCommand(); + //decodeCommand(_syncInfo->_command); + //std::cout << "Let's crash.\n"; + decodeCommand(*aNewCmd); + //std::cout << "Returned from decode.\n"; + //std::cout << "Before delete.\n"; + delete aNewCmd; + //pthread_mutex_unlock (&_syncInfo->_mutexProduce); + } + std::cout << "Simulator loop terminated." << std::endl; +} + +ServerIF* Simulator::run(int iLen, char ** iArgs){ + std::string aArgString; + std::cout << "Starting up...\n"; + _graphOutPath = getArgs("-gpath", "", iLen, iArgs); + if (_graphOutPath.length()>0 && _graphOutPath[_graphOutPath.length()-1]!='/') + _graphOutPath+="/"; + aArgString =getArgs("-server", "server", iLen, iArgs); + if (!aArgString.empty()) return new Server(); + aArgString =getArgs("-file", "file", iLen, iArgs); + if (!aArgString.empty()) return new ServerLocal(aArgString); + aArgString =getArgs("-explo", "file", iLen, iArgs); + std::cout << "Just analyzed explo 1->" + aArgString + "<-\n"; + if (!aArgString.empty()) decodeCommand("1 7 100 100"); + std::cout << "Just analyzed explo 2\n"; + //if (!aArgString.empty()) return new ServerExplore(); + std::cout << "Running in command line mode.\n"; + _replyToServer = false; + aArgString =getArgs("-help", "help", iLen, iArgs); + if (aArgString.empty()){ + //aArgString =getArgs("-explo", "explo", iLen, iArgs); + aArgString =getArgs("-cmd", "1 0", iLen, iArgs); + if (aArgString.empty()){ + TMLTransaction* oLastTrans; + simulate(oLastTrans); + aArgString=getArgs("-ohtml", "scheduling.html", iLen, iArgs); + if (!aArgString.empty()) schedule2HTML(aArgString); + aArgString=getArgs("-otxt", "scheduling.txt", iLen, iArgs); + if (!aArgString.empty()) schedule2TXT(aArgString); + aArgString=getArgs("-ovcd", "scheduling.vcd", iLen, iArgs); + if (!aArgString.empty()) schedule2VCD(aArgString); + aArgString=getArgs("-ograph", "scheduling.aut", iLen, iArgs); + if (!aArgString.empty()) schedule2Graph(aArgString); + _simComp->streamBenchmarks(std::cout); + std::cout << "Simulated time: " << SchedulableDevice::getSimulatedTime() << " time units.\n"; + }else{ + std::ofstream aXmlOutFile; + std::string aXmlFileName = getArgs("-oxml", "reply.xml", iLen, iArgs); + if (aXmlFileName.empty()) aXmlOutFile.open("/dev/null"); else aXmlOutFile.open(aXmlFileName.c_str()); + if (aXmlOutFile.is_open()){ + std::string aNextCmd; + std::istringstream iss(aArgString+";"); + getline(iss, aNextCmd, ';'); + while (!(iss.eof() || aNextCmd.empty())){ + std::cout << "next cmd to execute: \"" << aNextCmd << "\"\n"; + decodeCommand(aNextCmd, aXmlOutFile); + getline(iss, aNextCmd, ';'); + } + aXmlOutFile.close(); + }else + std::cout << "XML output file could not be opened, aborting.\n"; + } + rusage res; + getrusage(RUSAGE_SELF, &res); + //std::cerr << res.ru_utime.tv_sec << "," << res.ru_utime.tv_usec << "," << res.ru_stime.tv_sec << "," << res.ru_stime.tv_usec << "\n"; + double aRunTime = ((double)((res.ru_utime.tv_sec + res.ru_stime.tv_sec) *1000000 + res.ru_utime.tv_usec + res.ru_stime.tv_usec))/1000000; + std::cerr << "trans/sec: " << ((double)SchedulableDevice::getOverallTransNo())/aRunTime << "\n"; + std::cerr << "cycles/trans: " << ((double)SchedulableDevice::getOverallTransSize())/((double)SchedulableDevice::getOverallTransNo()) << "\n"; + std::cerr << "Trans size: " << SchedulableDevice::getOverallTransSize() << " trans no: " << SchedulableDevice::getOverallTransNo() << "\n"; + std::cerr << "Statement coverage of application: " << TMLCommand::getCmdCoverage() << "%\n"; + std::cerr << "Branch coverage of application: " << TMLCommand::getBranchCoverage() << "%\n"; + }else{ + printHelp(); + } + //clock_t tick =sysconf(_SC_CLK_TCK); + //tms test; + //times(&test); + //std::cout << "user time: " << test.tms_utime << " system time: " << test.tms_stime + test.tms_cstime << " tick: " << tick << "\n"; + return 0; +} + +void Simulator::decodeCommand(std::string iCmd, std::ostream& iXmlOutStream){ + //std::cout << "Not crashed. I: " << iCmd << std::endl; + //std::cout << iCmd << std::endl; + unsigned int aCmd, aParam1, aParam2, anErrorCode=0; + //std::string anIssuedCmd(iCmd); + std::istringstream aInpStream(iCmd); + //std::cout << "Not crashed. II\n"; + std::ostringstream aGlobMsg, anEntityMsg, anAckMsg; + std::string aStrParam; + //bool aSimTerminated=false; + //std::cout << "Not crashed. III\n"; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + _simComp->setStopFlag(false,""); + //anEntityMsg.str(""); + aGlobMsg << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl /*<< TAG_REPLYo << anIssuedCmd << TAG_REPLYc << std::endl*/; + aInpStream >> aCmd; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + //std::cout << "Decoding command:" << iCmd << std::endl; + switch (aCmd){ + case 0: //Quit simulation + std::cout << "QUIT SIMULATION" << std::endl; + break; + case 1:{ + struct timeval aBegin,aEnd; + gettimeofday(&aBegin,NULL); + _busy=true; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + anAckMsg << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << /*TAG_REPLYo << anIssuedCmd << TAG_REPLYc << std::endl<< */ TAG_MSGo << "Command received" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl << TAG_STATUSo << SIM_BUSY << TAG_STATUSc << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + if (_replyToServer) { + if (_syncInfo != NULL) + if (_syncInfo->_server != NULL) + _syncInfo->_server->sendReply(anAckMsg.str()); + } + aInpStream >> aParam1; + //std::cout << "Not crashed. I: " << iCmd << std::endl; + TMLTransaction* oLastTrans; + switch (aParam1){ + case 0: //Run to next breakpoint + std::cout << "Run to next breakpoint." << std::endl; + aGlobMsg << TAG_MSGo << "Run to next breakpoint" << TAG_MSGc << std::endl; + _simTerm=runToNextBreakpoint(oLastTrans); + std::cout << "End Run to next breakpoint." << std::endl; + break; + case 1: //Run up to trans x + std::cout << "Run to transaction x." << std::endl; + aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + anErrorCode=1; + std::cout << "End Run to transaction x." << std::endl; + break; + case 2: //Run x transactions + std::cout << "Run x transactions." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXTransactions(_simComp,aParam2); + aGlobMsg << TAG_MSGo << "Created listener run " << aParam2 << " transactions" << TAG_MSGc << std::endl; + _simTerm=runXTransactions(aParam2, oLastTrans); + std::cout << "Run x transactions." << std::endl; + break; + case 3: //Run up to command x + std::cout << "Run to command x." << std::endl; + aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + anErrorCode=1; + std::cout << "End Run to command x." << std::endl; + break; + case 4: //Run x commands + std::cout << "Run x commands." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXCommands(_simComp,aParam2); + aGlobMsg << TAG_MSGo << "Created listener run " << aParam2 << " commands" << TAG_MSGc << std::endl; + _simTerm=runXCommands(aParam2, oLastTrans); + std::cout << "End Run x commands." << std::endl; + break; + case 5: //Run up to time x + std::cout << "Run to time x." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXTimeUnits(_simComp,aParam2); + aGlobMsg << TAG_MSGo << "Created listener run to time " << aParam2 << TAG_MSGc << std::endl; + _simTerm=runTillTimeX(aParam2, oLastTrans); + std::cout << "End Run to time x." << std::endl; + break; + case 6: //Run for x time units + std::cout << "Run for x time units." << std::endl; + aInpStream >> aParam2; + //_currCmdListener=new RunXTimeUnits(_simComp,aParam2+SchedulableDevice::getSimulatedTime()); + aGlobMsg << TAG_MSGo << "Created listener run " << aParam2 << " time units" << TAG_MSGc << std::endl; + _simTerm=runXTimeUnits(aParam2, oLastTrans); + std::cout << "End Run for x time units." << std::endl; + break; + case 7: {//Explore Tree + //for (int i=0; i<RECUR_DEPTH; i++) leafsForLevel[i]=0; + std::cout << "Explore tree." << std::endl; + _commandCoverage=100; _branchCoverage=100; + aInpStream >> _commandCoverage; + aInpStream >> _branchCoverage; + std::stringstream aPath; + aPath << _graphOutPath << "tree.dot"; + std::ofstream myDOTfile (aPath.str().c_str()); + aPath.str(""); + aPath << _graphOutPath << "tree.aut.tmp"; + std::ofstream myAUTfile (aPath.str().c_str()); + aPath.str(""); + //std::ofstream myfile2 ("tree.txt"); + if (myDOTfile.is_open() && myAUTfile.is_open()){ +//#ifdef DOT_GRAPH_ENABLED + myDOTfile << "digraph BCG {\nsize = \"7, 10.5\";\ncenter = TRUE;\nnode [shape = circle];\n0 [peripheries = 2];\n"; +//#endif + unsigned int aTransCounter=0; + _terminateExplore=false; + exploreTree(0, 0, myDOTfile, myAUTfile, aTransCounter); +//#ifdef DOT_GRAPH_ENABLED + myDOTfile << "}\n"; + //system ("mv tree tree.dot"); + myDOTfile.close(); +//#else + myAUTfile.close(); + aPath.str(""); + aPath << _graphOutPath << "header"; + std::ofstream myTMPfile (aPath.str().c_str()); + if (myTMPfile.is_open()){ + //des (0, 29, 27) + myTMPfile << "des(0," << aTransCounter << "," << TMLTransaction::getID() << ")\n"; + myTMPfile.close(); + //system ("cat header tree.aut.tmp > tree.aut"); + //system ("rm header tree.aut.tmp"); + aPath.str(""); + aPath << "cat " << _graphOutPath << "header " << _graphOutPath << "tree.aut.tmp > " << _graphOutPath << "tree.aut"; + system(aPath.str().c_str()); + aPath.str(""); + aPath << "rm " << _graphOutPath << "header " << _graphOutPath << "tree.aut.tmp"; + system(aPath.str().c_str()); + } +//#endif + //myfile2.close(); + } + aGlobMsg << TAG_MSGo << "Tree was explored" << TAG_MSGc << std::endl; + _simTerm=true; + //aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + //anErrorCode=1; + std::cout << "** Longest runtime: " << _longRunTime << ", shortest runtime: " << _shortRunTime << " **\n"; + std::cout << "End Explore tree." << std::endl; + break; + } + case 8:{//Run to next transfer on bus x + std::cout << "Run to next transfer on bus x." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getBusByName(aStrParam)); + SchedulableCommDevice* aBus=_simComp->getBusByName(aStrParam); + if (aBus!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on Bus " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToBusTrans(aBus, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run to next transfer on bus x." << std::endl; + break; + } + case 9:{//Run until CPU x executes + std::cout << "Run until CPU x executes." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getCPUByName(aStrParam)); + SchedulableDevice* aCPU=_simComp->getCPUByName(aStrParam); + if (aCPU!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on CPU " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToCPUTrans(aCPU, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until CPU x executes." << std::endl; + break; + } + case 10:{//Run until Task x executes + std::cout << "Run until Task x executes." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getTaskByName(aStrParam)); + TMLTask* aTask=_simComp->getTaskByName(aStrParam); + if (aTask!=0){ + aGlobMsg << TAG_MSGo << "Created listener on Task " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToTaskTrans(aTask, oLastTrans); + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until Task x executes." << std::endl; + break; + } + case 11:{//Run until Mem x is accessed + std::cout << "Run until Mem x is accessed." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getSlaveByName(aStrParam)); + Slave* aSlave=_simComp->getSlaveByName(aStrParam); + if (aSlave!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on Slave " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToSlaveTrans(aSlave, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until Mem x is accessed." << std::endl; + break; + } + case 12:{//Run until operation on channel x is performed + std::cout << "Run until operation on channel x is performed." << std::endl; + aInpStream >> aStrParam; + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (_simComp->getChannelByName(aStrParam)); + TMLChannel* aChannel=_simComp->getChannelByName(aStrParam); + if (aChannel!=0){ + //_currCmdListener=new RunTillTransOnDevice(_simComp, aSubject); + aGlobMsg << TAG_MSGo << "Created listener on Channel " << aStrParam << TAG_MSGc << std::endl; + _simTerm=runToChannelTrans(aChannel, oLastTrans); + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until operation on channel x is performed." << std::endl; + break; + } + case 13:{//Run to next random choice command + std::cout << "Run to next random command." << std::endl; + _simTerm=runToNextRandomCommand(oLastTrans); + std::cout << "End Run to next random choice command." << std::endl; + break; + } + case 14:{//Run until condition is satisfied + std::cout << "Run until condition is satisfied." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask=_simComp->getTaskByName(aStrParam); + if (aTask!=0){ + bool aSuccess, aTerminated; + aInpStream >> aStrParam; + aTerminated = runUntilCondition(aStrParam, aTask, oLastTrans, aSuccess); + if (aSuccess){ + _simTerm=aTerminated; + aGlobMsg << TAG_MSGo << "Created listeners for condition " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CONDERR << TAG_MSGc << std::endl; + anErrorCode=5; + } + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + std::cout << "End Run until condition is satisfied." << std::endl; + break; + } + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + } + gettimeofday(&aEnd,NULL); + _simDuration += getTimeDiff(aBegin,aEnd); + aGlobMsg << TAG_SIMDURo << _simDuration << TAG_SIMDURc << std::endl; + //std::cout << "Before sim\n"; + if (anErrorCode==0){ + //aGlobMsg << TAG_CURRTASKo << oLastTrans->getCommand()->getTask()->getID() << TAG_CURRTASKc; + //simulate(); + //aGlobMsg << + std::cout << "Simulated time: " << SchedulableDevice::getSimulatedTime() << " time units.\n"; + } + _busy=false; + break; + } + case 2: //reset + std::cout << "Simulator reset." << std::endl; + _wasReset=true; + _simComp->reset(); + _simComp->resetStateHash(); + _simTerm=false; + _simDuration=0; + aGlobMsg << TAG_MSGo << "Simulator reset" << TAG_MSGc << std::endl; + std::cout << "End Simulator reset." << std::endl; + break; + case 3:{//Print variable x + std::cout << "Print variable x." << std::endl; + aInpStream >> aStrParam; + if (aStrParam=="all"){ + //for(TaskList::const_iterator i=_simComp->getTaskIterator(false); i !=_simComp->getTaskIterator(true); ++i){ + for(TaskList::const_iterator i=_simComp->getTaskList().begin(); i !=_simComp->getTaskList().end(); ++i){ + printVariablesOfTask(*i, anEntityMsg); + } + }else{ + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + //std::cout << "Task " << aStrParam << " exists" << std::endl; + aInpStream >> aStrParam; + if (aStrParam=="all"){ + printVariablesOfTask(aTask, anEntityMsg); + }else{ + //std::cout << "Check if Var *" << aStrParam << "* exists" << std::endl; + //std::cout << "Len: " << aStrParam.length() << std::endl; + bool aIsId; + ParamType* aParam=aTask->getVariableByName(aStrParam, aIsId); + if (aParam!=0){ + aGlobMsg << TAG_MSGo << "Variable values" << TAG_MSGc << std::endl; + anEntityMsg << TAG_TASKo << " id=\"" << aTask-> getID() << "\" name=\"" << aTask->toString() << "\">" << TAG_VARo; + if (aIsId) anEntityMsg << " id=\""; else anEntityMsg << " name=\""; + anEntityMsg << aStrParam << "\">" << *aParam << TAG_VARc << TAG_TASKc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + } + } + std::cout << "End Print variable x." << std::endl; + break; + } + case 4:{//Print information about simulation element x + //bool aFailure=false; + std::cout << "Print information about simulation element x." << std::endl; + aInpStream >> aParam1; + aInpStream >> aStrParam; + anErrorCode=0; + switch (aParam1){ + case 0: {//CPU + TraceableDevice* aDevice = dynamic_cast<TraceableDevice*>(_simComp->getCPUByName(aStrParam)); + if (aDevice!=0) aDevice->streamStateXML(anEntityMsg); else anErrorCode=2; + break; + } + case 1: {//Bus + TraceableDevice* aDevice = dynamic_cast<TraceableDevice*>(_simComp->getBusByName(aStrParam)); + if (aDevice!=0) aDevice->streamStateXML(anEntityMsg); else anErrorCode=2; + break; + } + case 2: //Mem + case 3: //Bridge + anErrorCode=1; + break; + case 4:{ //Channel + TMLChannel* aDevice = _simComp->getChannelByName(aStrParam); + if (aDevice!=0){ + std::cout << "get Channel info" << std::endl; + aDevice->streamStateXML(anEntityMsg); + }else anErrorCode=2; + break; + } + case 5: {//Task + TraceableDevice* aDevice = dynamic_cast<TraceableDevice*>(_simComp->getTaskByName(aStrParam)); + if (aDevice!=0) aDevice->streamStateXML(anEntityMsg); else anErrorCode=2; + break; + } + default:anErrorCode=3; + } + switch(anErrorCode){ + case 0: + aGlobMsg << TAG_MSGo << "Component information" << TAG_MSGc << std::endl; + break; + case 1: + aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + break; + case 2: + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + break; + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + break; + } + std::cout << "End Print information about simulation element x." << std::endl; + break; + } + case 5:{//Set variable x to value y + std::cout << "Set variable x to value y." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aStrParam; + bool aIsId; + ParamType* aParam=aTask->getVariableByName(aStrParam, aIsId); + if (aParam!=0){ + aInpStream >> *aParam; + aGlobMsg << TAG_MSGo << "Set variable " << aStrParam << " to " << *aParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Set variable x to value y." << std::endl; + break; + } + case 6:{ //Write x samples/events to channel y + std::cout << "Write x samples/events to channel y." << std::endl; + //aGlobMsg << TAG_MSGo << MSG_CMDNIMPL << TAG_MSGc << std::endl; + //anErrorCode=1; + aInpStream >> aStrParam; + TMLChannel* aChannel = _simComp->getChannelByName(aStrParam); + if (aChannel==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aParam1; + TMLEventChannel* anEventChannel = dynamic_cast<TMLEventChannel*>(aChannel); + if (anEventChannel==0){ + //aChannel->insertSamples(aParam1, anInsertParam); + aChannel->insertSamples(aParam1, 0); + }else{ + //Parameter<ParamType> anInsertParam((dynamic_cast<TMLEventChannel*>(aChannel))->getParamNo()); + Parameter* anInsertParam = anEventChannel->buildParameter(); + aInpStream >> anInsertParam; + //aChannel->insertSamples(aParam1, anInsertParam); + aChannel->insertSamples(aParam1, anInsertParam); + } + aGlobMsg << TAG_MSGo << "Write data/event to channel." << TAG_MSGc << std::endl; + } + std::cout << "End Write x samples/events to channel y." << std::endl; + break; + } + case 7: //Save trace in file x + std::cout << "Save trace in file x." << std::endl; + aInpStream >> aParam1; + aInpStream >>aStrParam; + switch (aParam1){ + case 0: //VCD + aGlobMsg << TAG_MSGo << "Schedule output in VCD format" << TAG_MSGc << std::endl; + schedule2VCD(aStrParam); + break; + case 1: //HTML + aGlobMsg << TAG_MSGo << "Schedule output in HTML format" << TAG_MSGc << std::endl; + schedule2HTML(aStrParam); + break; + case 2: //TXT + aGlobMsg << TAG_MSGo << "Schedule output in TXT format" << TAG_MSGc << std::endl; + schedule2TXT(aStrParam); + break; + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + } + std::cout << "End Save trace in file x." << std::endl; + break; + case 8:{ //Save simulation state in file x + std::cout << "Save simulation state in file x." << std::endl; + aInpStream >> aStrParam; + std::ofstream aFile (aStrParam.c_str()); + if (aFile.is_open()){ + _simComp->writeObject(aFile); + aGlobMsg << TAG_MSGo << "Simulation state saved in file " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_FILEERR << aStrParam << TAG_MSGc << std::endl; + anErrorCode=4; + } + std::cout << "End Save simulation state in file x." << std::endl; + break; + } + case 9:{//Restore simulation state from file x + std::cout << "Restore simulation state from file x." << std::endl; + aInpStream >> aStrParam; + std::ifstream aFile(aStrParam.c_str()); + if (aFile.is_open()){ + _simTerm=false; + _simComp->reset(); + _simComp->readObject(aFile); + aGlobMsg << TAG_MSGo << "Simulation state restored from file " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_FILEERR << aStrParam << TAG_MSGc << std::endl; + anErrorCode=4; + } + std::cout << "End Restore simulation state from file x." << std::endl; + break; + } + case 10:{ //Save benchmarks in file x + std::cout << "Save benchmarks in file x." << std::endl; + aInpStream >> aParam1; + switch (aParam1){ + case 0: _simComp->streamBenchmarks(std::cout); + aGlobMsg << TAG_MSGo << "Benchmarks written to screen " << TAG_MSGc << std::endl; + break; + case 1:{ + aInpStream >> aStrParam; + std::ofstream aFile (aStrParam.c_str()); + if (aFile.is_open()){ + _simComp->streamBenchmarks(aFile); + aGlobMsg << TAG_MSGo << "Benchmarks written to file " << aStrParam << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_FILEERR << aStrParam << TAG_MSGc << std::endl; + anErrorCode=4; + } + break; + } + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + } + std::cout << "End Save benchmarks in file x." << std::endl; + break; + } + case 11:{//Set breakpoint in task x, command y + std::cout << "Set breakpoint in task x, command y." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aParam2; + TMLCommand* aCommand=aTask->getCommandByID(aParam2); + if (aCommand!=0){ + aCommand->setBreakpoint(new Breakpoint(_simComp)); + _breakpoints.insert(aCommand); + aGlobMsg << TAG_MSGo << "Breakpoint was created" << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Set breakpoint in task x, command y." << std::endl; + break; + } + case 12:{//Choose branch + std::cout << "Choose branch." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + aInpStream >> aParam1; + //TMLChoiceCommand* aChoiceCmd=dynamic_cast<TMLChoiceCommand*>(aTask->getCommandByID(aParam1)); + IndeterminismSource* aRandomCmd=dynamic_cast<IndeterminismSource*>(aTask->getCommandByID(aParam1)); + if (aRandomCmd!=0){ + aInpStream >> aParam2; + //aChoiceCmd->setPreferredBranch(aParam2); + aRandomCmd->setRandomValue(aParam2); + aGlobMsg << TAG_MSGo << "Preferred branch was set" << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Choose branch." << std::endl; + break; + } + case 16:{//Delete breakpoint in task x, command y + std::cout << "Delete breakpoint in task x, command y." << std::endl; + aInpStream >> aStrParam; + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + if (aTask==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + + aInpStream >> aParam2; + TMLCommand* aCommand=aTask->getCommandByID(aParam2); + if (aCommand!=0){ + aCommand->removeBreakpoint(); + _breakpoints.erase(aCommand); + aGlobMsg << TAG_MSGo << "Breakpoint was removed" << TAG_MSGc << std::endl; + }else{ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + } + } + std::cout << "End Delete breakpoint in task x, command y." << std::endl; + break; + } + case 17:{//Get number of branches of current cmd + std::cout << "Get number of branches of current cmd." << std::endl; + IndeterminismSource* aRandomCmd =_simComp->getCurrentRandomCmd(); + if (aRandomCmd==0){ + aGlobMsg << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << std::endl; + anErrorCode=2; + }else{ + unsigned int aNbNextCmds; + aNbNextCmds = aRandomCmd->getRandomRange(); + TMLCommand* aCmd = dynamic_cast<TMLCommand*>(aRandomCmd); + anEntityMsg << TAG_TASKo << " id=\"" << aCmd->getTask()-> getID() << "\" name=\"" << aCmd->getTask()->toString() << "\">" << TAG_CURRCMDo << " id=\"" << aCmd->getID() << "\">" << TAG_BRANCHo << aNbNextCmds << TAG_BRANCHc << "\">" << TAG_CURRCMDc << TAG_TASKc << std::endl; + aGlobMsg << TAG_MSGo << "Current choice command" << TAG_MSGc << std::endl; + } + std::cout << "End Get number of branches of current cmd." << std::endl; + break; + } + case 18:{//Get breakpoint list + std::cout << "Get breakpoint list." << std::endl; + for(BreakpointSet::iterator i=_breakpoints.begin(); i != _breakpoints.end(); ++i){ + anEntityMsg << TAG_TASKo << " id=\"" << (*i)->getTask()->getID() << "\" name=\"" << (*i)->getTask()->toString() << "\">" << TAG_BREAKCMDo << " id=\"" << (*i)->getID() << "\">" << TAG_BREAKCMDc << TAG_TASKc << std::endl; + } + aGlobMsg << TAG_MSGo << "Breakpoint List" << TAG_MSGc << std::endl; + std::cout << "End Get breakpoint list." << std::endl; + break; + } + case 19://Get Hash Value + std::cout << "Get Hash Value." << std::endl; + aGlobMsg << TAG_HASHo << _simComp->getHashValue() << TAG_HASHc << TAG_MSGo << "Hash Value Notification" << TAG_MSGc << std::endl; + std::cout << "End Get Hash Value." << std::endl; + break; + case 20://Enable Breakpoints + std::cout << "Enable Breakpoints." << std::endl; + aInpStream >> aParam1; + if (aParam1==0){ + aGlobMsg << TAG_MSGo << "Breakpoints are disabled." << TAG_MSGc << std::endl; + Breakpoint::setEnabled(false); + }else{ + aGlobMsg << TAG_MSGo << "Breakpoints are enabled." << TAG_MSGc << std::endl; + Breakpoint::setEnabled(true); + } + std::cout << "End Enable Breakpoints." << std::endl; + break; + case 21://Get execution statistics of commands + std::cout << "Get execution statistics of commands." << std::endl; + TMLCommand::streamStateXML(aGlobMsg); + std::cout << "End Get execution statistics of commands." << std::endl; + break; + default: + aGlobMsg << TAG_MSGo << MSG_CMDNFOUND<< TAG_MSGc << std::endl; + anErrorCode=3; + + } + aGlobMsg << TAG_ERRNOo << anErrorCode << TAG_ERRNOc << std::endl; + //if (aSimTerminated) aGlobMsg << SIM_TERM; else aGlobMsg << SIM_READY; + writeSimState(aGlobMsg); + aGlobMsg << std::endl << TAG_GLOBALc << std::endl << anEntityMsg.str() << TAG_STARTc << std::endl; + //std::cout << "Before reply." << std::endl; + if (_replyToServer) + if (_syncInfo->_server != NULL) + _syncInfo->_server->sendReply(aGlobMsg.str()); else iXmlOutStream << aGlobMsg.str() << "\n"; + //std::cout << "End of command decode procedure." << std::endl; + //std::cout << "Command: " << aCmd << " Param1: " << aParam1 << " Param2: " << aParam2 << std::endl; +} + +void Simulator::printVariablesOfTask(TMLTask* iTask, std::ostream& ioMessage){ + //if (iTask->getVariableIteratorID(false)==iTask->getVariableIteratorID(true)) return; + if (iTask->getVariableLookUpTableID().size()>0){ + ioMessage << TAG_TASKo << " id=\"" << iTask-> getID() << "\" name=\"" << iTask->toString() << "\">" << std::endl; + //for(VariableLookUpTableID::const_iterator i=iTask->getVariableIteratorID(false); i !=iTask->getVariableIteratorID(true); ++i){ + for(VariableLookUpTableID::const_iterator i=iTask->getVariableLookUpTableID().begin(); i !=iTask->getVariableLookUpTableID().end(); ++i){ + ioMessage << TAG_VARo << " id=\"" << i->first << "\">" << *(i->second) << TAG_VARc << std::endl; + } + ioMessage << TAG_TASKc << std::endl; + } +} + +bool Simulator::runToNextBreakpoint(TMLTransaction*& oLastTrans){ + //TestListener myListener(_simComp); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->registerListener(&myListener); + //_simComp->getChannelByName("DIPLODOCUSDesign__evt")->registerListener(&myListener); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->getCommandByID(17)->registerListener(&myListener); + bool erg=simulate(oLastTrans); + //return simulate(oLastTrans); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->removeListener(&myListener); + //_simComp->getChannelByName("DIPLODOCUSDesign__evt")->removeListener(&myListener); + //_simComp->getTaskByName("DIPLODOCUSDesign__TMLTask_0")->getCommandByID(17)->removeListener(&myListener); + return erg; +} + +bool Simulator::runXTransactions(unsigned int iTrans, TMLTransaction*& oLastTrans){ + RunXTransactions aListener(_simComp, iTrans); + return simulate(oLastTrans); +} + +bool Simulator::runXCommands(unsigned int iCmds, TMLTransaction*& oLastTrans){ + RunXCommands aListener(_simComp,iCmds); + bool test=simulate(oLastTrans); + if (test) std::cout << "Simulate returned end" << std::endl; + return test; +} + +bool Simulator::runTillTimeX(TMLTime iTime, TMLTransaction*& oLastTrans){ + RunXTimeUnits aListener(_simComp,iTime); + return simulate(oLastTrans); +} + +bool Simulator::runXTimeUnits(TMLTime iTime, TMLTransaction*& oLastTrans){ + RunXTimeUnits aListener(_simComp,iTime+SchedulableDevice::getSimulatedTime()); + return simulate(oLastTrans); +} + +bool Simulator::runToBusTrans(SchedulableCommDevice* iBus, TMLTransaction*& oLastTrans){ + //ListenerSubject <TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (iBus); + ListenerSubject <GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iBus); + RunTillTransOnDevice aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToCPUTrans(SchedulableDevice* iCPU, TMLTransaction*& oLastTrans){ + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (iCPU); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iCPU); + RunTillTransOnDevice aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToTaskTrans(TMLTask* iTask, TMLTransaction*& oLastTrans){ + //ListenerSubject<TaskListener>* aSubject= static_cast<ListenerSubject<TaskListener>* > (iTask); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iTask); + RunTillTransOnTask aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToSlaveTrans(Slave* iSlave, TMLTransaction*& oLastTrans){ + //ListenerSubject<TransactionListener>* aSubject= static_cast<ListenerSubject<TransactionListener>* > (iSlave); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iSlave); + RunTillTransOnDevice aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToChannelTrans(TMLChannel* iChannel, TMLTransaction*& oLastTrans){ + //ListenerSubject<ChannelListener>* aSubject= static_cast<ListenerSubject<ChannelListener>* > (iChannel); + ListenerSubject<GeneralListener>* aSubject= static_cast<ListenerSubject<GeneralListener>* > (iChannel); + RunTillTransOnChannel aListener(_simComp, aSubject); + return simulate(oLastTrans); +} + +bool Simulator::runToNextRandomCommand(TMLTransaction*& oLastTrans){ + _randChoiceBreak.setEnabled(true); + //_randChoiceBreak->setEnabled(true); + bool aSimTerminated=simulate(oLastTrans); + _randChoiceBreak.setEnabled(false); + //_randChoiceBreak->setEnabled(false); + return aSimTerminated; +} + +bool Simulator::runUntilCondition(std::string& iCond, TMLTask* iTask, TMLTransaction*& oLastTrans, bool& oSuccess){ + CondBreakpoint aListener(_simComp, iCond, iTask); + oSuccess=aListener.conditionValid(); + //return simulate(oLastTrans); + //aListener.commandEntered(0); + if (oSuccess) return simulate(oLastTrans); else return false; +} + +void Simulator::exploreTree(unsigned int iDepth, ID iPrevID, std::ofstream& iDOTFile, std::ofstream& iAUTFile, unsigned int& oTransCounter){ + TMLTransaction* aLastTrans; + //if (iDepth<RECUR_DEPTH){ + ID aLastID; + bool aSimTerminated=false; + IndeterminismSource* aRandomCmd; + do{ + aSimTerminated=runToNextRandomCommand(aLastTrans); + aRandomCmd = _simComp->getCurrentRandomCmd(); + }while (!aSimTerminated && aRandomCmd==0 && _simComp->wasKnownStateReached()==0); +#ifdef EXPLOGRAPH_ENABLED + aLastID = schedule2GraphDOT(iDOTFile, iAUTFile, iPrevID,oTransCounter); +#endif + if(aSimTerminated){ + oTransCounter++; +//#ifdef DOT_GRAPH_ENABLED + iDOTFile << aLastID << " -> " << TMLTransaction::getID() << " [label = \"i(allCPUsTerminated<" << SchedulableDevice::getSimulatedTime() << ">)\"]\n"; +//#else + //(21,"i(allCPUsTerminated)", 25) + iAUTFile << "(" << aLastID << "," << "\"i(allCPUsTerminated<" << SchedulableDevice::getSimulatedTime() << ">)\"," << TMLTransaction::getID() << ")\n"; +//#endif + TMLTransaction::incID(); + + if(_commandCoverage <= TMLCommand::getCmdCoverage() && _branchCoverage <= TMLCommand::getBranchCoverage()){ + _simComp->setStopFlag(true, MSG_COVREACHED); + _terminateExplore=true; + //_syncInfo->_terminate=true; + } + }else if (_simComp->wasKnownStateReached()==0){ + if(aRandomCmd==0){ + std::cout << "We should never get here\n"; + }else{ + unsigned int aNbNextCmds; + std::stringstream aStreamBuffer; + std::string aStringBuffer; + aNbNextCmds = aRandomCmd->getRandomRange(); + //std::cout << "Simulation " << iPrevID << "_" << aMyID << "continued " << aNbNextCmds << std::endl; + _simComp->writeObject(aStreamBuffer); + aStringBuffer=aStreamBuffer.str(); + if ((aNbNextCmds & INT_MSB)==0){ + //for (unsigned int aBranch=0; aBranch<aNbNextCmds && !_syncInfo->_terminate; aBranch++){ + for (unsigned int aBranch=0; aBranch<aNbNextCmds && !_terminateExplore; aBranch++){ + _simComp->reset(); + aStreamBuffer.str(aStringBuffer); + //std::cout << "Read 1 in exploreTree\n"; + _simComp->readObject(aStreamBuffer); + aRandomCmd->setRandomValue(aBranch); + exploreTree(iDepth+1, aLastID, iDOTFile, iAUTFile, oTransCounter); + } + }else{ + unsigned int aBranch=0; + aNbNextCmds ^= INT_MSB; + //while (aNbNextCmds!=0 && !_syncInfo->_terminate){ + while (aNbNextCmds!=0 && !_terminateExplore){ + if ((aNbNextCmds & 1)!=0){ + _simComp->reset(); + aStreamBuffer.str(aStringBuffer); + //std::cout << "Read 2 in exploreTree\n"; + _simComp->readObject(aStreamBuffer); + aRandomCmd->setRandomValue(aBranch); + exploreTree(iDepth+1, aLastID, iDOTFile, iAUTFile, oTransCounter); + } + aBranch++; aNbNextCmds >>=1; + } + } + } + //}else{ + //iFile << "Simulation " << iPrevID << "_" << aMyID << " encountered known state " << aCurrState << std::endl; + //13 -> 17 [label = "i(CPU0__test1__TMLTask_1__wro__test1__ch<4 ,4>)"]; + //iFile << aLastID << " -> " << aLastID << " [label = \"i\"]\n"; + + /*ID aNewID = TMLTransaction::getID(); + TMLTransaction::incID(); + iFile << aLastID << " -> " << aNewID << " [label = \"option\"]\n"; + std::stringstream aStreamBuffer; + std::string aStringBuffer; + _simComp->writeObject(aStreamBuffer); + aStringBuffer=aStreamBuffer.str(); + _simComp->reset(); + aStreamBuffer.str(aStringBuffer); + _simComp->readObject(aStreamBuffer);*/ + //exploreTree(iDepth, aNewID, iFile/*, iFile2*/); + } + //} +} + +bool Simulator::execAsyncCmd(const std::string& iCmd){ + unsigned int aCmd; + std::istringstream aInpStream(iCmd); + std::string aStrParam; + aInpStream >> aCmd; + std::ostringstream aMessage; + switch (aCmd){ + case 0: //Quit simulation + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << "Simulator terminated" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl << TAG_STATUSo << SIM_BUSY << TAG_STATUSc << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); + _simComp->setStopFlag(true, MSG_SIMSTOPPED); + _syncInfo->_terminate=true; + return false; + case 13://get current time + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_TIMEo << SchedulableDevice::getSimulatedTime() << TAG_TIMEc << std::endl << TAG_MSGo << "Simulation time" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + //if (_busy) aMessage << SIM_BUSY; else aMessage << SIM_READY; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); + break; + case 14:{//get actual command, thread safeness, be careful! + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl; + aInpStream >> aStrParam; + if (aStrParam=="all"){ + //for(TaskList::const_iterator i=_simComp->getTaskIterator(false); i !=_simComp->getTaskIterator(true); ++i){ + for(TaskList::const_iterator i=_simComp->getTaskList().begin(); i !=_simComp->getTaskList().end(); ++i){ + printCommandsOfTask(*i, aMessage); + } + aMessage << TAG_GLOBALo << std::endl << TAG_MSGo << "Current command" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + }else{ + TMLTask* aTask = _simComp->getTaskByName(aStrParam); + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl; + if (aTask!=0){ + printCommandsOfTask(aTask, aMessage); + aMessage << TAG_GLOBALo << std::endl << TAG_MSGo << "Current command" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + }else{ + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << MSG_CMPNFOUND << TAG_MSGc << TAG_ERRNOo << 2; + } + } + //if (_busy) aMessage << SIM_BUSY; else aMessage << SIM_READY; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + std::cout << aMessage.str(); + _syncInfo->_server->sendReply(aMessage.str()); + break; + } + case 15://pause simulation + _simComp->setStopFlag(true, MSG_SIMPAUSED); + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << "Simulation stopped" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); + break; + default: + return false; + } + return true; +} + +void Simulator::printCommandsOfTask(TMLTask* iTask, std::ostream& ioMessage){ + ioMessage << TAG_TASKo << " id=\"" << iTask-> getID() << "\" name=\"" << iTask->toString() << "\">" << TAG_CURRCMDo << " id=\""; + TMLCommand* currCommand=iTask->getCurrCommand(); + //if (iTask->getCurrCommand()==0) + if (currCommand==0){ + ioMessage << 0 << "\">"; + }else{ + ioMessage << currCommand->getID() << "\">" << TAG_PROGRESSo << currCommand->getProgressInPercent() << TAG_PROGRESSc; + ioMessage << TAG_STARTTIMEo << currCommand->getCommandStartTime() << TAG_STARTTIMEc; + TMLTransaction* currTrans = currCommand->getCurrTransaction(); + if (currTrans==0 || currTrans->getOverallLength()==0 || currTrans->getVirtualLength()==0){ + ioMessage << TAG_FINISHTIMEo << "-1" << TAG_FINISHTIMEc; + ioMessage << TAG_FINISHTIMETRANSo << "-1" << TAG_FINISHTIMETRANSc; + ioMessage << TAG_STARTTIMETRANSo << "-1" << TAG_STARTTIMETRANSc; + }else{ + ioMessage << TAG_FINISHTIMEo << (currTrans->getEndTime() + currTrans->getOverallLength()*(currCommand->getLength()-currCommand->getProgress()-currTrans->getVirtualLength())/currTrans->getVirtualLength()) << TAG_FINISHTIMEc; + //if (currCommand->getLength()==currCommand->getProgress()) + //ioMessage << TAG_STARTTIMETRANSo << "99" << TAG_STARTTIMETRANSc; + //else + ioMessage << TAG_STARTTIMETRANSo << currTrans->getStartTime() << TAG_STARTTIMETRANSc; + ioMessage << TAG_FINISHTIMETRANSo << currTrans->getEndTime() << TAG_FINISHTIMETRANSc; + } + unsigned int aNbNextCmds; + TMLCommand** aNextCmds = currCommand->getNextCommands(aNbNextCmds); + for(unsigned int i=0; i<aNbNextCmds; i++){ + ioMessage << TAG_NEXTCMDo << aNextCmds[i]->getID() << TAG_NEXTCMDc; + } + } + ioMessage << TAG_CURRCMDc << TAG_TASKc << std::endl; +} + +void Simulator::sendStatus(){ + std::ostringstream aMessage; + aMessage << TAG_HEADER << std::endl << TAG_STARTo << std::endl << TAG_GLOBALo << std::endl << TAG_MSGo << "Simulator status notification" << TAG_MSGc << TAG_ERRNOo << 0 << TAG_ERRNOc << std::endl; + //if (_busy) aMessage << SIM_BUSY; else aMessage << SIM_READY; + writeSimState(aMessage); + aMessage << std::endl << TAG_GLOBALc << std::endl << TAG_STARTc << std::endl; + _syncInfo->_server->sendReply(aMessage.str()); +} + +bool Simulator::isBusy(){ + return _busy; +} + +void Simulator::writeSimState(std::ostream& ioMessage){ + ioMessage << TAG_STATUSo; + if (_busy){ + ioMessage << SIM_BUSY << TAG_STATUSc; + }else{ + if (_simTerm){ + ioMessage << SIM_TERM << TAG_STATUSc << TAG_REASONo << MSG_SIMENDED << TAG_REASONc; + }else{ + ioMessage << SIM_READY << TAG_STATUSc; + if (_simComp->getStopReason()!="") ioMessage << TAG_REASONo << _simComp->getStopReason() << TAG_REASONc; + } + } +} diff --git a/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Simulator.h b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Simulator.h new file mode 100644 index 0000000000000000000000000000000000000000..67d106e8a33826f836c45c1e37cc5cc552bcde67 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/c++2/src_simulator/sim/Simulator.h @@ -0,0 +1,338 @@ +/*Copyright or (C) or Copr. GET / ENST, Telecom-Paris, Daniel Knorreck, +Ludovic Apvrille, Renaud Pacalet + * + * ludovic.apvrille AT telecom-paristech.fr + * + * This software is a computer program whose purpose is to allow the + * edition of TURTLE analysis, design and deployment diagrams, to + * allow the generation of RT-LOTOS or Java code from this diagram, + * and at last to allow the analysis of formal validation traces + * obtained from external tools, e.g. RTL from LAAS-CNRS and CADP + * from INRIA Rhone-Alpes. + * + * This software is governed by the CeCILL license under French law and + * abiding by the rules of distribution of free software. You can use, + * modify and/ or redistribute the software under the terms of the CeCILL + * license as circulated by CEA, CNRS and INRIA at the following URL + * "http://www.cecill.info". + * + * As a counterpart to the access to the source code and rights to copy, + * modify and redistribute granted by the license, users are provided only + * with a limited warranty and the software's author, the holder of the + * economic rights, and the successive licensors have only limited + * liability. + * + * In this respect, the user's attention is drawn to the risks associated + * with loading, using, modifying and/or developing or reproducing the + * software by the user in light of its specific status of free software, + * that may mean that it is complicated to manipulate, and that also + * therefore means that it is reserved for developers and experienced + * professionals having in-depth computer knowledge. Users are therefore + * encouraged to load and test the software's suitability as regards their + * requirements in conditions enabling the security of their systems and/or + * data to be ensured and, more generally, to use and operate it in the + * same conditions as regards security. + * + * The fact that you are presently reading this means that you have had + * knowledge of the CeCILL license and that you accept its terms. + * + */ +#ifndef SimulatorH +#define SimulatorH + +//#include <Parameter.h> +#include <definitions.h> +#include <GeneralListener.h> +#include <ListenerSubject.h> +#include <ListenersSimCmd.h> +//#include <CPU.h> +//#include <SingleCoreCPU.h> +//#include <RRScheduler.h> +//#include <PrioScheduler.h> +//#include <Bus.h> +//#include <Bridge.h> +//#include <Memory.h> +//#include <TMLbrbwChannel.h> +//#include <TMLnbrnbwChannel.h> +//#include <TMLbrnbwChannel.h> +//#include <TMLEventBChannel.h> +//#include <TMLEventFChannel.h> +//#include <TMLEventFBChannel.h> +//#include <TMLTransaction.h> +//#include <TMLCommand.h> +//#include <TMLTask.h> +//#include <SimComponents.h> +//#include <Server.h> +//#include <SimServSyncInfo.h> +//#include <ListenersSimCmd.h> +#ifdef EBRDD_ENABLED +#include <ERC.h> +#include <ERB.h> +#endif + +class CPU; +class TMLTransaction; +class TMLCommand; +class TMLTask; +class SchedulableCommDevice; + +#define RECUR_DEPTH 20 + +#define MSG_CMPNFOUND "Component not found" +#define MSG_CMDNFOUND "Command not found" +#define MSG_CMDNIMPL "Command currently not implemented" +#define MSG_FILEERR "Cannot open file " +#define MSG_CONDERR "Condition cannot be compiled" +#define MSG_SIMSTOPPED "Simulation stopped" +#define MSG_SIMPAUSED "Simulation paused" +#define MSG_SIMENDED "Simulation completed" +#define MSG_COVREACHED "Coverage reached" +#define SIM_READY "ready" +#define SIM_BUSY "busy" +#define SIM_TERM "term" + +class SimComponents; +class SimServSyncInfo; +class ServerIF; + +///Simulation engine and output capabilities +class Simulator: public ListenerSubject<GeneralListener> { +public: + ///Constructor + /** + \param iSyncInfo Pointer to synchronization info structure + */ + Simulator(SimServSyncInfo* iSyncInfo); + ///Destructor + ~Simulator(); + ///Runs the simulator in server mode + void run(); + ///Runs the simulator in command line mode + /** + \param iLen Number of arguments + \param iArgs Array withe arguments + \return Returns true if simulation could be executed + */ + ServerIF* run(int iLen, char** iArgs); + ///Execute asynchronous command + /** + \param iCmd Command string + */ + bool execAsyncCmd(const std::string& iCmd); + ///Sends simulator status information to client + void sendStatus(); + ///Run simulation until a breakpoint is encountered + /** + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToNextBreakpoint(TMLTransaction*& oLastTrans); + ///Runs the simulation until iTrans transaction have been executed + /** + \param iTrans Number of transactions + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runXTransactions(unsigned int iTrans, TMLTransaction*& oLastTrans); + ///Runs the simulation until iTrans commands have been executed + /** + \param iCmds Number of commands + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runXCommands(unsigned int iCmds, TMLTransaction*& oLastTrans); + ///Runs the simulation until the simulation time is greater or equal than iTime + /** + \param iTime Simulation End Time + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runTillTimeX(TMLTime iTime, TMLTransaction*& oLastTrans); + ///Runs the simulation for iTime time units + /** + \param iTime Number of time units + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runXTimeUnits(TMLTime iTime, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on iBus is executed + /** + \param iBus Pointer to the bus + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToBusTrans(SchedulableCommDevice* iBus, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on iCPU is executed + /** + \param iCPU Pointer to the CPU + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToCPUTrans(SchedulableDevice* iCPU, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction of iTask is executed + /** + \param iTask Pointer to the task + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToTaskTrans(TMLTask* iTask, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on Slave iSlave is executed + /** + \param iSlave Pointer to the Slave + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToSlaveTrans(Slave* iSlave, TMLTransaction*& oLastTrans); + ///Runs the simulation until a transaction on iChannel is executed + /** + \param iChannel Pointer to the Channel + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToChannelTrans(TMLChannel* iChannel, TMLTransaction*& oLastTrans); + ///Runs the simulation until a random choice command is encountered + /** + \param oLastTrans Returns the last transaction executed during a simulation + \return Return value of simulate() function + */ + bool runToNextRandomCommand(TMLTransaction*& oLastTrans); + ///Runs the simulation until a given condition is satisfied + /** + \param iCond Condition expressed in terms of task variables of a given task + \param iTask Task + \param oLastTrans Returns the last transaction executed during a simulation + \param oSuccess Indicates whether the condition could be compiled and is valid + \return Return value of simulate() function + */ + bool runUntilCondition(std::string& iCond, TMLTask* iTask, TMLTransaction*& oLastTrans, bool& oSuccess); + ///Runs the automatic exploration of several branches of control flow. Choice commands to be explored must be marked with a breakpoint. + /** + \param iDepth Maximal recursion depth + \param iPrevID ID of the parent leaf + \param iDOTFile Handle of DOT file + \param iAUTFile Handle of AUT file + \param oTransCounter Reference to transaction counter + */ + void exploreTree(unsigned int iDepth, ID iPrevID, std::ofstream& iDOTFile, std::ofstream& iAUTFile, unsigned int& oTransCounter); + ///Writes a HTML representation of the schedule of CPUs and buses to an output file + void schedule2HTML(std::string& iTraceFileName) const; + ///Writes simulation traces in VCD format to an output file + /** + \param iTraceFileName Name of the output trace file + */ + void schedule2VCD(std::string& iTraceFileName) const; + ///Writes the simulation graph to an output file + /** + \param iTraceFileName Name of the output trace file + */ + void schedule2Graph(std::string& iTraceFileName) const; + ///Writes the simulation graph to a DOT and AUT file, for exploration mode + /** + \param iDOTFile Handle of DOT file + \param iAUTFile Handle of AUT file + \param iStartState ID of the state to begin with + \param oTransCounter Reference to a transation counter + \return ID of the last state writte to the files + */ + ID schedule2GraphDOT(std::ostream& iDOTFile, std::ostream& iAUTFile, ID iStartState, unsigned int& oTransCounter) const; + ///Writes a plain text representation of the schedule of CPUs to an output file + /** + \param iTraceFileName Name of the output trace file + */ + void schedule2TXT(std::string& iTraceFileName) const; + ///Is true if the simulator is busy + /** + \return Busy flag + */ + bool isBusy(); + ///Returns the time elapsed during simulation since the last reset + /** + \return Simulation duration + */ + inline long getSimDuration(){ return _simDuration;} +protected: + ///Runs the simulation + /** + \return returns true if the simulation is completed, false otherwise + */ + bool simulate(TMLTransaction*& oLastTrans); + ///Returns a pointer to the transaction with the lowest end time proposed by CPU schedulers + /** + \param oResultDevice Pointer to the CPU which is running the returned transaction + \return Pointer to transaction with lowest end time + */ + TMLTransaction* getTransLowestEndTime(SchedulableDevice*& oResultDevice) const; + ///Decodes a simulation command + /** + \param iCmd Pointer to the command + \return Returns false if simulator should be terminated + */ + //inline void decodeCommand(std::string iCmd){std::ofstream aNullStream("/dev/null"); decodeCommand(iCmd, aNullStream);} + void decodeCommand(std::string iCmd, std::ostream& iXmlOutStream=std::cout); + ///Searches for switches in the command line string + /** + \param iComp Command line switch to search for + \param iDefault Default output file name + \param iLen Number of arguments + \param iArgs Array withe arguments + \return File name of output file, string is empty if output not requested + */ + const std::string getArgs(const std::string& iComp, const std::string& iDefault, int iLen, char** iArgs); + ///Print information about simulator command line usage + void printHelp(); + ///Writes information about the current command of a task to the given stream in XML format + /** + \param aTask Pointer to the task + \param ioMessage Output stream + */ + void printCommandsOfTask(TMLTask* aTask, std::ostream& ioMessage); + ///Writes information about task variables to the given stream in XML format + /** + \param aTask Pointer to the task + \param ioMessage Output stream + */ + void printVariablesOfTask(TMLTask* aTask, std::ostream& ioMessage); + ///Writes the current simulator state to a stream + /** + \param ioMessage output stream + */ + void writeSimState(std::ostream& ioMessage); + ///Checks if command may be impacted by a anction on a channel + /** + \param iCh Channel + \param iCmd Command + \return Flag indicating if the command may be impacted + */ + bool channelImpactsCommand(TMLChannel* iCh, TMLCommand* iCmd); + ///Pointer to synchronization structure + SimServSyncInfo* _syncInfo; + ///Pointer to structure encapsulating architecture and application objects + SimComponents* _simComp; + ///Simulator Busy flag + bool _busy; + ///Simulation terminated flag + bool _simTerm; + ///Keeps track of all breakpoints set during the simulation + BreakpointSet _breakpoints; + ///Random choice breakpoint + RunTillNextRandomChoice _randChoiceBreak; + ///Flag indicating if the simulator has previously been reset + bool _wasReset; + ///Graph output path + std::string _graphOutPath; + ///Longest runtime + TMLTime _longRunTime; + ///Shortest runtime + TMLTime _shortRunTime; + ///Flag indicating whether replies should be sent back to the server, not set in command line mode + bool _replyToServer; + ///Branch coverage to target + unsigned int _branchCoverage; + ///Statement coverage to target + unsigned int _commandCoverage; + ///Termination flag for exploration mode; + bool _terminateExplore; + ///Duration of Simulation + long _simDuration; +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/Makefile b/preinstallTTool/macos/TTool/simulators/systemc1/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..46d7b0ad73e93f71b70bdcf469c9770250e75b12 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/Makefile @@ -0,0 +1,22 @@ +TARGET_ARCH = linux + +CC = g++ +#CC = /packages/gcc_3.2.2/bin/g++32 +OPT = -O1 +DEBUG = -g +OTHER = -Wall +TRY = -Wno-deprecated +CFLAGS = $(OPT) $(OTHER) $(TRY) +# CFLAGS = $(DEBUG) $(OTHER) +OBJDIR = lib + +MODULE = run +include Makefile.src +SRCS_base = node_labsoc.cpp channel_labsoc.cpp event_labsoc.cpp interface_labsoc.cpp cpu_labsoc.cpp task_labsoc.cpp cpurr_labsoc.cpp cpurrpb_labsoc.cpp mem_labsoc.cpp +SRCS_base_DIR = src_simulator +SRCS_generated = . + +OBJS_simulator = $(SRCS_base:%.cpp=lib/%.o) +OBJS = $(SRCS:%.cpp=lib/%.o) + +include Makefile.defs diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/Makefile.defs b/preinstallTTool/macos/TTool/simulators/systemc1/Makefile.defs new file mode 100644 index 0000000000000000000000000000000000000000..54d55c6df6a736ddbd3a398f3e4782ef98a58b0e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/Makefile.defs @@ -0,0 +1,43 @@ +## Variable that points to SystemC installation path +#SYSTEMC = /packages/Systemc_2.0.1 +SYSTEMC = /packages/systemc_2.1.1 +#SYSTEMC = /homes/muhammad/Systemc2.1 +#SYSTEMC = /homes/rasheed/Works/SystemC/systemc/systemc-2.1 +#SYSTEMC = /homes/petitmen/systemc/pack + +# Cristian Macario 21/11/07 +# SystemC directory on my laptop +#SYSTEMC = /usr/local/systemc-2.2.0 +#SYSTEMC = /home/inizan/Documents/systemC/systemc-2.2.0 +TLM_HOME = /homes/inizan/p01/Simon_dl/TLM-2006-11-29/tlm +#TLM_HOME = /home/inizan/Documents/systemC/TLM-2006-11-29/tlm + +INCDIR = -I. -I.. -I$(SRCS_base_DIR) -I$(SYSTEMC)/include -I$(TLM_HOME) +LIBDIR = -L. -L.. -L$(SYSTEMC)/lib-$(TARGET_ARCH) + +LIBS = -lsystemc -lm $(EXTRA_LIBS) + + +EXE = $(MODULE).x + +.SUFFIXES: .cpp .o .x + +$(EXE): $(OBJS) $(OBJS_simulator) $(SYSTEMC)/lib-$(TARGET_ARCH)/libsystemc.a + $(CC) $(CFLAGS) $(INCDIR) $(LIBDIR) -o $@ $(OBJS) $(OBJS_simulator) $(LIBS) 2>&1 | c++filt + +$(OBJDIR)/%.o: $(SRCS_base_DIR)/%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +$(OBJDIR)/%.o: ./%.cpp + $(CC) $(CFLAGS) $(INCDIR) -o $@ -c $< + +clean:: + rm -f $(OBJS_simulator) $(OBJS) *~ $(EXE) core + +ultraclean: clean + rm -f Makefile.deps + +Makefile.deps: +# $(CC) $(CFLAGS) $(INCDIR) -M $(SRCS) >> Makefile.deps + +#include Makefile.deps diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/lib/README b/preinstallTTool/macos/TTool/simulators/systemc1/lib/README new file mode 100644 index 0000000000000000000000000000000000000000..be110e6ec98dbe7763f322e6949c409130fcc05d --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/lib/README @@ -0,0 +1 @@ +This directory contains object-files generated by the "make" command executed on upper level folder diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/basic_initiator_port.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/basic_initiator_port.h new file mode 100644 index 0000000000000000000000000000000000000000..3748d4f9d0d5c736cf1024917daa1c66bdbf86c5 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/basic_initiator_port.h @@ -0,0 +1,122 @@ + +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + +#ifndef BASIC_INTIATOR_PORT_HEADER +#define BASIC_INTIATOR_PORT_HEADER + +// +// Supplies read and write functions to the user. These call transport. +// +// Single ( N = 1 ) and multi connection ( N != 1 ) versions of read and write +// are supplied +// + +#include "basic_protocol.h" +#include "tlm.h" + +using tlm::tlm_transport_if; + +namespace basic_protocol +{ + +template < class ADDRESS , class DATA , int N = 1> +class basic_initiator_port : + public sc_port< + tlm_transport_if < + basic_request< ADDRESS , DATA > , + basic_response< DATA > + > , N + > , + public virtual basic_if<ADDRESS , DATA > +{ +public: + + typedef + tlm_transport_if < + basic_request< ADDRESS , DATA > , + basic_response< DATA > + > if_type; + + basic_initiator_port( const char *port_name ) : + sc_port< if_type , N > ( port_name ) + {} + + virtual basic_status write( const ADDRESS &a , const DATA &d ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = WRITE; + req.a = a; + req.d = d; + + rsp = (*this)->transport( req ); + + return rsp.status; + + } + + virtual basic_status write( const ADDRESS &a , const DATA &d , int p ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = WRITE; + req.a = a; + req.d = d; + + rsp = (*this)[p]->transport( req ); + + return rsp.status; + + } + + virtual basic_status read( const ADDRESS &a , DATA &d ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = READ; + req.a = a; + + rsp = (*this)->transport( req ); + d = rsp.d; + + return rsp.status; + + } + + virtual basic_status read( const ADDRESS &a , DATA &d , int p ) { + + basic_request<ADDRESS,DATA> req; + basic_response<DATA> rsp; + + req.type = READ; + req.a = a; + + rsp = (*this)[p]->transport( req ); + d = rsp.d; + + return rsp.status; + + } + +}; + +}; +#endif diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/basic_protocol.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/basic_protocol.h new file mode 100644 index 0000000000000000000000000000000000000000..1566f08ccd6b934366302f53f8cfae1c16578620 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/basic_protocol.h @@ -0,0 +1,158 @@ + +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + +#ifndef BASIC_PROTOCOL_HEADER +#define BASIC_PROTOCOL_HEADER + +#include <systemc.h> + +// +// basic protocol definition +// + +#undef ERROR // for those compilers naughty enough to define it ! + +namespace basic_protocol +{ + +enum basic_request_type +{ + READ , WRITE ,NOTIFY_EVENT, WAIT_EVENT +}; + +enum basic_status +{ + + ERROR , SUCCESS + +}; + +template< typename ADDRESS , typename DATA > +class basic_request +{ +public: + basic_request_type type; + + ADDRESS &get_address() { return a; } // makes it routable + + ADDRESS a; + DATA d; + +}; + +template< typename DATA > +class basic_response +{ +public: + basic_response() : status( ERROR ) {} // makes it routable + + basic_request_type type; + basic_status status; + + DATA d; + +}; + +template< typename ADDRESS , typename DATA > +class basic_if +{ +public: + virtual basic_status write( const ADDRESS &a , const DATA &d ) = 0; + virtual basic_status read( const ADDRESS &a , DATA &d ) = 0; + +}; + +}; // end namespace + + + +template< typename ADDRESS , typename DATA > +ostream &operator<<( ostream &fsout , + const basic_protocol::basic_request<ADDRESS,DATA> &req ) { + + switch( req.type ) + { + case basic_protocol::READ : + fsout << "Read Request : address = " << req.a << endl; + break; + case basic_protocol::WRITE : + fsout << "Write Request : address,data = " << req.a << " , " << req.d << endl; + break; + default : + fsout << "Error : no request type" << endl; + break; + } + + return fsout; +} + +template< typename DATA > +ostream &operator<<( ostream &fsout , + const basic_protocol::basic_response<DATA> &req ) { + + if( req.status == basic_protocol::ERROR ) { + fsout << "Error Response" << endl; + return fsout; + } + + switch( req.type ) + { + case basic_protocol::READ : + fsout << "Successful Read Response : data = " << req.d << endl; + break; + case basic_protocol::WRITE : + fsout << "Successful Write Response" << endl; + break; + default : + fsout << "Error : no request type ( in response )" << endl; + break; + } + + return fsout; + +} + +template< typename ADDRESS , typename DATA > +bool operator==( const basic_protocol::basic_request<ADDRESS,DATA> &req1 , + const basic_protocol::basic_request<ADDRESS,DATA> &req2 ) +{ + if( req1.type != req2.type ) { + return false; + } + + if( req1.a != req2.a ) { + return false; + } + + if( req1.type == basic_protocol::WRITE && req1.d != req2.d ) { + return false; + } + + return true; + +} + +template< typename ADDRESS , typename DATA > +bool operator!=( const basic_protocol::basic_request<ADDRESS,DATA> &req1 , + const basic_protocol::basic_request<ADDRESS,DATA> &req2 ) { + + return !(req1 == req2); +} + + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/bus_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/bus_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..0a5bc039df8aa652a9166dab2ef3d356dcb32601 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/bus_labsoc.h @@ -0,0 +1,228 @@ +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + + +#ifndef BUS_LABSOC_HEADER +#define BUS_LABSOC_HEADER + +// +// arbitration is done using a many to one multimap +// +// The key to the multimap is the priority. With each key we may in general +// have many sc_port<> * data elements. +// +// virtual get_next_request scans thru the masters, getting the highest +// port with a request pending. +// +// run() calls get_next_request and forwards the request to the slave +// and passes the response back to the appropriate master. +// +// This has the downside that we have to specify the number of master ports +// + +#include <map> +#include <vector> +using std::multimap; +using std::pair; +using std::vector; + +#include "tlm.h" +#include "event_labsoc.h" + +using tlm::tlm_transport_if; +using tlm::tlm_slave_if; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +using tlm::tlm_blocking_get_if; +using tlm::tlm_blocking_put_if; + + + +class bus : public sc_module{ +public: + +// definition of the req and response + typedef basic_request< ADDRESS_TYPE , DATA_TYPE > REQ; + typedef basic_response< DATA_TYPE > RSP; + +//signal to tell if the bus is busy or not + sc_signal<bool> bus_busy; + + int latency, evt_latency; +// definition of the array of ports to connect the masters (cpu interfaces) to the bus + + + typedef sc_port< tlm_slave_if< REQ , RSP > , 1 > in_port; + in_port *in_ports; + + typedef sc_port< tlm_transport_if< REQ , RSP > , 1 > out_port; + out_port *out_ports; + + TMLIf **Ifs; + + //counters for the arrays of Ports + int nbOfIfPorts, nbOfOutPorts; + + SC_HAS_PROCESS( bus ); + +//constructor of the module + bus( sc_module_name module_name ) : + sc_module( module_name ) { + nbOfIfPorts/*=nbOfOutPorts*/=0; + latency=evt_latency=1; + bus_busy=0; + SC_THREAD( run ); + + } + + +void setNbIf(int I){ +in_ports= new in_port[I]; +out_ports= new out_port[I]; +Ifs=new TMLIf*[I]; +nbOfOutPorts=I; +} + + +//add a cpu interface +void addIf(TMLIf * If, int priority=1){ + in_ports[nbOfIfPorts]( If->wire.slave_export ); + out_ports[nbOfIfPorts]( If->wire.target_export ); + + add_in_interface( &in_ports[nbOfIfPorts] , priority ); + Ifs[nbOfIfPorts]=If; + nbOfIfPorts++; + +} + +void setLatency(int lat){ +latency=lat; +} + +void setEvtLatency(int lat){ +evt_latency=lat; +} +//add an interface (event or cpu) into the map where the arbiter lok at to find requests +void add_in_interface( in_port *port , const int priority ) { + + if_map.insert( multimap_type::value_type( priority , port ) ); + + + } + + +protected: +//map where the TLM interfaces are stored + typedef multimap< int , in_port * > multimap_type; + multimap_type if_map; + + + virtual void run() { + +//port selected (the one which has been granted the access) + in_port *tmp_in_port; + //out_port *tmp_out_port; + multimap_type::iterator i; + REQ req; + RSP rsp; + + for( ;; ) { +// find the next request + if( (tmp_in_port = get_next_request( i , req ) ) ) { +// treating the request + //cout << name() << " " << sc_time_stamp() << " sending req " << endl; + bus_busy=1; +//if the request has an adress, it is routed to the corresponding memory with the transport function + if (req.a!=NULL){ + + //cout << name() << " " << sc_time_stamp() << " req.a not empty " << endl; + rsp = out_ports[get_out_port(req)]->transport( req ); + + //cout << name() << " " << sc_time_stamp() << " rsp given " << endl; + //put the response in the requesting port + (*tmp_in_port)->put( rsp ); + //cout << name() << " " << sc_time_stamp() << " rsp sent " << endl; + + } + else /*the request does not have an adress, it is an event*/{ + +//create the response, wait and send in back + rsp.status=basic_protocol::SUCCESS; + rsp.d=req.d; + + wait(evt_latency, SC_NS); + (*tmp_in_port)->put(rsp); + + + } + + bus_busy=0; + } +//latency of the bus between two request + wait( latency, SC_NS ); + + } + + } + +//the arbitration function + virtual in_port *get_next_request( multimap_type::iterator &i , REQ &req ) { + + + // + // this starvation inducing algorithm always starts from the highest priority + // you may want to do something else in a subclass + // + + in_port *p; + + for( i = if_map.begin(); i != if_map.end(); ++i ) { +// cout <<"debug " << "arb next req 1" << endl; + p = (*i).second; +// for (int k=0; k<B; k++){ + if( (*p)->nb_get( req ) ) { +// cout <<"debug " << "arb next req 2" << endl; + cout << name() << " " << sc_time_stamp() << " found pending request on port " << p->name() << " priority " << (*i).first << "data ="<<req.d << endl; + return p; + + } + + else + cout << name() << " " << sc_time_stamp() << " no pending request on port " << p->name() << " priority " << (*i).first << endl; +// cout <<"debug " << "arb next req 3" << endl; + + } + return NULL; + } + +//the routing to memory function +virtual int get_out_port(REQ req){ + + for (int i=0; i<nbOfOutPorts; i++){ + //cout << name() << " " << sc_time_stamp() << " out port n° "<< i << " If " << Ifs[i] << "==" << req.a<<endl; + if (req.a==Ifs[i]) return i; + //cout << "not this one"<<endl; + } + return -1; +} + +}; + + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/bus_types.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/bus_types.h new file mode 100644 index 0000000000000000000000000000000000000000..13aa4551667876bb511474a934b18fc62a86b249 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/bus_types.h @@ -0,0 +1,17 @@ + +/* + * + * SystemC TLM API Standard Proposal and Examples + * Copyright Cadence Design Systems Inc 2004 + * + */ + +#include "interface_labsoc.h" + +#ifndef BUS_TYPES_HEADER +#define BUS_TYPES_HEADER + +typedef class TMLIf * ADDRESS_TYPE; +typedef int DATA_TYPE; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/channel_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/channel_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..42220af989da4af04847a3482da80a3f0fb437a2 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/channel_labsoc.cpp @@ -0,0 +1,266 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "math.h" +#include "parameters.h" +#include "utils_labsoc.h" + +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "bus_labsoc.h" + + +int NBRNBW_Channel::write(int nb){ + //cout<<"writting in channels:"<<nb<<"\n"; + int maxWrite; + int nbOfBytesOneCycle = writingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"writting in channels:"<<nb<<" node size:"<<nbOfBytesOneCycle<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxWrite = nb; + } else { + maxWrite = nbOfBytesOneCycle; + } + + return writeIf->write(maxWrite, this); + +} + +int NBRNBW_Channel::read(int nb){ + int maxRead; + int nbOfBytesOneCycle = readingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + if (nb <nbOfBytesOneCycle) { + maxRead = nb; + } else { + maxRead = nbOfBytesOneCycle; + } + + return readIf->read(maxRead, this); +} + + + +// Cristian Macario 11/12/07 +// DEBUG +// including bus +// method has been modified +int BRBW_Channel::write(int nb){ +// mutex.lock(); + // Must determine how many can be written without being blocked + int ret, maxWrite; + + if (currentNbOfSamples == maxNbOfSamples) { + // mutex.unlock(); + return 0; + } + + //cout<<"writting in channels:"<<nb<<"\n"; + int nbOfBytesOneCycle = writingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"writting in channels:"<<nb<<" node size:"<<nbOfBytesOneCycle<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxWrite = nb; + } else { + maxWrite = nbOfBytesOneCycle; + } + + if ((maxWrite + currentNbOfSamples) > maxNbOfSamples) { + maxWrite = maxNbOfSamples - currentNbOfSamples; + } + + ret = writeIf->write(maxWrite, this); + + mutex.lock(); + currentNbOfSamples += ret; + mutex.unlock(); + + if (blockedReadTask != NULL) { + //cout<<"unblocking a blocked task\n"; + readingNode->setUnblockedTask(blockedReadTask); + blockedReadTask = NULL; + } + + +// mutex.unlock(); + return ret; + +} + +int BRBW_Channel::read(int nb){ + // Must determine how many can be written without being blocked + int ret, maxRead; + + +// mutex.lock(); + + if (currentNbOfSamples == 0) { +// mutex.unlock(); + return 0; + } + + //cout<<"reading in channels BRBW:"<<nb<<"\n"; + int nbOfBytesOneCycle = readingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"reading in channels BRBW:"<<nb<<" node size:"<<nbOfBytesOneCycle<<" samples="<<currentNbOfSamples<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxRead = nb; + } else { + maxRead = nbOfBytesOneCycle; + } + + if ((currentNbOfSamples - maxRead) < 0) { + maxRead = currentNbOfSamples; + } + + ret = readIf->read(maxRead, this); + + mutex.lock(); + currentNbOfSamples -= ret; + mutex.unlock(); + + + if (blockedWriteTask != NULL) { + writingNode->setUnblockedTask(blockedWriteTask); + blockedWriteTask = NULL; + } + +// mutex.unlock(); + return ret; +} + +int BRNBW_Channel::write(int nb){ + // Must determine how many can be written without being blocked + int ret, maxWrite; + + //cout<<"BRBW: write\n"; + +// mutex.lock(); + + //cout<<"BRBW: locked\n"; + + //cout<<"writting in channels:"<<nb<<"\n"; + int nbOfBytesOneCycle = writingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + // cout<<"writting in channels:"<<nb<<" node size:"<<nbOfBytesOneCycle<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxWrite = nb; + } else { + maxWrite = nbOfBytesOneCycle; + } + + + ret = writeIf->write(maxWrite, this); + + mutex.lock(); + currentNbOfSamples += ret; + mutex.unlock(); + + if (blockedReadTask != NULL) { + //cout<<"Unblocking a blocked task\n"; + readingNode->setUnblockedTask(blockedReadTask); + blockedReadTask = NULL; + } + +// mutex.unlock(); + return ret; + +} + +int BRNBW_Channel::read(int nb){ + // Must determine how many can be written without being blocked + int ret, maxRead; + + //cout<<"BRBW: read\n"; + +// mutex.lock(); + + //cout<<"BRBW: locked\n"; + + if (currentNbOfSamples == 0) { +// mutex.unlock(); + return 0; + } + + //cout<<"reading in channels BRBW:"<<nb<<"\n"; + int nbOfBytesOneCycle = readingNode->getByteDataSize(); + if (nbOfBytesOneCycle == -1) { + nbOfBytesOneCycle = width; + } + //cout<<"reading in channels BRBW:"<<nb<<" node size:"<<nbOfBytesOneCycle<<" samples="<<currentNbOfSamples<<"\n"; + if (nb <nbOfBytesOneCycle) { + maxRead = nb; + } else { + maxRead = nbOfBytesOneCycle; + } + + if ((currentNbOfSamples - maxRead) < 0) { + maxRead = currentNbOfSamples; + } + + + ret = readIf->read(maxRead, this); + + mutex.lock(); + currentNbOfSamples -= ret; + mutex.unlock(); + +// mutex.unlock(); + + return ret; +} + + + + + +void TMLChannel::initialize() { + currentNbOfSamples = 0; + blockedReadTask = NULL; + blockedWriteTask = NULL; + } + + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/channel_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/channel_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..495f45ee1ad3f9412b58282866687406034d4eb8 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/channel_labsoc.h @@ -0,0 +1,248 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + + +#ifndef CHANNEL_LABSOC__H +#define CHANNEL_LABSOC__H + + +#include "event_labsoc.h" +#include "interface_labsoc.h" + +class Task; +class Node; +class memory; + +#include "task_labsoc.h" +#include "node_labsoc.h" +#include "comm_labsoc.h" +#include "mem_labsoc.h" + + +// Cristian Macario 11/12/07 +// DEBUG +// including bus +//#include "interface_labsoc.h" + + +class TMLChannel:public TMLComm{ + public: + + // Cristian Macario 21/11/07 + // signals not used + /* + sc_signal<bool> wr; + sc_signal<bool> rd; + */ + memory * mem; + +protected: + + // Cristian Macario + // adding bus and cache emulation + int currentNbOfSamples; +// int writtenSamples; +// int readableSamples; + + + + int width; + int maxNbOfSamples; + Node *readingNode; + Node *writingNode; + Task *blockedReadTask; + Task *blockedWriteTask; + sc_mutex mutex; + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + TMLcpuIf * readIf; + TMLcpuIf * writeIf; + + + + public: + TMLChannel() {} + + +// Cristian Macario 13/12/07 +// adding bus +/* + TMLChannel(int _width, Node *_node) { + width = _width; + node = _node; + } +*/ +TMLChannel(int _width) { + width = _width; + } + +// Cristian Macario 13/12/07 +// adding bus +/* + void setNode(Node *_node) { + node = _node; + } +*/ + + void setReadingNode(Node *_node) { + readingNode = _node; + } + + void setWritingNode(Node *_node) { + writingNode = _node; + } + + + Node * getReadingNode() { + return readingNode; + } + + Node * getWritingNode() { + return writingNode; + } + + void setWidth(int _width) { + width = _width; + } + + + + // Width must be set first + // Input is in number of samples. Output is in byte. + void setMaxNbOfSamples(int _maxNbOfSamples) { + maxNbOfSamples = _maxNbOfSamples * width; + } + + // Width must be set first + void setCurrentNbOfSamples(int _currentNbOfSamples) { + currentNbOfSamples = _currentNbOfSamples; + } + + + void initialize(); + + // Returns the number of cycles it takes + virtual int getNbToWrite(int nb){return nb*width;} + virtual int getNbToRead(int nb){return nb*width;} + + // Effectively make the operation in one cycle + // Returns the number of non-written samples + virtual int write(int nb){return 1;} + virtual int read(int rd) {return 1;} + + void setBlockedWriteTask(Task *t) { + blockedWriteTask = t; + } + + void setBlockedReadTask(Task *t) { + blockedReadTask = t; + } + + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + void setReadIf(TMLcpuIf * _readIf) { + readIf = _readIf; + } + + TMLcpuIf *getReadIf(){ + return readIf; + } + + void setWriteIf(TMLcpuIf * _writeIf) { + writeIf = _writeIf; + } + + TMLcpuIf *getWriteIf(){ + return writeIf; + } + + void setMem(memory * _mem) { + mem = _mem; + } + + +/* + // Cristian Macario + // adding bus and cache emulation + void updateReadableSamples(int n); +*/ + + + virtual int isWriteBlocking() { return 0;} + virtual int isReadBlocking() {return 0;} + + virtual ~TMLChannel() {} + + + }; + +class NBRNBW_Channel: public TMLChannel { +public: + virtual int write(int nb); + virtual int read(int rd); + + virtual ~NBRNBW_Channel() {} + +}; + +class BRBW_Channel: public TMLChannel { +public: + virtual int write(int nb); + virtual int read(int rd); + + + virtual ~BRBW_Channel() {} + +}; + +class BRNBW_Channel: public TMLChannel { +public: + virtual int write(int nb); + virtual int read(int rd); + + // Cristian Macario 21/11/07 + // distructor removed because not useful + //virtual ~BRNBW_Channel() {currentNbOfSamples=0;} + +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/comm_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/comm_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..7d6e468e338b705d49b8d53d0bf4bb8cdfa3421f --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/comm_labsoc.h @@ -0,0 +1,52 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + + +#ifndef COMM_LABSOC__H +#define COMM_LABSOC__H + + + +class TMLComm{ + + public: + virtual ~TMLComm() {} + +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpu_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpu_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9bcb09e0309233b342504cb798d94d427d054cda --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpu_labsoc.cpp @@ -0,0 +1,231 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#include "node_labsoc.h" +#include "task_labsoc.h" +#include "cpu_labsoc.h" +#include "taskcpu_labsoc.h" +#include "utils_labsoc.h" + + +// Cristian Macario 05/12/07 +// removed constructor because not useful anymore +void CPU::initialize() { + executedInstructions = 0; + missedInstructions = 0; +} + + + +// Cristian Macario 06/12/07 +// This method must be redefined +// in the child classes. +/* +void CPU::go() { + runningTask = 1; + //wait(1, SC_NS); + runningTask = 0; +} +*/ + +void CPU::addTask(Task *t) { + tasks[nbOfTasks] = t; + + // Cristian Macario 21/11/07 + // Added the -1 in order to avoid buffer overflow + if (nbOfTasks < MAX_TASK_PER_CPU - 1) { + nbOfTasks ++; + } +} + + +// Pipeline size cannot be less than 1 +void CPU::setPipelineSize(int _pipelineSize) { + pipelineSize = _pipelineSize; + if (pipelineSize < 1) { + pipelineSize = 1; + } +} + +void CPU::setTaskSwitchingTime(int _taskSwitchingTime) { + taskSwitchingTime = _taskSwitchingTime; +} + +void CPU::setGoIdleTime(int _goIdleTime) { + goIdleTime = _goIdleTime; +} + +void CPU::setWakingUpTime(int _wakingUpTime) { + wakingUpTime = _wakingUpTime; +} + +void CPU::setBranchingPredictionMissRate(int _branchingPredictionMissRate) { + branchingPredictionMissRate = _branchingPredictionMissRate; +} + +int CPU::getBranchingPredictionMissRate() { + return branchingPredictionMissRate; +} + + + +// Cristian Macario 21/11/07 +// added the setter of maxConsecutiveIdleCycles +void CPU::setMaxConsecutiveIdleCycles(unsigned _maxConsecutiveIdleCycles) { + maxConsecutiveIdleCycles = _maxConsecutiveIdleCycles; +} + + +// Cristian Macario 30/11/07 +// Improved performance of this method +void CPU::waitForInstructions(int _nb) { + //cout<<"waiting\n"; + int rand; + int i; + int nbMiss; + int nbExec; + int firstTime; + + + if ((_nb >0) && (branchingPredictionMissRate > 0)) { + + + // When branchingPredictionMissRate > 0 and + // number of instructions is small, use this algorithm + if(_nb <= (100 / branchingPredictionMissRate)) { + // Branching prediction + for(i=0; i<_nb; i++) { + if (executedInstructions == 0) { + missedInstructions = 0; + } + + if (missedInstructions < branchingPredictionMissRate) { + rand = Utils::myrand(0, 99); + if (rand < branchingPredictionMissRate) { + //cout<<"BRANCHING ERROR"<<endl; + + if (currentTaskSignal != NULL) { + *currentTaskSignal = 0; + } + + branchMiss(); + missedInstructions ++; + } + } + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + } + wait(1); + executedInstructions ++; + if (executedInstructions == 100){ + executedInstructions = 0; + } + } + + + // When branchingPredictionMissRate > 0 and + // number of instructions is big, use this algorithm + } else { + nbMiss = (int)((_nb * branchingPredictionMissRate)/100.0); + nbExec = 0; + firstTime = 1; + for(i = 0; (i < nbMiss) && (nbExec < _nb); i++) { + // The first time the random range is divided by 2 + // just because + // --x----x----x----x-- + // (where x represent branch miss and - no branch miss) + // is more uniform than + // ----x----x----x----x + rand = Utils::myrand(1, ((200/branchingPredictionMissRate)>>firstTime) -1); + firstTime = 0; + if((nbExec + rand) > _nb) { + rand = _nb - nbExec; + } + nbExec += rand; + + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + wait(rand); + *currentTaskSignal = 0; + } else { + wait(rand); + } + + branchMiss(); + + } + + if(nbExec < _nb) { + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + wait(_nb - nbExec); + *currentTaskSignal = 0; + } else { + wait(_nb - nbExec); + } + } + } + + + + // when branchingPredictionMissRate == 0 + } else if (_nb > 0) { + + // Cristian Macario 21/11/07 + // added the if: set the signal before waiting + // if branchingPredictionMissRate == 0 + if (currentTaskSignal != NULL) { + *currentTaskSignal = 1; + } + wait(_nb); + } + //cout<<"DONE\n"; + +} + + + +void CPU::branchMiss() { + branchingError = 1; + wait(1); + branchingError = 0; + pipelineLatency = 1; + if (pipelineSize > 1) { + wait(pipelineSize-1); + } + pipelineLatency = 0; +} diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpu_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpu_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..6f9a67f8996055f46f194ed4cf568bdae70c8278 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpu_labsoc.h @@ -0,0 +1,120 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + +#ifndef CPU_LABSOC__H +#define CPU_LABSOC__H + +#include "parameters.h" +#include "node_labsoc.h" +#include "task_labsoc.h" +#include "taskcpu_labsoc.h" + + + +class CPU : public Node { + public: + sc_signal<bool> runningTask; + sc_signal<bool> taskSwitching; + sc_signal<bool> idle; + sc_signal<bool> goIdle; + sc_signal<bool> pipelineLatency; + sc_signal<bool> branchingError; + + //Cristian Macario 08/02/08 + sc_signal<bool> wakingUp; + + +protected: + int pipelineSize; + int taskSwitchingTime; + int goIdleTime; + + // Cristian Macario 08/02/08 + int wakingUpTime; + + // Cristian Macario 05/12/07 + // now the following variable is + // a static variable of the method CPURR::runIdle() + // this make the code more readable + long cycle; + + int branchingPredictionMissRate; + + + int missedInstructions; + long executedInstructions; + + // Cristian Macario 21/11/2007 + // Added this variable + // When the cpu runs in idle state for maxConsecutiveIdleCycles + // consecutive cycles, it stop running + int maxConsecutiveIdleCycles; + + + + + + public: + + void initialize(); + + // Cristian Macario 05/12/07 + // this funcion should be virtual + virtual void go() = 0; + void addTask(Task *t); + void setPipelineSize(int _pipelineSize); + void setTaskSwitchingTime(int _taskSwitchingTime); + void setGoIdleTime(int _goIdleTime); + + // Cristian Macario 08/02/08 + void setWakingUpTime(int _wakingUpTime); + + void setBranchingPredictionMissRate(int _branchingPredictionMissRate); + int getBranchingPredictionMissRate(); + + // Cristian Macario 21/11/07 + // Added the setter for maxConsecutiveIdleCycles + void setMaxConsecutiveIdleCycles(unsigned _maxConsecutiveIdleCycles); + void waitForInstructions(int _nb); + void branchMiss(); + + virtual ~CPU(){} + +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4ef77a7697084d29077236b65cd499f7b36b6ae3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.cpp @@ -0,0 +1,425 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#include "cpurr_labsoc.h" +#include "utils_labsoc.h" + +// Randomizes tasks; +void CPURR::initialize() { + initialize(1); + + // Cristian Macario 05/12/07 + // these two variables are now satic vars of the + // CPU::waitForInstructions() method + //executedInstructions = 0; + //missedInstructions = 0; +} + +void CPURR::initialize(int randomTask) { + terminated = 0; + + nextBlocked = NULL; + nextRunning = NULL; + nextTerminated = NULL; + + // Default values + //taskSwitchingTime = 10; + //cyclesEXECI = 1; + //goIdleTime = 5; + + if (nbOfTasks == 0) { + terminated = 1; + //idle = 1; + return; + } + + // Randomizes runnable tasks + if (randomTask > 0) { + randomTasks(taskscpurr,nbOfTasks); + } + linkRunnableTasks(); +} + +void CPURR::go() { + int nb = 0; + Task *tmp; + TaskCPURR *tcpurr; + + + initialize(); + + while(terminated == 0) { + + + // Cristian Macario 14/12/07 + // adding bus + // now a task can be unblocked by an operation performed by another cpu + if (taskHasBeenUnblocked()) { + tmp = getUnblockedTask(); + tmp->UNBLOCK(); + tcpurr = getTaskCPURR(tmp); + removeBlocked(tcpurr); + addRunnable(tcpurr); + //cout << "A task has been unblocked\n"; + } + + + if (nextRunning == NULL) { + //cout << "Selecting task to run\n"; + selectTaskToRun(); + } + + if (nextRunning != NULL) { + //cout << "Running task\n"; + + // Cristian Macario 08/02/08 + // adding Waking up time + if(idle == 1) { + idle = 0; + nextRunning->task->running = 0; + wakingUp = 1; + if(wakingUpTime > 0) { + wait(wakingUpTime); + } + wakingUp = 0; + nextRunning->task->running = 1; + } + + + runningTask = 1; + idle = 0; + taskSwitching = 0; + + // A task is running + // Call that task + nb = nextRunning->task->run(); + + if (nb > 0) { + waitForInstructions(nb); + } + + // Task has been unblocked? + //cout<<"Checking for unblocked task\n"; + if (taskHasBeenUnblocked()) { + tmp = getUnblockedTask(); + tmp->UNBLOCK(); + tcpurr = getTaskCPURR(tmp); + removeBlocked(tcpurr); + addRunnable(tcpurr); + //cout << "A task has been unblocked\n"; + } + + // Is current task blocked? + if (taskHasBeenBlocked()) { + //cout << "task is blocked \n"; + tmp = getBlockedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 005"; + exit(0); + } + removeRunnable(nextRunning); + addBlocked(nextRunning); + nextRunning = NULL; + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } + + if (taskHasBeenTerminated()) { + // cout << "task is terminated \n"; + tmp = getTerminatedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 006"; + exit(0); + } + removeRunnable(nextRunning); + addTerminated(nextRunning); + nextRunning = NULL; + //if ((nextRunnable == NULL) && (nextBlocked == NULL)) { For CPU with external interfaces + if ((nextRunnable == NULL) && (nextBlocked == NULL)) { + terminated = 1; + runningTask = 0; + // This wait is needed to update the value of the signal terminated + // whose value will be checked on the go() method (this method), + // on the line "while(terminated == 0)" + wait(1); + //idle = 1; + } else { + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } + } + } else { + runIdle(); + } + } + wait(1); +// cout << "Ending CPURR node " << nb <<"\n"; + +} + +void CPURR::selectTaskToRun() { + if (nextRunnable != NULL) { + nextRunning = nextRunnable; + + // Cristian Macario 21/11/07 + // if() not useful + //if (nextRunning != NULL) { + nextRunning->task->running = 1; + nextRunning->nbOfInstInPipeline = 0; + //} + } + //cout<<"task selected in cpurr"<<endl; +} + +void CPURR::runIdle() { + + + if (idle == 0) { + goIdle = 1; + runningTask = 0; + + // Cristian Macario 21/11/07 + // cycle has to be initialized + cycle = 0; + if (goIdleTime > 0) { + wait(goIdleTime); + } + goIdle = 0; + } + //cout << "idle!\n"; + runningTask = 0; + idle = 1; + taskSwitching = 0; + wait(1); + cycle ++; + if (cycle > maxConsecutiveIdleCycles) { + idle = 0; + terminated = 1; + // This wait is needed to update the value of the signal terminated + // whose value will be checked on the go() method, + // on the line "while(terminated == 0)" + wait(1); + } +} + +void CPURR::switchTasks() { + runningTask = 0; + idle = 0; + taskSwitching = 1; + waitForInstructions(taskSwitchingTime); +} + + +// Manipulate tasks + + +void CPURR::addTask(Task *t) { + //cout << "adding task\n"<<nbOfTasks << "max=" << MAX_TASK_PER_CPU; + TaskCPURR *tcpu = new TaskCPURR(); + tcpu->nbOfInstInPipeline = 0; + tcpu->task = t; + tasks[nbOfTasks] = t; + taskscpurr[nbOfTasks] = tcpu; + if (nbOfTasks < MAX_TASK_PER_CPU) { + nbOfTasks ++; + } +} + +void CPURR::randomTasks(TaskCPURR *taskscpurr[], int index) { + int chosen; + + if (index <2 ) { + return; + } + TaskCPURR *tmp; + chosen = Utils::myrand(0, index-1); + if (chosen == index-1) { + return randomTasks(taskscpurr, index-1); + } + + tmp = taskscpurr[index-1]; + taskscpurr[index-1] = taskscpurr[chosen]; + taskscpurr[chosen] = tmp; + return randomTasks(taskscpurr, index-1); +} + +void CPURR::linkRunnableTasks() { + int i; + for(i=0; i<nbOfTasks; i++) { + if (i != (nbOfTasks-1)) { + taskscpurr[i]->next = taskscpurr[i+1]; + } else { + taskscpurr[i]->next = NULL; + } + taskscpurr[i]->task->runnable = 1; + } + nextRunnable = taskscpurr[0]; +} + + void CPURR::addTerminated(TaskCPURR *t) { + // First terminated task ? + if (nextTerminated == NULL) { + nextTerminated = t; + t->next = NULL; + return; + } + + // Task is added at the beginning of the list + t->next = nextTerminated; + nextTerminated = t; + } + + void CPURR::addBlocked(TaskCPURR *t) { + // First blocked task ? + if (nextBlocked == NULL) { + nextBlocked = t; + t->next = NULL; + return; + } + + // Task is added at the beginning of the list + t->next = nextBlocked; + nextBlocked = t; + } + + void CPURR::addRunnable(TaskCPURR *t) { + TaskCPURR *tmp; + + // First runnable task ? + if (nextRunnable == NULL) { + nextRunnable = t; + t->next = NULL; + return; + } + + // Task is added at the end of the list + tmp = nextRunnable; + while(tmp->next != NULL) { + + // Cristian Macario 22/11/07 + // If the task we want to insert is already on the list + // there is an error + if(tmp == t) { + cout<<"ERROR 007"<<endl; + return; + } + tmp = tmp->next; + } + tmp->next = t; + t->next = NULL; + } + + void CPURR::removeRunnable(TaskCPURR *t) { + TaskCPURR *tmp; + + if (nextRunnable == NULL) { + cout << "ERROR 001"; + return; + } + + // t first in list? + if (nextRunnable == t) { + nextRunnable = t->next; + t->next = NULL; + return; + } + + // Must search for the task just before t; + tmp = nextRunnable; + while((tmp != NULL) && (tmp->next != t)) { + tmp = tmp->next; + } + if (tmp == NULL) { + cout << "ERROR 002"; + return; + } + tmp->next = t->next; + t->next = NULL; + } + +void CPURR::removeBlocked(TaskCPURR *t) { + TaskCPURR *tmp; + + if (nextBlocked == NULL) { + cout << "ERROR 003"; + return; + } + + // t first in list? + if (nextBlocked == t) { + nextBlocked = t->next; + t->next = NULL; + return; + } + + // Must search for the task just before t; + tmp = nextBlocked; + while((tmp != NULL) && (tmp->next != t)) { + tmp = tmp->next; + } + if (tmp == NULL) { + + // Cristian Macario 21/11/07 + // Uncommented error messages: + // Trying to unblock a task that is not blocked + // anymore is an error. Got an example of bug on the + // simulation result. + cout<<"Task was already not blocked anymore\n"; + cout << "ERROR 004\n"; + return; + } + tmp->next = t->next; + t->next = NULL; + } + + TaskCPURR *CPURR::getTaskCPURR(Task *t) { + int i; + for(i=0; i<nbOfTasks; i++) { + if (taskscpurr[i]->task == t) { + return taskscpurr[i]; + } + } + return NULL; + } + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..41fbed67f4ce0fc2c750c0dfc84e70f7ef1afc5b --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurr_labsoc.h @@ -0,0 +1,99 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + +#ifndef CPURR_LABSOC__H +#define CPURR_LABSOC__H + +#include "parameters.h" +#include "node_labsoc.h" +#include "cpu_labsoc.h" +#include "task_labsoc.h" +#include "taskcpu_labsoc.h" + + + +class CPURR : public CPU { + protected: + TaskCPURR *taskscpurr[MAX_TASK_PER_CPU]; + TaskCPURR *nextRunnable; + TaskCPURR *nextRunning; + TaskCPURR *nextBlocked; + TaskCPURR *nextTerminated; + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + // property moved to Node class + // int terminated; + + +public: + + // Crsitian Macario 05/12/07 + // This initialization is now done in the constructor of class node + // (nbOfTasks is a property of class node) +/* + CPURR() { + nbOfTasks = 0; + } +*/ + + virtual ~CPURR(){} + +public: + void initialize(); + void initialize(int randomTasks); + virtual void go(); + void addTask(Task *t); +protected: + virtual void selectTaskToRun(); + void switchTasks(); + void randomTasks(TaskCPURR *taskscpurr[], int index); + void linkRunnableTasks(); + void addTerminated(TaskCPURR *t); + void addRunnable(TaskCPURR *t); + void addBlocked(TaskCPURR *t); + void removeRunnable(TaskCPURR *t); + void removeBlocked(TaskCPURR *t); + void runIdle(); + TaskCPURR *getTaskCPURR(Task *t); + + +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a98d6f681fe95c29120d17a557eb29a6b69f33e3 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.cpp @@ -0,0 +1,184 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#include "cpurrpb_labsoc.h" +#include "utils_labsoc.h" +#include "task_labsoc.h" + +void CPURRPB::go() { + int nb = 0; + Task *tmp; + TaskCPURR *tcpurr; + + initialize(); + while(terminated == 0) { + if (nextRunning == NULL) { + //cout << "Selecting task to run\n"; + selectTaskToRun(); + } + + if (nextRunning != NULL) { + //cout << "Running task\n"; + runningTask = 1; + idle = 0; + taskSwitching = 0; + + // A task is running + // Call that task + + + nb = nextRunning->task->run(); + + //cout<<"nb=" << nb<<endl; + + // Apply penalty due to branching prediction + //cout<<"Applying time to wait="<<nb<<"\n"; + + + if (nb == 0) { + //wait(1); + } else { + //cout << "task must wait for " << nb<<"\n"; + //Setting task signal + if (nb > 0) { + waitForInstructions(nb); + } + //cout<<"waiting done\n"; + } + + // Task has been unblocked? + //cout<<"Checking for unblocked task\n"; + tmp = NULL; + if (taskHasBeenUnblocked()) { + tmp = getUnblockedTask(); + tmp->UNBLOCK(); + tcpurr = getTaskCPURR(tmp); + removeBlocked(tcpurr); + addRunnable(tcpurr); + //cout << "A task has been unblocked\n"; + } + + + + // Is current task blocked? + if (taskHasBeenBlocked()) { + //cout << "task is blocked \n"; + tmp = getBlockedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 005"; + exit(0); + } + removeRunnable(nextRunning); + addBlocked(nextRunning); + nextRunning = NULL; + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } else { + if (tmp != NULL) { // Task has been unblocked + if (tmp->getPriority() > nextRunning->task->getPriority()) { + // Nullify current signals + //nextRunning->task->currentSig = 0; + unsetCurrentTaskSignal(); + nextRunning->task->running = 0; + nextRunning = NULL; + switchTasks(); + } + } + } + + if (taskHasBeenTerminated()) { + //cout << "task is terminated \n"; + tmp = getTerminatedTask(); + if (tmp != nextRunning->task) { + cout << "ERROR 006"; + exit(0); + } + removeRunnable(nextRunning); + addTerminated(nextRunning); + nextRunning = NULL; + //if ((nextRunnable == NULL) && (nextBlocked == NULL)) { For CPU with external interfaces + if ((nextRunnable == NULL) && (nextBlocked == NULL)) { + terminated = 1; + } else { + if (nextRunnable != NULL) { + switchTasks(); + } else { + runIdle(); + } + } + } + } else { + runIdle(); + } + } + wait(1); + cout << "Ending CPURRPB node " << nb <<"\n"; + +} + + +void CPURRPB::selectTaskToRun() { + TaskCPURR *task = NULL; + TaskCPURR *tmp = NULL; + int priority = 0; + int index = 0; + + if (nextRunnable != NULL) { + task = nextRunnable; + priority = task->task->getPriority(); + tmp = task; + while(tmp->next != NULL) { + tmp = tmp->next; + index ++; + if (tmp->task->getPriority() > priority) { + task = tmp; + priority = task->task->getPriority(); + } + } + + } + nextRunning = task; + if (nextRunning != NULL) { + nextRunning->task->running = 1; + nextRunning->nbOfInstInPipeline = 0; + } + cout<<"Task selected prio="<<priority<<endl; +} + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..5214b5aa4ec03ca9f2b8fa73a12556e149bd4f49 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/cpurrpb_labsoc.h @@ -0,0 +1,66 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + +#ifndef CPURRPB_LABSOC__H +#define CPURRPB_LABSOC__H + +#include "cpurr_labsoc.h" + + +class CPURRPB : public CPURR { + +public: + + // Cristian Macario 05/12/07 + // The initialization of nbOfTasks is done on the constructor + // of the class Node + /* + CPURRPB() { + nbOfTasks = 0; + } + */ + + virtual ~CPURRPB(){} + protected: + void selectTaskToRun(); + public: + void go(); + +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/event_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/event_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e17d15bee455134a05d6ef9ec84fdc061c7de90 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/event_labsoc.cpp @@ -0,0 +1,245 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "math.h" +#include "parameters.h" + +#include "node_labsoc.h" +#include "event_labsoc.h" + +void TMLEvent::addEvent(Event *event) { + EventCell *cell = new EventCell(); + cell->next = NULL; + cell->event = event; + + //cout<<"adding event\n"; + currentNbOfEvents ++; + //cout<<"Nb of events="<<currentNbOfEvents<<"\n"; + + // No element in list + if (tail == NULL) { + head = cell; + tail = cell; + } else { + tail->next = cell; + tail = cell; + } +} + +Event *TMLEvent::getFirstEvent() { + return head->event; +} + +void TMLEvent::removeFirstEvent() { + EventCell *tmp = head; + + if (head == NULL) { + return; + } + + currentNbOfEvents --; + if (currentNbOfEvents == 0) { + tail = NULL; + } + + head = head->next; + free(tmp); + return; +} + + +// Cristian Macario 22/11/07 +// Type of this method becomes int +int TMLEvent::notify(Event *event) { + //cout<<"step01\n"; + + //mutex.lock(); + + if(notifyingNode != waitingNode) { + notifyIf->notifyEvtOnBus(nParam, this); + } + + mutex.lock(); + addEvent(event); + + //cout<<"step03\n"; + //cout<<"NbOfEvents="<<currentNbOfEvents<<"\n"; + + + // Cristian Macario 21/11/07 + // Default event: Infinite Fifo + // We don't have to check this + // morever events are stored in a list, can't overflow + /* + if (currentNbOfEvents > maxNbOfEvents) { + event = getFirstEvent(); + removeFirstEvent(); + free(event); + //cout<<"Freeing events="<<currentNbOfEvents<<"\n"; + } + */ + + if (blockedWaitTask != NULL) { + //cout<<"Unblocking a blocked task (event)\n"; + waitingNode->setUnblockedTask(blockedWaitTask); + blockedWaitTask = NULL; + } + + mutex.unlock(); + + // Cristian Macario 22/11/07 + return 1; +} + + + +Event *TMLEvent::wait() { + Event *evt; + //mutex.lock(); + + //cout<<"wait evt step 01\n"; + + if (currentNbOfEvents == 0) { + // Block current task + //mutex.unlock(); + //cout<<"returning null\n"; + return NULL; + } + + // Cristian Macario 04/02/08 + // event between 2 cpus support + if(notifyingNode != waitingNode) { + ::sc_core::wait(1); + } + + + //cout<<"wait evt step 02\n"; + mutex.lock(); + evt = getFirstEvent(); + removeFirstEvent(); + + //cout<<"wait evt step 02\n"; + + // Cristian Macario 27/11/07 + // if there is a blocked notifying task + // it has to be unblocked + if(blockedNotifyTask != NULL) { + notifyingNode->setUnblockedTask(blockedNotifyTask); + blockedNotifyTask = NULL; + } + + + mutex.unlock(); + return evt; +} + +int TMLEvent::notified() { + return currentNbOfEvents; +} + + +// Cristian Macario 22/11/07 +// Type of this method becomes int +int FiniteFIFO_Event::notify(Event *event) { + //mutex.lock(); + + if(notifyingNode != waitingNode) { + notifyIf->notifyEvtOnBus(nParam, this); + } + + mutex.lock(); + addEvent(event); + + + // erase first evt if too many evts + if (currentNbOfEvents > maxNbOfEvents) { + mutex.lock(); + event = getFirstEvent(); + removeFirstEvent(); + free(event); + mutex.unlock(); + } + + if (blockedWaitTask != NULL) { + //cout<<"Unblocking a blocked task (evt)\n"; + waitingNode->setUnblockedTask(blockedWaitTask); + blockedWaitTask = NULL; + } + + mutex.unlock(); + + // Cristian Macario 22/11/07 + return 1; +} + + +// Cristian Macario 22/11/07 +// Type of this method becomes int +int FiniteBlockingFIFO_Event::notify(Event *event) { + //mutex.lock(); + + //cout<<"notify evt step 01\n"; + + if (currentNbOfEvents == maxNbOfEvents) { + // Block current task + //mutex.unlock(); + + // Cristian Macario 22/11/07 + //return; + return 0; + } + + //cout<<"notify evt step 02\n"; + if(notifyingNode != waitingNode) { + notifyIf->notifyEvtOnBus(nParam, this); + } + + mutex.lock(); + addEvent(event); + + if (blockedWaitTask != NULL) { + //cout<<"Unblocking a blocked task (evt)\n"; + waitingNode->setUnblockedTask(blockedWaitTask); + blockedWaitTask = NULL; + } + + mutex.unlock(); + + //Cristian Macario 22/11/07 + return 1; +} + + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/event_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/event_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..91b8db6cd030b38be5a01da7d236cbc37676ac84 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/event_labsoc.h @@ -0,0 +1,277 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" + + +#ifndef EVENT_LABSOC__H +#define EVENT_LABSOC__H + +class Node; +class Task; +class TMLcpuIf; +#include "task_labsoc.h" +#include "interface_labsoc.h" + + +class Event { + public: + int param0; + int param1; + int param2; +}; + +class EventCell { + public: + Event *event; + EventCell *next; +}; + + +class TMLEvent{ + public: + + // Cristian Macario 21/11/07 + // following signals were not used + /* + sc_signal<bool> notifyEvent; + sc_signal<bool> waitEvent; + sc_signal<bool> notifiedEvent; + */ + TMLcpuIf * waitIf; + TMLcpuIf * notifyIf; + + +protected: + int currentNbOfEvents; // All data are in Byte + int maxNbOfEvents; + int nParam; + + // Cristian Macario 14/01/08 + // adding bus + // Node *node; + Node *notifyingNode; + Node *waitingNode; + + + // Cristian Macario 04/02/08 + // including bus + + + Task *blockedWaitTask; + + // Cristian Macario 22/11/07 + // in a finite blocking fifo a task may be blocked also + // when it is notifying an event + Task *blockedNotifyTask; + + sc_mutex mutex; + + EventCell *head; + EventCell *tail; + + public: + TMLEvent() {} + +/* + TMLEvent(Node *_node) { + node = _node; + } +*/ + // Cristian Macario 14/01/08 + // adding bus +/* + void setNode(Node *_node) { + node = _node; + } +*/ + + void setNotifyingNode(Node *node) { + notifyingNode = node; + } + + Node *getNotifyingNode() { + return notifyingNode; + } + + void setWaitingNode(Node *node) { + waitingNode = node; + } + + Node *getWaitingNode() { + return waitingNode; + } + + void setWaitIf(TMLcpuIf * iface){ + waitIf = iface; + } + + TMLcpuIf * getWaitIf(){ + return waitIf; + } + + void setNotifyIf(TMLcpuIf * iface) { + notifyIf = iface; + } + + TMLcpuIf * getNotifyIf() { + return notifyIf; + } + + + void setMaxNbOfEvents(int _maxNbOfEvents) { + maxNbOfEvents = _maxNbOfEvents; + } + + void setCurrentNbOfEvents(int _currentNbOfEvents) { + currentNbOfEvents = _currentNbOfEvents; + } + + + // Cristian Macario 04/02/2008 + // support for event between 2 different cpus + void setNParam(int n) { + nParam = n; + } + + int getNParam() { + return nParam; + } + + void initialize() { + currentNbOfEvents = 0; + blockedWaitTask = NULL; + + // Cristian Macario 22/11/07 + // initialization of added property + blockedNotifyTask = NULL; + + head = NULL; + tail = NULL; + } + + // Effectively make the operation in one cycle + // Returns the number of non-written samples + + // Cristian Macario 22/11/07 + // modified notify method: it returns 0 if + // the task has to be blocked and 1 if not + //virtual void notify(Event *event); + virtual int notify(Event *event); + + virtual Event *wait(); + virtual int notified(); + +public: + void setBlockedWaitTask(Task *t) { + blockedWaitTask = t; + } + + void unblockWaitTask() { + blockedWaitTask = NULL; + } + + // Cristian Macario 22/11/07 + // Added this method + Task * getBlockedWaitTask() { + return blockedWaitTask; + } + + // Cristian Macario 22/11/07 + // added these two methods + void setBlockedNotifyTask(Task *t) { + blockedNotifyTask = t; + } + + void unblockNotifyTask() { + blockedNotifyTask = NULL; + } + +protected: + void addEvent(Event *event); // Added at the end of the list + Event *getFirstEvent(); + void removeFirstEvent(); + + + virtual ~TMLEvent() {} + + + +}; + +class InfiniteFIFO_Event: public TMLEvent { +public: + + virtual ~InfiniteFIFO_Event() {} + +}; + +class TMLRequest: public TMLEvent { +public: + + virtual ~TMLRequest() {} + +}; + +class FiniteFIFO_Event: public TMLEvent { +public: + + // Cristian Macario 22/11/07 + // modified notify method: it returns 0 if + // the task has to be blocked and 1 if not + //virtual void notify(Event *event); + virtual int notify(Event *event); + + virtual ~FiniteFIFO_Event() {} + +}; + +class FiniteBlockingFIFO_Event: public TMLEvent { +public: + + // Cristian Macario 22/11/07 + // modified notify method: it returns 0 if + // the task has to be blocked and 1 if not + //virtual void notify(Event *event); + virtual int notify(Event *event); + + virtual ~FiniteBlockingFIFO_Event() {} + +}; + + + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/interface_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/interface_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..dea5faa3ba66c810a7bee4f853867fc0130f560f --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/interface_labsoc.cpp @@ -0,0 +1,109 @@ +#include "systemc" +#include "parameters.h" +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "utils_labsoc.h" +#include "bus_labsoc.h" +#include "mem_labsoc.h" +#include "comm_labsoc.h" + + + +int TMLcpuIf::write(int nb, TMLChannel *ch){ + TMLcpuIf *readIf = ch->getReadIf(); + + + // If tasks on the same CPU + if(readIf->getNode() == node) { + // If cache miss + if(Utils::myrand(0, 999) < node->getCacheMissRate()) { + node->setCacheMiss(); + if(Utils::myrand(0, 99) < node->getCacheWriteBackRate()){ + writeBackCacheLine(ch); + } + loadCacheLine(ch); + node->unsetCacheMiss(); + } + + return nb; + } + + + // Inter CPU communication + writeOnBus(nb, ch); + + return nb; + +} + +void TMLcpuIf::writeBackCacheLine(TMLChannel * ch) { + node->setCacheWriteBackLine(); + writeOnBus(node->getCacheLineSize(), ch); + node->unsetCacheWriteBackLine(); +} + +void TMLcpuIf::loadCacheLine(TMLChannel * ch){ + node->setCacheLoadLine(); + readFromBus(node->getCacheLineSize(),ch ); + node->unsetCacheLoadLine(); +} + + +int TMLcpuIf::read(int nb, TMLChannel *ch) { + TMLcpuIf *writeIf = ch->getWriteIf(); + + // If tasks on the same CPU + if(writeIf->getNode() == node) { + // Cache emulation + if(Utils::myrand(0, 999) < node->getCacheMissRate()) { + node->setCacheMiss(); + if(Utils::myrand(0, 99) < node->getCacheWriteBackRate()){ + writeBackCacheLine(ch); + } + loadCacheLine(ch); + node->unsetCacheMiss(); + } + return nb; + } + + // Tasks on different cpus + readFromBus(nb, ch); + return nb; +} + + + + +void TMLcpuIf::readFromBus(int nb, TMLChannel *ch){ + while(nb > 0) { + rd_bus = 1; + initiator_port.read(ch->mem->If, nb); + rd_bus = 0; + nb -= busWidth; + } +} + + +void TMLcpuIf::writeOnBus(int nb, TMLChannel * ch){ + while(nb > 0) { + wr_bus = 1; + initiator_port.write( ch->mem->If, nb); + wr_bus = 0; + nb -= busWidth; + } +} + + + + +void TMLcpuIf::notifyEvtOnBus(int n_param, TMLEvent * dest){ + int i; + i = 1 + (n_param * 4) / busWidth; + if((n_param * 4) % busWidth) + i++; + for(; i > 0; i--) { + wr_evt_bus = 1; + initiator_port.write(NULL, i); + wr_evt_bus = 0; + } +} diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/interface_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/interface_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..90d0977073df1cbbdc31e8de75310a321194bfa6 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/interface_labsoc.h @@ -0,0 +1,161 @@ +#include "systemc.h" + +#ifndef INTERFACE_LABSOC__H +#define INTERFACE_LABSOC__H + + +class Node; +class TMLChannel; +class TMLEvent; +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "event_labsoc.h" +#include "tlm.h" +#include "bus_types.h" +#include "basic_initiator_port.h" +#include "basic_protocol.h" + + +using basic_protocol::basic_initiator_port; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +using tlm::tlm_transport_channel; + +using tlm::tlm_blocking_get_if; +using tlm::tlm_blocking_put_if; + +// max buffer size in words of width-bit +#define MAX_BUFFER_SIZE 1024 + + + + +class TMLIf{ + public : + + //a channel (in the TLM sense, more like a wire) to connect the interface to the bus + typedef tlm_transport_channel< basic_request< ADDRESS_TYPE , DATA_TYPE > , basic_response< DATA_TYPE > > arb_channel_type; + arb_channel_type wire; + + virtual ~TMLIf() {} +}; + + + +/**Memory interface*/ +class TMLmemIf: public TMLIf, sc_module { +public: + + typedef sc_port< tlm_blocking_get_if < basic_request< ADDRESS_TYPE , DATA_TYPE > > > In_port; + In_port in_port; + + typedef sc_port< tlm_blocking_put_if < basic_response< DATA_TYPE > > > Out_port; + Out_port out_port; + + TMLmemIf(sc_module_name module_name): sc_module( module_name ) , + in_port("in_port"), out_port("out_port"){ + //plug the wire into the port + in_port( wire.get_request_export ); + out_port(wire.put_response_export); + + } + + + +}; + +/**CPU interface*/ +class TMLcpuIf: public TMLIf, sc_module{ +protected: + + int busWidth; + + Node *node; + sc_mutex mutex; + + + +public: + +//a port to produce request on the bus +basic_initiator_port <ADDRESS_TYPE,DATA_TYPE> initiator_port; +sc_port< tlm_blocking_get_if < basic_request< ADDRESS_TYPE , DATA_TYPE > > > in_port; + + +//constructor + TMLcpuIf(sc_module_name module_name): sc_module( module_name ) , + initiator_port("iport"), in_port("inport") +{ + //plug the wire into the port + initiator_port( wire.target_export ); + in_port( wire.get_request_export ); + + rd_bus = wr_bus = wr_evt_bus = 0; + + } + +// These signals represent (when the Interface is used) what it is doing) + sc_signal<bool> rd_bus, wr_bus, wr_evt_bus; + + + + void setBusWidth(int _width){ + busWidth = _width; + } + + int getBusWidth() { + return busWidth; + } + + + + void setNode(Node *n){ + node = n; + } + + Node * getNode(){ + return node; + } + + + // These methods are used from the channels and the events + int write(int nb, TMLChannel *ch); + int read(int nb, TMLChannel *ch); + void notifyEvtOnBus(int n_param, TMLEvent * dest); + + + +protected: + void writeBackCacheLine(TMLChannel *); + void loadCacheLine(TMLChannel * ch); + + // These method are the ones that communicate with the bus + void readFromBus(int nb, TMLChannel *ch); + void writeOnBus(int nb, TMLChannel *ch); + + + + + +}; + + + + + + + +#endif + + + + + + + + + + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/mem_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/mem_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..665d4d74f617197249fb839785501ab86512eefa --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/mem_labsoc.cpp @@ -0,0 +1,100 @@ + +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + + +#include "mem_labsoc.h" + +#include "systemc.h" +#include "interface_labsoc.h" +#include "bus_types.h" +#include "basic_protocol.h" +#include "basic_slave_base.h" + +using basic_protocol::basic_status; +using basic_protocol::basic_slave_base; +using tlm::tlm_transport_if; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +using basic_protocol::basic_status; + +memory::memory() +{ + wr_mem=0; + rd_mem=0; + latency=3; +} + + +void memory::go(){ + REQ req; + RSP rsp; + + for (;;){ + cout << sc_time_stamp() << " memory looking for requests " << endl; + req=If->in_port->get(); + cout << sc_time_stamp() << " memory found the request " <<req.d <<" on " << req.a << endl; + // if (req.d>0){ + + cout << sc_time_stamp() << " memory treating the request " << endl; + switch( req.type ) { + case basic_protocol::READ : + rsp.status = this->read( req.a , rsp.d ); + break; + case basic_protocol::WRITE: + rsp.status = write( req.a , req.d ); + break; + default : + rsp.status = basic_protocol::ERROR; + break; + + } + cout << sc_time_stamp() << " memory sending back the request " << endl; + If->out_port->put(rsp); + + //} + // wait(1, SC_NS); + } +} + + +basic_status memory::write( const ADDRESS_TYPE &a , const DATA_TYPE &d ) +{ + wr_mem=1; + cout << " writing at " << a << " value " << d << endl; + //latency of the memory + wait(latency, SC_NS); + wr_mem=0; + return basic_protocol::SUCCESS; +} + +basic_status memory::read( const ADDRESS_TYPE &a , DATA_TYPE &d ) +{ + + rd_mem=1; + cout << " reading from " << a << " value " << "we do not care" << endl; + //latency of the memory + wait(latency, SC_NS); + rd_mem=0; +return basic_protocol::SUCCESS; +} + +memory::~memory() { + +} diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/mem_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/mem_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..ffb13cd1d8ce9e13203a7ea979555834316c3240 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/mem_labsoc.h @@ -0,0 +1,73 @@ +/***************************************************************************** + + The following code is derived, directly or indirectly, from the SystemC + source code Copyright (c) 1996-2004 by all Contributors. + All Rights reserved. + + The contents of this file are subject to the restrictions and limitations + set forth in the SystemC Open Source License Version 2.4 (the "License"); + You may not use this file except in compliance with such restrictions and + limitations. You may obtain instructions on how to receive a copy of the + License at http://www.systemc.org/. Software distributed by Contributors + under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF + ANY KIND, either express or implied. See the License for the specific + language governing rights and limitations under the License. + + *****************************************************************************/ + + +#ifndef MEM_LABSOC_HEADER +#define MEM_LABSOC_HEADER + +#include "systemc.h" +#include "bus_types.h" +#include "basic_protocol.h" +#include "basic_slave_base.h" +#include "interface_labsoc.h" + +using basic_protocol::basic_status; +using basic_protocol::basic_slave_base; +using tlm::tlm_transport_if; + +using basic_protocol::basic_request; +using basic_protocol::basic_response; + +//extends the base class basic_slave_base of TLM, we just redefine the read and write function +class memory +{ +public: + + typedef basic_request< ADDRESS_TYPE , DATA_TYPE > REQ; + typedef basic_response< DATA_TYPE > RSP; + + + int latency;//could be divided into read and write latency if needed + + sc_signal<bool> rd_mem, wr_mem; + + TMLmemIf * If; + + memory(); + void go (); + basic_status write( const ADDRESS_TYPE & , const DATA_TYPE & ); + basic_status read( const ADDRESS_TYPE & , DATA_TYPE & ); + + + void setIf(TMLmemIf * _If){ + If=_If; + } + +void setLatency(int lat){ +latency=lat; +} + + ~memory(); + + + +}; + + + + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/node_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/node_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3601a6abe3eb03feb7b835053b78791278839677 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/node_labsoc.cpp @@ -0,0 +1,186 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc" +#include "parameters.h" +#include "node_labsoc.h" + +void Node::initialize() { + unblockedTask = NULL; + blockedTask = NULL; + terminatedTask = NULL; +} + +int Node::applyEXECIPolicy(int nbEXECI){ + return (int)(cyclesEXECI * nbEXECI); +} + +void Node::setByteDataSize(int _byteDataSize) { + byteDataSize = _byteDataSize; +} + +void Node::setCyclePerEXECIOp(int _cyclesEXECI) { + cyclesEXECI = _cyclesEXECI; +} + +int Node::getByteDataSize() { + return byteDataSize; +} + +int Node::taskHasBeenUnblocked() { + return (unblockedTask != NULL); +} + +void Node::setUnblockedTask(Task *t) { + unblockedTask = t; +} + +Task *Node::getUnblockedTask() { + Task *tmp = unblockedTask; + unblockedTask = NULL; + return tmp; +} + +int Node::taskHasBeenBlocked() { + return (blockedTask != NULL); +} + +void Node::setBlockedTask(Task *t) { + blockedTask = t; + //cout<<"ici\n"; + unsetCurrentTaskSignal(currentTaskSignal); + //cout<<"la\n"; +} + +Task *Node::getBlockedTask() { + Task *tmp = blockedTask; + blockedTask = NULL; + return tmp; +} + +int Node::taskHasBeenTerminated() { + return (terminatedTask != NULL); +} + +void Node::setTerminatedTask(Task *t) { + terminatedTask = t; +} + +Task *Node::getTerminatedTask() { + Task *tmp = terminatedTask; + terminatedTask = NULL; + return tmp; +} + +void Node::setCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal) { + currentTaskSignal = _currentTaskSignal; +} + +void Node::unsetCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal) { + if (currentTaskSignal != NULL) { + *_currentTaskSignal = 0; + } + currentTaskSignal = NULL; +} + +void Node::unsetCurrentTaskSignal() { + if (currentTaskSignal != NULL) { + *currentTaskSignal = 0; + } + currentTaskSignal = NULL; +} + + +// Cristian Macario 11/12/07 +void Node::setCacheMissRate(int _cacheMissRate) { + cacheMissRate = _cacheMissRate; +} + +int Node::getCacheMissRate() { + return cacheMissRate; +} + +void Node::setCacheLineSize(int _cacheLineSize) { + cacheLineSize = _cacheLineSize; +} + +int Node::getCacheLineSize() { + return cacheLineSize; +} + +void Node::setCacheWriteBackRate(int _cacheWriteBackRate) { + cacheWriteBackRate = _cacheWriteBackRate; +} + +int Node::getCacheWriteBackRate() { + return cacheWriteBackRate; +} + +void Node::setCacheMiss(){ + cacheMiss = 1; +} + +void Node::unsetCacheMiss(){ + cacheMiss = 0; +} + +void Node::setCacheWriteBackLine(){ + cacheWriteBackLine = 1; +} + +void Node::unsetCacheWriteBackLine(){ + cacheWriteBackLine = 0; +} + +void Node::setCacheLoadLine(){ + cacheLoadLine = 1; +} + +void Node::unsetCacheLoadLine(){ + cacheLoadLine = 0; +} + + + +// Cristian Macario 11/12/07 +// DEBUG +// including bus +int Node::hasTerminated(){ + return terminated; +} + + + + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/node_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/node_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..e88b06ff730239746b739d16e85a592f5ea76cc6 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/node_labsoc.h @@ -0,0 +1,145 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc" + +#ifndef NODE_LABSOC__H +#define NODE_LABSOC__H + + +class Task; +#include "task_labsoc.h" + + + +class Node { + protected: + + int nbOfTasks; + Task *tasks[MAX_TASK_PER_CPU]; + + int byteDataSize; + int cyclesEXECI; + + Task *unblockedTask; + Task *blockedTask; + Task *terminatedTask; + + sc_signal<bool> *currentTaskSignal; + + + // Cristian Macario 11/12/07 + int cacheMissRate; // In %o + int cacheLineSize; // In bytes + int cacheWriteBackRate; // In % + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + // moved this property from CPURR class to this class +// int terminated; + // terminated has become a signal and it is traced + + + + + public: + + // Cristian Macario 12/12/07 + // DEBUG + // including bus + sc_signal<bool> cacheMiss; + sc_signal<bool> cacheWriteBackLine; + sc_signal<bool> cacheLoadLine; + sc_signal<bool> terminated; + + + // Cristian Macario 05/12/07 + // Defined constructor + // Before nbOfTasks was initialized in the CPURR class constructor + // given that nbOfTasks is a property of this class, it's better + // to do it here. + Node(){ + nbOfTasks = 0; + terminated = 0; + cacheMissRate = 0; + cacheWriteBackRate = 0; + } + + void initialize(); + int applyEXECIPolicy(int nbEXECI); + + void setByteDataSize(int _byteDataSize); + void setCyclePerEXECIOp(int _cyclesEXECI); + int getByteDataSize(); + + void setUnblockedTask(Task *); + int taskHasBeenUnblocked(); + Task *getUnblockedTask(); + void setBlockedTask(Task *); + int taskHasBeenBlocked(); + Task *getBlockedTask(); + void setTerminatedTask(Task *); + int taskHasBeenTerminated(); + Task *getTerminatedTask(); + + void setCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal); + void unsetCurrentTaskSignal(sc_signal<bool> *_currentTaskSignal); + void unsetCurrentTaskSignal(); + + // Cristian Macario 11/12/07 + // DEBUG + // including bus + void setCacheMissRate(int _cacheMissRate); + int getCacheMissRate(); + void setCacheLineSize(int _cacheLineSize); + int getCacheLineSize(); + void setCacheWriteBackRate(int _cacheWriteBackRate); + int getCacheWriteBackRate(); + int hasTerminated(); + void setCacheMiss(); + void unsetCacheMiss(); + void setCacheWriteBackLine(); + void unsetCacheWriteBackLine(); + void setCacheLoadLine(); + void unsetCacheLoadLine(); + + // Cristian Macario 08/02/08 + virtual int getBranchingPredictionMissRate() {return 0;} + virtual void branchMiss(){}; + + +}; + +#endif diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/parameters.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/parameters.h new file mode 100644 index 0000000000000000000000000000000000000000..15019653ff86ff42fca729cb562cdc69f7355c30 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/parameters.h @@ -0,0 +1,53 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + + + +#ifndef PARAMETERS__H +#define PARAMETERS__H + +// CPU +#define MAX_TASK_PER_CPU 10 + + +// TASKS +#define MAX_FUNC_TASK 1024 + +// Cristian Macario 22/11/07 +// Definition of the maximum number of events +#define MAX_EVENT 4096 + + +#endif + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/task_labsoc.cpp b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/task_labsoc.cpp new file mode 100644 index 0000000000000000000000000000000000000000..412bbacbcd9cbd4018abc42f0a9508332e4bc97e --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/task_labsoc.cpp @@ -0,0 +1,449 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "task_labsoc.h" +#include "channel_labsoc.h" +#include "utils_labsoc.h" + + +void Task::initialize() { + initWrite = 0; + initRead = 0; +} + +int Task::run() { + cout<<"Task is running -> bad function has been called!\n"; + return 0; +} + +void Task::setNode(Node *_node) { + node = _node; +} + + +int Task::EXECI(int nbOfIntOp) { + int nbOp = node->applyEXECIPolicy(nbOfIntOp); + node->setCurrentTaskSignal(&execi); + return nbOp; +} + +void Task::END_EXECI() { + node->unsetCurrentTaskSignal(&execi); +} + +void Task::TERMINATE(){ + node->setTerminatedTask(this); + runnable = 0; + running = 0; + terminated = 1; + runnable = 0; +} + +void Task::BLOCK(){ + //cout<<"blocking\n"; + node->setBlockedTask(this); + running = 0; + blocked = 1; + runnable = 0; + terminated = 0; + //cout<<"end_blocking\n"; +} + +void Task::UNBLOCK(){ + //node->setUnblockedTask(this); + + // Cristian Macario 22/11/07 + // When a task is blocked by many events and + // then it is unblocked by one of them, + // we call the unblockWaitTask() method of the + // the other blocking events. + for(int i = 0; i < nbOfReceivedEvents; i++) { + if(receivedEvents[i]->getBlockedWaitTask() == this) { + receivedEvents[i]->unblockWaitTask(); + } + } + running = 0; + blocked = 0; + runnable = 1; + terminated = 0; +} + +int Task::WRITE(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *wr_sig, int endFunction) { + // Write initialization + //cout<<"write0\n"; + //currentSig = wr_sig; + if (initWrite == 0) { + initWrite = 1; + //cout<<"write01\n"; + nbToWrite = ch->getNbToWrite(nbOfSamples); + //cout<<"write02\n"; + } + + //cout<<"write1\n"; + + // Test if write has to continue + if (nbToWrite == 0) { + currentFunction = endFunction; + node->unsetCurrentTaskSignal(wr_sig); + initWrite = 0; + return run(); + } + + //cout<<"write2\n"; + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(ch->getReadingNode() != ch->getWritingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + + // Write is not over: calculate the number of samples that can be written + + // Cristian Macario 13/12/07 + // adding bus + // added set and reset signal + // because now during the write operation there can be wait() + *wr_sig = 1; + nbWritten = ch->write(nbToWrite); + *wr_sig = 0; + + + if (nbWritten == 0) { + + // Task must block + ch->setBlockedWriteTask(this); + //cout<<"task is blocked: cannot write"; + BLOCK(); + *wr_sig = 0; + return 0; + } + + //cout<<"write3\n"; + // A one-cycle Write operation is performed + nbToWrite = nbToWrite - nbWritten; + node->setCurrentTaskSignal(wr_sig); + //cout<<"Nb written="<<nbWritten<<" nb to write="<<nbToWrite<<"\n"; + + + // Cristian Macario 06/01/08 + // adding bus + // When channel between 2 CPUs the wait() is done on the interface + if(ch->getReadingNode() != ch->getWritingNode()) { + return 0; + } + return 1; +} + + +// Cristian Macario 21/11/07 +// The following instruction were already executed during +// last time WRITE() was called +void Task::END_WRITE(sc_signal<bool> *wr_sig) { +// node->unsetCurrentTaskSignal(wr_sig); +// initWrite = 0; +} + +int Task::READ(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *rd_sig, int endFunction) { + // Read initialization + if (initRead == 0) { + initRead = 1; + nbToRead = ch->getNbToRead(nbOfSamples); + } + + // Test if read has to continue + if (nbToRead == 0) { + //cout<<"Well, nothing to be read"; + currentFunction = endFunction; + node->unsetCurrentTaskSignal(rd_sig); + initRead = 0; + return run(); + } + + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(ch->getReadingNode() != ch->getWritingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + // Read is not over: calculate the number of samples that can be read + + // Cristian Macario 13/12/07 + // adding bus + // added set and reset signal + // because now during the read operation there can be wait() + *rd_sig = 1; + nbRead = ch->read(nbToRead); + *rd_sig = 0; + + if (nbRead == 0) { + // Task must block + ch->setBlockedReadTask(this); + //cout<<"task is blocked: cannot read"; + BLOCK(); + *rd_sig = 0; + return 0; + } + + // A one-cycle Write operation is performed + nbToRead = nbToRead - nbRead; + node->setCurrentTaskSignal(rd_sig); + //cout<<"Nb read="<<nbRead<<" nb to read="<<nbToRead<<"\n"; + + // Cristian Macario 14/01/08 + // adding bus + // When channel between 2 CPUs the wait() is done on the interface + if(ch->getReadingNode() != ch->getWritingNode()) { + return 0; + } + + return 1; +} + + +// Cristian Macario 21/11/07 +// The following instruction were already executed during +// last time WRITE() was called +void Task::END_READ(sc_signal<bool> *rd_sig) { +// node->unsetCurrentTaskSignal(rd_sig); +// initRead = 0; +} + + +int Task::WAIT_EVENT(TMLEvent *evt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig, int endFunction) { + Event *event; + + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + *wait_sig = 1; + event = evt->wait(); + *wait_sig = 0; + + if (event == NULL) { + //cout<<"null event 0\n"; + node->unsetCurrentTaskSignal(wait_sig); + //cout<<"null event 1\n"; + evt->setBlockedWaitTask(this); + //cout<<"null event 2\n"; + //cout<<"task is blocked: cannot get event (wait op)\n"; + BLOCK(); + //cout<<"null event 3\n"; + return 0; + } + + *param0 = event->param0; + *param1 = event->param1; + *param2 = event->param2; + free(event); + node->setCurrentTaskSignal(wait_sig); + currentFunction = endFunction; + + // Cristian Macario 04/02/08 + // adding bus + // When event between 2 CPUs the wait() is done on the interface + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + return 0; + } + + return 1; +} + +void Task::END_WAIT(sc_signal<bool> *wait_sig) { + node->unsetCurrentTaskSignal(wait_sig); +} + + +// Critian Macario 27/11/07 +// modified the definition of the function: +// we need end function as an argument +int Task::NOTIFY_EVENT(TMLEvent *evt, int param0, int param1, int param2, sc_signal<bool> *notify_sig, int endFunction) { + //cout<<"Notify Event!\n"; + Event *event = new Event(); + event->param0 = param0; + event->param1 = param1; + event->param2 = param2; + //cout<<"Calling notify()\n"; + + + + // Cristian Macario 08/02/08 + // When communication between 2 different CPUs this function returns 0 + // so the branch miss rate must be emulated here + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + if(Utils::myrand(0, 99) < node->getBranchingPredictionMissRate()) { + node->branchMiss(); + } + } + + + // Cristian Macario 05/02/08 + // Need to set the signal becuase there + // can be wait() while notifying + *notify_sig = 1; + // Cristian Macario 22/11/07 + // if finite blocking fifo, event may not be notified + // and block the task + if(!evt->notify(event)) { + *notify_sig = 0; + node->unsetCurrentTaskSignal(notify_sig); + evt->setBlockedNotifyTask(this); + BLOCK(); + return 0; + } + *notify_sig = 0; + + // Cristian Macario 27/11/07 + // Update current function if event has been notified + currentFunction = endFunction; + + //cout<<"Notify done!\n"; + node->setCurrentTaskSignal(notify_sig); + + // Cristian Macario 04/02/08 + // adding bus + // When event between 2 CPUs the wait() is done on the interface + if(evt->getNotifyingNode() != evt->getWaitingNode()) { + return 0; + } + + + return 1; +} + +void Task::END_NOTIFY(sc_signal<bool> *notify_sig) { + node->unsetCurrentTaskSignal(notify_sig); +} + +int Task::NOTIFIED_EVENT(TMLEvent *evt, int *notified, sc_signal<bool> *notified_sig) { + *notified = evt->notified(); + node->setCurrentTaskSignal(notified_sig); + return 1; +} + +void Task::END_NOTIFIED(sc_signal<bool> *notified_sig) { + node->unsetCurrentTaskSignal(notified_sig); +} + +int Task::SELECT_EVENT(TMLEvent *evt[], int nbEvt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig[], int endFunction[]) { + int i = 0, index=0, j, k; + Event *event = NULL; + int found = 0; + + if (nbEvt == 0) { + return 0; + } + + //cout<<"select0\n"; + index = Utils::myrand(0, nbEvt-1); + for(i=0; i<nbEvt; i++) { + j =(index+i)%nbEvt; + event = evt[j]->wait(); + if (event == NULL) { + *wait_sig[j] = 0; + evt[j]->setBlockedWaitTask(this); + } else if (found == 0) { + found = 1; + for(k=0; k<nbEvt; k++) { + *wait_sig[k] = 0; + evt[k]->unblockWaitTask(); + } + //*wait_sig[j] = 1; + node->setCurrentTaskSignal(wait_sig[j]); + currentFunction = endFunction[j]; + break; + } + } + + //cout<<"select1\n"; + + if (found == 0) { + //cout<<"task is blocked: cannot get event (select op)"; + BLOCK(); + return 0; + } + + //cout<<"select2\n"; + + *param0 = event->param0; + *param1 = event->param1; + *param2 = event->param2; + free(event); + + //cout<<"select3\n"; + + return 1; +} + + +void Task::END_SELECT(sc_signal<bool> *wait_sig) { + node->unsetCurrentTaskSignal(wait_sig); +} + + +int Task::getPriority() { + return priority; +} + +void Task::setPriority(int _priority) { + priority = _priority; +} + + +// Cristian Macario 22/11/07 +// Definition of the method +void Task::addReceivedEvent(TMLEvent * evt) { + if(nbOfReceivedEvents < MAX_EVENT) { + receivedEvents[nbOfReceivedEvents++] = evt; + } else { + cout<<"Too many events connected to the same task"<<endl; + exit(0); + } +} + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/task_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/task_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..a1fd8f4354a618e3259c9d8e6d277db6382bc7bc --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/task_labsoc.h @@ -0,0 +1,132 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" + +#ifndef TASK_LABSOC__H +#define TASK_LABSOC__H + +#include "node_labsoc.h" +#include "channel_labsoc.h" +#include "event_labsoc.h" + + +class Task { + private: + Node *node; + + public: + sc_signal<bool> runnable; + sc_signal<bool> running; + sc_signal<bool> terminated; + sc_signal<bool> blocked; + + sc_signal<bool> execi; + + // Cristian Macario 21/11/2007 + // the following signals were not used + /* + sc_signal<bool> wr; + sc_signal<bool> rd; + */ + + //sc_signal<bool> currentSig; + + +protected: + int currentFunction; + int nbToWrite; + int nbToRead; + int nbWritten; + int nbRead; + int initWrite; + int initRead; + int initWait; + + int priority; + + // Cristian Macario 22/11/07 + // List of the events received by the task + TMLEvent * receivedEvents[MAX_EVENT]; + int nbOfReceivedEvents; + + +public: + Task() { + currentFunction = 0; + + // Cristian Macario 22/11/07 + // Initialize the number of received events + nbOfReceivedEvents = 0; + } + + void initialize(); + virtual int run(); + void setNode(Node *_node); + int EXECI(int nbOfIntOp); + void END_EXECI(); + void TERMINATE(); + void BLOCK(); + void UNBLOCK(); + int WRITE(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *wr_sig, int endFunction); + void END_WRITE(sc_signal<bool> *wr_sig); + int READ(TMLChannel *ch, int nbOfSamples, sc_signal<bool> *rd_sig, int endFunction); + void END_READ(sc_signal<bool> *rd_sig); + + // Cristian Macario 27/11/07 + // Modified the prototype of the method: added the endFunction parameter + int NOTIFY_EVENT(TMLEvent *evt, int param0, int param1, int param2, sc_signal<bool> *wait_sig, int endFunction); + + void END_NOTIFY(sc_signal<bool> *wait_sig); + int WAIT_EVENT(TMLEvent *evt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig, int endFunction); + void END_WAIT(sc_signal<bool> *wait_sig); + int NOTIFIED_EVENT(TMLEvent *evt, int *notified, sc_signal<bool> *notified_sig); + void END_NOTIFIED(sc_signal<bool> *notified_sig); + int SELECT_EVENT(TMLEvent *evt[], int nbEvt, int *param0, int *param1, int *param2, sc_signal<bool> *wait_sig[], int endFunction[]); + void END_SELECT(sc_signal<bool> *wait_sig); + + int getPriority(); + void setPriority(int _priority); + + // Cristian Macario 22/11/07 + // Added method to add received events + void addReceivedEvent(TMLEvent * evt); + + virtual ~Task() {} +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/taskcpu_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/taskcpu_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..e64d97dc9a626b15c50e0d341e6273b8d92acab8 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/taskcpu_labsoc.h @@ -0,0 +1,73 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +"²software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + +#include "systemc.h" +#include "parameters.h" +#include "task_labsoc.h" + +#ifndef TASKCPU_LABSOC__H +#define TASKCPU_LABSOC__H + + +// Cristian Macario 06/12/07 +// Modified data structure to make code more readable +/* +class TaskCPURR { + public: + Task *task; + int nbOfInstInPipeline; + TaskCPURR *nextRunnable; + TaskCPURR *nextTerminated; + TaskCPURR *nextBlocked; +}; +*/ +class TaskCPURR { + public: + Task *task; + int nbOfInstInPipeline; + TaskCPURR *next; +}; + + +class TaskOneNode { + public: + Task *task; + TaskOneNode *nextRunnable; + TaskOneNode *nextTerminated; + TaskOneNode *nextBlocked; +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/utils_labsoc.h b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/utils_labsoc.h new file mode 100644 index 0000000000000000000000000000000000000000..23ca7b9d2dcaa393ca2ee1fc8eb5e5c7a7dee155 --- /dev/null +++ b/preinstallTTool/macos/TTool/simulators/systemc1/src_simulator/utils_labsoc.h @@ -0,0 +1,88 @@ +/**Copyright GET / ENST / Ludovic Apvrille + +ludovic.apvrille at enst.fr + +This software is a computer program whose purpose is to edit TURTLE +diagrams, generate RT-LOTOS code from these TURTLE diagrams, and at +last to analyse results provided from externalm formal validation tools. + +This software is governed by the CeCILL license under French law and +abiding by the rules of distribution of free software. You can use, +modify and/ or redistribute the software under the terms of the CeCILL +license as circulated by CEA, CNRS and INRIA at the following URL +"http://www.cecill.info". + +As a counterpart to the access to the source code and rights to copy, +modify and redistribute granted by the license, users are provided only +with a limited warranty and the software's author, the holder of the +economic rights, and the successive licensors have only limited +liability. + +In this respect, the user's attention is drawn to the risks associated +with loading, using, modifying and/or developing or reproducing the +software by the user in light of its specific status of free software, +that may mean that it is complicated to manipulate, and that also +therefore means that it is reserved for developers and experienced +professionals having in-depth computer knowledge. Users are therefore +encouraged to load and test the software's suitability as regards their +requirements in conditions enabling the security of their systems and/or +data to be ensured and, more generally, to use and operate it in the +same conditions as regards security. + +The fact that you are presently reading this means that you have had +knowledge of the CeCILL license and that you accept its terms.*/ + + +#include "systemc.h" + +#ifndef UTILS_LABSOC__H +#define UTILS_LABSOC__H + +// Cristian Macario 21/11/07 +// Improved definition of macros +//#define div(a,b) a/b +//#define mod(a,b) a%b +#define div(a,b) ((a)/(b)) +#define mod(a,b) ((a)%(b)) + + +typedef char s8; +typedef short s16; +typedef int s32; + +class Utils { + public: + + //Random No between n1 and n2 (both inclusive) + + // Cristian Macario + // Improved the random generator + static int myrand(int n1, int n2) + { + static bool firstTime = true; + + if(firstTime){ + srand(time(NULL)); + firstTime = false; + } + + n2++; + + /* + int rnd = (int)(((float)n2)*rand()/RAND_MAX); + + while(rnd < n1) + { + int rnd_dummy = (int)((float)n1*rand()/RAND_MAX+1.0); + rnd = rnd + rnd_dummy; + } + return rnd; + */ + + return (n1 + (int)(((float)(n2 - n1))*rand()/(RAND_MAX + 1.0))); + } +}; + +#endif + + diff --git a/preinstallTTool/macos/TTool/tmlcode/README_tml b/preinstallTTool/macos/TTool/tmlcode/README_tml new file mode 100644 index 0000000000000000000000000000000000000000..5ca05cf572b858aa03ed7bea4acf2256c236933a --- /dev/null +++ b/preinstallTTool/macos/TTool/tmlcode/README_tml @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The tmlcode directory is intended to store the TML / TMAP files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/ttool.exe b/preinstallTTool/macos/TTool/ttool.exe new file mode 100755 index 0000000000000000000000000000000000000000..afb0d3bbb09b023568a5361978e159701ff53032 --- /dev/null +++ b/preinstallTTool/macos/TTool/ttool.exe @@ -0,0 +1 @@ +cd bin; java -Xmx1024m -jar ttool.jar -launcher -config config.xml -nc -diplodocus -avatar -proverif diff --git a/preinstallTTool/macos/TTool/uppaal/README_uppaal b/preinstallTTool/macos/TTool/uppaal/README_uppaal new file mode 100644 index 0000000000000000000000000000000000000000..4afeb66886c3aa72bf07e1c77ccf256690e8c9a8 --- /dev/null +++ b/preinstallTTool/macos/TTool/uppaal/README_uppaal @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +The uppaal directory is intended to store the uppaal files generated from TTool. To generate these files, please refer to http://labsoc.comelec.enst.fr/turtle/HELP \ No newline at end of file diff --git a/preinstallTTool/macos/TTool/uppaal/spec.xml b/preinstallTTool/macos/TTool/uppaal/spec.xml new file mode 100644 index 0000000000000000000000000000000000000000..e43913f54c45b62946b36ca08979adc78d998026 --- /dev/null +++ b/preinstallTTool/macos/TTool/uppaal/spec.xml @@ -0,0 +1,1171 @@ +<?xml version="1.0" encoding="utf-8" ?> +<nta> +<declaration> +//Global declarations + +//Declarations used for non synchronized gates +urgent chan makeChoice; +urgent chan RemoteControl__encrypt; +urgent chan RemoteControl__decrypt; +urgent chan RemoteControl__sencrypt; +urgent chan RemoteControl__sdecrypt; +urgent chan RemoteControl__MAC; +urgent chan RemoteControl__verifyMAC; +urgent chan RemoteControl__concat2; +urgent chan RemoteControl__concat3; +urgent chan RemoteControl__concat4; +urgent chan RemoteControl__get2; +urgent chan RemoteControl__get3; +urgent chan RemoteControl__get4; +urgent chan Bell__runBell; +urgent chan Controller__startCooking; +urgent chan Controller__durationModified; +urgent chan Magnetron__ON; +urgent chan Magnetron__OFF; +urgent chan Door__openM; +urgent chan Door__closeM; +urgent chan WirelessInterface__encrypt; +urgent chan WirelessInterface__decrypt; +urgent chan WirelessInterface__sencrypt; +urgent chan WirelessInterface__sdecrypt; +urgent chan WirelessInterface__MAC; +urgent chan WirelessInterface__verifyMAC; +urgent chan WirelessInterface__concat2; +urgent chan WirelessInterface__concat3; +urgent chan WirelessInterface__concat4; +urgent chan WirelessInterface__get2; +urgent chan WirelessInterface__get3; +urgent chan WirelessInterface__get4; + +//Declarations for synchronous channels +urgent chan Controller_obs_open__ObserverProp1_obs_open; +urgent chan Controller_obs_closed__ObserverProp1_obs_closed; +urgent chan Controller_obs_magnetronStart__ObserverProp1_obs_magnetronStart; +urgent chan WirelessInterface_remoteStart__MicroWaveOven_remoteStart; +urgent chan RemotelyControlledMicrowave_wirelessChannelRead__RemotelyControlledMicrowave_wirelessChannelWrite; +urgent chan Controller_ringBell__Bell_ring; +urgent chan Door_open__Controller_open; +urgent chan Door_closed__Controller_closed; +urgent chan Controller_startMagnetron__Magnetron_startM; +urgent chan Controller_stopMagnetron__Magnetron_stopM; +urgent chan ControlPanel_LEDOn__Controller_startCooking; +urgent chan ControlPanel_LEDoff__Controller_stopCooking; +urgent chan ControlPanel_startButton__Controller_start; + +// Global parameters for method calls and signal exchange +int actionint__0; +int actionint__1; + + +int min(int x, int y) { + if(x<y) { + return x; + } + return y; +} + +int max(int x, int y) { + if(x<y) { + return y; + } + return x; +} +</declaration> +<template> +<name>ObserverProp1</name> +<parameter></parameter> +<declaration>clock h__; +</declaration> +<location id="id0" x="-100" y="30"> +<name x="-90" y="35">id0</name> +</location> +<location id="id2" x="10" y="-80"> +<name x="20" y="-75">id2</name> +</location> +<location id="id3" x="15" y="-10"> +<name x="25" y="-5">id3</name> +<committed /> +</location> +<location id="id4" x="20" y="60"> +<name x="30" y="65">id4</name> +</location> +<init ref="id0" /> +<transition> +<source ref="id0" /> +<target ref="id0" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="-42" y="-195">Controller_obs_magnetronStart__ObserverProp1_obs_magnetronStart?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="-47" y="-164" /> +<nail x="-37" y="-129" /> +</transition> +<transition> +<source ref="id0" /> +<target ref="id2" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="-40" y="-160">Controller_obs_open__ObserverProp1_obs_open?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="-30" y="-127" /> +</transition> +<transition> +<source ref="id2" /> +<target ref="id3" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="17" y="-55">Controller_obs_magnetronStart__ObserverProp1_obs_magnetronStart?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="17" y="-36" /> +</transition> +<transition> +<source ref="id3" /> +<target ref="id4" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="32" y="6" /> +</transition> +<transition> +<source ref="id2" /> +<target ref="id0" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="22" y="15">Controller_obs_closed__ObserverProp1_obs_closed?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="-6" y="49" /> +</transition> +</template> +<template> +<name>RemotelyControlledMicrowave</name> +<parameter></parameter> +<declaration>clock h__; +</declaration> +<location id="id6" x="-100" y="-220"> +<name x="-90" y="-215">id6</name> +</location> +<init ref="id6" /> +</template> +<template> +<name>RemoteControl</name> +<parameter></parameter> +<declaration>int duration = 12; +int msg1__data = 0; +int PSK__data = 0; +int msg__data = 0; +clock h__; +</declaration> +<location id="id7" x="-100" y="0"> +<name x="-90" y="5">id7</name> +<committed /> +</location> +<location id="id8" x="5" y="-150"> +<name x="15" y="-145">id8</name> +<urgent /> +</location> +<location id="id9" x="10" y="-80"> +<name x="20" y="-75">id9</name> +</location> +<location id="id10" x="15" y="-10"> +<name x="25" y="-5">id10</name> +</location> +<init ref="id7" /> +<transition> +<source ref="id7" /> +<target ref="id8" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="-37" y="-185">msg1__data = duration</label> +<nail x="-49" y="-163" /> +</transition> +<transition> +<source ref="id8" /> +<target ref="id9" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="12" y="-125">RemoteControl__sencrypt!</label> +<label kind="assignment" x="17" y="-115">actionint__0 =msg1__data, +actionint__1 =PSK__data</label> +<nail x="15" y="-138" /> +</transition> +<transition> +<source ref="id9" /> +<target ref="id10" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="17" y="-55">RemotelyControlledMicrowave_wirelessChannelRead__RemotelyControlledMicrowave_wirelessChannelWrite!</label> +<label kind="assignment" x="22" y="-45">actionint__0 = msg__data</label> +<nail x="3" y="-57" /> +</transition> +</template> +<template> +<name>MicroWaveOven</name> +<parameter></parameter> +<declaration>clock h__; +</declaration> +<location id="id11" x="-100" y="-220"> +<name x="-90" y="-215">id11</name> +</location> +<init ref="id11" /> +</template> +<template> +<name>Bell</name> +<parameter></parameter> +<declaration>clock h__; +</declaration> +<location id="id12" x="-100" y="0"> +<name x="-90" y="5">id12</name> +</location> +<location id="id13" x="5" y="-150"> +<name x="15" y="-145">id13</name> +<urgent /> +</location> +<init ref="id12" /> +<transition> +<source ref="id12" /> +<target ref="id13" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="-42" y="-195">Controller_ringBell__Bell_ring?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="-69" y="-183" /> +</transition> +<transition> +<source ref="id13" /> +<target ref="id12" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="12" y="-125">Bell__runBell!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="18" y="-137" /> +</transition> +</template> +<template> +<name>ControlPanel</name> +<parameter></parameter> +<declaration>int duration = 9; +clock h__; +</declaration> +<location id="id15" x="-100" y="-220"> +<name x="-90" y="-215">id15</name> +</location> +<init ref="id15" /> +<transition> +<source ref="id15" /> +<target ref="id15" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="-42" y="-195">ControlPanel_startButton__Controller_start!</label> +<label kind="assignment" x="-37" y="-185">actionint__0 = duration</label> +<nail x="-65" y="-161" /> +</transition> +</template> +<template> +<name>Controller</name> +<parameter></parameter> +<declaration>int duration = 5; +int remainingTime = 0; +clock h__; +</declaration> +<location id="id17" x="-100" y="1220"> +<name x="-90" y="1225">id17</name> +</location> +<location id="id18" x="5" y="-150"> +<name x="15" y="-145">id18</name> +</location> +<location id="id19" x="10" y="-80"> +<name x="20" y="-75">id19</name> +<committed /> +</location> +<location id="id20" x="15" y="-10"> +<name x="25" y="-5">id20</name> +<urgent /> +</location> +<location id="id21" x="20" y="60"> +<name x="30" y="65">id21</name> +</location> +<location id="id22" x="25" y="130"> +<name x="35" y="135">id22</name> +<committed /> +</location> +<location id="id23" x="30" y="200"> +<name x="40" y="205">id23</name> +<label kind="invariant" x="35" y="215">(h__ <= 1) && (h__ <= 1)</label> +</location> +<location id="id24" x="35" y="270"> +<name x="45" y="275">id24</name> +</location> +<location id="id25" x="40" y="340"> +<name x="50" y="345">id25</name> +</location> +<location id="id26" x="45" y="410"> +<name x="55" y="415">id26</name> +</location> +<location id="id28" x="205" y="550"> +<name x="215" y="555">id28</name> +<label kind="invariant" x="210" y="565">h__ <= 1</label> +</location> +<location id="id29" x="210" y="620"> +<name x="220" y="625">id29</name> +<committed /> +</location> +<location id="id30" x="215" y="690"> +<name x="225" y="695">id30</name> +<urgent /> +</location> +<location id="id33" x="380" y="900"> +<name x="390" y="905">id33</name> +</location> +<location id="id34" x="385" y="970"> +<name x="395" y="975">id34</name> +<committed /> +</location> +<location id="id35" x="390" y="1040"> +<name x="400" y="1045">id35</name> +<urgent /> +</location> +<location id="id36" x="395" y="1110"> +<name x="405" y="1115">id36</name> +</location> +<location id="id38" x="255" y="1250"> +<name x="265" y="1255">id38</name> +<label kind="invariant" x="260" y="1265">h__ <= 1</label> +</location> +<location id="id40" x="415" y="1390"> +<name x="425" y="1395">id40</name> +</location> +<location id="id42" x="125" y="1530"> +<name x="135" y="1535">id42</name> +<committed /> +</location> +<location id="id43" x="130" y="1600"> +<name x="140" y="1605">id43</name> +<committed /> +</location> +<location id="id44" x="135" y="1670"> +<name x="145" y="1675">id44</name> +<label kind="invariant" x="140" y="1685">(h__ <= (9))</label> +</location> +<location id="id46" x="145" y="1810"> +<name x="155" y="1815">id46</name> +</location> +<location id="id47" x="150" y="1880"> +<name x="160" y="1885">id47</name> +</location> +<location id="id48" x="155" y="1950"> +<name x="165" y="1955">id48</name> +</location> +<location id="id49" x="160" y="2020"> +<name x="170" y="2025">id49</name> +</location> +<location id="id50" x="165" y="2090"> +<name x="175" y="2095">id50</name> +</location> +<location id="id51" x="170" y="2160"> +<name x="180" y="2165">id51</name> +</location> +<location id="id53" x="180" y="2300"> +<name x="190" y="2305">id53</name> +</location> +<location id="id54" x="185" y="2370"> +<name x="195" y="2375">id54</name> +</location> +<location id="id55" x="190" y="2440"> +<name x="200" y="2445">id55</name> +</location> +<init ref="id17" /> +<transition> +<source ref="id17" /> +<target ref="id18" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="-42" y="-195">WirelessInterface_remoteStart__MicroWaveOven_remoteStart?</label> +<label kind="assignment" x="-37" y="-185">duration = actionint__0</label> +<nail x="-69" y="-191" /> +</transition> +<transition> +<source ref="id18" /> +<target ref="id19" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="12" y="-125">Controller_startMagnetron__Magnetron_startM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="-7" y="-117" /> +</transition> +<transition> +<source ref="id19" /> +<target ref="id20" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="22" y="-45">remainingTime=duration</label> +<nail x="-5" y="-48" /> +</transition> +<transition> +<source ref="id20" /> +<target ref="id21" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="22" y="15">Controller__startCooking!</label> +<label kind="assignment" x="27" y="25">actionint__0 =remainingTime</label> +<nail x="3" y="45" /> +</transition> +<transition> +<source ref="id21" /> +<target ref="id22" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="27" y="85">Controller_obs_magnetronStart__ObserverProp1_obs_magnetronStart!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="36" y="92" /> +</transition> +<transition> +<source ref="id22" /> +<target ref="id23" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="37" y="165">h__ = 0</label> +<nail x="26" y="160" /> +</transition> +<transition> +<source ref="id23" /> +<target ref="id26" /> +<label kind="guard" x="40" y="320">remainingTime==0</label> +<label kind="synchronisation" x="45" y="330">Controller_stopMagnetron__Magnetron_stopM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="59" y="315" /> +</transition> +<transition> +<source ref="id23" /> +<target ref="id28" /> +<label kind="guard" x="117" y="355">h__ >= 1</label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="132" y="387" /> +</transition> +<transition> +<source ref="id28" /> +<target ref="id24" /> +<label kind="guard" x="120" y="390">remainingTime>0</label> +<label kind="synchronisation" x="125" y="400">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="113" y="405" /> +</transition> +<transition> +<source ref="id24" /> +<target ref="id29" /> +<label kind="guard" x="122" y="425">remainingTime>0</label> +<label kind="synchronisation" x="127" y="435">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="145" y="462" /> +</transition> +<transition> +<source ref="id29" /> +<target ref="id30" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="222" y="655">remainingTime= remainingTime -1</label> +<nail x="221" y="670" /> +</transition> +<transition> +<source ref="id30" /> +<target ref="id22" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="222" y="715">Controller__durationModified!</label> +<label kind="assignment" x="227" y="725">actionint__0 =remainingTime</label> +<nail x="233" y="704" /> +</transition> +<transition> +<source ref="id28" /> +<target ref="id26" /> +<label kind="guard" x="215" y="670">remainingTime==0</label> +<label kind="synchronisation" x="220" y="680">Controller_stopMagnetron__Magnetron_stopM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="226" y="675" /> +</transition> +<transition> +<source ref="id28" /> +<target ref="id33" /> +<label kind="guard" x="292" y="705">h__ >= 1</label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="305" y="724" /> +</transition> +<transition> +<source ref="id33" /> +<target ref="id24" /> +<label kind="guard" x="207" y="565">remainingTime>0</label> +<label kind="synchronisation" x="212" y="575">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="219" y="607" /> +</transition> +<transition> +<source ref="id33" /> +<target ref="id25" /> +<label kind="guard" x="210" y="600">remainingTime > 0</label> +<label kind="synchronisation" x="215" y="610">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="196" y="622" /> +</transition> +<transition> +<source ref="id25" /> +<target ref="id34" /> +<label kind="guard" x="212" y="635">remainingTime > 0</label> +<label kind="synchronisation" x="217" y="645">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="192" y="664" /> +</transition> +<transition> +<source ref="id34" /> +<target ref="id35" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="397" y="1005">remainingTime=remainingTime -1</label> +<nail x="395" y="1008" /> +</transition> +<transition> +<source ref="id35" /> +<target ref="id36" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="397" y="1065">Controller__durationModified!</label> +<label kind="assignment" x="402" y="1075">actionint__0 =remainingTime</label> +<nail x="380" y="1051" /> +</transition> +<transition> +<source ref="id33" /> +<target ref="id26" /> +<label kind="guard" x="390" y="1020">remainingTime==0</label> +<label kind="synchronisation" x="395" y="1030">Controller_stopMagnetron__Magnetron_stopM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="365" y="1034" /> +</transition> +<transition> +<source ref="id23" /> +<target ref="id38" /> +<label kind="guard" x="142" y="705">h__ >= 1</label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="140" y="748" /> +</transition> +<transition> +<source ref="id38" /> +<target ref="id25" /> +<label kind="guard" x="147" y="775">remainingTime > 0</label> +<label kind="synchronisation" x="152" y="785">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="145" y="814" /> +</transition> +<transition> +<source ref="id38" /> +<target ref="id26" /> +<label kind="guard" x="257" y="1265">remainingTime==0</label> +<label kind="synchronisation" x="262" y="1275">Controller_stopMagnetron__Magnetron_stopM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="274" y="1268" /> +</transition> +<transition> +<source ref="id38" /> +<target ref="id40" /> +<label kind="guard" x="335" y="1300">h__ >= 1</label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="359" y="1324" /> +</transition> +<transition> +<source ref="id40" /> +<target ref="id24" /> +<label kind="guard" x="225" y="810">remainingTime>0</label> +<label kind="synchronisation" x="230" y="820">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="239" y="817" /> +</transition> +<transition> +<source ref="id40" /> +<target ref="id25" /> +<label kind="guard" x="227" y="845">remainingTime > 0</label> +<label kind="synchronisation" x="232" y="855">makeChoice!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="239" y="866" /> +</transition> +<transition> +<source ref="id40" /> +<target ref="id26" /> +<label kind="guard" x="417" y="1405">remainingTime==0</label> +<label kind="synchronisation" x="422" y="1415">Controller_stopMagnetron__Magnetron_stopM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="412" y="1429" /> +</transition> +<transition> +<source ref="id26" /> +<target ref="id42" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="90" y="960">Controller_ringBell__Bell_ring!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="97" y="958" /> +</transition> +<transition> +<source ref="id42" /> +<target ref="id43" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="107" y="1556" /> +</transition> +<transition> +<source ref="id43" /> +<target ref="id44" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="142" y="1635">h__ = 0</label> +<nail x="121" y="1653" /> +</transition> +<transition> +<source ref="id44" /> +<target ref="id17" /> +<label kind="guard" x="137" y="1685">(h__ >= (5))</label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="112" y="1691" /> +</transition> +<transition> +<source ref="id36" /> +<target ref="id46" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="275" y="1450">Door_open__Controller_open?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="273" y="1461" /> +</transition> +<transition> +<source ref="id46" /> +<target ref="id47" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="152" y="1835">Controller_obs_open__ObserverProp1_obs_open!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="143" y="1855" /> +</transition> +<transition> +<source ref="id47" /> +<target ref="id48" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="157" y="1905">Controller_stopMagnetron__Magnetron_stopM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="169" y="1921" /> +</transition> +<transition> +<source ref="id48" /> +<target ref="id49" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="162" y="1975">Door_closed__Controller_closed?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="146" y="1971" /> +</transition> +<transition> +<source ref="id49" /> +<target ref="id50" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="167" y="2045">Controller_obs_closed__ObserverProp1_obs_closed!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="184" y="2063" /> +</transition> +<transition> +<source ref="id50" /> +<target ref="id51" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="172" y="2115">Controller_startMagnetron__Magnetron_startM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="147" y="2102" /> +</transition> +<transition> +<source ref="id51" /> +<target ref="id22" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="177" y="2185">Controller_obs_magnetronStart__ObserverProp1_obs_magnetronStart!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="195" y="2190" /> +</transition> +<transition> +<source ref="id17" /> +<target ref="id53" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="45" y="1030">Door_open__Controller_open?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="17" y="1035" /> +</transition> +<transition> +<source ref="id53" /> +<target ref="id54" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="187" y="2325">Controller_obs_open__ObserverProp1_obs_open!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="188" y="2311" /> +</transition> +<transition> +<source ref="id54" /> +<target ref="id55" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="192" y="2395">Door_closed__Controller_closed?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="194" y="2398" /> +</transition> +<transition> +<source ref="id55" /> +<target ref="id17" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="197" y="2465">Controller_obs_closed__ObserverProp1_obs_closed!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="189" y="2489" /> +</transition> +<transition> +<source ref="id17" /> +<target ref="id18" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="55" y="1170">ControlPanel_startButton__Controller_start?</label> +<label kind="assignment" x="60" y="1180">duration = actionint__0</label> +<nail x="48" y="1167" /> +</transition> +</template> +<template> +<name>Magnetron</name> +<parameter></parameter> +<declaration>int power = 0; +clock h__; +</declaration> +<location id="id58" x="-100" y="0"> +<name x="-90" y="5">id58</name> +</location> +<location id="id59" x="5" y="-150"> +<name x="15" y="-145">id59</name> +<urgent /> +</location> +<location id="id60" x="10" y="-80"> +<name x="20" y="-75">id60</name> +</location> +<location id="id61" x="15" y="-10"> +<name x="25" y="-5">id61</name> +<urgent /> +</location> +<init ref="id58" /> +<transition> +<source ref="id58" /> +<target ref="id59" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="-42" y="-195">Controller_startMagnetron__Magnetron_startM?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="-24" y="-200" /> +</transition> +<transition> +<source ref="id59" /> +<target ref="id60" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="12" y="-125">Magnetron__ON!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="-11" y="-131" /> +</transition> +<transition> +<source ref="id60" /> +<target ref="id61" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="17" y="-55">Controller_stopMagnetron__Magnetron_stopM?</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="1" y="-51" /> +</transition> +<transition> +<source ref="id61" /> +<target ref="id58" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="22" y="15">Magnetron__OFF!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="4" y="2" /> +</transition> +</template> +<template> +<name>Door</name> +<parameter></parameter> +<declaration>clock h__; +</declaration> +<location id="id63" x="-100" y="170"> +<name x="-90" y="175">id63</name> +<committed /> +</location> +<location id="id64" x="5" y="-150"> +<name x="15" y="-145">id64</name> +<label kind="invariant" x="10" y="-135">h__ <= 3</label> +</location> +<location id="id65" x="10" y="-80"> +<name x="20" y="-75">id65</name> +</location> +<location id="id66" x="165" y="-10"> +<name x="175" y="-5">id66</name> +</location> +<location id="id68" x="25" y="130"> +<name x="35" y="135">id68</name> +<committed /> +</location> +<location id="id69" x="30" y="200"> +<name x="40" y="205">id69</name> +<label kind="invariant" x="35" y="215">h__ <= 3</label> +</location> +<location id="id70" x="35" y="270"> +<name x="45" y="275">id70</name> +</location> +<location id="id71" x="190" y="340"> +<name x="200" y="345">id71</name> +</location> +<init ref="id63" /> +<transition> +<source ref="id63" /> +<target ref="id64" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="-37" y="-185">h__ = 0</label> +<nail x="-71" y="-169" /> +</transition> +<transition> +<source ref="id64" /> +<target ref="id66" /> +<label kind="guard" x="85" y="-100">h__ >= 2</label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="74" y="-86" /> +</transition> +<transition> +<source ref="id66" /> +<target ref="id65" /> +<label kind="guard" x="167" y="5"></label> +<label kind="synchronisation" x="172" y="15">Door_open__Controller_open!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="170" y="38" /> +</transition> +<transition> +<source ref="id65" /> +<target ref="id68" /> +<label kind="guard" x="17" y="5"></label> +<label kind="synchronisation" x="22" y="15">Door__openM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="16" y="41" /> +</transition> +<transition> +<source ref="id68" /> +<target ref="id69" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="37" y="165">h__ = 0</label> +<nail x="16" y="180" /> +</transition> +<transition> +<source ref="id69" /> +<target ref="id71" /> +<label kind="guard" x="110" y="250">h__ >= 2</label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="0" y="0"></label> +<nail x="112" y="269" /> +</transition> +<transition> +<source ref="id71" /> +<target ref="id70" /> +<label kind="guard" x="192" y="355"></label> +<label kind="synchronisation" x="197" y="365">Door_closed__Controller_closed!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="214" y="366" /> +</transition> +<transition> +<source ref="id70" /> +<target ref="id63" /> +<label kind="guard" x="42" y="355"></label> +<label kind="synchronisation" x="47" y="365">Door__closeM!</label> +<label kind="assignment" x="0" y="0"></label> +<nail x="29" y="376" /> +</transition> +</template> +<template> +<name>WirelessInterface</name> +<parameter></parameter> +<declaration>int msg2__data = 0; +int PSK__data = 0; +int selectedDuration = 0; +int msg3__data = 0; +clock h__; +</declaration> +<location id="id74" x="-100" y="30"> +<name x="-90" y="35">id74</name> +</location> +<location id="id75" x="5" y="-150"> +<name x="15" y="-145">id75</name> +</location> +<location id="id76" x="10" y="-80"> +<name x="20" y="-75">id76</name> +<committed /> +</location> +<location id="id77" x="15" y="-10"> +<name x="25" y="-5">id77</name> +</location> +<location id="id78" x="20" y="60"> +<name x="30" y="65">id78</name> +</location> +<init ref="id74" /> +<transition> +<source ref="id74" /> +<target ref="id75" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="-42" y="-195">RemotelyControlledMicrowave_wirelessChannelRead__RemotelyControlledMicrowave_wirelessChannelWrite?</label> +<label kind="assignment" x="-37" y="-185">msg2__data = actionint__0</label> +<nail x="-52" y="-174" /> +</transition> +<transition> +<source ref="id75" /> +<target ref="id76" /> +<label kind="guard" x="7" y="-135"></label> +<label kind="synchronisation" x="12" y="-125">WirelessInterface__sdecrypt!</label> +<label kind="assignment" x="17" y="-115">actionint__0 =msg2__data, +actionint__1 =PSK__data</label> +<nail x="-18" y="-95" /> +</transition> +<transition> +<source ref="id76" /> +<target ref="id77" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="0" y="0"></label> +<label kind="assignment" x="22" y="-45">selectedDuration = msg3__data</label> +<nail x="29" y="-44" /> +</transition> +<transition> +<source ref="id77" /> +<target ref="id78" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="22" y="15">WirelessInterface_remoteStart__MicroWaveOven_remoteStart!</label> +<label kind="assignment" x="27" y="25">actionint__0 = selectedDuration</label> +<nail x="1" y="16" /> +</transition> +</template> +<template> +<name>Nonsync__actions</name> +<parameter></parameter> +<declaration></declaration> +<location id="id79" x="0" y="-220"> +<name x="10" y="-215">id79</name> +</location> +<init ref="id79" /> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">makeChoice?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__encrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__decrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__sencrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__sdecrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__MAC?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__verifyMAC?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__concat2?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__concat3?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__concat4?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__get2?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__get3?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">RemoteControl__get4?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">Bell__runBell?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">Controller__startCooking?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">Controller__durationModified?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">Magnetron__ON?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">Magnetron__OFF?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">Door__openM?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">Door__closeM?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__encrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__decrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__sencrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__sdecrypt?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__MAC?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__verifyMAC?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__concat2?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__concat3?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__concat4?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__get2?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__get3?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +<transition> +<source ref="id79" /> +<target ref="id79" /> +<label kind="guard" x="0" y="0"></label> +<label kind="synchronisation" x="5" y="-230">WirelessInterface__get4?</label> +<label kind="assignment" x="0" y="0"></label> +</transition> +</template> +<system> +//Instanciation +ObserverProp1__0 = ObserverProp1(); +RemoteControl__1 = RemoteControl(); +Bell__2 = Bell(); +ControlPanel__3 = ControlPanel(); +Controller__4 = Controller(); +Magnetron__5 = Magnetron(); +Door__6 = Door(); +WirelessInterface__7 = WirelessInterface(); +Nonsync__actions__8 = Nonsync__actions(); +system ObserverProp1__0,RemoteControl__1,Bell__2,ControlPanel__3,Controller__4,Magnetron__5,Door__6,WirelessInterface__7,Nonsync__actions__8;</system> +</nta> diff --git a/preinstallTTool/macos/TTool/vcd/README_vcd b/preinstallTTool/macos/TTool/vcd/README_vcd new file mode 100644 index 0000000000000000000000000000000000000000..a44e630c0ca48a5973305289d318511cfe5a0647 --- /dev/null +++ b/preinstallTTool/macos/TTool/vcd/README_vcd @@ -0,0 +1,5 @@ +TTool, an open-source UML toolkit for modeling embedded systems and procotols. +TTool is developed at ENST, http://labsoc.comelec.enst.fr/turtle/ +------------------------------------------------------------------------------- + +This directory is meant to host vcd files generated by TTool from Power Analysis. diff --git a/preinstallTTool/macos/proverif/CHANGES b/preinstallTTool/macos/proverif/CHANGES new file mode 100644 index 0000000000000000000000000000000000000000..bf4f6700ccda8e66e05e4ca7691e4cc988140353 --- /dev/null +++ b/preinstallTTool/macos/proverif/CHANGES @@ -0,0 +1,441 @@ +This file summarizes the most important changes between versions +of the cryptographic protocol verifier. + +Version 1.89 + +- Changed the weight of the goal in the selection function to 3000, to give +the possibility to have a nounif declaration (with weight less than 3000) +such that ProVerif selects facts that match that nounif declaration +rather than selecting the goal. +- Fixed bug in Spass output. +- Allow "table(t(...))" in query, not, and nounif. +- Improved unification modulo to speed it up and avoid a +stack overflow. + +Version 1.88pl1 + +- Changed priorities in the parser, so that (! P1 | ! P2) is +interpreted as ((! P1) | (! P2)) and not as (! (P1 | ! P2)). +- Fixed bug that could lead to an internal error when a query, a not, or +a nounif declaration refers to a bound name that is never generated. +ProVerif now displays a proper error message in this case. + +Version 1.88 + +- Remove subsumed clauses and tautologies from attacker clauses +before displaying them. + +Version 1.87beta6 + +- Fixed several bugs that lead to internal errors instead of +displaying a proper error message. +- Elimination of redundant hypotheses now considers blocking predicates +like events. + +Summary of changes between version 1.86pl4 and version 1.87beta5: + +- Typed and untyped pi calculus front-ends: + Extended definition of destructors, by Vincent Cheval. + Now, destructors must be deterministic. +- Typed pi calculus front-end: + - Extension of the class of observational equivalences that can be proved, + by encoding more operations into terms. Automatic transformation of + processes to benefit from this extension, by Vincent Cheval. + - Query "equivalence P1 P2" to prove the observational equivalence between + two processes P1 and P2, by Vincent Cheval. + - Functions marked "typeConverter" are now automatically marked "data" as + well. + - Added an "else" branch to the "get" construct +- New keywords: + - Typed pi calculus front-end: equivalence, fail, or, otherwise + - Untyped pi calculus front-end: can, fail, otherwise, where + These keywords can no longer be used as ordinary identifiers. +- Fixed bugs: + - Fixed bug in attack reconstruction + - Fixed bug for query noninterf...among: a clause was forgotten + that allows the adversary to test whether the secret is a tuple. + - Fixed bug in attack reconstruction with patterns =M where the + term M contains a destructor with several rewrite rules. + - Removed decompData/decompDataSelect options for user-defined + predicates in the pi/typed pi calculus front-ends, for several reasons: + * These predicates caused bugs + * For user-defined predicates, it is not very likely that + decompData/decompDataSelect are useful + * The same effect can be achieved by using the equivalences + forall x1:T1, ..., xn:Tn; p(x1) && ... && p(xn) <=> p(f(x1,...,xn)) + for each data constructor f, in the "clauses" section. + - Improved termination heuristic so that it does not trigger + uselessly. + - Fixed bug with references to bound names of the form new a[x_1 = ...] + where the variable name x_1 ends with underscore followed by a number. + (This bug could lead to an error message saying x_1 was not bound, + when in fact it was.) + - Fixed bug with nested "letfun" with local variables (there was some + mixing between these variables) + - Fixed bug: choice was ignored when it occurred only in patterns. + - Fixed bug: "else" branches could not be omitted in "if" and + "let...suchthat" terms. +- Improved the proof of equivalences in case "if M then P else Q" +with Q = 0: the case in which M fails and the case in which M succeeds +and is false cannot be distinguished by the adversary. +- The term "let pat = M in M'" has changed meaning: when M or the +pattern-matching fails, its value is fail, instead of stopping the +whole process. +- The argument of events is always evaluated, even when the event itself +is useless (proof of equivalences, of correspondences that do not involve +that event). +- Patterns (x, =M) in which M depends on x are now forbidden for simplicity. +(Use pattern matching followed by a test to encode that.) +- Optimized elimination of redundant hypotheses + +Details of the changes in the beta releases: + +* Version 1.87beta5 + +- Cosmetic changes only. + +* Version 1.87beta4 (not a public release) + +- Reactivated all front-ends +- New destructors in the untyped front-end +- Simplified the test that destructors are deterministic +- Optimized elimination of redundant hypotheses +- When proving equivalences, the arguments of names are now +choice[.,.] instead of pairs. +- Fixed soundness bugs with choice and with noninterf in case of +inputs with pattern-matching +- Fixed bug in the generation of Horn clauses for trace properties +(some branches were cut too quickly) +- Fixed bug: choice was ignored when it occurred only in patterns. +- Fixed bug with references to bound names of the form new a[x_1 = ...] +where the variable name x_1 ends with underscore followed by a number. +(This bug could lead to an error message saying x_1 was not bound, +when in fact it was.) +- Fixed bug in the computation of rewrite rules for new +destructors (it may have generated too many rules) + +* Version 1.87beta3 (not a public release; restricted to the typed +front-end) + +- Optimized elimination of redundant hypotheses +- In the definition of user-defined predicates, the meaning of clauses +is the following: the fact in the conclusion holds when the hypotheses +hold and all the arguments of the predicates, equalities and +inequalities in the clause do not fail. (This is closer to the +semantics of user-defined predicates with the old destructors.) +- The argument of events is always evaluated, even when the event itself +is useless (proof of equivalences, of correspondences that do not involve +that event). +- Patterns (x, =M) in which M depends on x are now forbidden for simplicity. +(Use pattern matching followed by a test to encode that.) +- Final fix for the bug that could lead to forgetting some rewrite +rules of destructors, when the new destructors of ProVerif 1.87beta +were combined with equational theories. (This bug was quickly patched +in version 1.87beta2.) +- Fixed bug in which a non-deterministic destructor was not detected as such. +- With respect to ProVerif version 1.86, the term "let pat = M in M'" has +changed meaning: when M or the pattern-matching fails, its value is fail, +instead of stopping the whole process. + +* Version 1.87beta2 (not a public release; restricted to the typed +front-end) + +- Re-allow proofs of trace properties, noninterf, weaksecr, +updated to the new destructors of ProVerif 1.87beta +- Added an "else" branch to the "get" construct +- Improved the proof of equivalences in case "if M then P else Q" +with Q = 0: the case in which M fails and the case in which M succeeds +and is false cannot be distinguished by the adversary. +- Fixed bug in attack reconstruction: f(...fail...) was left as it is +instead of reducing it to fail, when f is a constructor. +- Fixed bug in merging of parallel processes that could lead to +swapping the first and second processes to merge. +- Quick patch for a bug that could lead to forgetting some rewrite +rules of destructors, when the new destructors of ProVerif 1.87beta +were combined with equational theories +- Also fixed problems that occurred in ProVerif 1.86pl4: + - Fixed bug for query noninterf...among: a clause was forgotten + that allows the adversary to test whether the secret is a tuple. + - Fixed bug in attack reconstruction with patterns =M where the + term M contains a destructor with several rewrite rules. + - Removed decompData/decompDataSelect options for user-defined + predicates in the pi/typed pi calculus front-ends, for several reasons: + * These predicates caused bugs + * For user-defined predicates, it is not very likely that + decompData/decompDataSelect are useful + * The same effect can be achieved by using the equivalences + forall x1:T1, ..., xn:Tn; p(x1) && ... && p(xn) <=> p(f(x1,...,xn)) + for each data constructor f, in the "clauses" section. + - Improved termination heuristic so that it does not trigger + uselessly. + +* Version 1.87beta (restricted to the typed front-end and to proofs of +equivalences with choice) + +- Extended definition of destructors, by Vincent Cheval. +Now, destructors must be deterministic. +- Extension of the class of observational equivalences that can be proved, +by encoding more operations into terms. Automatic transformation of +processes to benefit from this extension, by Vincent Cheval. +- Query "equivalence P1 P2" to prove the observational equivalence between +two processes P1 and P2, by Vincent Cheval. +- Functions marked "typeConverter" are now automatically marked "data" as +well. +- Fixed bug in attack reconstruction + + +Version 1.86pl4 + +- Removed setting "set ignoreTypes = attacker", still accepted as a synonym +of "set ignoreTypes = false" for compatibility. +- Functions marked "data" can no longer be marked "private". (Functions +marked "private, data" were not correctly handled.) +- Equations now must not introduce variables in their right-hand side +that do not occur in the left-hand side. (There was a bug with such +equations.) +- Fixed bug that could cause Internal error: Name ... has bad type/bad arity. +- Fixed bug that could cause an internal error due to an incorrect +expansion of the condition of "get ... suchthat". + +Version 1.86pl3 + +- Fixed bugs in the generation of clauses for proofs of equivalences. + +Version 1.86pl2 + +- Fixed bug in the selection function for proofs of equivalences. +(This bug could cause non-termination.) + +Version 1.86pl1 + +- Fixed minor display bug (missing parenthesis in display of outputs +on private channels) +- Fixed bug in the proof of non-blocking predicates in queries + +Version 1.86 + +- HTML output, using the command line option -html <html directory> +- basic emacs mode with coloring + +Version 1.85 + +- documentation for the typed pi calculus front-end, which is now +the recommended input format. +- fixed bug in attack reconstruction with passive adversaries. +- fixed display bug that could lead in some rare cases to display +distinct variables with the same name. +- nicer display: occurrences starting from 1 and in increasing order, +omit trailing 0, reuse initial variable name when possible, ... + +Version 1.84pl2 + +- fixed bug in the generation of clauses for observational +equivalence (choice) + +Version 1.84pl1 + +- some improvements in error messages +- fixed display bug for queries with empty conjunctions +- fixed internal error in trace reconstruction for equivalences that +appeared when the final, distinguishing step was a test that a message +is a given constant. + +Version 1.84 + +- elimVar and elimVarStrict are now forbidden in pi calculus front-ends. +- elimtrue no longer accepts star variables. +- improved performance of simplification of derivations and of +unifyDerivation for very large traces. + +Version 1.83 + +- renamed the executable to proverif +- improved the simplification of derivations, in particular in +the presence of private channels. +- fixed internal error that happened in some cases when trying +to reconstruct attacks against injective correspondences. + +Version 1.82 + +- fixed bug in the compromise of session keys (free names were missing + in the terms that are allowed to build compromised terms). +- fixed two bugs in trace reconstruction (one in the presence of choice, + one in the presence of phases). +- fixed some bugs in the protocol models. +- fixed bugs in proveriftotex (use LaTeX macros when special TeX characters + appear in the ProVerif file to convert; some ProVerif constructs were + not handled due to an outdated lexer file). +- typed front-end: for CryptoVerif compatibility, + - added a def/expand macro mechanism + - added -lib command-line option + - added tables, in particular useful for tables of keys + (the same construct will be added to CryptoVerif; one will be able to use + it instead of find in the initial game) + - allow empty patterns (), allow "let" without "in", allow "if f(...) then" + when f returns a result of type bool. + +Version 1.81 (not a public release) + +- improved proof of injective correspondences when there are +several occurrences in the process of the events that occur after ==> +in the query. +- heuristic "unifyDerivation" now active by default, and iterated +(following File, Vigo, CSF'09). +- when -in <format> is not specified, the input format is now selected +by the extension of the file: + .pv for the typed pi-calculus front-end + .pi for the untyped pi-calculus front-end + .horntype for the typed Horn clauses front-end +In all other cases, the untyped Horn clauses front-end. Case is not +significant in file extensions. +- typed front-end: + - type "bool" and constants "true" and "false" now declared by default; + - "not" allowed as an ordinary function; + - bound names of the process must be preceded by "new" when they are + used in queries, for more clarity; + - "if", "let", "new" now allowed in terms (by expanding them into processes). + - declarations "param", "proba", "proof" allowed (but ignored) for + compatibility with CryptoVerif + - for type declarations, options between brackets allowed (but ignored) for + compatibility with CryptoVerif + - ! i <= N allowed for compatibility with CryptoVerif. + - yield allowed as a synonym of 0 for compatibility with CryptoVerif + - declarations "letfun f(x1:t1, ..., xn:tn) = M" + - declaration "channel c1,...,cn." as a synonym for + "free c1,...,cn:channel." for compatibility with CryptoVerif. + +Version 1.80 (not a public release) + +- new front-end with types and parametric processes (in progress) +- reorganized examples according to the front-end they use +- do not display the generated clauses by default (but a command-line +option "-test" and a setting "param verboseClauses = explained" display them) +- removed setting "param channels = names" +- allow injective events to occur several times (but only in different +branches of tests) +- fixed bug in the verification that a rewrite system is confluent + +Version 1.18pl1 + +- fixed bug in attack reconstruction in the presence of a passive +adversary that caused an internal error. +- minor changes in the examples. + +Version 1.18 + +- reconstruction of attacks against injective correspondences +- when an injective correspondence is not proved, also give the result +of the corresponding non-injective correspondence, for information. + +Version 1.17 + +- reconstruction of attacks for processes with "choice" +- reconstruction of attacks for query noninterf +- display of traces with locations of the executed inputs, outputs, and events +in the process. +- display terms that represent names in the form a[x = ..., y = ..., ...] +to relate the arguments of the names to variables in the process. +- option -color to display a colored output on terminals that support ANSI +color codes. + +Version 1.16 + +- reconstruction of attacks for query weaksecret +- fixed bug with predicate is_name in the output of clauses in Spass format + +Version 1.15 + +- ProVerif now provides explanations of where the clauses come from +- ProVerif uses abbreviations in the display of derivations +- ProVerif explains the derivations by referring to the process +- fixed some bugs in the output of clauses in Spass format +- fixed a recently introduced bug in attack reconstruction that caused +attack reconstruction to fail in some cases in which it should have succeeded. + +Version 1.14 + +- fixed some bugs. +- removed "param allVarsInNames = ...", replaced with an automatic mechanism +- improved naming of variables in clauses, so that they use process variable + names more often. +- extended "nounif" instructions. +- removed limitation to 10 phases. +- added optimization "refTransAtt" for reflexive and transitive predicates + whose arguments are known by the attacker (by Avik Chaudhuri and + Bruno Blanchet). + +Version 1.13 + +- fixed bug with queries "query f ==> x == y." +- the system is now capable of saying that some injective queries are false. +- additional option "param redundantHypElim = beginOnly." + +Version 1.12 + +- improved trace reconstruction for very big traces. + +Version 1.11 + +- verification of protocols subject to dictionary attacks +- verification of observational equivalence of processes that differ + only by the terms they use +- reconstruction of an execution trace that corresponds to an attack +- generalization of the optimizations + pred p/n decompData (see rules F1 & ... & Fn <-> F and F1 & ... & Fn <=> F), + pred p/n elimVar (see elimtrue F), + and, for the pi-calculus front-end, not F. +- reworked treatment of equations +- various bug fixes and internal improvements +- removed deprecated keywords anytrue, tupleinv, blocking. + +Version 1.10 + +- new query system (incompatible with previous versions) +- converter ProVerif to TeX +- improved treatment of inequalities in the presence of equations +(previously, syntactic inequality was used as a sound approximation +of inequality modulo an equational theory) + +Version 1.09 + +- proof of strong secrecy +- scenarios with several phases +- inequalities with universally quantified variables. +- precise analysis of else clauses of destructors +(before, they were considered as a parallel composition) +- improvement in treatment of equations +- optimization: elimination of redundant hypotheses in clauses + +Version 1.08 (not a public release) + +- let ... suchthat ... construct and predicates. +- special treatment for lists. + +Version 1.07 + +- A few more optimizations. + +Version 1.06 (not a public release) + +- A single executable program, that can take several input formats and +output several kinds of results. + +Version 1.05alpha (not a public release) + +- More general treatment of equations (including f(x,g(y)) = f(y,g(x)) +used for Diffie-Hellman but also other simple equations; however, +associativity for instance is not supported). +- Pattern-matching construct +- Parameter to set whether communications are allowed on channels that +are not names. +- Key compromise is now compatible with authenticity +- Verification of more general event specifications, not only +authenticity (begin* and end*) +- Optimization of the subsumption test (can give dramatic speedups) +- Redundancy test: when a rule with empty selection is derivable from +several other rules with empty selection, it is removed. +- Various small bug fixes and cosmetic changes + +Version 1.00alpha + +First release. diff --git a/preinstallTTool/macos/proverif/LICENSE b/preinstallTTool/macos/proverif/LICENSE new file mode 100644 index 0000000000000000000000000000000000000000..5b6e7c66c276e7610d4a73c70ec1a1f7c1003259 --- /dev/null +++ b/preinstallTTool/macos/proverif/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/preinstallTTool/macos/proverif/README b/preinstallTTool/macos/proverif/README new file mode 100644 index 0000000000000000000000000000000000000000..fc232a9145f18d0b3b61b9bc7d409aa2d00982bd --- /dev/null +++ b/preinstallTTool/macos/proverif/README @@ -0,0 +1,122 @@ +Protocol verifier, copyright INRIA-CNRS, by Bruno Blanchet +and Vincent Cheval, 2000-2014. + +This software can be used to prove secrecy and authenticity properties +of cryptographic protocols. + +INSTALL + +To run this software, you need Objective Caml version 3.00 or +higher. Objective Caml can be downloaded from + http://caml.inria.fr +Furthermore, on Mac OS X, you need to install XCode if you do not +already have it. It can be downloaded from + https://developer.apple.com/xcode/ + +* under Unix + +Uncompress the source and documentation archives using tar: + + gunzip proverif1.89.tar.gz + tar -xf proverif1.89.tar + gunzip proverifdoc1.89.tar.gz + tar -xf proverifdoc1.89.tar + +or if you have GNU tar: + + tar -xzf proverif1.89.tar.gz + tar -xzf proverifdoc1.89.tar.gz + +This will create a directory named proverif1.89 in the current directory. +Go into this directory, and build the programs: + + cd proverif1.89 + ./build + +* under Windows NT, 2000, or XP + +Uncompress the archives proverif1.89.tar.gz and proverifdoc1.89.tar.gz +using Winzip, in the directory of your choice. This will create a +subdirectory named proverif1.89. Open a DOS window, cd into the +proverif1.89 directory and run the build .BAT file: + + build + +The system can run under Windows, but it is not very Windows-friendly: +you have to use the command line to run the programs. Improving the interface +is on the to-do list... + +USAGE + +This software contains one executable program, proverif. It takes as +input a description of a cryptographic protocol, and checks whether it +can leak some secrets, or satisfies authenticity properties. The +description of the protocol can have two different formats. By +default, it is a description by rules of the form + c:M1 & ... & c:Mn -> c:M +meaning if the attacker has M1, ..., Mn then it also has M. This +description corresponds to the format used internally by the program. + By adding the command line option "-in pi", you can work with +protocols described in a language that is a restricted version of the +applied pi calculus (Abadi and Fournet, POPL'01). The description is +first translated into the above rules, and then the core of the +verifier is called. + Examples of protocol descriptions can be found in the examples +subdirectory. Files in directory examples/horn are inputs for +proverif; files in directory examples/pi are inputs for proverif -in pi. +For example: + ./proverif examples/horn/secr/needham + ./proverif -in pi examples/pi/secr-auth/piskeme + + The user manual can be found in the docs subdirectory. Research papers +can be downloaded on + http://www.di.ens.fr/~blanchet/publications.html +They are not included in the distribution because of copyright differences. +(You cannot redistribute these papers.) + The script "test" runs several tests (Unix only): + + ./test secr runs secrecy tests of the CSFW'01 paper + ./test bidsecr similar to the previous one, but runs bidirectional + protocols + ./test both runs secrecy and authenticity tests + ./test noninterf runs non-interference tests (strong secrecy) + ./test weak runs tests on protocols using weak secrets + ./test choice runs observational equivalence tests + ./test obsequi runs observational equivalence tests (LICS'05 paper) + ./test attack runs attack reconstruction test (CSFW'05 paper) + ./test jfk runs tests on the protocol JFK (ESOP'04/TISSEC paper) + ./test mailprot runs tests on a certified email protocol (SAS'03/TCS paper) + ./test ffgg runs tests on the f^n g^n protocol by Millen + +The output of these scripts is written in the directory tests. The +filename of the output contains the argument of "test" and the +date/time of the run. + +COPYRIGHT + +This software is distributed under the GNU general public license. +See the file LICENSE for more information. + +BUG REPORTS + +Bugs and comments should be reported by e-mail to + Bruno.Blanchet@inria.fr + +MAILING LIST + +A mailing list is available for discussions on ProVerif. New releases +are announced on this mailing list. + +* If you wish to subscribe, send an email to sympa@inria.fr with subject +"subscribe proverif <your name>" (without quotes) and an empty body. + +* To post a message on the list, send it to proverif@inria.fr. +To avoid spam, only people that have subscribed to the list can post. + +ACKNOWLEDGMENTS + +I would like to thank all users of ProVerif who contributed to the +development of the software by their helpful remarks. +From July 2008 to October 2010, the development of ProVerif was partly +supported by DGA. + diff --git a/preinstallTTool/macos/proverif/build b/preinstallTTool/macos/proverif/build new file mode 100755 index 0000000000000000000000000000000000000000..055af7fd88d59e41a1302f3d9e24b0cc1072a074 --- /dev/null +++ b/preinstallTTool/macos/proverif/build @@ -0,0 +1,22 @@ +#!/bin/sh + +cd src + +ocamlyacc parser.mly +ocamllex lexer.mll +ocamlyacc piparser.mly +ocamllex pilexer.mll +ocamlyacc pitparser.mly +ocamllex pitlexer.mll +ocamlopt -o ../proverif parsing_helper.mli parsing_helper.ml stringmap.mli stringmap.ml ptree.mli piptree.mli pitptree.mli types.mli pitypes.mli param.mli param.ml parser.mli parser.ml lexer.ml queue.mli queue.ml terms.mli terms.ml termslinks.mli termslinks.ml display.mli display.ml history.mli history.ml termsEq.mli termsEq.ml pievent.mli pievent.ml weaksecr.mli weaksecr.ml noninterf.mli noninterf.ml selfun.mli selfun.ml rules.mli rules.ml syntax.mli syntax.ml tsyntax.mli tsyntax.ml piparser.mli piparser.ml pilexer.ml pitparser.mli pitparser.ml pitlexer.ml spassout.mli spassout.ml reduction_helper.mli reduction_helper.ml simplify.mli simplify.ml pisyntax.mli pisyntax.ml pitsyntax.mli pitsyntax.ml pitransl.mli pitransl.ml pitranslweak.mli pitranslweak.ml destructor.mli destructor.ml reduction.mli reduction.ml reduction_bipro.mli reduction_bipro.ml piauth.mli piauth.ml main.ml + +ocamllex lexertotex.mll +ocamllex pitlexertotex.mll +ocamlopt -o ../proveriftotex parsing_helper.cmx param.cmx piparser.cmx pilexer.cmx pitparser.cmx pitlexer.cmx fileprint.ml lexertotex.ml pitlexertotex.ml proveriftotex.ml + +if [ -f xtime.c ] +then + gcc -o ../xtime xtime.c +fi + +cd .. diff --git a/preinstallTTool/macos/proverif/build.bat b/preinstallTTool/macos/proverif/build.bat new file mode 100644 index 0000000000000000000000000000000000000000..37bc49c13d654e895d80900a4d4965fa164867e6 --- /dev/null +++ b/preinstallTTool/macos/proverif/build.bat @@ -0,0 +1,15 @@ +cd src + +ocamlyacc parser.mly +ocamllex lexer.mll +ocamlyacc piparser.mly +ocamllex pilexer.mll +ocamlyacc pitparser.mly +ocamllex pitlexer.mll +ocamlc -o ..\proverif.exe parsing_helper.mli parsing_helper.ml stringmap.mli stringmap.ml ptree.mli piptree.mli pitptree.mli types.mli pitypes.mli param.mli param.ml parser.mli parser.ml lexer.ml queue.mli queue.ml terms.mli terms.ml termslinks.mli termslinks.ml display.mli display.ml history.mli history.ml termsEq.mli termsEq.ml pievent.mli pievent.ml weaksecr.mli weaksecr.ml noninterf.mli noninterf.ml selfun.mli selfun.ml rules.mli rules.ml syntax.mli syntax.ml tsyntax.mli tsyntax.ml piparser.mli piparser.ml pilexer.ml pitparser.mli pitparser.ml pitlexer.ml spassout.mli spassout.ml reduction_helper.mli reduction_helper.ml simplify.mli simplify.ml pisyntax.mli pisyntax.ml pitsyntax.mli pitsyntax.ml pitransl.mli pitransl.ml pitranslweak.mli pitranslweak.ml destructor.mli destructor.ml reduction.mli reduction.ml reduction_bipro.mli reduction_bipro.ml piauth.mli piauth.ml main.ml + +ocamllex lexertotex.mll +ocamllex pitlexertotex.mll +ocamlc -o ..\proveriftotex.exe parsing_helper.mli parsing_helper.ml ptree.mli piptree.mli pitptree.mli types.mli param.mli param.ml piparser.mli piparser.ml pilexer.ml pitparser.mli pitparser.ml pitlexer.ml fileprint.ml lexertotex.ml pitlexertotex.ml proveriftotex.ml + +cd .. diff --git a/preinstallTTool/macos/proverif/cryptoverif.pvl b/preinstallTTool/macos/proverif/cryptoverif.pvl new file mode 100644 index 0000000000000000000000000000000000000000..4857d11f10439646a58113ed865bc125fb4ecdd4 --- /dev/null +++ b/preinstallTTool/macos/proverif/cryptoverif.pvl @@ -0,0 +1,141 @@ +(* This library is designed for maximal compatibility with CryptoVerif. +It contains ProVerif definitions for cryptographic primitives under the +same name as their corresponding CryptoVerif definitions---even though +the ProVerif assumption is very often stronger than the more realistic +CryptoVerif assumption. *) + +type bitstringbot. + +(* ProVerif cannot distinguish IND-CPA, IND-CPA and INT-CTXT, and +IND-CCA2 and INT-PTXT symmetric encryption schemes. The definition +used by ProVerif corresponds best to the strongest property, that is, +IND-CPA and INT-CTXT. *) + +def IND_CPA_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc) { + +fun enc(cleartext, key, seed): ciphertext. +fun kgen(keyseed):key. +fun injbot(cleartext):bitstringbot [data]. +reduc forall m:cleartext, r:keyseed, r2:seed; + dec(enc(m, kgen(r), r2), kgen(r)) = injbot(m). + +fun Z(cleartext):cleartext. + +(* Encryption leaks Z(m), typically the length of m *) +reduc forall m:cleartext, r:seed, k:key; + leak(enc(m, k, r)) = Z(m). +(* Note: providing a good definition of Z in ProVerif is a problem *) + +(* Test equality of keys *) +reduc forall x:cleartext, x':cleartext, r:seed, r':seed, y:key; + keyeq(enc(x,y,r),enc(x',y,r')) = true. + +} + +def IND_CPA_INT_CTXT_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc, Pencctxt) { + +expand IND_CPA_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc). + +} + +def IND_CCA2_INT_PTXT_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc, Pencptxt) { + +expand IND_CPA_sym_enc(keyseed, key, cleartext, ciphertext, seed, kgen, enc, dec, injbot, Z, Penc). + +} + +(* ProVerif cannot distinguish a PRP block cipher from a SPRP block cipher. +The definition used by ProVerif corresponds best to a SPRP block cipher *) + +def SPRP_cipher(keyseed, key, blocksize, kgen, enc, dec, Penc) { + +fun enc(blocksize, key): blocksize. +fun kgen(keyseed):key. +fun dec(blocksize, key): blocksize. + +equation forall m:blocksize, r:keyseed; + dec(enc(m, kgen(r)), kgen(r)) = m. +equation forall m:blocksize, r:keyseed; + enc(dec(m, kgen(r)), kgen(r)) = m. + +} + +def PRP_cipher(keyseed, key, blocksize, kgen, enc, dec, Penc) { + +expand SPRP_cipher(keyseed, key, blocksize, kgen, enc, dec, Penc). + +} + +(* MACs + These are very strong in ProVerif (essentially random oracles) +*) + +def UF_CMA_mac(mkeyseed, mkey, macinput, macres, mkgen, mac, check, Pmac) { + +fun mac(macinput, mkey):macres. +fun mkgen(mkeyseed):mkey. + +reduc forall m:macinput, r:mkeyseed; + check(m, mkgen(r), mac(m, mkgen(r))) = true. + +} + +def SUF_CMA_mac(mkeyseed, mkey, macinput, macres, mkgen, mac, check, Pmac) { + +expand UF_CMA_mac(mkeyseed, mkey, macinput, macres, mkgen, mac, check, Pmac). + +} + +(* Public-key encryption *) + +def IND_CCA2_public_key_enc(keyseed, pkey, skey, cleartext, ciphertext, seed, skgen, pkgen, enc, dec, injbot, Z, Penc, Penccoll) { + +fun enc(cleartext, pkey, seed): ciphertext. +fun skgen(keyseed):skey. +fun pkgen(keyseed):pkey. + +fun injbot(cleartext):bitstringbot [data]. + +reduc forall m:cleartext, r:keyseed, r2:seed; + dec(enc(m, pkgen(r), r2), skgen(r)) = injbot(m). + +(* Test equality of keys *) +reduc forall x:cleartext, x':cleartext, r:seed, r':seed, y:pkey; + keyeq(enc(x,y,r),enc(x',y,r')) = true. + +} + +(* Signatures *) + +def UF_CMA_signature(keyseed, pkey, skey, signinput, signature, seed, skgen, pkgen, sign, check, Psign, Psigncoll) { + +fun sign(signinput, skey, seed): signature. +fun skgen(keyseed):skey. +fun pkgen(keyseed):pkey. + +reduc forall m:signinput, r:keyseed, r2:seed; + check(m, pkgen(r), sign(m, skgen(r), r2)) = true. + +} + +def SUF_CMA_signature(keyseed, pkey, skey, signinput, signature, seed, skgen, pkgen, sign, check, Psign, Psigncoll) { + +expand UF_CMA_signature(keyseed, pkey, skey, signinput, signature, seed, skgen, pkgen, sign, check, Psign, Psigncoll). + +} + +(* Hash functions *) + +def ROM_hash(hashinput, hashoutput, hash, hashoracle, qH) { + +fun hash(hashinput):hashoutput. + +let hashoracle = 0. + +} + +def CollisionResistant_hash(key, hashinput, hashoutput, hash, Phash) { + +fun hash(key, hashinput):hashoutput. + +} diff --git a/preinstallTTool/macos/proverif/cssproverif.css b/preinstallTTool/macos/proverif/cssproverif.css new file mode 100755 index 0000000000000000000000000000000000000000..980833885a8a5b5645fed52013b57faf8ec70ac8 --- /dev/null +++ b/preinstallTTool/macos/proverif/cssproverif.css @@ -0,0 +1,82 @@ +/* spacing between list items */ + +li { +margin-bottom: 20px; +} + +/* occurrence class */ + +.occ +{ + color:green; +} + +/* keywords */ + +.keyword +{ + color:blue; +} + +/* connectives */ + +.conn +{ + font-weight:bold; +} + +/* explanations of clauses */ + +.explain +{ + color:fuchsia; +} + +/* Function symbols */ + +.fun +{ +} + +/* Predicates */ + +.pred +{ +} + +/* Variables */ + +.var +{ + font-style:italic; +} + +/* Names */ + +.name +{ +} + +/* Types */ + +.type +{ +} + +/* Results */ + +.query +{ font-weight: bold; + font-size: 120% } + +.result +{ font-weight: bold } + +.trueresult +{ color: green } + +.unknownresult +{ color: darkorange } + +.falseresult +{ color: red } \ No newline at end of file diff --git a/preinstallTTool/macos/proverif/docs/manual-untyped.pdf b/preinstallTTool/macos/proverif/docs/manual-untyped.pdf new file mode 100644 index 0000000000000000000000000000000000000000..963e0803d80442291ddbca8cc4bb7d35b47c876b Binary files /dev/null and b/preinstallTTool/macos/proverif/docs/manual-untyped.pdf differ diff --git a/preinstallTTool/macos/proverif/docs/upgrade b/preinstallTTool/macos/proverif/docs/upgrade new file mode 100644 index 0000000000000000000000000000000000000000..48ab4b100fff22cd5bfe576ab3fd59db034a01e7 --- /dev/null +++ b/preinstallTTool/macos/proverif/docs/upgrade @@ -0,0 +1,65 @@ +How to upgrade from ProVerif 1.10 to ProVerif 1.11 +-------------------------------------------------- + +Replace "param verbose = rules." with "param verboseRules = yes." +and "param verbose = no." with "param verboseRules = no." + + +How to upgrade from ProVerif 1.09 to ProVerif 1.10 +-------------------------------------------------- + +The query system has been completely rewritten, and queries must be +modified as follows: + +* authquery f/n. +must be replaced with + query ev:endf(x_1, ..., x_n) ==>